<?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>163108</bug_id>
          
          <creation_ts>2016-10-07 05:37:50 -0700</creation_ts>
          <short_desc>Rename AuthorStyleSheets to Style::Scope</short_desc>
          <delta_ts>2016-10-07 11:58:42 -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>CSS</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>rniwa</cc>
    
    <cc>ryanhaddad</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1237569</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-10-07 05:37:50 -0700</bug_when>
    <thetext>It is really a style scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237575</commentid>
    <comment_count>1</comment_count>
      <attachid>290924</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-10-07 06:01:39 -0700</bug_when>
    <thetext>Created attachment 290924
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237576</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-07 06:03:55 -0700</bug_when>
    <thetext>Attachment 290924 did not pass style-queue:


ERROR: Source/WebCore/style/StyleScope.h:28:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
Total errors found: 1 in 31 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>1237580</commentid>
    <comment_count>3</comment_count>
      <attachid>290926</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-10-07 06:32:44 -0700</bug_when>
    <thetext>Created attachment 290926
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237633</commentid>
    <comment_count>4</comment_count>
      <attachid>290926</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-07 09:57:43 -0700</bug_when>
    <thetext>Comment on attachment 290926
patch

Clearing flags on attachment: 290926

Committed r206917: &lt;http://trac.webkit.org/changeset/206917&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237634</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-07 09:57:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237707</commentid>
    <comment_count>6</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-10-07 11:58:42 -0700</bug_when>
    <thetext>Windows build fix in http://trac.webkit.org/projects/webkit/changeset/206920</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290924</attachid>
            <date>2016-10-07 06:01:39 -0700</date>
            <delta_ts>2016-10-07 06:32:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylescope-2.patch</filename>
            <type>text/plain</type>
            <size>121186</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjkwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBAQAorMjAxNi0xMC0wNyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIEF1dGhvclN0eWxl
U2hlZXRzIHRvIFN0eWxlOjpTY29wZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYzMTA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSXQgcmVwcmVzZW50cyB0aGUgc3R5bGUgc2NvcGUgaW4gRE9NLgorICAg
ICAgICBBbHNvIG1vdmUgdGhlIGZpbGUgdW5kZXIgc3R5bGUvLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2hlZXQ6OnN0eWxlU2hlZXRTY29wZSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2hlZXQu
aDoKKyAgICAgICAgKiBjc3MvSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDU1NPTVdyYXBwZXJzOjpnZXRXcmFwcGVyRm9yUnVsZUluU2hlZXRz
KToKKyAgICAgICAgKiBjc3MvSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5oOgorICAgICAgICAqIGNz
cy9TdHlsZVNoZWV0TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdDo6
c3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldExpc3Q6OmRldGFjaEZy
b21Eb2N1bWVudCk6CisgICAgICAgICogZG9tL0F1dGhvclN0eWxlU2hlZXRzLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBkb20vQXV0aG9yU3R5bGVTaGVldHMuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRDb250ZW50TGFuZ3VhZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpuZWVkc1N0eWxlUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
Ojp1cGRhdGVTdHlsZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmNyZWF0ZVN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmRpZFJlbW92ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50Ojp1c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50Ojpwcm9jZXNzSHR0cEVxdWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmVm
ZXJyZWRTdHlsZXNoZWV0U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZWxlY3Rl
ZFN0eWxlc2hlZXRTZXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFNlbGVjdGVk
U3R5bGVzaGVldFNldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aGF2ZVN0eWxlc2hl
ZXRzTG9hZGVkKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpzdHlsZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphdXRo
b3JTdHlsZVNoZWV0cyk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0V4dGVuc2lvblN0eWxlU2hl
ZXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvblN0eWxlU2hlZXRzOjpjbGVhclBh
Z2VVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6OnVw
ZGF0ZVBhZ2VVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVl
dHM6OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25TdHlsZVNoZWV0czo6YWRkVXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6OmFkZEF1dGhvclN0eWxlU2hlZXRGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvblN0eWxlU2hlZXRzOjpzdHlsZVJlc29sdmVy
Q2hhbmdlZFRpbWVyRmlyZWQpOgorICAgICAgICAqIGRvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lU3R5bGVTaGVldE93bmVyOjppbnNlcnRlZElu
dG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OnJl
bW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lU3R5bGVTaGVldE93
bmVyOjpjbGVhckRvY3VtZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNo
ZWV0T3duZXI6OmNyZWF0ZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVN0eWxlU2hl
ZXRPd25lcjo6c2hlZXRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lU3R5bGVTaGVl
dE93bmVyOjpzdGFydExvYWRpbmdEeW5hbWljU2hlZXQpOgorICAgICAgICAqIGRvbS9JbmxpbmVT
dHlsZVNoZWV0T3duZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVN0eWxlU2hlZXRPd25l
cjo6c3R5bGVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6
OnN0eWxlU2hlZXRTY29wZSk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0
cnVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246On5Q
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3Ry
dWN0aW9uOjpjaGVja1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0lu
c3RydWN0aW9uOjpzaGVldExvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb246Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb246OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpzdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYWRvd1Jvb3Q6OnN0eWxlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Um9vdDo6dXBkYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6YXV0aG9y
U3R5bGVTaGVldHMpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9TaGFkb3dSb290Lmg6CisgICAg
ICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExp
bmtFbGVtZW50Ojp+SFRNTExpbmtFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5r
RWxlbWVudDo6c2V0RGlzYWJsZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0Vs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVu
dDo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6Omluc2VydGVk
SW50byk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnJlbW92ZWRGcm9tKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6YWRkUGVuZGluZ1NoZWV0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6cmVtb3ZlUGVuZGluZ1NoZWV0KToKKyAg
ICAgICAgKiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2Vu
dDo6Y29sbGVjdEFsbERvY3VtZW50U3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDU1NBZ2VudDo6cmVzZXRQc2V1ZG9TdGF0ZXMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFn
ZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlhKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmdldE1hdGNoZWRDU1NSdWxlcyk6CisgICAg
ICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UHJpbnRp
bmcpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0UGFnaW5h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFZpZXdwb3J0U2l6ZUZvckNT
U1ZpZXdwb3J0VW5pdHMpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzZXRWaWV3TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXROZWVk
c1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6aW52YWxp
ZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXMpOgorICAgICAgICAqIHN0eWxl
L1N0eWxlU2NvcGUuY3BwOiBDb3BpZWQgZnJvbSBkb20vQXV0aG9yU3R5bGVTaGVldHMuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlOjpTY29wZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6U2NvcGU6OnN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OlNjb3BlOjpzdHlsZVJlc29sdmVySWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OlNjb3BlOjpmb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6cmVtb3Zl
UGVuZGluZ1NoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6YWRkU3R5bGVT
aGVldENhbmRpZGF0ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlOjpyZW1v
dmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6U2Nv
cGU6OmNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
U2NvcGU6OmFuYWx5emVTdHlsZVNoZWV0Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpTY29wZTo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OlNjb3BlOjp1cGRhdGVTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpTY29wZTo6YWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlNjb3BlOjphY3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpTY29wZTo6Zmx1c2hQZW5kaW5nVXBkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpTY29wZTo6Y2xlYXJQZW5kaW5nVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpTY29wZTo6c2NoZWR1bGVBY3RpdmVTZXRVcGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlNjb3BlOjpkaWRDaGFuZ2VDYW5kaWRhdGVzRm9yQWN0aXZlU2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6ZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6cGVuZGluZ1VwZGF0ZVRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OkF1dGhvclN0eWxl
U2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjpz
dHlsZVJlc29sdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hl
ZXRzOjpzdHlsZVJlc29sdmVySWZFeGlzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
QXV0aG9yU3R5bGVTaGVldHM6OmZvck5vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
QXV0aG9yU3R5bGVTaGVldHM6OnJlbW92ZVBlbmRpbmdTaGVldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6YWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OnJlbW92ZVN0
eWxlU2hlZXRDYW5kaWRhdGVOb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1dGhv
clN0eWxlU2hlZXRzOjpjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OmFuYWx5emVTdHlsZVNoZWV0Q2hhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjp1cGRhdGVBY3Rp
dmVTdHlsZVNoZWV0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBdXRob3JTdHlsZVNo
ZWV0czo6dXBkYXRlU3R5bGVSZXNvbHZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpB
dXRob3JTdHlsZVNoZWV0czo6YWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OmFjdGl2ZVN0eWxlU2hlZXRz
Q29udGFpbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6
OmZsdXNoUGVuZGluZ1VwZGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBdXRob3JT
dHlsZVNoZWV0czo6Y2xlYXJQZW5kaW5nVXBkYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkF1dGhvclN0eWxlU2hlZXRzOjpzY2hlZHVsZUFjdGl2ZVNldFVwZGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6ZGlkQ2hhbmdlQ2FuZGlkYXRl
c0ZvckFjdGl2ZVNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBdXRob3JTdHlsZVNo
ZWV0czo6ZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjpwZW5kaW5nVXBkYXRlVGltZXJGaXJlZCk6
IERlbGV0ZWQuCisgICAgICAgICogc3R5bGUvU3R5bGVTY29wZS5oOiBDb3BpZWQgZnJvbSBkb20v
QXV0aG9yU3R5bGVTaGVldHMuaC4KKyAgICAgICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5j
cHA6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiB4bWwvWE1M
VHJlZVZpZXdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUcmVlVmlld2VyOjp0cmFuc2Zv
cm1Eb2N1bWVudFRvVHJlZVZpZXcpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVuZCk6Cisg
ICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmRvRW5kKToKKwogMjAxNi0xMC0wNyAgQWRh
bSBCZXJna3Zpc3QgIDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CiAKICAgICAgICAgV2Vi
UlRDOiBNaXNjIGdhcmRlbmluZzogVXNlIHR5cGVkZWZzIGNvbnNpc3RlbnRseSBhbmQgcmVtb3Zl
IHVudXNlZCBjb2RlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA2ODc5KQor
KysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEzODMs
NyArMTM4Myw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBkb20vQWN0aXZlRE9NT2JqZWN0
LmNwcAogICAgIGRvbS9BbmltYXRpb25FdmVudC5jcHAKICAgICBkb20vQXR0ci5jcHAKLSAgICBk
b20vQXV0aG9yU3R5bGVTaGVldHMuY3BwCiAgICAgZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50
LmNwcAogICAgIGRvbS9CZWZvcmVVbmxvYWRFdmVudC5jcHAKICAgICBkb20vQ0RBVEFTZWN0aW9u
LmNwcApAQCAtMjY0OCw2ICsyNjQ3LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHN0eWxl
L1N0eWxlUGVuZGluZ1Jlc291cmNlcy5jcHAKICAgICBzdHlsZS9TdHlsZVJlbGF0aW9ucy5jcHAK
ICAgICBzdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAKKyAgICBzdHlsZS9TdHlsZVNj
b3BlLmNwcAogICAgIHN0eWxlL1N0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcAogICAgIHN0eWxlL1N0
eWxlVHJlZVJlc29sdmVyLmNwcAogICAgIHN0eWxlL1N0eWxlVXBkYXRlLmNwcApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjA2ODc5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MjA2LDggKzYyMDYsOCBAQAogCQlFNDYxODAy
QjFDOEEwNkQ5MDAyNkMwMkMgLyogUmVuZGVyVHJlZVVwZGF0ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2MTgwMkExQzhBMDZEOTAwMjZDMDJD
IC8qIFJlbmRlclRyZWVVcGRhdGVyLmNwcCAqLzsgfTsKIAkJRTQ2MTgwMkQxQzhERDI5MDAwMjZD
MDJDIC8qIFN0eWxlUmVsYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDYxODAyQzFDOEREMjkwMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMu
aCAqLzsgfTsKIAkJRTQ2MTgwMkYxQzhERDREMjAwMjZDMDJDIC8qIFN0eWxlUmVsYXRpb25zLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjE4MDJF
MUM4REQ0RDIwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5jcHAgKi87IH07Ci0JCUU0NjFENjVE
MUJCMEM3RjAwMENCNTY0NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYxRDY1QzFCQjBDN0YwMDBDQjU2NDUg
LyogQXV0aG9yU3R5bGVTaGVldHMuY3BwICovOyB9OwotCQlFNDYxRDY1RjFCQjBDODBEMDBDQjU2
NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0NjFENjVFMUJCMEM4MEQwMENCNTY0NSAvKiBBdXRob3JTdHlsZVNo
ZWV0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUU0NjFENjVEMUJCMEM3RjAwMENCNTY0NSAvKiBTdHlsZVNjb3BlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjFENjVDMUJCMEM3RjAwMENCNTY0
NSAvKiBTdHlsZVNjb3BlLmNwcCAqLzsgfTsKKwkJRTQ2MUQ2NUYxQkIwQzgwRDAwQ0I1NjQ1IC8q
IFN0eWxlU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0NjFENjVFMUJCMEM4MEQwMENCNTY0NSAvKiBTdHlsZVNjb3BlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ2MkE0QTExMTNFNzFCRTAw
NEE0MjIwIC8qIEludFBvaW50SGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ2MkE0QTAxMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NkEy
QjFDMTdDQTY1QjkwMDBEQkNEOCAvKiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkEyQjFCMTdD
QTY1QjkwMDBEQkNEOCAvKiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDZBMkIxRTE3Q0E3
NkIxMDAwREJDRDggLyogRWxlbWVudENoaWxkSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkEyQjFEMTdDQTc2QjEwMDBEQkNEOCAvKiBF
bGVtZW50Q2hpbGRJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xMzgxNSw4ICsxMzgxNSw4IEBACiAJCUU0NjE4MDJBMUM4QTA2RDkw
MDI2QzAyQyAvKiBSZW5kZXJUcmVlVXBkYXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlVXBkYXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0NjE4MDJDMUM4REQyOTAwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVJlbGF0aW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYxODAyRTFDOERENEQyMDAyNkMwMkMgLyogU3R5bGVS
ZWxhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVS
ZWxhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDYxRDY1QzFCQjBD
N0YwMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQXV0aG9yU3R5bGVTaGVldHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlFNDYxRDY1RTFCQjBDODBEMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVl
dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0aG9yU3R5bGVTaGVldHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ2MUQ2NUMxQkIwQzdGMDAwQ0I1NjQ1
IC8qIFN0eWxlU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3R5bGVTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NjFENjVFMUJC
MEM4MEQwMENCNTY0NSAvKiBTdHlsZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0eWxlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ2MkE0
QTAxMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbnRQb2ludEhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ2QTJCMUIxN0NBNjVCOTAwMERCQ0Q4IC8qIFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVy
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEVsZW1lbnREZXNj
ZW5kYW50SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ2QTJCMUQx
N0NBNzZCMTAwMERCQ0Q4IC8qIEVsZW1lbnRDaGlsZEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRDaGlsZEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yMjMwNiw2ICsyMjMwNiw4IEBACiAJCQkJRTQ2MTgwMkMxQzhERDI5
MDAwMjZDMDJDIC8qIFN0eWxlUmVsYXRpb25zLmggKi8sCiAJCQkJRTRENThFQjIxN0I0REJEQzAw
Q0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcCAqLywKIAkJCQlFNEQ1OEVCMzE3
QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCAqLywKKwkJCQlFNDYx
RDY1QzFCQjBDN0YwMDBDQjU2NDUgLyogU3R5bGVTY29wZS5jcHAgKi8sCisJCQkJRTQ2MUQ2NUUx
QkIwQzgwRDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuaCAqLywKIAkJCQlFNDdBM0FDMjFDNUVBQkJF
MDBDQ0JGQTcgLyogU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwICovLAogCQkJCUU0N0EzQUM0MUM1
RUFDNzkwMENDQkZBNyAvKiBTdHlsZVNoYXJpbmdSZXNvbHZlci5oICovLAogCQkJCUU0REVBQTE1
MTdBOTNEQzMwMDBFMDQzMCAvKiBTdHlsZVRyZWVSZXNvbHZlci5jcHAgKi8sCkBAIC0yMjk0Miw4
ICsyMjk0NCw2IEBACiAJCQkJQThDNEE3RkIwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHIuaCAqLywK
IAkJCQk5M0VFQzFFNTA5QzI4Nzc3MDBDNTE1RDEgLyogQXR0ci5pZGwgKi8sCiAJCQkJQThDNEE3
RjkwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHJpYnV0ZS5oICovLAotCQkJCUU0NjFENjVDMUJCMEM3
RjAwMENCNTY0NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5jcHAgKi8sCi0JCQkJRTQ2MUQ2NUUxQkIw
QzgwRDAwQ0I1NjQ1IC8qIEF1dGhvclN0eWxlU2hlZXRzLmggKi8sCiAJCQkJNzYwODQ3Q0QxOUE2
QTI3NzAwNDI4Q0NDIC8qIEF1dG9jb21wbGV0ZUVycm9yRXZlbnQuaCAqLywKIAkJCQk3NjA4NDdD
RjE5QTZBMjg2MDA0MjhDQ0MgLyogQXV0b2NvbXBsZXRlRXJyb3JFdmVudC5pZGwgKi8sCiAJCQkJ
QkM5NDYyRDcxMDdBN0I0QzAwODU3MTkzIC8qIEJlZm9yZUxvYWRFdmVudC5oICovLApAQCAtMjM5
MDUsNyArMjM5MDUsNyBAQAogCQkJCTA3MDRBNDA4MUQ2REU5RjEwMDg2RENEQiAvKiBPdmVyY29u
c3RyYWluZWRFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNDc0ODQxMEFBMTYxRDAwQjc5
NDkzIC8qIEF1dGhlbnRpY2F0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY0
QzBDRTkyMzRFMDA3RUYzQ0QgLyogQXV0aGVudGljYXRpb25NYWMuaCBpbiBIZWFkZXJzICovLAot
CQkJCUU0NjFENjVGMUJCMEM4MEQwMENCNTY0NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRTQ2MUQ2NUYxQkIwQzgwRDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1MDE5MjBFMTMyRUJGMkUwMDhCRkU1NSAvKiBBdXRvY2FwaXRh
bGl6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzYwODQ3Q0UxOUE2QTI3ODAwNDI4Q0NDIC8qIEF1
dG9jb21wbGV0ZUVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMTg0M0ZFMUM4Qjcy
ODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzY2Niw3ICsyNzY2
Niw3IEBACiAJCQkJN0VFNjg0NUYxMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRpY2F0aW9uQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0RjcxMzgwRDVBNkVGRjAwMDE4RDY5IC8qIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTRDNzY0RDBD
RTkyMzRFMDA3RUYzQ0QgLyogQXV0aGVudGljYXRpb25NYWMubW0gaW4gU291cmNlcyAqLywKLQkJ
CQlFNDYxRDY1RDFCQjBDN0YwMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRTQ2MUQ2NUQxQkIwQzdGMDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGNkUxNkIxMzJFRDQ2RTAwOEVEQUUzIC8qIEF1dG9jYXBp
dGFsaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU1OTdGODI2MUQ5MUMzMTMwMDY2QkMyMSAv
KiBJbWFnZUZyYW1lQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODQzRkQxQzhCNzI4
MzAwMkVCOTczIC8qIEF1dG9maWxsLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMjA2ODgwKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogCi0jaW5j
bHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJDU1NDaGFyc2V0UnVsZS5oIgog
I2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgogI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIK
QEAgLTQ0LDcgKzQzLDkgQEAKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgorI2luY2x1ZGUgIlN0eWxlU2Nv
cGUuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKKwogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTcwLDcgKzE3
MSw3IEBAIHZvaWQgQ1NTU3R5bGVTaGVldDo6ZGlkTXV0YXRlUnVsZXMoUnVsZU0KICAgICBBU1NF
UlQobV9jb250ZW50cy0+aXNNdXRhYmxlKCkpOwogICAgIEFTU0VSVChtX2NvbnRlbnRzLT5oYXNP
bmVDbGllbnQoKSk7CiAKLSAgICBhdXRvKiBzY29wZSA9IHN0eWxlU2hlZXRTY29wZSgpOworICAg
IGF1dG8qIHNjb3BlID0gc3R5bGVTY29wZSgpOwogICAgIGlmICghc2NvcGUpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMTkxLDcgKzE5Miw3IEBAIHZvaWQgQ1NTU3R5bGVTaGVldDo6ZGlkTXV0YXRl
UnVsZXMoUnVsZU0KIAogdm9pZCBDU1NTdHlsZVNoZWV0OjpkaWRNdXRhdGUoKQogewotICAgIGF1
dG8qIHNjb3BlID0gc3R5bGVTaGVldFNjb3BlKCk7CisgICAgYXV0byogc2NvcGUgPSBzdHlsZVNj
b3BlKCk7CiAgICAgaWYgKCFzY29wZSkKICAgICAgICAgcmV0dXJuOwogICAgIHNjb3BlLT5kaWRD
aGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKQEAgLTQxNSwxMiArNDE2LDEyIEBAIERv
Y3VtZW50KiBDU1NTdHlsZVNoZWV0Ojpvd25lckRvY3VtZW50KCkKICAgICByZXR1cm4gcm9vdC5v
d25lck5vZGUoKSA/ICZyb290Lm93bmVyTm9kZSgpLT5kb2N1bWVudCgpIDogbnVsbHB0cjsKIH0K
IAotQXV0aG9yU3R5bGVTaGVldHMqIENTU1N0eWxlU2hlZXQ6OnN0eWxlU2hlZXRTY29wZSgpCitT
dHlsZTo6U2NvcGUqIENTU1N0eWxlU2hlZXQ6OnN0eWxlU2NvcGUoKQogewogICAgIGF1dG8qIG93
bmVyTm9kZSA9IHJvb3RTdHlsZVNoZWV0KCkub3duZXJOb2RlKCk7CiAgICAgaWYgKCFvd25lck5v
ZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiAmQXV0aG9yU3R5bGVTaGVl
dHM6OmZvck5vZGUoKm93bmVyTm9kZSk7CisgICAgcmV0dXJuICZTdHlsZTo6U2NvcGU6OmZvck5v
ZGUoKm93bmVyTm9kZSk7CiB9CiAKIHZvaWQgQ1NTU3R5bGVTaGVldDo6Y2xlYXJDaGlsZFJ1bGVD
U1NPTVdyYXBwZXJzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkocmV2aXNp
b24gMjA2ODgwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IEF1dGhvclN0eWxlU2hlZXRzOwogY2xhc3MgQ1NTQ2hhcnNldFJ1bGU7CiBjbGFzcyBDU1NJbXBv
cnRSdWxlOwogY2xhc3MgQ1NTUGFyc2VyOwpAQCAtNDUsNiArNDQsMTAgQEAgY2xhc3MgU2VjdXJp
dHlPcmlnaW47CiBjbGFzcyBTdHlsZVJ1bGVLZXlmcmFtZXM7CiBjbGFzcyBTdHlsZVNoZWV0Q29u
dGVudHM7CiAKK25hbWVzcGFjZSBTdHlsZSB7CitjbGFzcyBTY29wZTsKK30KKwogdHlwZWRlZiBp
bnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgQ1NTU3R5bGVTaGVldCBmaW5hbCA6IHB1YmxpYyBT
dHlsZVNoZWV0IHsKQEAgLTg3LDcgKzkwLDcgQEAgcHVibGljOgogICAgIERvY3VtZW50KiBvd25l
ckRvY3VtZW50KCkgY29uc3Q7CiAgICAgQ1NTU3R5bGVTaGVldCYgcm9vdFN0eWxlU2hlZXQoKTsK
ICAgICBjb25zdCBDU1NTdHlsZVNoZWV0JiByb290U3R5bGVTaGVldCgpIGNvbnN0OwotICAgIEF1
dGhvclN0eWxlU2hlZXRzKiBzdHlsZVNoZWV0U2NvcGUoKTsKKyAgICBTdHlsZTo6U2NvcGUqIHN0
eWxlU2NvcGUoKTsKIAogICAgIE1lZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcygpIGNvbnN0IHsg
cmV0dXJuIG1fbWVkaWFRdWVyaWVzLmdldCgpOyB9CiAgICAgdm9pZCBzZXRNZWRpYVF1ZXJpZXMo
UmVmPE1lZGlhUXVlcnlTZXQ+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0luc3BlY3Rv
ckNTU09NV3JhcHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9JbnNw
ZWN0b3JDU1NPTVdyYXBwZXJzLmNwcAkocmV2aXNpb24gMjA2ODc5KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0luc3BlY3RvckNTU09NV3JhcHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3
ICsyOSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTT01X
cmFwcGVycy5oIgogCi0jaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJD
U1NEZWZhdWx0U3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCiAjaW5j
bHVkZSAiQ1NTTWVkaWFSdWxlLmgiCkBAIC0zOCw2ICszNyw3IEBACiAjaW5jbHVkZSAiQ1NTU3R5
bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1N1cHBvcnRzUnVsZS5oIgogI2luY2x1ZGUgIkV4dGVu
c2lvblN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlN0
eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1ZGUgIldlYktpdENTU1JlZ2lvblJ1bGUuaCIKIApA
QCAtOTYsNyArOTYsNyBAQCB2b2lkIEluc3BlY3RvckNTU09NV3JhcHBlcnM6OmNvbGxlY3RGcm9t
CiAgICAgICAgIGNvbGxlY3Qoc2hlZXRzW2ldLmdldCgpKTsKIH0KIAotQ1NTU3R5bGVSdWxlKiBJ
bnNwZWN0b3JDU1NPTVdyYXBwZXJzOjpnZXRXcmFwcGVyRm9yUnVsZUluU2hlZXRzKFN0eWxlUnVs
ZSogcnVsZSwgQXV0aG9yU3R5bGVTaGVldHMmIGF1dGhvclN0eWxlU2hlZXRzLCBFeHRlbnNpb25T
dHlsZVNoZWV0cyYgZXh0ZW5zaW9uU3R5bGVTaGVldHMpCitDU1NTdHlsZVJ1bGUqIEluc3BlY3Rv
ckNTU09NV3JhcHBlcnM6OmdldFdyYXBwZXJGb3JSdWxlSW5TaGVldHMoU3R5bGVSdWxlKiBydWxl
LCBTdHlsZTo6U2NvcGUmIHN0eWxlU2NvcGUsIEV4dGVuc2lvblN0eWxlU2hlZXRzJiBleHRlbnNp
b25TdHlsZVNoZWV0cykKIHsKICAgICBpZiAobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5p
c0VtcHR5KCkpIHsKICAgICAgICAgY29sbGVjdEZyb21TdHlsZVNoZWV0Q29udGVudHMobV9zdHls
ZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OnNpbXBsZURlZmF1
bHRTdHlsZVNoZWV0KTsKQEAgLTEwOCw3ICsxMDgsNyBAQCBDU1NTdHlsZVJ1bGUqIEluc3BlY3Rv
ckNTU09NV3JhcHBlcnM6OmdlCiAgICAgICAgIGNvbGxlY3RGcm9tU3R5bGVTaGVldENvbnRlbnRz
KG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpmdWxs
c2NyZWVuU3R5bGVTaGVldCk7CiAgICAgICAgIGNvbGxlY3RGcm9tU3R5bGVTaGVldENvbnRlbnRz
KG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpwbHVn
SW5zU3R5bGVTaGVldCk7CiAKLSAgICAgICAgY29sbGVjdEZyb21TdHlsZVNoZWV0cyhhdXRob3JT
dHlsZVNoZWV0cy5hY3RpdmVTdHlsZVNoZWV0cygpKTsKKyAgICAgICAgY29sbGVjdEZyb21TdHls
ZVNoZWV0cyhzdHlsZVNjb3BlLmFjdGl2ZVN0eWxlU2hlZXRzKCkpOwogICAgICAgICBjb2xsZWN0
KGV4dGVuc2lvblN0eWxlU2hlZXRzLnBhZ2VVc2VyU2hlZXQoKSk7CiAgICAgICAgIGNvbGxlY3RG
cm9tU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVl
dHMoKSk7CiAgICAgICAgIGNvbGxlY3RGcm9tU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVl
dHMuZG9jdW1lbnRVc2VyU3R5bGVTaGVldHMoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
SW5zcGVjdG9yQ1NTT01XcmFwcGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9JbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmgJKHJldmlzaW9uIDIwNjg3OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9JbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDE4ICszMSwyMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEF1dGhvclN0eWxl
U2hlZXRzOwogY2xhc3MgQ1NTU3R5bGVSdWxlOwogY2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNsYXNz
IEV4dGVuc2lvblN0eWxlU2hlZXRzOwogY2xhc3MgU3R5bGVSdWxlOwogY2xhc3MgU3R5bGVTaGVl
dENvbnRlbnRzOwogCituYW1lc3BhY2UgU3R5bGUgeworY2xhc3MgU2NvcGU7Cit9CisKIGNsYXNz
IEluc3BlY3RvckNTU09NV3JhcHBlcnMgewogcHVibGljOgogICAgIC8vIFdBUk5JTkcuIFRoaXMg
d2lsbCBjb25zdHJ1Y3QgQ1NTT00gd3JhcHBlcnMgZm9yIGFsbCBzdHlsZSBydWxlcyBhbmQgY2Fj
aGUgdGhlbSBpbiBhIG1hcCBmb3Igc2lnbmlmaWNhbnQgbWVtb3J5IGNvc3QuCiAgICAgLy8gSXQg
aXMgaGVyZSB0byBzdXBwb3J0IGluc3BlY3Rvci4gRG9uJ3QgdXNlIGZvciBhbnkgcmVndWxhciBl
bmdpbmUgZnVuY3Rpb25zLgotICAgIENTU1N0eWxlUnVsZSogZ2V0V3JhcHBlckZvclJ1bGVJblNo
ZWV0cyhTdHlsZVJ1bGUqLCBBdXRob3JTdHlsZVNoZWV0cyYsIEV4dGVuc2lvblN0eWxlU2hlZXRz
Jik7CisgICAgQ1NTU3R5bGVSdWxlKiBnZXRXcmFwcGVyRm9yUnVsZUluU2hlZXRzKFN0eWxlUnVs
ZSosIFN0eWxlOjpTY29wZSYsIEV4dGVuc2lvblN0eWxlU2hlZXRzJik7CiAgICAgdm9pZCBjb2xs
ZWN0RnJvbVN0eWxlU2hlZXRJZk5lZWRlZChDU1NTdHlsZVNoZWV0Kik7CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAJKHJldmlzaW9uIDIwNjg3OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDExICsyMSwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxl
U2hlZXRMaXN0LmgiCiAKLSNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUg
IkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTdHlsZVNj
b3BlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQ1LDEyICs0NSwxMiBAQCBpbmxpbmUgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVNoZWV0Pj4mCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gbV9kZXRh
Y2hlZFN0eWxlU2hlZXRzOwotICAgIHJldHVybiBtX2RvY3VtZW50LT5hdXRob3JTdHlsZVNoZWV0
cygpLnN0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3QoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVu
dC0+c3R5bGVTY29wZSgpLnN0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3QoKTsKIH0KIAogdm9p
ZCBTdHlsZVNoZWV0TGlzdDo6ZGV0YWNoRnJvbURvY3VtZW50KCkKIHsKLSAgICBtX2RldGFjaGVk
U3R5bGVTaGVldHMgPSBtX2RvY3VtZW50LT5hdXRob3JTdHlsZVNoZWV0cygpLnN0eWxlU2hlZXRz
Rm9yU3R5bGVTaGVldExpc3QoKTsKKyAgICBtX2RldGFjaGVkU3R5bGVTaGVldHMgPSBtX2RvY3Vt
ZW50LT5zdHlsZVNjb3BlKCkuc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdCgpOwogICAgIG1f
ZG9jdW1lbnQgPSBudWxscHRyOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9y
U3R5bGVTaGVldHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JT
dHlsZVNoZWV0cy5jcHAJKHJldmlzaW9uIDIwNjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9B
dXRob3JTdHlsZVNoZWV0cy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0ODcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAg
ICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAg
ICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogICAgICAg
ICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAwOSwgMjAxMS0yMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAtMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCi0KLSNpbmNsdWRlICJDU1NT
dHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkVsZW1lbnRDaGls
ZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCIKLSNpbmNsdWRl
ICJIVE1MSUZyYW1lRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5j
bHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNp
bmNsdWRlICJTVkdTdHlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1
ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgi
Ci0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgotI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50
cy5oIgotI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCi0jaW5jbHVkZSAiVXNlckNvbnRlbnRD
b250cm9sbGVyLmgiCi0jaW5jbHVkZSAiVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmgiCi0jaW5jbHVk
ZSAiVXNlclN0eWxlU2hlZXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1l
c3BhY2UgQ29udGVudEV4dGVuc2lvbnM7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1B
dXRob3JTdHlsZVNoZWV0czo6QXV0aG9yU3R5bGVTaGVldHMoRG9jdW1lbnQmIGRvY3VtZW50KQot
ICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fcGVuZGluZ1VwZGF0ZVRpbWVyKCp0
aGlzLCAmQXV0aG9yU3R5bGVTaGVldHM6OnBlbmRpbmdVcGRhdGVUaW1lckZpcmVkKQotewotfQot
Ci1BdXRob3JTdHlsZVNoZWV0czo6QXV0aG9yU3R5bGVTaGVldHMoU2hhZG93Um9vdCYgc2hhZG93
Um9vdCkKLSAgICA6IG1fZG9jdW1lbnQoc2hhZG93Um9vdC5kb2N1bWVudFNjb3BlKCkpCi0gICAg
LCBtX3NoYWRvd1Jvb3QoJnNoYWRvd1Jvb3QpCi0gICAgLCBtX3BlbmRpbmdVcGRhdGVUaW1lcigq
dGhpcywgJkF1dGhvclN0eWxlU2hlZXRzOjpwZW5kaW5nVXBkYXRlVGltZXJGaXJlZCkKLXsKLX0K
LQotU3R5bGVSZXNvbHZlciYgQXV0aG9yU3R5bGVTaGVldHM6OnN0eWxlUmVzb2x2ZXIoKQotewot
ICAgIGlmIChtX3NoYWRvd1Jvb3QpCi0gICAgICAgIHJldHVybiBtX3NoYWRvd1Jvb3QtPnN0eWxl
UmVzb2x2ZXIoKTsKLQotICAgIHJldHVybiBtX2RvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIo
KTsKLX0KLQotU3R5bGVSZXNvbHZlciogQXV0aG9yU3R5bGVTaGVldHM6OnN0eWxlUmVzb2x2ZXJJ
ZkV4aXN0cygpCi17Ci0gICAgaWYgKG1fc2hhZG93Um9vdCkKLSAgICAgICAgcmV0dXJuIG1fc2hh
ZG93Um9vdC0+c3R5bGVSZXNvbHZlcklmRXhpc3RzKCk7Ci0KLSAgICByZXR1cm4gbV9kb2N1bWVu
dC5zdHlsZVJlc29sdmVySWZFeGlzdHMoKTsKLX0KLQotQXV0aG9yU3R5bGVTaGVldHMmIEF1dGhv
clN0eWxlU2hlZXRzOjpmb3JOb2RlKE5vZGUmIG5vZGUpCi17Ci0gICAgQVNTRVJUKG5vZGUuaW5E
b2N1bWVudCgpKTsKLSAgICBhdXRvKiBzaGFkb3dSb290ID0gbm9kZS5jb250YWluaW5nU2hhZG93
Um9vdCgpOwotICAgIGlmIChzaGFkb3dSb290KQotICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+
YXV0aG9yU3R5bGVTaGVldHMoKTsKLSAgICByZXR1cm4gbm9kZS5kb2N1bWVudCgpLmF1dGhvclN0
eWxlU2hlZXRzKCk7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhIHRv
cC1sZXZlbCBzdHlsZXNoZWV0IGhhcyBmaW5pc2hlZCBsb2FkaW5nLgotdm9pZCBBdXRob3JTdHls
ZVNoZWV0czo6cmVtb3ZlUGVuZGluZ1NoZWV0KFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlv
blR5cGUgbm90aWZpY2F0aW9uKQotewotICAgIC8vIE1ha2Ugc3VyZSB3ZSBrbmV3IHRoaXMgc2hl
ZXQgd2FzIHBlbmRpbmcsIGFuZCB0aGF0IG91ciBjb3VudCBpc24ndCBvdXQgb2Ygc3luYy4KLSAg
ICBBU1NFUlQobV9wZW5kaW5nU3R5bGVTaGVldENvdW50ID4gMCk7Ci0KLSAgICBtX3BlbmRpbmdT
dHlsZVNoZWV0Q291bnQtLTsKLSAgICAKLSNpZmRlZiBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVM
SU5HCi0gICAgaWYgKCFvd25lckVsZW1lbnQoKSkKLSAgICAgICAgcHJpbnRmKCJTdHlsZXNoZWV0
IGxvYWRlZCBhdCB0aW1lICVkLiAlZCBzdHlsZXNoZWV0cyBzdGlsbCByZW1haW4uXG4iLCBlbGFw
c2VkVGltZSgpLCBtX3BlbmRpbmdTdHlsZXNoZWV0cyk7Ci0jZW5kaWYKLQotICAgIGlmIChtX3Bl
bmRpbmdTdHlsZVNoZWV0Q291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChub3RpZmlj
YXRpb24gPT0gUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5TGF0ZXIpIHsKLSAgICAgICAgbV9kb2N1
bWVudC5zZXROZWVkc05vdGlmeVJlbW92ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9zaGFkb3dSb290KSB7Ci0gICAgICAgIG1fc2hh
ZG93Um9vdC0+dXBkYXRlU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
ZG9jdW1lbnQuZGlkUmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hlZXQoKTsKLX0KLQotdm9pZCBBdXRo
b3JTdHlsZVNoZWV0czo6YWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSwgYm9v
bCBjcmVhdGVkQnlQYXJzZXIpCi17Ci0gICAgaWYgKCFub2RlLmluRG9jdW1lbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIC8vIFVudGlsIHRoZSA8Ym9keT4gZXhpc3RzLCB3ZSBoYXZl
IG5vIGNob2ljZSBidXQgdG8gY29tcGFyZSBkb2N1bWVudCBwb3NpdGlvbnMsCi0gICAgLy8gc2lu
Y2Ugc3R5bGVzIG91dHNpZGUgb2YgdGhlIGJvZHkgYW5kIGhlYWQgY29udGludWUgdG8gYmUgc2h1
bnRlZCBpbnRvIHRoZSBoZWFkCi0gICAgLy8gKGFuZCB0aHVzIGNhbiBzaGlmdCB0byBlbmQgdXAg
YmVmb3JlIGR5bmFtaWNhbGx5IGFkZGVkIERPTSBjb250ZW50IHRoYXQgaXMgYWxzbwotICAgIC8v
IG91dHNpZGUgdGhlIGJvZHkpLgotICAgIGlmICgoY3JlYXRlZEJ5UGFyc2VyICYmIG1fZG9jdW1l
bnQuYm9keU9yRnJhbWVzZXQoKSkgfHwgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmFkZCgmbm9kZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1pbmUgYW4gYXBwcm9wcmlhdGUg
aW5zZXJ0aW9uIHBvaW50LgotICAgIGF1dG8gYmVnaW4gPSBtX3N0eWxlU2hlZXRDYW5kaWRhdGVO
b2Rlcy5iZWdpbigpOwotICAgIGF1dG8gZW5kID0gbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMu
ZW5kKCk7Ci0gICAgYXV0byBpdCA9IGVuZDsKLSAgICBOb2RlKiBmb2xsb3dpbmdOb2RlID0gbnVs
bHB0cjsKLSAgICBkbyB7Ci0gICAgICAgIC0taXQ7Ci0gICAgICAgIE5vZGUqIG4gPSAqaXQ7Ci0g
ICAgICAgIHVuc2lnbmVkIHNob3J0IHBvc2l0aW9uID0gbi0+Y29tcGFyZURvY3VtZW50UG9zaXRp
b24obm9kZSk7Ci0gICAgICAgIGlmIChwb3NpdGlvbiA9PSBOb2RlOjpET0NVTUVOVF9QT1NJVElP
Tl9GT0xMT1dJTkcpIHsKLSAgICAgICAgICAgIG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmlu
c2VydEJlZm9yZShmb2xsb3dpbmdOb2RlLCAmbm9kZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgZm9sbG93aW5nTm9kZSA9IG47Ci0gICAgfSB3aGlsZSAoaXQgIT0g
YmVnaW4pOwotICAgIAotICAgIG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmluc2VydEJlZm9y
ZShmb2xsb3dpbmdOb2RlLCAmbm9kZSk7Ci19Ci0KLXZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OnJl
bW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUmIG5vZGUpCi17Ci0gICAgaWYgKG1fc3R5
bGVTaGVldENhbmRpZGF0ZU5vZGVzLnJlbW92ZSgmbm9kZSkpCi0gICAgICAgIHNjaGVkdWxlQWN0
aXZlU2V0VXBkYXRlKCk7Ci19Ci0KLXZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OmNvbGxlY3RBY3Rp
dmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRzKQotewotICAg
IGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkgJiYgIW1fZG9jdW1lbnQuc2V0dGluZ3MoKS0+YXV0
aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChh
dXRvJiBub2RlIDogbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMpIHsKLSAgICAgICAgU3R5bGVT
aGVldCogc2hlZXQgPSBudWxscHRyOwotICAgICAgICBpZiAoaXM8UHJvY2Vzc2luZ0luc3RydWN0
aW9uPigqbm9kZSkpIHsKLSAgICAgICAgICAgIC8vIFByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gKFhN
TCBkb2N1bWVudHMgb25seSkuCi0gICAgICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGxpbmtp
bmcgdG8gZW1iZWRkZWQgQ1NTIHN0eWxlc2hlZXRzLCBzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00OTI4MT4gZm9yIGRpc2N1c3Npb24uCi0gICAgICAgICAgICBQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24mIHBpID0gZG93bmNhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9u
Pigqbm9kZSk7Ci0gICAgICAgICAgICBzaGVldCA9IHBpLnNoZWV0KCk7Ci0jaWYgRU5BQkxFKFhT
TFQpCi0gICAgICAgICAgICAvLyBEb24ndCBhcHBseSBYU0wgdHJhbnNmb3JtcyB0byBhbHJlYWR5
IHRyYW5zZm9ybWVkIGRvY3VtZW50cyAtLSA8cmRhcjovL3Byb2JsZW0vNDEzMjgwNj4KLSAgICAg
ICAgICAgIGlmIChwaS5pc1hTTCgpICYmICFtX2RvY3VtZW50LnRyYW5zZm9ybVNvdXJjZURvY3Vt
ZW50KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBhcHBseSBYU0wgdHJhbnNmb3JtcyB1
bnRpbCBsb2FkaW5nIGlzIGZpbmlzaGVkLgotICAgICAgICAgICAgICAgIGlmICghbV9kb2N1bWVu
dC5wYXJzaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQuYXBwbHlYU0xUcmFu
c2Zvcm0oJnBpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0jZW5k
aWYKLSAgICAgICAgfSBlbHNlIGlmIChpczxIVE1MTGlua0VsZW1lbnQ+KCpub2RlKSB8fCBpczxI
VE1MU3R5bGVFbGVtZW50Pigqbm9kZSkgfHwgaXM8U1ZHU3R5bGVFbGVtZW50Pigqbm9kZSkpIHsK
LSAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7
Ci0gICAgICAgICAgICBBdG9taWNTdHJpbmcgdGl0bGUgPSBlbGVtZW50LmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24odGl0bGVBdHRyKTsKLSAgICAgICAgICAgIGJvb2wgZW5hYmxlZFZp
YVNjcmlwdCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGlzPEhUTUxMaW5rRWxlbWVudD4oZWxl
bWVudCkpIHsKLSAgICAgICAgICAgICAgICAvLyA8TElOSz4gZWxlbWVudAotICAgICAgICAgICAg
ICAgIEhUTUxMaW5rRWxlbWVudCYgbGlua0VsZW1lbnQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1l
bnQ+KGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmIChsaW5rRWxlbWVudC5pc0Rpc2FibGVk
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGVuYWJs
ZWRWaWFTY3JpcHQgPSBsaW5rRWxlbWVudC5pc0VuYWJsZWRWaWFTY3JpcHQoKTsKLSAgICAgICAg
ICAgICAgICBpZiAobGlua0VsZW1lbnQuc3R5bGVTaGVldElzTG9hZGluZygpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIGl0IGlzIGxvYWRpbmcgYnV0IHdlIHNob3VsZCBzdGlsbCBkZWNpZGUg
d2hpY2ggc3R5bGUgc2hlZXQgc2V0IHRvIHVzZQotICAgICAgICAgICAgICAgICAgICBpZiAoIWVu
YWJsZWRWaWFTY3JpcHQgJiYgIXRpdGxlLmlzRW1wdHkoKSAmJiBtX3ByZWZlcnJlZFN0eWxlc2hl
ZXRTZXROYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsaW5r
RWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHJlbEF0dHIpLmNvbnRhaW5z
KCJhbHRlcm5hdGUiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJlZmVycmVk
U3R5bGVzaGVldFNldE5hbWUgPSB0aXRsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3NlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUgPSB0aXRsZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFsaW5rRWxlbWVudC5z
aGVldCgpKQotICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IG51bGxBdG9tOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHByZWZlcnJlZCBzdHlsZXNldC4g
VGhpcyBpcyB0aGUKLSAgICAgICAgICAgIC8vIHNldCBvZiBzaGVldHMgdGhhdCB3aWxsIGJlIGVu
YWJsZWQuCi0gICAgICAgICAgICBpZiAoaXM8U1ZHU3R5bGVFbGVtZW50PihlbGVtZW50KSkKLSAg
ICAgICAgICAgICAgICBzaGVldCA9IGRvd25jYXN0PFNWR1N0eWxlRWxlbWVudD4oZWxlbWVudCku
c2hlZXQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzPEhUTUxMaW5rRWxlbWVudD4oZWxlbWVu
dCkpCi0gICAgICAgICAgICAgICAgc2hlZXQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1lbnQ+KGVs
ZW1lbnQpLnNoZWV0KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2hlZXQg
PSBkb3duY2FzdDxIVE1MU3R5bGVFbGVtZW50PihlbGVtZW50KS5zaGVldCgpOwotICAgICAgICAg
ICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgc2hlZXQgYmVsb25ncyB0byBhIHN0eWxlc2V0Ci0g
ICAgICAgICAgICAvLyAodGh1cyBtYWtpbmcgaXQgUFJFRkVSUkVEIG9yIEFMVEVSTkFURSByYXRo
ZXIgdGhhbgotICAgICAgICAgICAgLy8gUEVSU0lTVEVOVCkuCi0gICAgICAgICAgICBhdXRvJiBy
ZWwgPSBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocmVsQXR0cik7Ci0g
ICAgICAgICAgICBpZiAoIWVuYWJsZWRWaWFTY3JpcHQgJiYgIXRpdGxlLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgICAgIC8vIFllcywgd2UgaGF2ZSBhIHRpdGxlLgotICAgICAgICAgICAgICAg
IGlmIChtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBObyBwcmVmZXJyZWQgc2V0IGhhcyBiZWVuIGVzdGFibGlzaGVkLiBJZgot
ICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgTk9UIGFuIGFsdGVybmF0ZSBzaGVldCwgdGhl
biBlc3RhYmxpc2gKLSAgICAgICAgICAgICAgICAgICAgLy8gdXMgYXMgdGhlIHByZWZlcnJlZCBz
ZXQuIE90aGVyd2lzZSwganVzdCBpZ25vcmUKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBz
aGVldC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1l
bnQpIHx8ICFyZWwuY29udGFpbnMoImFsdGVybmF0ZSIpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSA9IG1fc2VsZWN0ZWRTdHlsZXNoZWV0U2V0
TmFtZSA9IHRpdGxlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGl0
bGUgIT0gbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSkKLSAgICAgICAgICAgICAgICAgICAg
c2hlZXQgPSBudWxscHRyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmVsLmNv
bnRhaW5zKCJhbHRlcm5hdGUiKSAmJiB0aXRsZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
c2hlZXQgPSBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzaGVldCkKLSAgICAgICAg
ICAgIHNoZWV0cy5hcHBlbmQoc2hlZXQpOwotICAgIH0KLX0KLQotQXV0aG9yU3R5bGVTaGVldHM6
OlN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIEF1dGhvclN0eWxlU2hlZXRzOjphbmFseXplU3R5bGVT
aGVldENoYW5nZShjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgbmV3U3R5bGVz
aGVldHMsIGJvb2wmIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKQotewotICAgIHJlcXVpcmVzRnVs
bFN0eWxlUmVjYWxjID0gdHJ1ZTsKLSAgICAKLSAgICB1bnNpZ25lZCBuZXdTdHlsZXNoZWV0Q291
bnQgPSBuZXdTdHlsZXNoZWV0cy5zaXplKCk7Ci0KLSAgICBpZiAoIXN0eWxlUmVzb2x2ZXJJZkV4
aXN0cygpKQotICAgICAgICByZXR1cm4gUmVjb25zdHJ1Y3Q7Ci0KLSAgICBTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyID0gKnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpOwotCi0gICAgLy8gRmlu
ZCBvdXQgd2hpY2ggc3R5bGVzaGVldHMgYXJlIG5ldy4KLSAgICB1bnNpZ25lZCBvbGRTdHlsZXNo
ZWV0Q291bnQgPSBtX2FjdGl2ZVN0eWxlU2hlZXRzLnNpemUoKTsKLSAgICBpZiAobmV3U3R5bGVz
aGVldENvdW50IDwgb2xkU3R5bGVzaGVldENvdW50KQotICAgICAgICByZXR1cm4gUmVjb25zdHJ1
Y3Q7Ci0KLSAgICBWZWN0b3I8U3R5bGVTaGVldENvbnRlbnRzKj4gYWRkZWRTaGVldHM7Ci0gICAg
dW5zaWduZWQgbmV3SW5kZXggPSAwOwotICAgIGZvciAodW5zaWduZWQgb2xkSW5kZXggPSAwOyBv
bGRJbmRleCA8IG9sZFN0eWxlc2hlZXRDb3VudDsgKytvbGRJbmRleCkgewotICAgICAgICBpZiAo
bmV3SW5kZXggPj0gbmV3U3R5bGVzaGVldENvdW50KQotICAgICAgICAgICAgcmV0dXJuIFJlY29u
c3RydWN0OwotICAgICAgICB3aGlsZSAobV9hY3RpdmVTdHlsZVNoZWV0c1tvbGRJbmRleF0gIT0g
bmV3U3R5bGVzaGVldHNbbmV3SW5kZXhdKSB7Ci0gICAgICAgICAgICBhZGRlZFNoZWV0cy5hcHBl
bmQoJm5ld1N0eWxlc2hlZXRzW25ld0luZGV4XS0+Y29udGVudHMoKSk7Ci0gICAgICAgICAgICAr
K25ld0luZGV4OwotICAgICAgICAgICAgaWYgKG5ld0luZGV4ID09IG5ld1N0eWxlc2hlZXRDb3Vu
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gUmVjb25zdHJ1Y3Q7Ci0gICAgICAgIH0KLSAgICAg
ICAgKytuZXdJbmRleDsKLSAgICB9Ci0gICAgYm9vbCBoYXNJbnNlcnRpb25zID0gIWFkZGVkU2hl
ZXRzLmlzRW1wdHkoKTsKLSAgICB3aGlsZSAobmV3SW5kZXggPCBuZXdTdHlsZXNoZWV0Q291bnQp
IHsKLSAgICAgICAgYWRkZWRTaGVldHMuYXBwZW5kKCZuZXdTdHlsZXNoZWV0c1tuZXdJbmRleF0t
PmNvbnRlbnRzKCkpOwotICAgICAgICArK25ld0luZGV4OwotICAgIH0KLSAgICAvLyBJZiBhbGwg
bmV3IHNoZWV0cyB3ZXJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3Qgd2UgY2FuIGp1c3Qg
YWRkIHRoZW0gdG8gZXhpc3RpbmcgU3R5bGVSZXNvbHZlci4KLSAgICAvLyBJZiB0aGVyZSB3ZXJl
IGluc2VydGlvbnMgd2UgbmVlZCB0byByZS1hZGQgYWxsIHRoZSBzdHlsZXNoZWV0cyBzbyBydWxl
cyBhcmUgb3JkZXJlZCBjb3JyZWN0bHkuCi0gICAgYXV0byBzdHlsZVJlc29sdmVyVXBkYXRlVHlw
ZSA9IGhhc0luc2VydGlvbnMgPyBSZXNldCA6IEFkZGl0aXZlOwotCi0gICAgLy8gSWYgd2UgYXJl
IGFscmVhZHkgcGFyc2luZyB0aGUgYm9keSBhbmQgc28gbWF5IGhhdmUgc2lnbmlmaWNhbnQgYW1v
dW50IG9mIGVsZW1lbnRzLCBwdXQgc29tZSBlZmZvcnQgaW50byB0cnlpbmcgdG8gYXZvaWQgc3R5
bGUgcmVjYWxjcy4KLSAgICBpZiAoIW1fZG9jdW1lbnQuYm9keU9yRnJhbWVzZXQoKSB8fCBtX2Rv
Y3VtZW50Lmhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIHN0
eWxlUmVzb2x2ZXJVcGRhdGVUeXBlOwotCi0gICAgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyBp
bnZhbGlkYXRpb25BbmFseXNpcyhhZGRlZFNoZWV0cywgc3R5bGVSZXNvbHZlci5tZWRpYVF1ZXJ5
RXZhbHVhdG9yKCkpOwotICAgIGlmIChpbnZhbGlkYXRpb25BbmFseXNpcy5kaXJ0aWVzQWxsU3R5
bGUoKSkKLSAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlOwotICAgIGludmFs
aWRhdGlvbkFuYWx5c2lzLmludmFsaWRhdGVTdHlsZShtX2RvY3VtZW50KTsKLSAgICByZXF1aXJl
c0Z1bGxTdHlsZVJlY2FsYyA9IGZhbHNlOwotCi0gICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXJVcGRh
dGVUeXBlOwotfQotCi1zdGF0aWMgdm9pZCBmaWx0ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHlsZVNo
ZWV0cyhWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgcmVzdWx0LCBjb25zdCBWZWN0b3I8
UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRzKQotewotICAgIGZvciAoYXV0byYgc2hlZXQgOiBz
aGVldHMpIHsKLSAgICAgICAgaWYgKCFpczxDU1NTdHlsZVNoZWV0Pigqc2hlZXQpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIENTU1N0eWxlU2hlZXQmIHN0eWxlU2hlZXQgPSBkb3du
Y2FzdDxDU1NTdHlsZVNoZWV0Pigqc2hlZXQpOwotICAgICAgICBpZiAoc3R5bGVTaGVldC5pc0xv
YWRpbmcoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc3R5bGVTaGVldC5k
aXNhYmxlZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghc3R5bGVTaGVl
dC5sZW5ndGgoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXN1bHQuYXBwZW5k
KCZzdHlsZVNoZWV0KTsKLSAgICB9Ci19Ci0KLXZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OnVwZGF0
ZUFjdGl2ZVN0eWxlU2hlZXRzKFVwZGF0ZVR5cGUgdXBkYXRlVHlwZSkKLXsKLSAgICBBU1NFUlQo
IW1fcGVuZGluZ1VwZGF0ZVR5cGUpOwotCi0gICAgaWYgKG1fZG9jdW1lbnQuaW5TdHlsZVJlY2Fs
YygpIHx8IG1fZG9jdW1lbnQuaW5SZW5kZXJUcmVlVXBkYXRlKCkpIHsKLSAgICAgICAgLy8gUHJv
dGVjdCBhZ2FpbnN0IGRlbGV0aW5nIHN0eWxlIHJlc29sdmVyIGluIHRoZSBtaWRkbGUgb2YgYSBz
dHlsZSByZXNvbHV0aW9uLgotICAgICAgICAvLyBDcmFzaCBzdGFja3MgaW5kaWNhdGUgd2UgY2Fu
IGdldCBoZXJlIHdoZW4gYSByZXNvdXJjZSBsb2FkIGZhaWxzIHN5bmNocm9ub3VzbHkgKGZvciBl
eGFtcGxlIGR1ZSB0byBjb250ZW50IGJsb2NraW5nKS4KLSAgICAgICAgLy8gRklYTUU6IFRoZXNl
IGtpbmQgb2YgY2FzZXMgc2hvdWxkIGJlIGVsaW1pbmF0ZWQgYW5kIHRoaXMgcGF0aCByZXBsYWNl
ZCBieSBhbiBhc3NlcnQuCi0gICAgICAgIG1fcGVuZGluZ1VwZGF0ZVR5cGUgPSBVcGRhdGVUeXBl
OjpDb250ZW50c09ySW50ZXJwcmV0YXRpb247Ci0gICAgICAgIG1fZG9jdW1lbnQuc2NoZWR1bGVG
b3JjZWRTdHlsZVJlY2FsYygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFt
X2RvY3VtZW50Lmhhc0xpdmluZ1JlbmRlclRyZWUoKSkgewotICAgICAgICBtX2RvY3VtZW50LmNs
ZWFyU3R5bGVSZXNvbHZlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRG9u
J3QgYm90aGVyIHVwZGF0aW5nLCBzaW5jZSB3ZSBoYXZlbid0IGxvYWRlZCBhbGwgb3VyIHN0eWxl
IGluZm8geWV0Ci0gICAgLy8gYW5kIGhhdmVuJ3QgY2FsY3VsYXRlZCB0aGUgc3R5bGUgcmVzb2x2
ZXIgZm9yIHRoZSBmaXJzdCB0aW1lLgotICAgIGlmICghbV9zaGFkb3dSb290ICYmICFtX2RpZFVw
ZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzICYmIG1fcGVuZGluZ1N0eWxlU2hlZXRDb3VudCkgewotICAg
ICAgICBtX2RvY3VtZW50LmNsZWFyU3R5bGVSZXNvbHZlcigpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gRklYTUU6IFN1cHBvcnQgb3B0aW1pemVkIGludmFsaWRhdGlvbiBpbiBz
aGFkb3cgdHJlZXMuCi0gICAgaWYgKG1fc2hhZG93Um9vdCkKLSAgICAgICAgdXBkYXRlVHlwZSA9
IFVwZGF0ZVR5cGU6OkNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbjsKLQotICAgIG1fZGlkVXBkYXRl
QWN0aXZlU3R5bGVTaGVldHMgPSB0cnVlOwotCi0gICAgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0
Pj4gYWN0aXZlU3R5bGVTaGVldHM7Ci0gICAgY29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKGFjdGl2
ZVN0eWxlU2hlZXRzKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IGFjdGl2
ZUNTU1N0eWxlU2hlZXRzOwotICAgIGFjdGl2ZUNTU1N0eWxlU2hlZXRzLmFwcGVuZFZlY3Rvciht
X2RvY3VtZW50LmV4dGVuc2lvblN0eWxlU2hlZXRzKCkuaW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0
cygpKTsKLSAgICBhY3RpdmVDU1NTdHlsZVNoZWV0cy5hcHBlbmRWZWN0b3IobV9kb2N1bWVudC5l
eHRlbnNpb25TdHlsZVNoZWV0cygpLmF1dGhvclN0eWxlU2hlZXRzRm9yVGVzdGluZygpKTsKLSAg
ICBmaWx0ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHlsZVNoZWV0cyhhY3RpdmVDU1NTdHlsZVNoZWV0
cywgYWN0aXZlU3R5bGVTaGVldHMpOwotCi0gICAgYm9vbCByZXF1aXJlc0Z1bGxTdHlsZVJlY2Fs
YyA9IHRydWU7Ci0gICAgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgc3R5bGVSZXNvbHZlclVwZGF0
ZVR5cGUgPSBSZWNvbnN0cnVjdDsKLSAgICBpZiAodXBkYXRlVHlwZSA9PSBVcGRhdGVUeXBlOjpB
Y3RpdmVTZXQpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID0gYW5hbHl6ZVN0eWxl
U2hlZXRDaGFuZ2UoYWN0aXZlQ1NTU3R5bGVTaGVldHMsIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxj
KTsKLQotICAgIHVwZGF0ZVN0eWxlUmVzb2x2ZXIoYWN0aXZlQ1NTU3R5bGVTaGVldHMsIHN0eWxl
UmVzb2x2ZXJVcGRhdGVUeXBlKTsKLQotICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRM
aXN0Rm9yRmFzdExvb2t1cCA9IG51bGxwdHI7Ci0gICAgbV9hY3RpdmVTdHlsZVNoZWV0cy5zd2Fw
KGFjdGl2ZUNTU1N0eWxlU2hlZXRzKTsKLSAgICBtX3N0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExp
c3Quc3dhcChhY3RpdmVTdHlsZVNoZWV0cyk7Ci0KLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmFjdGl2ZVN0eWxlU2hlZXRzVXBkYXRlZChtX2RvY3VtZW50KTsKLQotICAgIGZvciAoY29u
c3QgYXV0byYgc2hlZXQgOiBtX2FjdGl2ZVN0eWxlU2hlZXRzKSB7Ci0gICAgICAgIGlmIChzaGVl
dC0+Y29udGVudHMoKS51c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KCkpCi0gICAgICAgICAgICBt
X3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChyZXF1
aXJlc0Z1bGxTdHlsZVJlY2FsYykgewotICAgICAgICBpZiAobV9zaGFkb3dSb290KSB7Ci0gICAg
ICAgICAgICBmb3IgKGF1dG8mIHNoYWRvd0NoaWxkIDogY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4o
Km1fc2hhZG93Um9vdCkpCi0gICAgICAgICAgICAgICAgc2hhZG93Q2hpbGQuc2V0TmVlZHNTdHls
ZVJlY2FsYygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZG9jdW1lbnQuc2NoZWR1
bGVGb3JjZWRTdHlsZVJlY2FsYygpOwotICAgIH0KLX0KLQotdm9pZCBBdXRob3JTdHlsZVNoZWV0
czo6dXBkYXRlU3R5bGVSZXNvbHZlcihWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgYWN0
aXZlU3R5bGVTaGVldHMsIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIHVwZGF0ZVR5cGUpCi17Ci0g
ICAgaWYgKHVwZGF0ZVR5cGUgPT0gUmVjb25zdHJ1Y3QpIHsKLSAgICAgICAgaWYgKG1fc2hhZG93
Um9vdCkKLSAgICAgICAgICAgIG1fc2hhZG93Um9vdC0+cmVzZXRTdHlsZVJlc29sdmVyKCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZG9jdW1lbnQuY2xlYXJTdHlsZVJlc29sdmVyKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXV0byYgc3R5bGVSZXNvbHZlciA9IHRoaXMt
PnN0eWxlUmVzb2x2ZXIoKTsKLQotICAgIGlmICh1cGRhdGVUeXBlID09IFJlc2V0KSB7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXIucnVsZVNldHMoKS5yZXNldEF1dGhvclN0eWxlKCk7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXIuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoYWN0aXZlU3R5bGVTaGVldHMp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh1cGRhdGVUeXBlID09IEFkZGl0aXZlKTsK
LSAgICAgICAgdW5zaWduZWQgZmlyc3ROZXdJbmRleCA9IG1fYWN0aXZlU3R5bGVTaGVldHMuc2l6
ZSgpOwotICAgICAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBuZXdTdHlsZVNoZWV0
czsKLSAgICAgICAgbmV3U3R5bGVTaGVldHMuYXBwZW5kUmFuZ2UoYWN0aXZlU3R5bGVTaGVldHMu
YmVnaW4oKSArIGZpcnN0TmV3SW5kZXgsIGFjdGl2ZVN0eWxlU2hlZXRzLmVuZCgpKTsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhuZXdTdHlsZVNoZWV0cyk7
Ci0gICAgfQotCi0gICAgaWYgKCFtX3NoYWRvd1Jvb3QpIHsKLSAgICAgICAgYXV0byYgdXNlckFn
ZW50U2hhZG93VHJlZVN0eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LnVzZXJBZ2VudFNoYWRvd1Ry
ZWVTdHlsZVJlc29sdmVyKCk7Ci0gICAgICAgIHVzZXJBZ2VudFNoYWRvd1RyZWVTdHlsZVJlc29s
dmVyLnJ1bGVTZXRzKCkucmVzZXRBdXRob3JTdHlsZSgpOwotICAgICAgICBhdXRvJiBhdXRob3JS
dWxlU2V0ID0gc3R5bGVSZXNvbHZlci5ydWxlU2V0cygpLmF1dGhvclN0eWxlKCk7Ci0gICAgICAg
IGlmIChhdXRob3JSdWxlU2V0Lmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpKQotICAgICAg
ICAgICAgdXNlckFnZW50U2hhZG93VHJlZVN0eWxlUmVzb2x2ZXIucnVsZVNldHMoKS5hdXRob3JT
dHlsZSgpLmNvcHlTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXNGcm9tKGF1dGhvclJ1bGVTZXQpOwot
ICAgIH0KLX0KLQotY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gQXV0aG9yU3R5
bGVTaGVldHM6OmFjdGl2ZVN0eWxlU2hlZXRzRm9ySW5zcGVjdG9yKCkgY29uc3QKLXsKLSAgICBW
ZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiByZXN1bHQ7Ci0KLSAgICByZXN1bHQuYXBwZW5k
VmVjdG9yKG1fZG9jdW1lbnQuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5pbmplY3RlZEF1dGhvclN0
eWxlU2hlZXRzKCkpOwotICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IobV9kb2N1bWVudC5leHRlbnNp
b25TdHlsZVNoZWV0cygpLmF1dGhvclN0eWxlU2hlZXRzRm9yVGVzdGluZygpKTsKLQotICAgIGZv
ciAoYXV0byYgc3R5bGVTaGVldCA6IG1fc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdCkgewot
ICAgICAgICBpZiAoIWlzPENTU1N0eWxlU2hlZXQ+KCpzdHlsZVNoZWV0KSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIENTU1N0eWxlU2hlZXQmIHNoZWV0ID0gZG93bmNhc3Q8Q1NT
U3R5bGVTaGVldD4oKnN0eWxlU2hlZXQpOwotICAgICAgICBpZiAoc2hlZXQuZGlzYWJsZWQoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoJnNoZWV0KTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIEF1dGhvclN0eWxlU2hlZXRz
OjphY3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5zKGNvbnN0IENTU1N0eWxlU2hlZXQqIHNoZWV0KSBj
b25zdAotewotICAgIGlmICghbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0
TG9va3VwKSB7Ci0gICAgICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFz
dExvb2t1cCA9IHN0ZDo6bWFrZV91bmlxdWU8SGFzaFNldDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4+
KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYWN0aXZlU3R5bGVTaGVldCA6IG1fYWN0aXZlU3R5bGVT
aGVldHMpCi0gICAgICAgICAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZh
c3RMb29rdXAtPmFkZChhY3RpdmVTdHlsZVNoZWV0LmdldCgpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cC0+Y29udGFpbnMo
c2hlZXQpOwotfQotCi12b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpmbHVzaFBlbmRpbmdVcGRhdGUo
KQotewotICAgIGlmICghbV9wZW5kaW5nVXBkYXRlVHlwZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGF1dG8gdXBkYXRlVHlwZSA9ICptX3BlbmRpbmdVcGRhdGVUeXBlOwotCi0gICAgY2xlYXJQZW5k
aW5nVXBkYXRlKCk7Ci0KLSAgICB1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyh1cGRhdGVUeXBlKTsK
LX0KLQotdm9pZCBBdXRob3JTdHlsZVNoZWV0czo6Y2xlYXJQZW5kaW5nVXBkYXRlKCkKLXsKLSAg
ICBtX3BlbmRpbmdVcGRhdGVUaW1lci5zdG9wKCk7Ci0gICAgbV9wZW5kaW5nVXBkYXRlVHlwZSA9
IHsgfTsKLX0KLQotdm9pZCBBdXRob3JTdHlsZVNoZWV0czo6c2NoZWR1bGVBY3RpdmVTZXRVcGRh
dGUoKQotewotICAgIGlmIChtX3NoYWRvd1Jvb3QpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gZmx1c2ggdXBkYXRlcyByZWN1cnNpdmVseSB0byBzdXBwb3J0IGFzeW5jaHJvbm91cyB1
cGRhdGVzIGluIHNoYWRvdyB0cmVlcy4KLSAgICAgICAgZGlkQ2hhbmdlQ2FuZGlkYXRlc0ZvckFj
dGl2ZVNldCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX3BlbmRpbmdVcGRh
dGVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX3BlbmRpbmdV
cGRhdGVUeXBlKQotICAgICAgICBtX3BlbmRpbmdVcGRhdGVUeXBlID0gVXBkYXRlVHlwZTo6QWN0
aXZlU2V0OwotICAgIG1fcGVuZGluZ1VwZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQot
dm9pZCBBdXRob3JTdHlsZVNoZWV0czo6ZGlkQ2hhbmdlQ2FuZGlkYXRlc0ZvckFjdGl2ZVNldCgp
Ci17Ci0gICAgYXV0byB1cGRhdGVUeXBlID0gbV9wZW5kaW5nVXBkYXRlVHlwZS52YWx1ZU9yKFVw
ZGF0ZVR5cGU6OkFjdGl2ZVNldCk7Ci0gICAgY2xlYXJQZW5kaW5nVXBkYXRlKCk7Ci0gICAgdXBk
YXRlQWN0aXZlU3R5bGVTaGVldHModXBkYXRlVHlwZSk7Ci19Ci0KLXZvaWQgQXV0aG9yU3R5bGVT
aGVldHM6OmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpCi17Ci0gICAgY2xlYXJQ
ZW5kaW5nVXBkYXRlKCk7Ci0gICAgdXBkYXRlQWN0aXZlU3R5bGVTaGVldHMoVXBkYXRlVHlwZTo6
Q29udGVudHNPckludGVycHJldGF0aW9uKTsKLX0KLQotdm9pZCBBdXRob3JTdHlsZVNoZWV0czo6
cGVuZGluZ1VwZGF0ZVRpbWVyRmlyZWQoKQotewotICAgIGZsdXNoUGVuZGluZ1VwZGF0ZSgpOwot
fQotCi19CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9yU3R5
bGVTaGVldHMuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCww
ICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0F1dGhvclN0eWxlU2hlZXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0F1dGhvclN0eWxlU2hlZXRzLmgJKHJldmlzaW9uIDIwNjg4MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5oCShub25leGlzdGVudCkKQEAgLTEsMTQ0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKLSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2Rl
Lm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9y
ZykKLSAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAsIDIwMTItMjAxMywgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLykKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBBdXRob3JTdHlsZVNoZWV0c19oCi0jZGVm
aW5lIEF1dGhvclN0eWxlU2hlZXRzX2gKLQotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8
bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFz
cyBEb2N1bWVudDsKLWNsYXNzIE5vZGU7Ci1jbGFzcyBTdHlsZVJlc29sdmVyOwotY2xhc3MgU3R5
bGVTaGVldDsKLWNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKLWNsYXNzIFN0eWxlU2hlZXRMaXN0
OwotY2xhc3MgU2hhZG93Um9vdDsKLWNsYXNzIFRyZWVTY29wZTsKLQotY2xhc3MgQXV0aG9yU3R5
bGVTaGVldHMgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4
cGxpY2l0IEF1dGhvclN0eWxlU2hlZXRzKERvY3VtZW50Jik7Ci0gICAgZXhwbGljaXQgQXV0aG9y
U3R5bGVTaGVldHMoU2hhZG93Um9vdCYpOwotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0Pj4mIGFjdGl2ZVN0eWxlU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVT
dHlsZVNoZWV0czsgfQotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4mIHN0
eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3QoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXRz
Rm9yU3R5bGVTaGVldExpc3Q7IH0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+PiBhY3RpdmVTdHlsZVNoZWV0c0Zvckluc3BlY3RvcigpIGNvbnN0OwotCi0gICAgdm9pZCBh
ZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShOb2RlJiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwot
ICAgIHZvaWQgcmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYpOwotCi0gICAgU3Ry
aW5nIHByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wcmVmZXJy
ZWRTdHlsZXNoZWV0U2V0TmFtZTsgfQotICAgIFN0cmluZyBzZWxlY3RlZFN0eWxlc2hlZXRTZXRO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lOyB9Ci0gICAg
dm9pZCBzZXRQcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsg
bV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSA9IG5hbWU7IH0KLSAgICB2b2lkIHNldFNlbGVj
dGVkU3R5bGVzaGVldFNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fc2VsZWN0ZWRTdHls
ZXNoZWV0U2V0TmFtZSA9IG5hbWU7IH0KLQotICAgIHZvaWQgYWRkUGVuZGluZ1NoZWV0KCkgeyBt
X3BlbmRpbmdTdHlsZVNoZWV0Q291bnQrKzsgfQotICAgIGVudW0gUmVtb3ZlUGVuZGluZ1NoZWV0
Tm90aWZpY2F0aW9uVHlwZSB7Ci0gICAgICAgIFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVk
aWF0ZWx5LAotICAgICAgICBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlMYXRlcgotICAgIH07Ci0g
ICAgdm9pZCByZW1vdmVQZW5kaW5nU2hlZXQoUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZpY2F0aW9u
VHlwZSA9IFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5KTsKLQotICAgIGJvb2wg
aGFzUGVuZGluZ1NoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ1N0eWxlU2hlZXRDb3Vu
dCA+IDA7IH0KLQotICAgIGJvb2wgdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eSgpIHsgcmV0dXJu
IG1fdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eTsgfQotCi0gICAgYm9vbCBhY3RpdmVTdHlsZVNo
ZWV0c0NvbnRhaW5zKGNvbnN0IENTU1N0eWxlU2hlZXQqKSBjb25zdDsKLQotICAgIHZvaWQgZGlk
Q2hhbmdlQ2FuZGlkYXRlc0ZvckFjdGl2ZVNldCgpOwotICAgIHZvaWQgc2NoZWR1bGVBY3RpdmVT
ZXRVcGRhdGUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpZENoYW5nZUNvbnRlbnRzT3JJ
bnRlcnByZXRhdGlvbigpOwotCi0gICAgYm9vbCBoYXNQZW5kaW5nVXBkYXRlKCkgY29uc3QgeyBy
ZXR1cm4gISFtX3BlbmRpbmdVcGRhdGVUeXBlOyB9Ci0gICAgdm9pZCBmbHVzaFBlbmRpbmdVcGRh
dGUoKTsKLQotICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIoKTsKLSAgICBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVySWZFeGlzdHMoKTsKLQotICAgIHN0YXRpYyBBdXRob3JTdHls
ZVNoZWV0cyYgZm9yTm9kZShOb2RlJik7Ci0KLXByaXZhdGU6Ci0gICAgZW51bSBjbGFzcyBVcGRh
dGVUeXBlIHsgQWN0aXZlU2V0LCBDb250ZW50c09ySW50ZXJwcmV0YXRpb24gfTsKLSAgICB2b2lk
IHVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKFVwZGF0ZVR5cGUpOwotCi0gICAgdm9pZCBjb2xsZWN0
QWN0aXZlU3R5bGVTaGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4mKTsKLQotICAgIGVu
dW0gU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgewotICAgICAgICBSZWNvbnN0cnVjdCwKLSAgICAg
ICAgUmVzZXQsCi0gICAgICAgIEFkZGl0aXZlCi0gICAgfTsKLSAgICBTdHlsZVJlc29sdmVyVXBk
YXRlVHlwZSBhbmFseXplU3R5bGVTaGVldENoYW5nZShjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0
eWxlU2hlZXQ+PiYgbmV3U3R5bGVzaGVldHMsIGJvb2wmIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxj
KTsKLSAgICB2b2lkIHVwZGF0ZVN0eWxlUmVzb2x2ZXIoVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0Pj4mLCBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSk7Ci0KLSAgICB2b2lkIHBlbmRpbmdVcGRh
dGVUaW1lckZpcmVkKCk7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdVcGRhdGUoKTsKLQotICAgIERv
Y3VtZW50JiBtX2RvY3VtZW50OwotICAgIFNoYWRvd1Jvb3QqIG1fc2hhZG93Um9vdCB7IG51bGxw
dHIgfTsKLQotICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+IG1fc3R5bGVTaGVldHNGb3JT
dHlsZVNoZWV0TGlzdDsKLSAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2FjdGl2
ZVN0eWxlU2hlZXRzOwotCi0gICAgVGltZXIgbV9wZW5kaW5nVXBkYXRlVGltZXI7Ci0KLSAgICAv
LyBUaGlzIGlzIGEgbWlycm9yIG9mIG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMgdGhhdCBnZXRz
IHBvcHVsYXRlZCBvbiBkZW1hbmQgZm9yIGFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMoKS4KLSAg
ICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4g
bV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwOwotCi0gICAgLy8g
VHJhY2sgdGhlIG51bWJlciBvZiBjdXJyZW50bHkgbG9hZGluZyB0b3AtbGV2ZWwgc3R5bGVzaGVl
dHMgbmVlZGVkIGZvciByZW5kZXJpbmcuCi0gICAgLy8gU2hlZXRzIGxvYWRlZCB1c2luZyB0aGUg
QGltcG9ydCBkaXJlY3RpdmUgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGlzIGNvdW50LgotICAgIC8v
IFdlIHVzZSB0aGlzIGNvdW50IG9mIHBlbmRpbmcgc2hlZXRzIHRvIGRldGVjdCB3aGVuIHdlIGNh
biBiZWdpbiBhdHRhY2hpbmcKLSAgICAvLyBlbGVtZW50cyBhbmQgd2hlbiBpdCBpcyBzYWZlIHRv
IGV4ZWN1dGUgc2NyaXB0cy4KLSAgICBpbnQgbV9wZW5kaW5nU3R5bGVTaGVldENvdW50IHsgMCB9
OwotICAgIGJvb2wgbV9kaWRVcGRhdGVBY3RpdmVTdHlsZVNoZWV0cyB7IGZhbHNlIH07Ci0KLSAg
ICBPcHRpb25hbDxVcGRhdGVUeXBlPiBtX3BlbmRpbmdVcGRhdGVUeXBlOwotCi0gICAgTGlzdEhh
c2hTZXQ8Tm9kZSo+IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzOwotCi0gICAgU3RyaW5nIG1f
cHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWU7Ci0gICAgU3RyaW5nIG1fc2VsZWN0ZWRTdHlsZXNo
ZWV0U2V0TmFtZTsKLQotICAgIGJvb2wgbV91c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5IHsgZmFs
c2UgfTsKLX07Ci0KLX0KLQotI2VuZGlmCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gMjA2ODc5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIK
ICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQXR0ci5oIgotI2lu
Y2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCiAj
aW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJhdGlv
bi5oIgpAQCAtMTY4LDYgKzE2Nyw3IEBACiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAj
aW5jbHVkZSAiU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250
ZW50cy5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiU3R5bGVUcmVl
UmVzb2x2ZXIuaCIKQEAgLTQ1MSw3ICs0NTEsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUq
IGZyYW1lLCBjb25zdCBVCiAgICAgLCBtX2RvbVRyZWVWZXJzaW9uKCsrc19nbG9iYWxUcmVlVmVy
c2lvbikKICAgICAsIG1fbGlzdGVuZXJUeXBlcygwKQogICAgICwgbV9tdXRhdGlvbk9ic2VydmVy
VHlwZXMoMCkKLSAgICAsIG1fYXV0aG9yU3R5bGVTaGVldHMoc3RkOjptYWtlX3VuaXF1ZTxBdXRo
b3JTdHlsZVNoZWV0cz4oKnRoaXMpKQorICAgICwgbV9zdHlsZVNjb3BlKHN0ZDo6bWFrZV91bmlx
dWU8U3R5bGU6OlNjb3BlPigqdGhpcykpCiAgICAgLCBtX2V4dGVuc2lvblN0eWxlU2hlZXRzKHN0
ZDo6bWFrZV91bmlxdWU8RXh0ZW5zaW9uU3R5bGVTaGVldHM+KCp0aGlzKSkKICAgICAsIG1fdmlz
aXRlZExpbmtTdGF0ZShzdGQ6Om1ha2VfdW5pcXVlPFZpc2l0ZWRMaW5rU3RhdGU+KCp0aGlzKSkK
ICAgICAsIG1fdmlzdWFsbHlPcmRlcmVkKGZhbHNlKQpAQCAtMTM1NCw3ICsxMzU0LDcgQEAgdm9p
ZCBEb2N1bWVudDo6c2V0Q29udGVudExhbmd1YWdlKGNvbnN0IAogICAgIG1fY29udGVudExhbmd1
YWdlID0gbGFuZ3VhZ2U7CiAKICAgICAvLyBSZWNhbGN1bGF0ZSBzdHlsZSBzbyBsYW5ndWFnZSBp
cyB1c2VkIHdoZW4gc2VsZWN0aW5nIHRoZSBpbml0aWFsIGZvbnQuCi0gICAgbV9hdXRob3JTdHls
ZVNoZWV0cy0+ZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CisgICAgbV9zdHls
ZVNjb3BlLT5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKIH0KIAogdm9pZCBE
b2N1bWVudDo6c2V0WE1MVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpAQCAtMTgxMiw3ICsxODEyLDcgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGUo
U3R5bGU6OkNoYW5nZQogICAgIC8vIHJlLWF0dGFjaGluZyBvdXIgY29udGFpbmluZyBpZnJhbWUs
IHdoaWNoIHdoZW4gYXNrZWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmlzVVJMQWxsb3dlZAogICAg
IC8vIGhpdHMgYSBudWxsLWRlcmVmZXJlbmNlIGR1ZSB0byBzZWN1cml0eSBjb2RlIGFsd2F5cyBh
c3N1bWluZyB0aGUgZG9jdW1lbnQgaGFzIGEgU2VjdXJpdHlPcmlnaW4uCiAKLSAgICBhdXRob3JT
dHlsZVNoZWV0cygpLmZsdXNoUGVuZGluZ1VwZGF0ZSgpOworICAgIHN0eWxlU2NvcGUoKS5mbHVz
aFBlbmRpbmdVcGRhdGUoKTsKIAogICAgIGZyYW1lVmlldy53aWxsUmVjYWxjU3R5bGUoKTsKIApA
QCAtMTg5NSw3ICsxODk1LDcgQEAgYm9vbCBEb2N1bWVudDo6bmVlZHNTdHlsZVJlY2FsYygpIGNv
bnN0CiAgICAgaWYgKHBhZ2VDYWNoZVN0YXRlKCkgIT0gTm90SW5QYWdlQ2FjaGUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtX3BlbmRpbmdTdHlsZVJlY2FsY1Nob3VsZEZv
cmNlIHx8IGNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IGF1dGhvclN0eWxlU2hlZXRzKCkuaGFz
UGVuZGluZ1VwZGF0ZSgpOworICAgIHJldHVybiBtX3BlbmRpbmdTdHlsZVJlY2FsY1Nob3VsZEZv
cmNlIHx8IGNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IHN0eWxlU2NvcGUoKS5oYXNQZW5kaW5n
VXBkYXRlKCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVN0eWxlSWZOZWVkZWQoKQpAQCAt
MTkwNiw3ICsxOTA2LDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlU3R5bGVJZk5lZWRlZCgpCiAg
ICAgaWYgKCF2aWV3KCkgfHwgdmlldygpLT5pc0luUmVuZGVyVHJlZUxheW91dCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRob3JTdHlsZVNoZWV0cygpLmZsdXNoUGVuZGluZ1VwZGF0ZSgp
OworICAgIHN0eWxlU2NvcGUoKS5mbHVzaFBlbmRpbmdVcGRhdGUoKTsKIAogICAgIGlmICghbmVl
ZHNTdHlsZVJlY2FsYygpKQogICAgICAgICByZXR1cm47CkBAIC0xOTYwLDcgKzE5NjAsNyBAQCB2
b2lkIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nCiAgICAgICAgIEhUTUxFbGVt
ZW50KiBib2R5RWxlbWVudCA9IGJvZHlPckZyYW1lc2V0KCk7CiAgICAgICAgIGlmIChib2R5RWxl
bWVudCAmJiAhYm9keUVsZW1lbnQtPnJlbmRlcmVyKCkgJiYgbV9wZW5kaW5nU2hlZXRMYXlvdXQg
PT0gTm9MYXlvdXRXaXRoUGVuZGluZ1NoZWV0cykgewogICAgICAgICAgICAgbV9wZW5kaW5nU2hl
ZXRMYXlvdXQgPSBEaWRMYXlvdXRXaXRoUGVuZGluZ1NoZWV0czsKLSAgICAgICAgICAgIGF1dGhv
clN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CisgICAg
ICAgICAgICBzdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7
CiAgICAgICAgICAgICByZWNhbGNTdHlsZShTdHlsZTo6Rm9yY2UpOwogICAgICAgICB9IGVsc2Ug
aWYgKG1faGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSkKICAgICAgICAgICAgIC8vIElmIG5l
dyBub2RlcyBoYXZlIGJlZW4gYWRkZWQgb3Igc3R5bGUgcmVjYWxjIGhhcyBiZWVuIGRvbmUgd2l0
aCBzdHlsZSBzaGVldHMgc3RpbGwgcGVuZGluZywgc29tZSBub2RlcyAKQEAgLTIxNDIsNyArMjE0
Miw3IEBAIHZvaWQgRG9jdW1lbnQ6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWwKIHZvaWQgRG9j
dW1lbnQ6OmNyZWF0ZVN0eWxlUmVzb2x2ZXIoKQogewogICAgIG1fc3R5bGVSZXNvbHZlciA9IHN0
ZDo6bWFrZV91bmlxdWU8U3R5bGVSZXNvbHZlcj4oKnRoaXMpOwotICAgIG1fc3R5bGVSZXNvbHZl
ci0+YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoYXV0aG9yU3R5bGVTaGVldHMoKS5hY3RpdmVTdHls
ZVNoZWV0cygpKTsKKyAgICBtX3N0eWxlUmVzb2x2ZXItPmFwcGVuZEF1dGhvclN0eWxlU2hlZXRz
KHN0eWxlU2NvcGUoKS5hY3RpdmVTdHlsZVNoZWV0cygpKTsKIH0KIAogU3R5bGVSZXNvbHZlciYg
RG9jdW1lbnQ6OnVzZXJBZ2VudFNoYWRvd1RyZWVTdHlsZVJlc29sdmVyKCkKQEAgLTMwODUsNyAr
MzA4NSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZUFsbFBlbmRpbmdTdHlsZXMKIHsKICAg
ICBtX25lZWRzTm90aWZ5UmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hlZXQgPSBmYWxzZTsKIAotICAg
IGF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ2FuZGlkYXRlc0ZvckFjdGl2ZVNldCgpOwor
ICAgIHN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDYW5kaWRhdGVzRm9yQWN0aXZlU2V0KCk7CiAKICAg
ICBpZiAobV9wZW5kaW5nU2hlZXRMYXlvdXQgPT0gRGlkTGF5b3V0V2l0aFBlbmRpbmdTaGVldHMp
IHsKICAgICAgICAgbV9wZW5kaW5nU2hlZXRMYXlvdXQgPSBJZ25vcmVMYXlvdXRXaXRoUGVuZGlu
Z1NoZWV0czsKQEAgLTMxMDgsOSArMzEwOCw5IEBAIGJvb2wgRG9jdW1lbnQ6OnVzZXNTdHlsZUJh
c2VkRWRpdGFiaWxpdHkKICAgICBBU1NFUlQoIW1fcmVuZGVyVmlldyB8fCAhbV9yZW5kZXJWaWV3
LT5mcmFtZVZpZXcoKS5pc1BhaW50aW5nKCkpOwogICAgIEFTU0VSVCghbV9pblN0eWxlUmVjYWxj
KTsKIAotICAgIGF1dG8mIGF1dGhvclNoZWV0cyA9IGNvbnN0X2Nhc3Q8QXV0aG9yU3R5bGVTaGVl
dHMmPihhdXRob3JTdHlsZVNoZWV0cygpKTsKLSAgICBhdXRob3JTaGVldHMuZmx1c2hQZW5kaW5n
VXBkYXRlKCk7Ci0gICAgcmV0dXJuIGF1dGhvclNoZWV0cy51c2VzU3R5bGVCYXNlZEVkaXRhYmls
aXR5KCk7CisgICAgYXV0byYgc3R5bGVTY29wZSA9IGNvbnN0X2Nhc3Q8U3R5bGU6OlNjb3BlJj4o
dGhpcy0+c3R5bGVTY29wZSgpKTsKKyAgICBzdHlsZVNjb3BlLmZsdXNoUGVuZGluZ1VwZGF0ZSgp
OworICAgIHJldHVybiBzdHlsZVNjb3BlLnVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKTsKIH0K
IAogdm9pZCBEb2N1bWVudDo6c2V0SGFzRWxlbWVudFVzaW5nU3R5bGVCYXNlZEVkaXRhYmlsaXR5
KCkKQEAgLTMxNTYsOSArMzE1Niw5IEBAIHZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NIdHRwRXF1aXYo
Y29uc3QgU3QKICAgICAgICAgLy8gRm9yIG1vcmUgaW5mbywgc2VlIHRoZSB0ZXN0IGF0OgogICAg
ICAgICAvLyBodHRwOi8vd3d3LmhpeGllLmNoL3Rlc3RzL2V2aWwvY3NzL2ltcG9ydC9tYWluL3By
ZWZlcnJlZC5odG1sCiAgICAgICAgIC8vIC1kd2gKLSAgICAgICAgYXV0aG9yU3R5bGVTaGVldHMo
KS5zZXRTZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lKGNvbnRlbnQpOwotICAgICAgICBhdXRob3JT
dHlsZVNoZWV0cygpLnNldFByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lKGNvbnRlbnQpOwotICAg
ICAgICBhdXRob3JTdHlsZVNoZWV0cygpLmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlv
bigpOworICAgICAgICBzdHlsZVNjb3BlKCkuc2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZShj
b250ZW50KTsKKyAgICAgICAgc3R5bGVTY29wZSgpLnNldFByZWZlcnJlZFN0eWxlc2hlZXRTZXRO
YW1lKGNvbnRlbnQpOworICAgICAgICBzdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPcklu
dGVycHJldGF0aW9uKCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBIVFRQSGVhZGVyTmFt
ZTo6UmVmcmVzaDogewpAQCAtMzQ1MiwxOCArMzQ1MiwxOCBAQCBTdHlsZVNoZWV0TGlzdCYgRG9j
dW1lbnQ6OnN0eWxlU2hlZXRzKCkKIAogU3RyaW5nIERvY3VtZW50OjpwcmVmZXJyZWRTdHlsZXNo
ZWV0U2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gYXV0aG9yU3R5bGVTaGVldHMoKS5wcmVmZXJy
ZWRTdHlsZXNoZWV0U2V0TmFtZSgpOworICAgIHJldHVybiBzdHlsZVNjb3BlKCkucHJlZmVycmVk
U3R5bGVzaGVldFNldE5hbWUoKTsKIH0KIAogU3RyaW5nIERvY3VtZW50OjpzZWxlY3RlZFN0eWxl
c2hlZXRTZXQoKSBjb25zdAogewotICAgIHJldHVybiBhdXRob3JTdHlsZVNoZWV0cygpLnNlbGVj
dGVkU3R5bGVzaGVldFNldE5hbWUoKTsKKyAgICByZXR1cm4gc3R5bGVTY29wZSgpLnNlbGVjdGVk
U3R5bGVzaGVldFNldE5hbWUoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0U2VsZWN0ZWRTdHls
ZXNoZWV0U2V0KGNvbnN0IFN0cmluZyYgYVN0cmluZykKIHsKLSAgICBhdXRob3JTdHlsZVNoZWV0
cygpLnNldFNlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUoYVN0cmluZyk7Ci0gICAgYXV0aG9yU3R5
bGVTaGVldHMoKS5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKKyAgICBzdHls
ZVNjb3BlKCkuc2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZShhU3RyaW5nKTsKKyAgICBzdHls
ZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CiB9CiAKIHZvaWQg
RG9jdW1lbnQ6OmV2YWx1YXRlTWVkaWFRdWVyeUxpc3QoKQpAQCAtNjY2NSw3ICs2NjY1LDcgQEAg
dm9pZCBEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjbwogCiBib29sIERvY3VtZW50
OjpoYXZlU3R5bGVzaGVldHNMb2FkZWQoKSBjb25zdAogewotICAgIHJldHVybiAhYXV0aG9yU3R5
bGVTaGVldHMoKS5oYXNQZW5kaW5nU2hlZXRzKCkgfHwgbV9pZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHM7CisgICAgcmV0dXJuICFzdHlsZVNjb3BlKCkuaGFzUGVuZGluZ1NoZWV0cygpIHx8IG1faWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzOwogfQogCiBMb2NhbGUmIERvY3VtZW50OjpnZXRDYWNoZWRM
b2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAkocmV2aXNpb24gMjA2ODc5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBBWE9iamVjdENhY2hlOwogY2xhc3MgQXR0cjsKLWNsYXNzIEF1dGhvclN0eWxlU2hlZXRzOwog
Y2xhc3MgQ0RBVEFTZWN0aW9uOwogY2xhc3MgQ1NTRm9udFNlbGVjdG9yOwogY2xhc3MgQ1NTU3R5
bGVEZWNsYXJhdGlvbjsKQEAgLTIyNCw2ICsyMjMsMTAgQEAgc3RydWN0IFRleHRBdXRvU2l6aW5n
VHJhaXRzIDogV1RGOjpHZW5lcgogY2xhc3MgTWVkaWFTZXNzaW9uOwogI2VuZGlmCiAKK25hbWVz
cGFjZSBTdHlsZSB7CitjbGFzcyBTY29wZTsKK307CisKIGNvbnN0IHVpbnQ2NF90IEhUTUxNZWRp
YUVsZW1lbnRJbnZhbGlkSUQgPSAwOwogCiBlbnVtIFBhZ2VzaG93RXZlbnRQZXJzaXN0ZW5jZSB7
CkBAIC01MDQsOCArNTA3LDggQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3R5bGVT
aGVldExpc3QmIHN0eWxlU2hlZXRzKCk7CiAKLSAgICBBdXRob3JTdHlsZVNoZWV0cyYgYXV0aG9y
U3R5bGVTaGVldHMoKSB7IHJldHVybiAqbV9hdXRob3JTdHlsZVNoZWV0czsgfQotICAgIGNvbnN0
IEF1dGhvclN0eWxlU2hlZXRzJiBhdXRob3JTdHlsZVNoZWV0cygpIGNvbnN0IHsgcmV0dXJuICpt
X2F1dGhvclN0eWxlU2hlZXRzOyB9CisgICAgU3R5bGU6OlNjb3BlJiBzdHlsZVNjb3BlKCkgeyBy
ZXR1cm4gKm1fc3R5bGVTY29wZTsgfQorICAgIGNvbnN0IFN0eWxlOjpTY29wZSYgc3R5bGVTY29w
ZSgpIGNvbnN0IHsgcmV0dXJuICptX3N0eWxlU2NvcGU7IH0KICAgICBFeHRlbnNpb25TdHlsZVNo
ZWV0cyYgZXh0ZW5zaW9uU3R5bGVTaGVldHMoKSB7IHJldHVybiAqbV9leHRlbnNpb25TdHlsZVNo
ZWV0czsgfQogICAgIGNvbnN0IEV4dGVuc2lvblN0eWxlU2hlZXRzJiBleHRlbnNpb25TdHlsZVNo
ZWV0cygpIGNvbnN0IHsgcmV0dXJuICptX2V4dGVuc2lvblN0eWxlU2hlZXRzOyB9CiAKQEAgLTE0
NjksNyArMTQ3Miw3IEBAIHByaXZhdGU6CiAKICAgICBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBt
X211dGF0aW9uT2JzZXJ2ZXJUeXBlczsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxBdXRob3JTdHls
ZVNoZWV0cz4gbV9hdXRob3JTdHlsZVNoZWV0czsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3R5bGU6
OlNjb3BlPiBtX3N0eWxlU2NvcGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvblN0eWxl
U2hlZXRzPiBtX2V4dGVuc2lvblN0eWxlU2hlZXRzOwogICAgIFJlZlB0cjxTdHlsZVNoZWV0TGlz
dD4gbV9zdHlsZVNoZWV0TGlzdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lv
blN0eWxlU2hlZXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXh0ZW5z
aW9uU3R5bGVTaGVldHMuY3BwCShyZXZpc2lvbiAyMDY4NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uU3R5bGVTaGVldHMu
aCIKIAotI2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVT
aGVldC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVu
dC5oIgpAQCAtNDIsNiArNDEsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
KyNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgi
CiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJVc2VyQ29udGVudENvbnRy
b2xsZXIuaCIKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBFeHRlbnNpb25TdHlsZVNoZWV0czo6Y2xl
YXJQYWdlVXNlcgogewogICAgIGlmIChtX3BhZ2VVc2VyU2hlZXQpIHsKICAgICAgICAgbV9wYWdl
VXNlclNoZWV0ID0gbnVsbHB0cjsKLSAgICAgICAgbV9kb2N1bWVudC5hdXRob3JTdHlsZVNoZWV0
cygpLmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOworICAgICAgICBtX2RvY3Vt
ZW50LnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKICAg
ICB9CiB9CiAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBFeHRlbnNpb25TdHlsZVNoZWV0czo6dXBk
YXRlUGFnZVVzZQogewogICAgIGNsZWFyUGFnZVVzZXJTaGVldCgpOwogICAgIGlmIChwYWdlVXNl
clNoZWV0KCkpCi0gICAgICAgIG1fZG9jdW1lbnQuYXV0aG9yU3R5bGVTaGVldHMoKS5kaWRDaGFu
Z2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zdHlsZVNj
b3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CiB9CiAKIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBFeHRlbnNpb25TdHlsZVNoZWV0czo6aW5qZWN0
ZWRVc2VyU3R5bGVTaGVldHMoKSBjb25zdApAQCAtMTU1LDIxICsxNTUsMjEgQEAgdm9pZCBFeHRl
bnNpb25TdHlsZVNoZWV0czo6aW52YWxpZGF0ZUluagogICAgIG1faW5qZWN0ZWRTdHlsZVNoZWV0
Q2FjaGVWYWxpZCA9IGZhbHNlOwogICAgIGlmIChtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmlz
RW1wdHkoKSAmJiBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVldHMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgbV9kb2N1bWVudC5hdXRob3JTdHlsZVNoZWV0cygpLmRpZENoYW5nZUNv
bnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOworICAgIG1fZG9jdW1lbnQuc3R5bGVTY29wZSgpLmRp
ZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOwogfQogCiB2b2lkIEV4dGVuc2lvblN0
eWxlU2hlZXRzOjphZGRVc2VyU3R5bGVTaGVldChSZWY8U3R5bGVTaGVldENvbnRlbnRzPiYmIHVz
ZXJTaGVldCkKIHsKICAgICBBU1NFUlQodXNlclNoZWV0LmdldCgpLmlzVXNlclN0eWxlU2hlZXQo
KSk7CiAgICAgbV91c2VyU3R5bGVTaGVldHMuYXBwZW5kKENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShX
VEZNb3ZlKHVzZXJTaGVldCksIG1fZG9jdW1lbnQpKTsKLSAgICBtX2RvY3VtZW50LmF1dGhvclN0
eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CisgICAgbV9k
b2N1bWVudC5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7
CiB9CiAKIHZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OmFkZEF1dGhvclN0eWxlU2hlZXRGb3JU
ZXN0aW5nKFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYgYXV0aG9yU2hlZXQpCiB7CiAgICAgQVNT
RVJUKCFhdXRob3JTaGVldC5nZXQoKS5pc1VzZXJTdHlsZVNoZWV0KCkpOwogICAgIG1fYXV0aG9y
U3R5bGVTaGVldHNGb3JUZXN0aW5nLmFwcGVuZChDU1NTdHlsZVNoZWV0OjpjcmVhdGUoV1RGTW92
ZShhdXRob3JTaGVldCksIG1fZG9jdW1lbnQpKTsKLSAgICBtX2RvY3VtZW50LmF1dGhvclN0eWxl
U2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CisgICAgbV9kb2N1
bWVudC5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CiB9
CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpAQCAtMjAxLDcgKzIwMSw3IEBAIHZv
aWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6Om1heWJlQWRkQ29udGUKIAogdm9pZCBFeHRlbnNpb25T
dHlsZVNoZWV0czo6c3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lckZpcmVkKCkKIHsKLSAgICBtX2Rv
Y3VtZW50LmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0
aW9uKCk7CisgICAgbV9kb2N1bWVudC5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPcklu
dGVycHJldGF0aW9uKCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OmRldGFjaEZy
b21Eb2N1bWVudCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVTaGVldE93
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVTaGVl
dE93bmVyLmNwcAkocmV2aXNpb24gMjA2ODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0lubGlu
ZVN0eWxlU2hlZXRPd25lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEzICsyMSwxMyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklubGluZVN0eWxlU2hlZXRPd25lci5oIgog
Ci0jaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJp
dHlQb2xpY3kuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0Lmgi
CiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVE
b2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTdHls
ZVNjb3BlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5jbHVkZSAiVGV4
dE5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTUx
LDggKzUxLDggQEAgSW5saW5lU3R5bGVTaGVldE93bmVyOjp+SW5saW5lU3R5bGVTaGVldAogCiB2
b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoRWxlbWVudCYg
ZWxlbWVudCkKIHsKLSAgICBtX3N0eWxlU2hlZXRTY29wZSA9ICZBdXRob3JTdHlsZVNoZWV0czo6
Zm9yTm9kZShlbGVtZW50KTsKLSAgICBtX3N0eWxlU2hlZXRTY29wZS0+YWRkU3R5bGVTaGVldENh
bmRpZGF0ZU5vZGUoZWxlbWVudCwgbV9pc1BhcnNpbmdDaGlsZHJlbik7CisgICAgbV9zdHlsZVNj
b3BlID0gJlN0eWxlOjpTY29wZTo6Zm9yTm9kZShlbGVtZW50KTsKKyAgICBtX3N0eWxlU2NvcGUt
PmFkZFN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKGVsZW1lbnQsIG1faXNQYXJzaW5nQ2hpbGRyZW4p
OwogCiAgICAgaWYgKG1faXNQYXJzaW5nQ2hpbGRyZW4pCiAgICAgICAgIHJldHVybjsKQEAgLTYx
LDkgKzYxLDkgQEAgdm9pZCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6Omluc2VydGVkSW50bwogCiB2
b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6cmVtb3ZlZEZyb21Eb2N1bWVudChFbGVtZW50JiBl
bGVtZW50KQogewotICAgIGlmIChtX3N0eWxlU2hlZXRTY29wZSkgewotICAgICAgICBtX3N0eWxl
U2hlZXRTY29wZS0+cmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoZWxlbWVudCk7Ci0gICAg
ICAgIG1fc3R5bGVTaGVldFNjb3BlID0gbnVsbHB0cjsKKyAgICBpZiAobV9zdHlsZVNjb3BlKSB7
CisgICAgICAgIG1fc3R5bGVTY29wZS0+cmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoZWxl
bWVudCk7CisgICAgICAgIG1fc3R5bGVTY29wZSA9IG51bGxwdHI7CiAgICAgfQogICAgIGlmICht
X3NoZWV0KQogICAgICAgICBjbGVhclNoZWV0KCk7CkBAIC03NCw5ICs3NCw5IEBAIHZvaWQgSW5s
aW5lU3R5bGVTaGVldE93bmVyOjpjbGVhckRvY3VtZW4KICAgICBpZiAobV9zaGVldCkKICAgICAg
ICAgbV9zaGVldC0+Y2xlYXJPd25lck5vZGUoKTsKIAotICAgIGlmIChtX3N0eWxlU2hlZXRTY29w
ZSkgewotICAgICAgICBtX3N0eWxlU2hlZXRTY29wZS0+cmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0
ZU5vZGUoZWxlbWVudCk7Ci0gICAgICAgIG1fc3R5bGVTaGVldFNjb3BlID0gbnVsbHB0cjsKKyAg
ICBpZiAobV9zdHlsZVNjb3BlKSB7CisgICAgICAgIG1fc3R5bGVTY29wZS0+cmVtb3ZlU3R5bGVT
aGVldENhbmRpZGF0ZU5vZGUoZWxlbWVudCk7CisgICAgICAgIG1fc3R5bGVTY29wZSA9IG51bGxw
dHI7CiAgICAgfQogfQogCkBAIC0xMjQsOCArMTI0LDggQEAgdm9pZCBJbmxpbmVTdHlsZVNoZWV0
T3duZXI6OmNyZWF0ZVNoZWV0KAogICAgIEFTU0VSVChlbGVtZW50LmluRG9jdW1lbnQoKSk7CiAg
ICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudC5kb2N1bWVudCgpOwogICAgIGlmIChtX3No
ZWV0KSB7Ci0gICAgICAgIGlmIChtX3NoZWV0LT5pc0xvYWRpbmcoKSAmJiBtX3N0eWxlU2hlZXRT
Y29wZSkKLSAgICAgICAgICAgIG1fc3R5bGVTaGVldFNjb3BlLT5yZW1vdmVQZW5kaW5nU2hlZXQo
KTsKKyAgICAgICAgaWYgKG1fc2hlZXQtPmlzTG9hZGluZygpICYmIG1fc3R5bGVTY29wZSkKKyAg
ICAgICAgICAgIG1fc3R5bGVTY29wZS0+cmVtb3ZlUGVuZGluZ1NoZWV0KCk7CiAgICAgICAgIGNs
ZWFyU2hlZXQoKTsKICAgICB9CiAKQEAgLTE0OSw4ICsxNDksOCBAQCB2b2lkIElubGluZVN0eWxl
U2hlZXRPd25lcjo6Y3JlYXRlU2hlZXQoCiAgICAgaWYgKCFzY3JlZW5FdmFsLmV2YWx1YXRlKCpt
ZWRpYVF1ZXJpZXMpICYmICFwcmludEV2YWwuZXZhbHVhdGUoKm1lZGlhUXVlcmllcykpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChtX3N0eWxlU2hlZXRTY29wZSkKLSAgICAgICAgbV9zdHls
ZVNoZWV0U2NvcGUtPmFkZFBlbmRpbmdTaGVldCgpOworICAgIGlmIChtX3N0eWxlU2NvcGUpCisg
ICAgICAgIG1fc3R5bGVTY29wZS0+YWRkUGVuZGluZ1NoZWV0KCk7CiAKICAgICBtX2xvYWRpbmcg
PSB0cnVlOwogCkBAIC0xNzcsMTYgKzE3NywxNiBAQCBib29sIElubGluZVN0eWxlU2hlZXRPd25l
cjo6c2hlZXRMb2FkZWQoCiAgICAgaWYgKGlzTG9hZGluZygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAobV9zdHlsZVNoZWV0U2NvcGUpCi0gICAgICAgIG1fc3R5bGVTaGVldFNj
b3BlLT5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKKyAgICBpZiAobV9zdHlsZVNjb3BlKQorICAgICAg
ICBtX3N0eWxlU2NvcGUtPnJlbW92ZVBlbmRpbmdTaGVldCgpOwogCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpzdGFydExvYWRpbmdEeW5hbWljU2hl
ZXQoRWxlbWVudCYpCiB7Ci0gICAgaWYgKG1fc3R5bGVTaGVldFNjb3BlKQotICAgICAgICBtX3N0
eWxlU2hlZXRTY29wZS0+YWRkUGVuZGluZ1NoZWV0KCk7CisgICAgaWYgKG1fc3R5bGVTY29wZSkK
KyAgICAgICAgbV9zdHlsZVNjb3BlLT5hZGRQZW5kaW5nU2hlZXQoKTsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuaAkocmV2aXNpb24gMjA2
ODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNoaWxkcmVuQ2hh
bmdlZChFbGVtZW50Jik7CiAgICAgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oRWxlbWVudCYp
OwogCi0gICAgQXV0aG9yU3R5bGVTaGVldHMqIHN0eWxlU2hlZXRTY29wZSgpIHsgcmV0dXJuIG1f
c3R5bGVTaGVldFNjb3BlOyB9CisgICAgU3R5bGU6OlNjb3BlKiBzdHlsZVNjb3BlKCkgeyByZXR1
cm4gbV9zdHlsZVNjb3BlOyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVTaGVldChFbGVt
ZW50JiwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKQEAgLTYzLDcgKzYzLDcgQEAgcHJpdmF0ZToKICAg
ICBBdG9taWNTdHJpbmcgbV9jb250ZW50VHlwZTsKICAgICBBdG9taWNTdHJpbmcgbV9tZWRpYTsK
ICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zaGVldDsKLSAgICBBdXRob3JTdHlsZVNoZWV0
cyogbV9zdHlsZVNoZWV0U2NvcGUgeyBudWxscHRyIH07CisgICAgU3R5bGU6OlNjb3BlKiBtX3N0
eWxlU2NvcGUgeyBudWxscHRyIH07CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
UHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gMjA2ODc5KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24uaCIKIAotI2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVk
ZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKICNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgpAQCAtMzUsNiArMzQsNyBAQAogI2luY2x1
ZGUgIlhTTFN0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5oIiAvLyBm
b3IgcGFyc2VBdHRyaWJ1dGVzKCkKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKKyNpbmNsdWRlICJT
dHlsZVNjb3BlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTU5LDcgKzU5LDcgQEAgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjp+UHJv
Y2Vzc2luZ0luc3RydQogICAgICAgICBtX2NhY2hlZFNoZWV0LT5yZW1vdmVDbGllbnQoKnRoaXMp
OwogCiAgICAgaWYgKGluRG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS5hdXRob3JTdHls
ZVNoZWV0cygpLnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKCp0aGlzKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkucmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoKnRo
aXMpOwogfQogCiBTdHJpbmcgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpub2RlTmFtZSgpIGNvbnN0
CkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5
bGVTaAogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgbV9sb2FkaW5nID0g
dHJ1ZTsKLSAgICAgICAgICAgIGRvY3VtZW50KCkuYXV0aG9yU3R5bGVTaGVldHMoKS5hZGRQZW5k
aW5nU2hlZXQoKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuc3R5bGVTY29wZSgpLmFkZFBlbmRp
bmdTaGVldCgpOwogCiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgICAgICAgICBpZiAobV9pc1hTTCkg
ewpAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0
eWxlU2gKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFRoZSByZXF1ZXN0
IG1heSBoYXZlIGJlZW4gZGVuaWVkIGlmIChmb3IgZXhhbXBsZSkgdGhlIHN0eWxlc2hlZXQgaXMg
bG9jYWwgYW5kIHRoZSBkb2N1bWVudCBpcyByZW1vdGUuCiAgICAgICAgICAgICAgICAgbV9sb2Fk
aW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5hdXRob3JTdHlsZVNoZWV0
cygpLnJlbW92ZVBlbmRpbmdTaGVldCgpOworICAgICAgICAgICAgICAgIGRvY3VtZW50KCkuc3R5
bGVTY29wZSgpLnJlbW92ZVBlbmRpbmdTaGVldCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpp
c0xvYWRpbmcoKSAKIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpzaGVldExvYWRlZCgpCiB7
CiAgICAgaWYgKCFpc0xvYWRpbmcoKSkgewotICAgICAgICBkb2N1bWVudCgpLmF1dGhvclN0eWxl
U2hlZXRzKCkucmVtb3ZlUGVuZGluZ1NoZWV0KCk7CisgICAgICAgIGRvY3VtZW50KCkuc3R5bGVT
Y29wZSgpLnJlbW92ZVBlbmRpbmdTaGVldCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjUxLDcgKzI1MSw3IEBAIE5vZGU6Okluc2VydGlvbk5v
dGlmaWNhdGlvblJlcXVlc3QgUHJvY2UKICAgICBDaGFyYWN0ZXJEYXRhOjppbnNlcnRlZEludG8o
aW5zZXJ0aW9uUG9pbnQpOwogICAgIGlmICghaW5zZXJ0aW9uUG9pbnQuaW5Eb2N1bWVudCgpKQog
ICAgICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKLSAgICBkb2N1bWVudCgpLmF1dGhvclN0eWxl
U2hlZXRzKCkuYWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoKnRoaXMsIG1fY3JlYXRlZEJ5UGFy
c2VyKTsKKyAgICBkb2N1bWVudCgpLnN0eWxlU2NvcGUoKS5hZGRTdHlsZVNoZWV0Q2FuZGlkYXRl
Tm9kZSgqdGhpcywgbV9jcmVhdGVkQnlQYXJzZXIpOwogICAgIGNoZWNrU3R5bGVTaGVldCgpOwog
ICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwogfQpAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQgUHJv
Y2Vzc2luZ0luc3RydWN0aW9uOjpyZW1vdmVkRnJvbSgKICAgICBpZiAoIWluc2VydGlvblBvaW50
LmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGRvY3VtZW50KCkuYXV0
aG9yU3R5bGVTaGVldHMoKS5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSgqdGhpcyk7Cisg
ICAgZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkucmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUo
KnRoaXMpOwogCiAgICAgaWYgKG1fc2hlZXQpIHsKICAgICAgICAgQVNTRVJUKG1fc2hlZXQtPm93
bmVyTm9kZSgpID09IHRoaXMpOwpAQCAtMjcyLDEyICsyNzIsMTIgQEAgdm9pZCBQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb246OnJlbW92ZWRGcm9tKAogCiAgICAgaWYgKG1fbG9hZGluZykgewogICAgICAg
ICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAgICAgICAgZG9jdW1lbnQoKS5hdXRob3JTdHlsZVNoZWV0
cygpLnJlbW92ZVBlbmRpbmdTaGVldCgpOworICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2NvcGUo
KS5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSdyZSBpbiBkb2N1
bWVudCB0ZWFyZG93biwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBub3RpZmljYXRpb24g
b2Ygb3VyIHNoZWV0J3MgcmVtb3ZhbC4KICAgICBpZiAoZG9jdW1lbnQoKS5oYXNMaXZpbmdSZW5k
ZXJUcmVlKCkpCi0gICAgICAgIGRvY3VtZW50KCkuYXV0aG9yU3R5bGVTaGVldHMoKS5kaWRDaGFu
Z2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKKyAgICAgICAgZG9jdW1lbnQoKS5zdHlsZVNj
b3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CiB9CiAKIHZvaWQgUHJv
Y2Vzc2luZ0luc3RydWN0aW9uOjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TaGFkb3dSb290LmNwcAkocmV2aXNpb24gMjA2ODgwKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1NoYWRvd1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMyArMjgsMTMgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAKLSNpbmNsdWRlICJB
dXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRl
ICJFbGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTbG90QXNzaWdubWVudC5o
IgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCiAj
aW5jbHVkZSAibWFya3VwLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDcgKzQyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IFNhbWVTaXplQXNTaGFkb3dSb290IDogcHVi
bGljIERvY3VtZW50RnJhZ21lbnQsIHB1YmxpYyBUcmVlU2NvcGUgewogICAgIHVuc2lnbmVkIGNv
dW50ZXJzQW5kRmxhZ3NbMV07CiAgICAgdm9pZCogc3R5bGVSZXNvbHZlcjsKLSAgICB2b2lkKiBh
dXRob3JTdHlsZVNoZWV0czsKKyAgICB2b2lkKiBzdHlsZVNjb3BlOwogICAgIHZvaWQqIGhvc3Q7
CiAgICAgdm9pZCogc2xvdEFzc2lnbm1lbnQ7CiB9OwpAQCAtODgsOCArODgsOCBAQCBTdHlsZVJl
c29sdmVyJiBTaGFkb3dSb290OjpzdHlsZVJlc29sdmVyCiAgICAgaWYgKCFtX3N0eWxlUmVzb2x2
ZXIpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHNoYXJlIHN0eWxlIHJlc29sdmVyIHdp
dGggc2hhZG93IHJvb3RzIHRoYXQgaGF2ZSBpZGVudGljYWwgc3R5bGUuCiAgICAgICAgIG1fc3R5
bGVSZXNvbHZlciA9IHN0ZDo6bWFrZV91bmlxdWU8U3R5bGVSZXNvbHZlcj4oZG9jdW1lbnQoKSk7
Ci0gICAgICAgIGlmIChtX2F1dGhvclN0eWxlU2hlZXRzKQotICAgICAgICAgICAgbV9zdHlsZVJl
c29sdmVyLT5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhtX2F1dGhvclN0eWxlU2hlZXRzLT5hY3Rp
dmVTdHlsZVNoZWV0cygpKTsKKyAgICAgICAgaWYgKG1fc3R5bGVTY29wZSkKKyAgICAgICAgICAg
IG1fc3R5bGVSZXNvbHZlci0+YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMobV9zdHlsZVNjb3BlLT5h
Y3RpdmVTdHlsZVNoZWV0cygpKTsKICAgICB9CiAgICAgcmV0dXJuICptX3N0eWxlUmVzb2x2ZXI7
CiB9CkBAIC0xMDcsMTkgKzEwNywxOSBAQCB2b2lkIFNoYWRvd1Jvb3Q6OnJlc2V0U3R5bGVSZXNv
bHZlcigpCiAgICAgbV9zdHlsZVJlc29sdmVyID0gbnVsbHB0cjsKIH0KIAotQXV0aG9yU3R5bGVT
aGVldHMmIFNoYWRvd1Jvb3Q6OmF1dGhvclN0eWxlU2hlZXRzKCkKK1N0eWxlOjpTY29wZSYgU2hh
ZG93Um9vdDo6c3R5bGVTY29wZSgpCiB7Ci0gICAgaWYgKCFtX2F1dGhvclN0eWxlU2hlZXRzKQot
ICAgICAgICBtX2F1dGhvclN0eWxlU2hlZXRzID0gc3RkOjptYWtlX3VuaXF1ZTxBdXRob3JTdHls
ZVNoZWV0cz4oKnRoaXMpOwotICAgIHJldHVybiAqbV9hdXRob3JTdHlsZVNoZWV0czsKKyAgICBp
ZiAoIW1fc3R5bGVTY29wZSkKKyAgICAgICAgbV9zdHlsZVNjb3BlID0gc3RkOjptYWtlX3VuaXF1
ZTxTdHlsZTo6U2NvcGU+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fc3R5bGVTY29wZTsKIH0KIAog
dm9pZCBTaGFkb3dSb290Ojp1cGRhdGVTdHlsZSgpCiB7Ci0gICAgaWYgKCFtX2F1dGhvclN0eWxl
U2hlZXRzKQorICAgIGlmICghbV9zdHlsZVNjb3BlKQogICAgICAgICByZXR1cm47CiAgICAgLy8g
RklYTUU6IE1ha2Ugb3B0aW1pemVkIHVwZGF0ZWQgd29yay4KLSAgICBtX2F1dGhvclN0eWxlU2hl
ZXRzLT5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKKyAgICBtX3N0eWxlU2Nv
cGUtPmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOwogfQogCiBTdHJpbmcgU2hh
ZG93Um9vdDo6aW5uZXJIVE1MKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFk
b3dSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAko
cmV2aXNpb24gMjA2ODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEF1dGhvclN0eWxlU2hlZXRzOwogY2xhc3MgSFRNTFNsb3RFbGVtZW50OwogY2xhc3MgU2xv
dEFzc2lnbm1lbnQ7CiAKQEAgLTY0LDcgKzYzLDcgQEAgcHVibGljOgogCiAgICAgU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlcigpOwogICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXJJ
ZkV4aXN0cygpOwotICAgIEF1dGhvclN0eWxlU2hlZXRzJiBhdXRob3JTdHlsZVNoZWV0cygpOwor
ICAgIFN0eWxlOjpTY29wZSYgc3R5bGVTY29wZSgpOwogCiAgICAgdm9pZCB1cGRhdGVTdHlsZSgp
OwogICAgIHZvaWQgcmVzZXRTdHlsZVJlc29sdmVyKCk7CkBAIC0xMTYsNyArMTE1LDcgQEAgcHJp
dmF0ZToKICAgICBFbGVtZW50KiBtX2hvc3QgeyBudWxscHRyIH07CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U3R5bGVSZXNvbHZlcj4gbV9zdHlsZVJlc29sdmVyOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxBdXRob3JTdHlsZVNoZWV0cz4gbV9hdXRob3JTdHlsZVNoZWV0czsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8U3R5bGU6OlNjb3BlPiBtX3N0eWxlU2NvcGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
U2xvdEFzc2lnbm1lbnQ+IG1fc2xvdEFzc2lnbm1lbnQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24gMjA2ODgwKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw2IEBACiAjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyaWJ1
dGUuaCIKLSNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkNhY2hlZENT
U1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlTG9hZGVyLmgiCkBAIC01NCw2ICs1Myw3IEBACiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKICNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVGb3JEb2N1bWVudC5oIgorI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKICNpbmNsdWRlICJT
dHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgpAQCAtMTAyLDcgKzEwMiw3IEBAIEhUTUxMaW5rRWxlbWVudDo6fkhU
TUxMaW5rRWxlbWVudCgpCiAgICAgICAgIG1fY2FjaGVkU2hlZXQtPnJlbW92ZUNsaWVudCgqdGhp
cyk7CiAKICAgICBpZiAoaW5Eb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudCgpLmF1dGhvclN0
eWxlU2hlZXRzKCkucmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoKnRoaXMpOworICAgICAg
ICBkb2N1bWVudCgpLnN0eWxlU2NvcGUoKS5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSgq
dGhpcyk7CiAKICAgICBsaW5rTG9hZEV2ZW50U2VuZGVyKCkuY2FuY2VsRXZlbnQoKnRoaXMpOwog
ICAgIGxpbmtFcnJvckV2ZW50U2VuZGVyKCkuY2FuY2VsRXZlbnQoKnRoaXMpOwpAQCAtMTQwLDcg
KzE0MCw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXREaXNhYmxlZFN0YXRlKGIKICAgICAg
ICAgaWYgKCFtX3NoZWV0ICYmIG1fZGlzYWJsZWRTdGF0ZSA9PSBFbmFibGVkVmlhU2NyaXB0KQog
ICAgICAgICAgICAgcHJvY2VzcygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVu
dCgpLmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9u
KCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDb250ZW50
c09ySW50ZXJwcmV0YXRpb24oKTsKICAgICB9CiB9CiAKQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lk
IEhUTUxMaW5rRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uCiAgICAgICAgIG1fbWVkaWEgPSB2
YWx1ZS5zdHJpbmcoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogICAgICAgICBwcm9jZXNz
KCk7CiAgICAgICAgIGlmIChtX3NoZWV0ICYmICFpc0Rpc2FibGVkKCkpCi0gICAgICAgICAgICBk
b2N1bWVudCgpLmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJl
dGF0aW9uKCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VD
b250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAobmFtZSA9PSBkaXNhYmxlZEF0dHIpIHsKQEAgLTI4Myw3ICsyODMsNyBAQCB2b2lkIEhUTUxM
aW5rRWxlbWVudDo6cHJvY2VzcygpCiAgICAgfSBlbHNlIGlmIChtX3NoZWV0KSB7CiAgICAgICAg
IC8vIHdlIG5vIGxvbmdlciBjb250YWluIGEgc3R5bGVzaGVldCwgZS5nLiBwZXJoYXBzIHJlbCBv
ciB0eXBlIHdhcyBjaGFuZ2VkCiAgICAgICAgIGNsZWFyU2hlZXQoKTsKLSAgICAgICAgZG9jdW1l
bnQoKS5hdXRob3JTdHlsZVNoZWV0cygpLmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlv
bigpOworICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDb250ZW50c09y
SW50ZXJwcmV0YXRpb24oKTsKICAgICB9CiB9CiAKQEAgLTMwNSw3ICszMDUsNyBAQCBOb2RlOjpJ
bnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxMCiAgICAgaWYgKG1faXNJblNoYWRvd1Ry
ZWUpCiAgICAgICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwogCi0gICAgZG9jdW1lbnQoKS5hdXRo
b3JTdHlsZVNoZWV0cygpLmFkZFN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKCp0aGlzLCBtX2NyZWF0
ZWRCeVBhcnNlcik7CisgICAgZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkuYWRkU3R5bGVTaGVldENh
bmRpZGF0ZU5vZGUoKnRoaXMsIG1fY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIHByb2Nlc3MoKTsK
ICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKQEAgLTMyMSw3ICszMjEsNyBAQCB2b2lkIEhUTUxM
aW5rRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpCiAgICAgICAgIEFTU0VSVCghbV9zaGVldCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZG9jdW1lbnQoKS5hdXRob3JTdHlsZVNoZWV0
cygpLnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKCp0aGlzKTsKKyAgICBkb2N1bWVudCgp
LnN0eWxlU2NvcGUoKS5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSgqdGhpcyk7CiAKICAg
ICBpZiAobV9zaGVldCkKICAgICAgICAgY2xlYXJTaGVldCgpOwpAQCAtNTQ0LDcgKzU0NCw3IEBA
IHZvaWQgSFRNTExpbmtFbGVtZW50OjphZGRQZW5kaW5nU2hlZXQoUGUKIAogICAgIGlmIChtX3Bl
bmRpbmdTaGVldFR5cGUgPT0gSW5hY3RpdmVTaGVldCkKICAgICAgICAgcmV0dXJuOwotICAgIGRv
Y3VtZW50KCkuYXV0aG9yU3R5bGVTaGVldHMoKS5hZGRQZW5kaW5nU2hlZXQoKTsKKyAgICBkb2N1
bWVudCgpLnN0eWxlU2NvcGUoKS5hZGRQZW5kaW5nU2hlZXQoKTsKIH0KIAogdm9pZCBIVE1MTGlu
a0VsZW1lbnQ6OnJlbW92ZVBlbmRpbmdTaGVldChSZW1vdmVQZW5kaW5nU2hlZXROb3RpZmljYXRp
b25UeXBlIG5vdGlmaWNhdGlvbikKQEAgLTU1NywxNCArNTU3LDE0IEBAIHZvaWQgSFRNTExpbmtF
bGVtZW50OjpyZW1vdmVQZW5kaW5nU2hlZXQKIAogICAgIGlmICh0eXBlID09IEluYWN0aXZlU2hl
ZXQpIHsKICAgICAgICAgLy8gRG9jdW1lbnQganVzdCBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBz
aGVldCBmb3IgZXhwb3N1cmUgdGhyb3VnaCBkb2N1bWVudC5zdHlsZVNoZWV0cwotICAgICAgICBk
b2N1bWVudCgpLmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ2FuZGlkYXRlc0ZvckFjdGl2
ZVNldCgpOworICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDYW5kaWRh
dGVzRm9yQWN0aXZlU2V0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBkb2N1bWVu
dCgpLmF1dGhvclN0eWxlU2hlZXRzKCkucmVtb3ZlUGVuZGluZ1NoZWV0KAorICAgIGRvY3VtZW50
KCkuc3R5bGVTY29wZSgpLnJlbW92ZVBlbmRpbmdTaGVldCgKICAgICAgICAgbm90aWZpY2F0aW9u
ID09IFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5Ci0gICAgICAgID8gQXV0aG9y
U3R5bGVTaGVldHM6OlJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5Ci0gICAgICAg
IDogQXV0aG9yU3R5bGVTaGVldHM6OlJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUxhdGVyKTsKKyAg
ICAgICAgPyBTdHlsZTo6U2NvcGU6OlJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5
CisgICAgICAgIDogU3R5bGU6OlNjb3BlOjpSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlMYXRlcik7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFN0eWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMjA2ODgwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKIAot
I2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2Uu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCkBAIC0zNSw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNj
cmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNs
dWRlICJTdHlsZVNjb3BlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZShjbwogICAgICAgICBtX3N0eWxlU2hlZXRPd25lci5zZXRNZWRpYSh2
YWx1ZSk7CiAgICAgICAgIGlmIChzaGVldCgpKSB7CiAgICAgICAgICAgICBzaGVldCgpLT5zZXRN
ZWRpYVF1ZXJpZXMoTWVkaWFRdWVyeVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5bnRh
eCh2YWx1ZSkpOwotICAgICAgICAgICAgaWYgKGF1dG8qIHNjb3BlID0gbV9zdHlsZVNoZWV0T3du
ZXIuc3R5bGVTaGVldFNjb3BlKCkpCisgICAgICAgICAgICBpZiAoYXV0byogc2NvcGUgPSBtX3N0
eWxlU2hlZXRPd25lci5zdHlsZVNjb3BlKCkpCiAgICAgICAgICAgICAgICAgc2NvcGUtPmRpZENo
YW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIG1fc3R5bGVTaGVldE93bmVyLmNoaWxkcmVuQ2hhbmdlZCgqdGhpcyk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAJKHJldmlzaW9u
IDIwNjg3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JDU1NBZ2VudC5oIgogCi0jaW5jbHVkZSAiQXV0aG9yU3R5bGVT
aGVldHMuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNs
dWRlICJDU1NJbXBvcnRSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgpAQCAt
NTYsNiArNTUsNyBAQAogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKICNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAi
U3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiV2Vi
S2l0TmFtZWRGbG93LmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sT2Jq
ZWN0cy5oPgpAQCAtNjcwLDcgKzY3MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxl
Y3RBbGxTdHlsZVMKIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Y29sbGVjdEFsbERvY3VtZW50
U3R5bGVTaGVldHMoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0b3I8Q1NTU3R5bGVTaGVldCo+JiBy
ZXN1bHQpCiB7Ci0gICAgYXV0byBjc3NTdHlsZVNoZWV0cyA9IGRvY3VtZW50LmF1dGhvclN0eWxl
U2hlZXRzKCkuYWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IoKTsKKyAgICBhdXRvIGNzc1N0
eWxlU2hlZXRzID0gZG9jdW1lbnQuc3R5bGVTY29wZSgpLmFjdGl2ZVN0eWxlU2hlZXRzRm9ySW5z
cGVjdG9yKCk7CiAgICAgZm9yIChhdXRvJiBjc3NTdHlsZVNoZWV0IDogY3NzU3R5bGVTaGVldHMp
CiAgICAgICAgIGNvbGxlY3RTdHlsZVNoZWV0cyhjc3NTdHlsZVNoZWV0LmdldCgpLCByZXN1bHQp
OwogfQpAQCAtODg5LDcgKzg4OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNl
dWRvU3RhdGUKICAgICAgICAgbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLnNldChub2RlSWQs
IGZvcmNlZFBzZXVkb1N0YXRlKTsKICAgICBlbHNlCiAgICAgICAgIG1fbm9kZUlkVG9Gb3JjZWRQ
c2V1ZG9TdGF0ZS5yZW1vdmUobm9kZUlkKTsKLSAgICBlbGVtZW50LT5kb2N1bWVudCgpLmF1dGhv
clN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CisgICAg
ZWxlbWVudC0+ZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVy
cHJldGF0aW9uKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE5hbWVkRmxvd0Nv
bGxlY3Rpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnROb2RlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
Ok5hbWVkRmxvdz4+JiByZXN1bHQpCkBAIC0xMDE1LDcgKzEwMTUsNyBAQCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlCiAKICAgICAvLyBTdHlsZVJ1bGVzIHJldHVybmVk
IGJ5IFN0eWxlUmVzb2x2ZXI6OnN0eWxlUnVsZXNGb3JFbGVtZW50IGxhY2sgcGFyZW50IHBvaW50
ZXJzIHNpbmNlIHRoYXQgaW5mb21hdGlvbiBpcyBub3QgY2hlYXBseSBhdmFpbGFibGUuCiAgICAg
Ly8gU2luY2UgdGhlIGluc3BlY3RvciB3YW50cyB0byB3YWxrIHRoZSBwYXJlbnQgY2hhaW4sIHdl
IGNvbnN0cnVjdCB0aGUgZnVsbCB3cmFwcGVycyBoZXJlLgotICAgIENTU1N0eWxlUnVsZSogY3Nz
b21XcmFwcGVyID0gc3R5bGVSZXNvbHZlci5pbnNwZWN0b3JDU1NPTVdyYXBwZXJzKCkuZ2V0V3Jh
cHBlckZvclJ1bGVJblNoZWV0cyhzdHlsZVJ1bGUsIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5h
dXRob3JTdHlsZVNoZWV0cygpLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkuZXh0ZW5zaW9uU3R5
bGVTaGVldHMoKSk7CisgICAgQ1NTU3R5bGVSdWxlKiBjc3NvbVdyYXBwZXIgPSBzdHlsZVJlc29s
dmVyLmluc3BlY3RvckNTU09NV3JhcHBlcnMoKS5nZXRXcmFwcGVyRm9yUnVsZUluU2hlZXRzKHN0
eWxlUnVsZSwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLnN0eWxlU2NvcGUoKSwgc3R5bGVSZXNv
bHZlci5kb2N1bWVudCgpLmV4dGVuc2lvblN0eWxlU2hlZXRzKCkpOwogICAgIGlmICghY3Nzb21X
cmFwcGVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0
KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYmluZFN0eWxlU2hlZXQoY3Nzb21XcmFwcGVyLT5wYXJl
bnRTdHlsZVNoZWV0KCkpOwpAQCAtMTE4OSw3ICsxMTg5LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6cmVzZXRQc2V1ZG9TdGF0ZQogCiAgICAgbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRl
LmNsZWFyKCk7CiAgICAgZm9yIChhdXRvJiBkb2N1bWVudCA6IGRvY3VtZW50c1RvQ2hhbmdlKQot
ICAgICAgICBkb2N1bWVudC0+YXV0aG9yU3R5bGVTaGVldHMoKS5kaWRDaGFuZ2VDb250ZW50c09y
SW50ZXJwcmV0YXRpb24oKTsKKyAgICAgICAgZG9jdW1lbnQtPnN0eWxlU2NvcGUoKS5kaWRDaGFu
Z2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHJldmlzaW9uIDIwNjg3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCiAKLSNpbmNs
dWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQu
aCIKICNpbmNsdWRlICJDYWNoZWRGb250LmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKQEAg
LTY3LDYgKzY2LDcgQEAKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxl
U2NvcGUuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKQEAgLTEwMDIs
NyArMTAwMiw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGkKICAg
ICBtX2VtdWxhdGVkTWVkaWEgPSBtZWRpYTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX3Bh
Z2UubWFpbkZyYW1lKCkuZG9jdW1lbnQoKTsKICAgICBpZiAoZG9jdW1lbnQpIHsKLSAgICAgICAg
ZG9jdW1lbnQtPmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJl
dGF0aW9uKCk7CisgICAgICAgIGRvY3VtZW50LT5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVu
dHNPckludGVycHJldGF0aW9uKCk7CiAgICAgICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXQoKTsK
ICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiAyMDY4
ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJET01XaW5k
b3cuaCIKIAotI2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQmFja0Zv
cndhcmRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQmFyUHJvcC5oIgogI2luY2x1ZGUgIkJlZm9y
ZVVubG9hZEV2ZW50LmgiCkBAIC05Nyw2ICs5Niw3IEBACiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVz
cGFjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVNZWRpYS5oIgogI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCiAjaW5jbHVkZSAiU3VkZGVuVGVy
bWluYXRpb24uaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGlj
YXRvci5oIgpAQCAtMTQzMiw3ICsxNDMyLDcgQEAgUmVmUHRyPENTU1J1bGVMaXN0PiBET01XaW5k
b3c6OmdldE1hdGNoZQogICAgIGlmIChwc2V1ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9F
bGVtZW50VW5rbm93biAmJiAhcHNldWRvRWxlbWVudC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YXV0aG9yU3R5bGVTaGVldHMo
KS5mbHVzaFBlbmRpbmdVcGRhdGUoKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zdHlsZVNj
b3BlKCkuZmx1c2hQZW5kaW5nVXBkYXRlKCk7CiAKICAgICB1bnNpZ25lZCBydWxlc1RvSW5jbHVk
ZSA9IFN0eWxlUmVzb2x2ZXI6OkF1dGhvckNTU1J1bGVzOwogICAgIGlmICghYXV0aG9yT25seSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAyMDY4NzkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogCiAj
aW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkFwcGx5U3R5bGVDb21t
YW5kLmgiCi0jaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJCYWNrRm9y
d2FyZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
aCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCkBAIC05Myw2ICs5Miw3IEBACiAjaW5j
bHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgorI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKICNpbmNs
dWRlICJUZXh0Tm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIu
aCIKICNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xsZXIuaCIKQEAgLTY0NCw3ICs2NDQsNyBA
QCB2b2lkIEZyYW1lOjpzZXRQcmludGluZyhib29sIHByaW50aW5nLCBjCiAgICAgbV9kb2MtPnNl
dFByaW50aW5nKHByaW50aW5nKTsKICAgICB2aWV3KCktPmFkanVzdE1lZGlhVHlwZUZvclByaW50
aW5nKHByaW50aW5nKTsKIAotICAgIG1fZG9jLT5hdXRob3JTdHlsZVNoZWV0cygpLmRpZENoYW5n
ZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOworICAgIG1fZG9jLT5zdHlsZVNjb3BlKCkuZGlk
Q2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CiAgICAgaWYgKHNob3VsZFVzZVByaW50
aW5nTGF5b3V0KCkpIHsKICAgICAgICAgdmlldygpLT5mb3JjZUxheW91dEZvclBhZ2luYXRpb24o
cGFnZVNpemUsIG9yaWdpbmFsUGFnZVNpemUsIG1heGltdW1TaHJpbmtSYXRpbywgc2hvdWxkQWRq
dXN0Vmlld1NpemUpOwogICAgIH0gZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCShyZXZpc2lvbiAyMDY4NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIkFYT2JqZWN0
Q2FjaGUuaCIKICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiQXV0
aG9yU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgi
CkBAIC05Miw2ICs5MSw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRl
ICJTdHlsZVNjb3BlLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKQEAgLTEzMzUsNyAr
MTMzNSw3IEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlvdXQoYm9vbCBhbGxvd1N1YnRyZWUKICAgICAg
ICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9IGRvY3VtZW50LnN0eWxlUmVzb2x2ZXJJ
ZkV4aXN0cygpOwogICAgICAgICBpZiAoIXN0eWxlUmVzb2x2ZXIgfHwgc3R5bGVSZXNvbHZlci0+
aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKCkpIHsKICAgICAgICAgICAg
IExPRyhMYXlvdXQsICIgIGhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSwg
ZW5xdWV1ZWluZyBzdHlsZSByZWNhbGMiKTsKLSAgICAgICAgICAgIGRvY3VtZW50LmF1dGhvclN0
eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CisgICAgICAg
ICAgICBkb2N1bWVudC5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0
aW9uKCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpbnN0cnVtZW50YXRpb24gZXZlbnQg
aXMgbm90IHN0cmljdGx5IGFjY3VyYXRlIHNpbmNlIGNhY2hlZCBtZWRpYSBxdWVyeSByZXN1bHRz
IGRvIG5vdCBwZXJzaXN0IGFjcm9zcyBTdHlsZVJlc29sdmVyIHJlYnVpbGRzLgogICAgICAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZChkb2N1
bWVudCk7CiAgICAgICAgIH0gZWxzZQpAQCAtMzUzMiw3ICszNTMyLDcgQEAgdm9pZCBGcmFtZVZp
ZXc6OnNldFBhZ2luYXRpb24oY29uc3QgUGFnaQogCiAgICAgbV9wYWdpbmF0aW9uID0gcGFnaW5h
dGlvbjsKIAotICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+YXV0aG9yU3R5bGVTaGVldHMoKS5kaWRD
aGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKKyAgICBmcmFtZSgpLmRvY3VtZW50KCkt
PnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKIH0KIAog
SW50UmVjdCBGcmFtZVZpZXc6OndpbmRvd0NsaXBSZWN0KCkgY29uc3QKQEAgLTUwMDEsNyArNTAw
MSw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRWaWV3cG9ydFNpemVGb3JDU1NWaWUKICAgICBpZiAo
RG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUoKS5kb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiB0aGlzIHNob3VsZCBwcm9iYWJseSBiZSB1cGRhdGVWaWV3cG9ydFVuaXRzT25SZXNpemUo
KSwgYnV0IHN5bmNocm9ub3VzbHkKICAgICAgICAgLy8gZGlydHlpbmcgc3R5bGUgaGVyZSBjYXVz
ZXMgYXNzZXJ0aW9ucyBvbiBpT1MgKHJkYXI6Ly9wcm9ibGVtLzE5OTk4MTY2KS4KLSAgICAgICAg
ZG9jdW1lbnQtPmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJl
dGF0aW9uKCk7CisgICAgICAgIGRvY3VtZW50LT5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVu
dHNPckludGVycHJldGF0aW9uKCk7CiAgICAgfQogfQogICAgIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCShyZXZpc2lvbiAyMDY4NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiQWx0ZXJuYXRpdmVUZXh0
Q2xpZW50LmgiCiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCi0jaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIK
ICNpbmNsdWRlICJCYWNrRm9yd2FyZENsaWVudC5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgpAQCAtOTAsNiArODksNyBAQAogI2luY2x1
ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlUHJvdmlk
ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZS5o
IgogI2luY2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVj
b2Rlci5oIgogI2luY2x1ZGUgIlVzZXJDb250ZW50UHJvdmlkZXIuaCIKQEAgLTQyNCw3ICs0MjQs
NyBAQCB2b2lkIFBhZ2U6OnNldFZpZXdNb2RlKFZpZXdNb2RlIHZpZXdNb2RlCiAgICAgICAgIG1f
bWFpbkZyYW1lLT52aWV3KCktPmZvcmNlTGF5b3V0KCk7CiAKICAgICBpZiAobV9tYWluRnJhbWUt
PmRvY3VtZW50KCkpCi0gICAgICAgIG1fbWFpbkZyYW1lLT5kb2N1bWVudCgpLT5hdXRob3JTdHls
ZVNoZWV0cygpLmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOworICAgICAgICBt
X21haW5GcmFtZS0+ZG9jdW1lbnQoKS0+c3R5bGVTY29wZSgpLmRpZENoYW5nZUNvbnRlbnRzT3JJ
bnRlcnByZXRhdGlvbigpOwogfQogI2VuZGlmIC8vIEVOQUJMRShWSUVXX01PREVfQ1NTX01FRElB
KQogCkBAIC01MDIsNyArNTAyLDcgQEAgdm9pZCBQYWdlOjpzZXROZWVkc1JlY2FsY1N0eWxlSW5B
bGxGcmFtZQogewogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAgICAgIGlmIChEb2N1
bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50
LT5hdXRob3JTdHlsZVNoZWV0cygpLmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigp
OworICAgICAgICAgICAgZG9jdW1lbnQtPnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDb250ZW50c09y
SW50ZXJwcmV0YXRpb24oKTsKICAgICB9CiB9CiAKQEAgLTExNjMsNyArMTE2Myw3IEBAIHZvaWQg
UGFnZTo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldEMKICAgICAgICAgaWYgKCFkb2N1bWVu
dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBkb2N1bWVudC0+ZXh0ZW5zaW9uU3R5
bGVTaGVldHMoKS5pbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKLSAgICAgICAg
ZG9jdW1lbnQtPmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJl
dGF0aW9uKCk7CisgICAgICAgIGRvY3VtZW50LT5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVu
dHNPckludGVycHJldGF0aW9uKCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVNjb3BlLmNwcAkocmV2aXNpb24gMjA2ODgwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9kb20v
QXV0aG9yU3R5bGVTaGVldHMuY3BwOjIwNjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDg3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAg
KEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMp
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDA5LCAyMDExLTIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC0yMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKKworI2luY2x1ZGUgIkNTU1N0eWxlU2hl
ZXQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25TdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgIkhUTUxJ
RnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUg
IlNWR1N0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaCIKKyNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCisj
aW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCIKKyNpbmNsdWRlICJVc2Vy
U3R5bGVTaGVldC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBD
b250ZW50RXh0ZW5zaW9uczsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK0F1dGhvclN0
eWxlU2hlZXRzOjpBdXRob3JTdHlsZVNoZWV0cyhEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBt
X2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9wZW5kaW5nVXBkYXRlVGltZXIoKnRoaXMsICZB
dXRob3JTdHlsZVNoZWV0czo6cGVuZGluZ1VwZGF0ZVRpbWVyRmlyZWQpCit7Cit9CisKK0F1dGhv
clN0eWxlU2hlZXRzOjpBdXRob3JTdHlsZVNoZWV0cyhTaGFkb3dSb290JiBzaGFkb3dSb290KQor
ICAgIDogbV9kb2N1bWVudChzaGFkb3dSb290LmRvY3VtZW50U2NvcGUoKSkKKyAgICAsIG1fc2hh
ZG93Um9vdCgmc2hhZG93Um9vdCkKKyAgICAsIG1fcGVuZGluZ1VwZGF0ZVRpbWVyKCp0aGlzLCAm
QXV0aG9yU3R5bGVTaGVldHM6OnBlbmRpbmdVcGRhdGVUaW1lckZpcmVkKQoreworfQorCitTdHls
ZVJlc29sdmVyJiBBdXRob3JTdHlsZVNoZWV0czo6c3R5bGVSZXNvbHZlcigpCit7CisgICAgaWYg
KG1fc2hhZG93Um9vdCkKKyAgICAgICAgcmV0dXJuIG1fc2hhZG93Um9vdC0+c3R5bGVSZXNvbHZl
cigpOworCisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZW5zdXJlU3R5bGVSZXNvbHZlcigpOworfQor
CitTdHlsZVJlc29sdmVyKiBBdXRob3JTdHlsZVNoZWV0czo6c3R5bGVSZXNvbHZlcklmRXhpc3Rz
KCkKK3sKKyAgICBpZiAobV9zaGFkb3dSb290KQorICAgICAgICByZXR1cm4gbV9zaGFkb3dSb290
LT5zdHlsZVJlc29sdmVySWZFeGlzdHMoKTsKKworICAgIHJldHVybiBtX2RvY3VtZW50LnN0eWxl
UmVzb2x2ZXJJZkV4aXN0cygpOworfQorCitBdXRob3JTdHlsZVNoZWV0cyYgQXV0aG9yU3R5bGVT
aGVldHM6OmZvck5vZGUoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZS5pbkRvY3VtZW50
KCkpOworICAgIGF1dG8qIHNoYWRvd1Jvb3QgPSBub2RlLmNvbnRhaW5pbmdTaGFkb3dSb290KCk7
CisgICAgaWYgKHNoYWRvd1Jvb3QpCisgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5hdXRob3JT
dHlsZVNoZWV0cygpOworICAgIHJldHVybiBub2RlLmRvY3VtZW50KCkuYXV0aG9yU3R5bGVTaGVl
dHMoKTsKK30KKworLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGEgdG9wLWxldmVs
IHN0eWxlc2hlZXQgaGFzIGZpbmlzaGVkIGxvYWRpbmcuCit2b2lkIEF1dGhvclN0eWxlU2hlZXRz
OjpyZW1vdmVQZW5kaW5nU2hlZXQoUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZpY2F0aW9uVHlwZSBu
b3RpZmljYXRpb24pCit7CisgICAgLy8gTWFrZSBzdXJlIHdlIGtuZXcgdGhpcyBzaGVldCB3YXMg
cGVuZGluZywgYW5kIHRoYXQgb3VyIGNvdW50IGlzbid0IG91dCBvZiBzeW5jLgorICAgIEFTU0VS
VChtX3BlbmRpbmdTdHlsZVNoZWV0Q291bnQgPiAwKTsKKworICAgIG1fcGVuZGluZ1N0eWxlU2hl
ZXRDb3VudC0tOworICAgIAorI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcKKyAg
ICBpZiAoIW93bmVyRWxlbWVudCgpKQorICAgICAgICBwcmludGYoIlN0eWxlc2hlZXQgbG9hZGVk
IGF0IHRpbWUgJWQuICVkIHN0eWxlc2hlZXRzIHN0aWxsIHJlbWFpbi5cbiIsIGVsYXBzZWRUaW1l
KCksIG1fcGVuZGluZ1N0eWxlc2hlZXRzKTsKKyNlbmRpZgorCisgICAgaWYgKG1fcGVuZGluZ1N0
eWxlU2hlZXRDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG5vdGlmaWNhdGlvbiA9
PSBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlMYXRlcikgeworICAgICAgICBtX2RvY3VtZW50LnNl
dE5lZWRzTm90aWZ5UmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hlZXQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX3NoYWRvd1Jvb3QpIHsKKyAgICAgICAgbV9zaGFkb3dSb290
LT51cGRhdGVTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kb2N1bWVu
dC5kaWRSZW1vdmVBbGxQZW5kaW5nU3R5bGVzaGVldCgpOworfQorCit2b2lkIEF1dGhvclN0eWxl
U2hlZXRzOjphZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShOb2RlJiBub2RlLCBib29sIGNyZWF0
ZWRCeVBhcnNlcikKK3sKKyAgICBpZiAoIW5vZGUuaW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgLy8gVW50aWwgdGhlIDxib2R5PiBleGlzdHMsIHdlIGhhdmUgbm8gY2hv
aWNlIGJ1dCB0byBjb21wYXJlIGRvY3VtZW50IHBvc2l0aW9ucywKKyAgICAvLyBzaW5jZSBzdHls
ZXMgb3V0c2lkZSBvZiB0aGUgYm9keSBhbmQgaGVhZCBjb250aW51ZSB0byBiZSBzaHVudGVkIGlu
dG8gdGhlIGhlYWQKKyAgICAvLyAoYW5kIHRodXMgY2FuIHNoaWZ0IHRvIGVuZCB1cCBiZWZvcmUg
ZHluYW1pY2FsbHkgYWRkZWQgRE9NIGNvbnRlbnQgdGhhdCBpcyBhbHNvCisgICAgLy8gb3V0c2lk
ZSB0aGUgYm9keSkuCisgICAgaWYgKChjcmVhdGVkQnlQYXJzZXIgJiYgbV9kb2N1bWVudC5ib2R5
T3JGcmFtZXNldCgpKSB8fCBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuYWRkKCZub2RlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIERldGVybWluZSBhbiBhcHByb3ByaWF0ZSBpbnNlcnRp
b24gcG9pbnQuCisgICAgYXV0byBiZWdpbiA9IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmJl
Z2luKCk7CisgICAgYXV0byBlbmQgPSBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5lbmQoKTsK
KyAgICBhdXRvIGl0ID0gZW5kOworICAgIE5vZGUqIGZvbGxvd2luZ05vZGUgPSBudWxscHRyOwor
ICAgIGRvIHsKKyAgICAgICAgLS1pdDsKKyAgICAgICAgTm9kZSogbiA9ICppdDsKKyAgICAgICAg
dW5zaWduZWQgc2hvcnQgcG9zaXRpb24gPSBuLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihub2Rl
KTsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09IE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExP
V0lORykgeworICAgICAgICAgICAgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaW5zZXJ0QmVm
b3JlKGZvbGxvd2luZ05vZGUsICZub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBmb2xsb3dpbmdOb2RlID0gbjsKKyAgICB9IHdoaWxlIChpdCAhPSBiZWdpbik7
CisgICAgCisgICAgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaW5zZXJ0QmVmb3JlKGZvbGxv
d2luZ05vZGUsICZub2RlKTsKK30KKwordm9pZCBBdXRob3JTdHlsZVNoZWV0czo6cmVtb3ZlU3R5
bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSkKK3sKKyAgICBpZiAobV9zdHlsZVNoZWV0
Q2FuZGlkYXRlTm9kZXMucmVtb3ZlKCZub2RlKSkKKyAgICAgICAgc2NoZWR1bGVBY3RpdmVTZXRV
cGRhdGUoKTsKK30KKwordm9pZCBBdXRob3JTdHlsZVNoZWV0czo6Y29sbGVjdEFjdGl2ZVN0eWxl
U2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+JiBzaGVldHMpCit7CisgICAgaWYgKG1f
ZG9jdW1lbnQuc2V0dGluZ3MoKSAmJiAhbV9kb2N1bWVudC5zZXR0aW5ncygpLT5hdXRob3JBbmRV
c2VyU3R5bGVzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIG5v
ZGUgOiBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2RlcykgeworICAgICAgICBTdHlsZVNoZWV0KiBz
aGVldCA9IG51bGxwdHI7CisgICAgICAgIGlmIChpczxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KCpu
b2RlKSkgeworICAgICAgICAgICAgLy8gUHJvY2Vzc2luZyBpbnN0cnVjdGlvbiAoWE1MIGRvY3Vt
ZW50cyBvbmx5KS4KKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgbGlua2luZyB0byBl
bWJlZGRlZCBDU1Mgc3R5bGVzaGVldHMsIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ5MjgxPiBmb3IgZGlzY3Vzc2lvbi4KKyAgICAgICAgICAgIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbiYgcGkgPSBkb3duY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KCpub2Rl
KTsKKyAgICAgICAgICAgIHNoZWV0ID0gcGkuc2hlZXQoKTsKKyNpZiBFTkFCTEUoWFNMVCkKKyAg
ICAgICAgICAgIC8vIERvbid0IGFwcGx5IFhTTCB0cmFuc2Zvcm1zIHRvIGFscmVhZHkgdHJhbnNm
b3JtZWQgZG9jdW1lbnRzIC0tIDxyZGFyOi8vcHJvYmxlbS80MTMyODA2PgorICAgICAgICAgICAg
aWYgKHBpLmlzWFNMKCkgJiYgIW1fZG9jdW1lbnQudHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIC8vIERvbid0IGFwcGx5IFhTTCB0cmFuc2Zvcm1zIHVudGlsIGxv
YWRpbmcgaXMgZmluaXNoZWQuCisgICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnBhcnNp
bmcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5hcHBseVhTTFRyYW5zZm9ybSgm
cGkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAg
ICAgICB9IGVsc2UgaWYgKGlzPEhUTUxMaW5rRWxlbWVudD4oKm5vZGUpIHx8IGlzPEhUTUxTdHls
ZUVsZW1lbnQ+KCpub2RlKSB8fCBpczxTVkdTdHlsZUVsZW1lbnQ+KCpub2RlKSkgeworICAgICAg
ICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKKyAgICAg
ICAgICAgIEF0b21pY1N0cmluZyB0aXRsZSA9IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbih0aXRsZUF0dHIpOworICAgICAgICAgICAgYm9vbCBlbmFibGVkVmlhU2NyaXB0
ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoaXM8SFRNTExpbmtFbGVtZW50PihlbGVtZW50KSkg
eworICAgICAgICAgICAgICAgIC8vIDxMSU5LPiBlbGVtZW50CisgICAgICAgICAgICAgICAgSFRN
TExpbmtFbGVtZW50JiBsaW5rRWxlbWVudCA9IGRvd25jYXN0PEhUTUxMaW5rRWxlbWVudD4oZWxl
bWVudCk7CisgICAgICAgICAgICAgICAgaWYgKGxpbmtFbGVtZW50LmlzRGlzYWJsZWQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZW5hYmxlZFZpYVNj
cmlwdCA9IGxpbmtFbGVtZW50LmlzRW5hYmxlZFZpYVNjcmlwdCgpOworICAgICAgICAgICAgICAg
IGlmIChsaW5rRWxlbWVudC5zdHlsZVNoZWV0SXNMb2FkaW5nKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gaXQgaXMgbG9hZGluZyBidXQgd2Ugc2hvdWxkIHN0aWxsIGRlY2lkZSB3aGljaCBz
dHlsZSBzaGVldCBzZXQgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIGlmICghZW5hYmxlZFZp
YVNjcmlwdCAmJiAhdGl0bGUuaXNFbXB0eSgpICYmIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5h
bWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxpbmtFbGVtZW50
LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocmVsQXR0cikuY29udGFpbnMoImFsdGVy
bmF0ZSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNo
ZWV0U2V0TmFtZSA9IHRpdGxlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2VsZWN0
ZWRTdHlsZXNoZWV0U2V0TmFtZSA9IHRpdGxlOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWxpbmtFbGVtZW50LnNoZWV0KCkp
CisgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gbnVsbEF0b207CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcHJlZmVycmVkIHN0eWxlc2V0LiBUaGlzIGlz
IHRoZQorICAgICAgICAgICAgLy8gc2V0IG9mIHNoZWV0cyB0aGF0IHdpbGwgYmUgZW5hYmxlZC4K
KyAgICAgICAgICAgIGlmIChpczxTVkdTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICAg
ICAgICAgIHNoZWV0ID0gZG93bmNhc3Q8U1ZHU3R5bGVFbGVtZW50PihlbGVtZW50KS5zaGVldCgp
OworICAgICAgICAgICAgZWxzZSBpZiAoaXM8SFRNTExpbmtFbGVtZW50PihlbGVtZW50KSkKKyAg
ICAgICAgICAgICAgICBzaGVldCA9IGRvd25jYXN0PEhUTUxMaW5rRWxlbWVudD4oZWxlbWVudCku
c2hlZXQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzaGVldCA9IGRvd25j
YXN0PEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7CisgICAgICAgICAgICAvLyBD
aGVjayB0byBzZWUgaWYgdGhpcyBzaGVldCBiZWxvbmdzIHRvIGEgc3R5bGVzZXQKKyAgICAgICAg
ICAgIC8vICh0aHVzIG1ha2luZyBpdCBQUkVGRVJSRUQgb3IgQUxURVJOQVRFIHJhdGhlciB0aGFu
CisgICAgICAgICAgICAvLyBQRVJTSVNURU5UKS4KKyAgICAgICAgICAgIGF1dG8mIHJlbCA9IGVs
ZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihyZWxBdHRyKTsKKyAgICAgICAg
ICAgIGlmICghZW5hYmxlZFZpYVNjcmlwdCAmJiAhdGl0bGUuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgLy8gWWVzLCB3ZSBoYXZlIGEgdGl0bGUuCisgICAgICAgICAgICAgICAgaWYgKG1f
cHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIE5vIHByZWZlcnJlZCBzZXQgaGFzIGJlZW4gZXN0YWJsaXNoZWQuIElmCisgICAgICAg
ICAgICAgICAgICAgIC8vIHdlIGFyZSBOT1QgYW4gYWx0ZXJuYXRlIHNoZWV0LCB0aGVuIGVzdGFi
bGlzaAorICAgICAgICAgICAgICAgICAgICAvLyB1cyBhcyB0aGUgcHJlZmVycmVkIHNldC4gT3Ro
ZXJ3aXNlLCBqdXN0IGlnbm9yZQorICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHNoZWV0Lgor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTFN0eWxlRWxlbWVudD4oZWxlbWVudCkgfHwg
IXJlbC5jb250YWlucygiYWx0ZXJuYXRlIikpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3By
ZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lID0gbV9zZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lID0g
dGl0bGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aXRsZSAhPSBt
X3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lKQorICAgICAgICAgICAgICAgICAgICBzaGVldCA9
IG51bGxwdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZWwuY29udGFpbnMo
ImFsdGVybmF0ZSIpICYmIHRpdGxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzaGVldCA9
IG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNoZWV0KQorICAgICAgICAgICAgc2hl
ZXRzLmFwcGVuZChzaGVldCk7CisgICAgfQorfQorCitBdXRob3JTdHlsZVNoZWV0czo6U3R5bGVS
ZXNvbHZlclVwZGF0ZVR5cGUgQXV0aG9yU3R5bGVTaGVldHM6OmFuYWx5emVTdHlsZVNoZWV0Q2hh
bmdlKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBuZXdTdHlsZXNoZWV0cywg
Ym9vbCYgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpCit7CisgICAgcmVxdWlyZXNGdWxsU3R5bGVS
ZWNhbGMgPSB0cnVlOworICAgIAorICAgIHVuc2lnbmVkIG5ld1N0eWxlc2hlZXRDb3VudCA9IG5l
d1N0eWxlc2hlZXRzLnNpemUoKTsKKworICAgIGlmICghc3R5bGVSZXNvbHZlcklmRXhpc3RzKCkp
CisgICAgICAgIHJldHVybiBSZWNvbnN0cnVjdDsKKworICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIgPSAqc3R5bGVSZXNvbHZlcklmRXhpc3RzKCk7CisKKyAgICAvLyBGaW5kIG91dCB3
aGljaCBzdHlsZXNoZWV0cyBhcmUgbmV3LgorICAgIHVuc2lnbmVkIG9sZFN0eWxlc2hlZXRDb3Vu
dCA9IG1fYWN0aXZlU3R5bGVTaGVldHMuc2l6ZSgpOworICAgIGlmIChuZXdTdHlsZXNoZWV0Q291
bnQgPCBvbGRTdHlsZXNoZWV0Q291bnQpCisgICAgICAgIHJldHVybiBSZWNvbnN0cnVjdDsKKwor
ICAgIFZlY3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiBhZGRlZFNoZWV0czsKKyAgICB1bnNpZ25l
ZCBuZXdJbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBvbGRJbmRleCA9IDA7IG9sZEluZGV4
IDwgb2xkU3R5bGVzaGVldENvdW50OyArK29sZEluZGV4KSB7CisgICAgICAgIGlmIChuZXdJbmRl
eCA+PSBuZXdTdHlsZXNoZWV0Q291bnQpCisgICAgICAgICAgICByZXR1cm4gUmVjb25zdHJ1Y3Q7
CisgICAgICAgIHdoaWxlIChtX2FjdGl2ZVN0eWxlU2hlZXRzW29sZEluZGV4XSAhPSBuZXdTdHls
ZXNoZWV0c1tuZXdJbmRleF0pIHsKKyAgICAgICAgICAgIGFkZGVkU2hlZXRzLmFwcGVuZCgmbmV3
U3R5bGVzaGVldHNbbmV3SW5kZXhdLT5jb250ZW50cygpKTsKKyAgICAgICAgICAgICsrbmV3SW5k
ZXg7CisgICAgICAgICAgICBpZiAobmV3SW5kZXggPT0gbmV3U3R5bGVzaGVldENvdW50KQorICAg
ICAgICAgICAgICAgIHJldHVybiBSZWNvbnN0cnVjdDsKKyAgICAgICAgfQorICAgICAgICArK25l
d0luZGV4OworICAgIH0KKyAgICBib29sIGhhc0luc2VydGlvbnMgPSAhYWRkZWRTaGVldHMuaXNF
bXB0eSgpOworICAgIHdoaWxlIChuZXdJbmRleCA8IG5ld1N0eWxlc2hlZXRDb3VudCkgeworICAg
ICAgICBhZGRlZFNoZWV0cy5hcHBlbmQoJm5ld1N0eWxlc2hlZXRzW25ld0luZGV4XS0+Y29udGVu
dHMoKSk7CisgICAgICAgICsrbmV3SW5kZXg7CisgICAgfQorICAgIC8vIElmIGFsbCBuZXcgc2hl
ZXRzIHdlcmUgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCB3ZSBjYW4ganVzdCBhZGQgdGhl
bSB0byBleGlzdGluZyBTdHlsZVJlc29sdmVyLgorICAgIC8vIElmIHRoZXJlIHdlcmUgaW5zZXJ0
aW9ucyB3ZSBuZWVkIHRvIHJlLWFkZCBhbGwgdGhlIHN0eWxlc2hlZXRzIHNvIHJ1bGVzIGFyZSBv
cmRlcmVkIGNvcnJlY3RseS4KKyAgICBhdXRvIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID0gaGFz
SW5zZXJ0aW9ucyA/IFJlc2V0IDogQWRkaXRpdmU7CisKKyAgICAvLyBJZiB3ZSBhcmUgYWxyZWFk
eSBwYXJzaW5nIHRoZSBib2R5IGFuZCBzbyBtYXkgaGF2ZSBzaWduaWZpY2FudCBhbW91bnQgb2Yg
ZWxlbWVudHMsIHB1dCBzb21lIGVmZm9ydCBpbnRvIHRyeWluZyB0byBhdm9pZCBzdHlsZSByZWNh
bGNzLgorICAgIGlmICghbV9kb2N1bWVudC5ib2R5T3JGcmFtZXNldCgpIHx8IG1fZG9jdW1lbnQu
aGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpKQorICAgICAgICByZXR1cm4gc3R5bGVSZXNv
bHZlclVwZGF0ZVR5cGU7CisKKyAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzIGludmFsaWRh
dGlvbkFuYWx5c2lzKGFkZGVkU2hlZXRzLCBzdHlsZVJlc29sdmVyLm1lZGlhUXVlcnlFdmFsdWF0
b3IoKSk7CisgICAgaWYgKGludmFsaWRhdGlvbkFuYWx5c2lzLmRpcnRpZXNBbGxTdHlsZSgpKQor
ICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGU7CisgICAgaW52YWxpZGF0aW9u
QW5hbHlzaXMuaW52YWxpZGF0ZVN0eWxlKG1fZG9jdW1lbnQpOworICAgIHJlcXVpcmVzRnVsbFN0
eWxlUmVjYWxjID0gZmFsc2U7CisKKyAgICByZXR1cm4gc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGU7
Cit9CisKK3N0YXRpYyB2b2lkIGZpbHRlckVuYWJsZWROb25lbXB0eUNTU1N0eWxlU2hlZXRzKFZl
Y3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiByZXN1bHQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
U3R5bGVTaGVldD4+JiBzaGVldHMpCit7CisgICAgZm9yIChhdXRvJiBzaGVldCA6IHNoZWV0cykg
eworICAgICAgICBpZiAoIWlzPENTU1N0eWxlU2hlZXQ+KCpzaGVldCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgQ1NTU3R5bGVTaGVldCYgc3R5bGVTaGVldCA9IGRvd25jYXN0PENT
U1N0eWxlU2hlZXQ+KCpzaGVldCk7CisgICAgICAgIGlmIChzdHlsZVNoZWV0LmlzTG9hZGluZygp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChzdHlsZVNoZWV0LmRpc2FibGVk
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFzdHlsZVNoZWV0Lmxlbmd0
aCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJnN0eWxl
U2hlZXQpOworICAgIH0KK30KKwordm9pZCBBdXRob3JTdHlsZVNoZWV0czo6dXBkYXRlQWN0aXZl
U3R5bGVTaGVldHMoVXBkYXRlVHlwZSB1cGRhdGVUeXBlKQoreworICAgIEFTU0VSVCghbV9wZW5k
aW5nVXBkYXRlVHlwZSk7CisKKyAgICBpZiAobV9kb2N1bWVudC5pblN0eWxlUmVjYWxjKCkgfHwg
bV9kb2N1bWVudC5pblJlbmRlclRyZWVVcGRhdGUoKSkgeworICAgICAgICAvLyBQcm90ZWN0IGFn
YWluc3QgZGVsZXRpbmcgc3R5bGUgcmVzb2x2ZXIgaW4gdGhlIG1pZGRsZSBvZiBhIHN0eWxlIHJl
c29sdXRpb24uCisgICAgICAgIC8vIENyYXNoIHN0YWNrcyBpbmRpY2F0ZSB3ZSBjYW4gZ2V0IGhl
cmUgd2hlbiBhIHJlc291cmNlIGxvYWQgZmFpbHMgc3luY2hyb25vdXNseSAoZm9yIGV4YW1wbGUg
ZHVlIHRvIGNvbnRlbnQgYmxvY2tpbmcpLgorICAgICAgICAvLyBGSVhNRTogVGhlc2Uga2luZCBv
ZiBjYXNlcyBzaG91bGQgYmUgZWxpbWluYXRlZCBhbmQgdGhpcyBwYXRoIHJlcGxhY2VkIGJ5IGFu
IGFzc2VydC4KKyAgICAgICAgbV9wZW5kaW5nVXBkYXRlVHlwZSA9IFVwZGF0ZVR5cGU6OkNvbnRl
bnRzT3JJbnRlcnByZXRhdGlvbjsKKyAgICAgICAgbV9kb2N1bWVudC5zY2hlZHVsZUZvcmNlZFN0
eWxlUmVjYWxjKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fZG9jdW1l
bnQuaGFzTGl2aW5nUmVuZGVyVHJlZSgpKSB7CisgICAgICAgIG1fZG9jdW1lbnQuY2xlYXJTdHls
ZVJlc29sdmVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBib3Ro
ZXIgdXBkYXRpbmcsIHNpbmNlIHdlIGhhdmVuJ3QgbG9hZGVkIGFsbCBvdXIgc3R5bGUgaW5mbyB5
ZXQKKyAgICAvLyBhbmQgaGF2ZW4ndCBjYWxjdWxhdGVkIHRoZSBzdHlsZSByZXNvbHZlciBmb3Ig
dGhlIGZpcnN0IHRpbWUuCisgICAgaWYgKCFtX3NoYWRvd1Jvb3QgJiYgIW1fZGlkVXBkYXRlQWN0
aXZlU3R5bGVTaGVldHMgJiYgbV9wZW5kaW5nU3R5bGVTaGVldENvdW50KSB7CisgICAgICAgIG1f
ZG9jdW1lbnQuY2xlYXJTdHlsZVJlc29sdmVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogU3VwcG9ydCBvcHRpbWl6ZWQgaW52YWxpZGF0aW9uIGluIHNoYWRvdyB0
cmVlcy4KKyAgICBpZiAobV9zaGFkb3dSb290KQorICAgICAgICB1cGRhdGVUeXBlID0gVXBkYXRl
VHlwZTo6Q29udGVudHNPckludGVycHJldGF0aW9uOworCisgICAgbV9kaWRVcGRhdGVBY3RpdmVT
dHlsZVNoZWV0cyA9IHRydWU7CisKKyAgICBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiBhY3Rp
dmVTdHlsZVNoZWV0czsKKyAgICBjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMoYWN0aXZlU3R5bGVT
aGVldHMpOworCisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gYWN0aXZlQ1NTU3R5
bGVTaGVldHM7CisgICAgYWN0aXZlQ1NTU3R5bGVTaGVldHMuYXBwZW5kVmVjdG9yKG1fZG9jdW1l
bnQuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzKCkpOwor
ICAgIGFjdGl2ZUNTU1N0eWxlU2hlZXRzLmFwcGVuZFZlY3RvcihtX2RvY3VtZW50LmV4dGVuc2lv
blN0eWxlU2hlZXRzKCkuYXV0aG9yU3R5bGVTaGVldHNGb3JUZXN0aW5nKCkpOworICAgIGZpbHRl
ckVuYWJsZWROb25lbXB0eUNTU1N0eWxlU2hlZXRzKGFjdGl2ZUNTU1N0eWxlU2hlZXRzLCBhY3Rp
dmVTdHlsZVNoZWV0cyk7CisKKyAgICBib29sIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjID0gdHJ1
ZTsKKyAgICBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9
IFJlY29uc3RydWN0OworICAgIGlmICh1cGRhdGVUeXBlID09IFVwZGF0ZVR5cGU6OkFjdGl2ZVNl
dCkKKyAgICAgICAgc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgPSBhbmFseXplU3R5bGVTaGVldENo
YW5nZShhY3RpdmVDU1NTdHlsZVNoZWV0cywgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpOworCisg
ICAgdXBkYXRlU3R5bGVSZXNvbHZlcihhY3RpdmVDU1NTdHlsZVNoZWV0cywgc3R5bGVSZXNvbHZl
clVwZGF0ZVR5cGUpOworCisgICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JG
YXN0TG9va3VwID0gbnVsbHB0cjsKKyAgICBtX2FjdGl2ZVN0eWxlU2hlZXRzLnN3YXAoYWN0aXZl
Q1NTU3R5bGVTaGVldHMpOworICAgIG1fc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdC5zd2Fw
KGFjdGl2ZVN0eWxlU2hlZXRzKTsKKworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWN0
aXZlU3R5bGVTaGVldHNVcGRhdGVkKG1fZG9jdW1lbnQpOworCisgICAgZm9yIChjb25zdCBhdXRv
JiBzaGVldCA6IG1fYWN0aXZlU3R5bGVTaGVldHMpIHsKKyAgICAgICAgaWYgKHNoZWV0LT5jb250
ZW50cygpLnVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKSkKKyAgICAgICAgICAgIG1fdXNlc1N0
eWxlQmFzZWRFZGl0YWJpbGl0eSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKHJlcXVpcmVzRnVs
bFN0eWxlUmVjYWxjKSB7CisgICAgICAgIGlmIChtX3NoYWRvd1Jvb3QpIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byYgc2hhZG93Q2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxFbGVtZW50PigqbV9zaGFk
b3dSb290KSkKKyAgICAgICAgICAgICAgICBzaGFkb3dDaGlsZC5zZXROZWVkc1N0eWxlUmVjYWxj
KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9kb2N1bWVudC5zY2hlZHVsZUZvcmNl
ZFN0eWxlUmVjYWxjKCk7CisgICAgfQorfQorCit2b2lkIEF1dGhvclN0eWxlU2hlZXRzOjp1cGRh
dGVTdHlsZVJlc29sdmVyKFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBhY3RpdmVTdHls
ZVNoZWV0cywgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgdXBkYXRlVHlwZSkKK3sKKyAgICBpZiAo
dXBkYXRlVHlwZSA9PSBSZWNvbnN0cnVjdCkgeworICAgICAgICBpZiAobV9zaGFkb3dSb290KQor
ICAgICAgICAgICAgbV9zaGFkb3dSb290LT5yZXNldFN0eWxlUmVzb2x2ZXIoKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9kb2N1bWVudC5jbGVhclN0eWxlUmVzb2x2ZXIoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBhdXRvJiBzdHlsZVJlc29sdmVyID0gdGhpcy0+c3R5bGVS
ZXNvbHZlcigpOworCisgICAgaWYgKHVwZGF0ZVR5cGUgPT0gUmVzZXQpIHsKKyAgICAgICAgc3R5
bGVSZXNvbHZlci5ydWxlU2V0cygpLnJlc2V0QXV0aG9yU3R5bGUoKTsKKyAgICAgICAgc3R5bGVS
ZXNvbHZlci5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhhY3RpdmVTdHlsZVNoZWV0cyk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHVwZGF0ZVR5cGUgPT0gQWRkaXRpdmUpOworICAgICAg
ICB1bnNpZ25lZCBmaXJzdE5ld0luZGV4ID0gbV9hY3RpdmVTdHlsZVNoZWV0cy5zaXplKCk7Cisg
ICAgICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IG5ld1N0eWxlU2hlZXRzOworICAg
ICAgICBuZXdTdHlsZVNoZWV0cy5hcHBlbmRSYW5nZShhY3RpdmVTdHlsZVNoZWV0cy5iZWdpbigp
ICsgZmlyc3ROZXdJbmRleCwgYWN0aXZlU3R5bGVTaGVldHMuZW5kKCkpOworICAgICAgICBzdHls
ZVJlc29sdmVyLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKG5ld1N0eWxlU2hlZXRzKTsKKyAgICB9
CisKKyAgICBpZiAoIW1fc2hhZG93Um9vdCkgeworICAgICAgICBhdXRvJiB1c2VyQWdlbnRTaGFk
b3dUcmVlU3R5bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQudXNlckFnZW50U2hhZG93VHJlZVN0eWxl
UmVzb2x2ZXIoKTsKKyAgICAgICAgdXNlckFnZW50U2hhZG93VHJlZVN0eWxlUmVzb2x2ZXIucnVs
ZVNldHMoKS5yZXNldEF1dGhvclN0eWxlKCk7CisgICAgICAgIGF1dG8mIGF1dGhvclJ1bGVTZXQg
PSBzdHlsZVJlc29sdmVyLnJ1bGVTZXRzKCkuYXV0aG9yU3R5bGUoKTsKKyAgICAgICAgaWYgKGF1
dGhvclJ1bGVTZXQuaGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKCkpCisgICAgICAgICAgICB1
c2VyQWdlbnRTaGFkb3dUcmVlU3R5bGVSZXNvbHZlci5ydWxlU2V0cygpLmF1dGhvclN0eWxlKCku
Y29weVNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0Zyb20oYXV0aG9yUnVsZVNldCk7CisgICAgfQor
fQorCitjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBBdXRob3JTdHlsZVNoZWV0
czo6YWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IoKSBjb25zdAoreworICAgIFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4+IHJlc3VsdDsKKworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3Io
bV9kb2N1bWVudC5leHRlbnNpb25TdHlsZVNoZWV0cygpLmluamVjdGVkQXV0aG9yU3R5bGVTaGVl
dHMoKSk7CisgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihtX2RvY3VtZW50LmV4dGVuc2lvblN0eWxl
U2hlZXRzKCkuYXV0aG9yU3R5bGVTaGVldHNGb3JUZXN0aW5nKCkpOworCisgICAgZm9yIChhdXRv
JiBzdHlsZVNoZWV0IDogbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KSB7CisgICAgICAg
IGlmICghaXM8Q1NTU3R5bGVTaGVldD4oKnN0eWxlU2hlZXQpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgQ1NTU3R5bGVTaGVldCYgc2hlZXQgPSBkb3duY2FzdDxDU1NTdHlsZVNo
ZWV0Pigqc3R5bGVTaGVldCk7CisgICAgICAgIGlmIChzaGVldC5kaXNhYmxlZCgpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgmc2hlZXQpOworICAgIH0K
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQXV0aG9yU3R5bGVTaGVldHM6OmFjdGl2
ZVN0eWxlU2hlZXRzQ29udGFpbnMoY29uc3QgQ1NTU3R5bGVTaGVldCogc2hlZXQpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAp
IHsKKyAgICAgICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3Vw
ID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoU2V0PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4oKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBhY3RpdmVTdHlsZVNoZWV0IDogbV9hY3RpdmVTdHlsZVNoZWV0cykK
KyAgICAgICAgICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1
cC0+YWRkKGFjdGl2ZVN0eWxlU2hlZXQuZ2V0KCkpOworICAgIH0KKyAgICByZXR1cm4gbV93ZWFr
Q29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwLT5jb250YWlucyhzaGVldCk7
Cit9CisKK3ZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OmZsdXNoUGVuZGluZ1VwZGF0ZSgpCit7Cisg
ICAgaWYgKCFtX3BlbmRpbmdVcGRhdGVUeXBlKQorICAgICAgICByZXR1cm47CisgICAgYXV0byB1
cGRhdGVUeXBlID0gKm1fcGVuZGluZ1VwZGF0ZVR5cGU7CisKKyAgICBjbGVhclBlbmRpbmdVcGRh
dGUoKTsKKworICAgIHVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKHVwZGF0ZVR5cGUpOworfQorCit2
b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpjbGVhclBlbmRpbmdVcGRhdGUoKQoreworICAgIG1fcGVu
ZGluZ1VwZGF0ZVRpbWVyLnN0b3AoKTsKKyAgICBtX3BlbmRpbmdVcGRhdGVUeXBlID0geyB9Owor
fQorCit2b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpzY2hlZHVsZUFjdGl2ZVNldFVwZGF0ZSgpCit7
CisgICAgaWYgKG1fc2hhZG93Um9vdCkgeworICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBm
bHVzaCB1cGRhdGVzIHJlY3Vyc2l2ZWx5IHRvIHN1cHBvcnQgYXN5bmNocm9ub3VzIHVwZGF0ZXMg
aW4gc2hhZG93IHRyZWVzLgorICAgICAgICBkaWRDaGFuZ2VDYW5kaWRhdGVzRm9yQWN0aXZlU2V0
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fcGVuZGluZ1VwZGF0ZVRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fcGVuZGluZ1VwZGF0ZVR5
cGUpCisgICAgICAgIG1fcGVuZGluZ1VwZGF0ZVR5cGUgPSBVcGRhdGVUeXBlOjpBY3RpdmVTZXQ7
CisgICAgbV9wZW5kaW5nVXBkYXRlVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIEF1
dGhvclN0eWxlU2hlZXRzOjpkaWRDaGFuZ2VDYW5kaWRhdGVzRm9yQWN0aXZlU2V0KCkKK3sKKyAg
ICBhdXRvIHVwZGF0ZVR5cGUgPSBtX3BlbmRpbmdVcGRhdGVUeXBlLnZhbHVlT3IoVXBkYXRlVHlw
ZTo6QWN0aXZlU2V0KTsKKyAgICBjbGVhclBlbmRpbmdVcGRhdGUoKTsKKyAgICB1cGRhdGVBY3Rp
dmVTdHlsZVNoZWV0cyh1cGRhdGVUeXBlKTsKK30KKwordm9pZCBBdXRob3JTdHlsZVNoZWV0czo6
ZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCkKK3sKKyAgICBjbGVhclBlbmRpbmdV
cGRhdGUoKTsKKyAgICB1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhVcGRhdGVUeXBlOjpDb250ZW50
c09ySW50ZXJwcmV0YXRpb24pOworfQorCit2b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpwZW5kaW5n
VXBkYXRlVGltZXJGaXJlZCgpCit7CisgICAgZmx1c2hQZW5kaW5nVXBkYXRlKCk7Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCShyZXZpc2lvbiAyMDY4ODApCisr
KyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Myw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3
ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDksIDIwMTEtMjAxMiwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAw
OSwgMjAxMS0yMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKQEAgLTI2LDcgKzI2LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlLmgi
CiAKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgpAQCAt
NTYsMjAgKzU2LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBDb250
ZW50RXh0ZW5zaW9uczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUF1dGhvclN0eWxl
U2hlZXRzOjpBdXRob3JTdHlsZVNoZWV0cyhEb2N1bWVudCYgZG9jdW1lbnQpCituYW1lc3BhY2Ug
U3R5bGUgeworCitTY29wZTo6U2NvcGUoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV9kb2N1
bWVudChkb2N1bWVudCkKLSAgICAsIG1fcGVuZGluZ1VwZGF0ZVRpbWVyKCp0aGlzLCAmQXV0aG9y
U3R5bGVTaGVldHM6OnBlbmRpbmdVcGRhdGVUaW1lckZpcmVkKQorICAgICwgbV9wZW5kaW5nVXBk
YXRlVGltZXIoKnRoaXMsICZTY29wZTo6cGVuZGluZ1VwZGF0ZVRpbWVyRmlyZWQpCiB7CiB9CiAK
LUF1dGhvclN0eWxlU2hlZXRzOjpBdXRob3JTdHlsZVNoZWV0cyhTaGFkb3dSb290JiBzaGFkb3dS
b290KQorU2NvcGU6OlNjb3BlKFNoYWRvd1Jvb3QmIHNoYWRvd1Jvb3QpCiAgICAgOiBtX2RvY3Vt
ZW50KHNoYWRvd1Jvb3QuZG9jdW1lbnRTY29wZSgpKQogICAgICwgbV9zaGFkb3dSb290KCZzaGFk
b3dSb290KQotICAgICwgbV9wZW5kaW5nVXBkYXRlVGltZXIoKnRoaXMsICZBdXRob3JTdHlsZVNo
ZWV0czo6cGVuZGluZ1VwZGF0ZVRpbWVyRmlyZWQpCisgICAgLCBtX3BlbmRpbmdVcGRhdGVUaW1l
cigqdGhpcywgJlNjb3BlOjpwZW5kaW5nVXBkYXRlVGltZXJGaXJlZCkKIHsKIH0KIAotU3R5bGVS
ZXNvbHZlciYgQXV0aG9yU3R5bGVTaGVldHM6OnN0eWxlUmVzb2x2ZXIoKQorU3R5bGVSZXNvbHZl
ciYgU2NvcGU6OnN0eWxlUmVzb2x2ZXIoKQogewogICAgIGlmIChtX3NoYWRvd1Jvb3QpCiAgICAg
ICAgIHJldHVybiBtX3NoYWRvd1Jvb3QtPnN0eWxlUmVzb2x2ZXIoKTsKQEAgLTc3LDcgKzc5LDcg
QEAgU3R5bGVSZXNvbHZlciYgQXV0aG9yU3R5bGVTaGVldHM6OnN0eWxlUgogICAgIHJldHVybiBt
X2RvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKIH0KIAotU3R5bGVSZXNvbHZlciogQXV0
aG9yU3R5bGVTaGVldHM6OnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpCitTdHlsZVJlc29sdmVyKiBT
Y29wZTo6c3R5bGVSZXNvbHZlcklmRXhpc3RzKCkKIHsKICAgICBpZiAobV9zaGFkb3dSb290KQog
ICAgICAgICByZXR1cm4gbV9zaGFkb3dSb290LT5zdHlsZVJlc29sdmVySWZFeGlzdHMoKTsKQEAg
LTg1LDE3ICs4NywxNyBAQCBTdHlsZVJlc29sdmVyKiBBdXRob3JTdHlsZVNoZWV0czo6c3R5bGVS
CiAgICAgcmV0dXJuIG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlcklmRXhpc3RzKCk7CiB9CiAKLUF1
dGhvclN0eWxlU2hlZXRzJiBBdXRob3JTdHlsZVNoZWV0czo6Zm9yTm9kZShOb2RlJiBub2RlKQor
U2NvcGUmIFNjb3BlOjpmb3JOb2RlKE5vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUuaW5E
b2N1bWVudCgpKTsKICAgICBhdXRvKiBzaGFkb3dSb290ID0gbm9kZS5jb250YWluaW5nU2hhZG93
Um9vdCgpOwogICAgIGlmIChzaGFkb3dSb290KQotICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+
YXV0aG9yU3R5bGVTaGVldHMoKTsKLSAgICByZXR1cm4gbm9kZS5kb2N1bWVudCgpLmF1dGhvclN0
eWxlU2hlZXRzKCk7CisgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5zdHlsZVNjb3BlKCk7Cisg
ICAgcmV0dXJuIG5vZGUuZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCk7CiB9CiAKIC8vIFRoaXMgbWV0
aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhIHRvcC1sZXZlbCBzdHlsZXNoZWV0IGhhcyBmaW5pc2hl
ZCBsb2FkaW5nLgotdm9pZCBBdXRob3JTdHlsZVNoZWV0czo6cmVtb3ZlUGVuZGluZ1NoZWV0KFJl
bW92ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlvblR5cGUgbm90aWZpY2F0aW9uKQordm9pZCBTY29w
ZTo6cmVtb3ZlUGVuZGluZ1NoZWV0KFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlvblR5cGUg
bm90aWZpY2F0aW9uKQogewogICAgIC8vIE1ha2Ugc3VyZSB3ZSBrbmV3IHRoaXMgc2hlZXQgd2Fz
IHBlbmRpbmcsIGFuZCB0aGF0IG91ciBjb3VudCBpc24ndCBvdXQgb2Ygc3luYy4KICAgICBBU1NF
UlQobV9wZW5kaW5nU3R5bGVTaGVldENvdW50ID4gMCk7CkBAIC0xMjMsNyArMTI1LDcgQEAgdm9p
ZCBBdXRob3JTdHlsZVNoZWV0czo6cmVtb3ZlUGVuZGluZ1NoZQogICAgIG1fZG9jdW1lbnQuZGlk
UmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hlZXQoKTsKIH0KIAotdm9pZCBBdXRob3JTdHlsZVNoZWV0
czo6YWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSwgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpCit2b2lkIFNjb3BlOjphZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShOb2RlJiBub2Rl
LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKICAgICBpZiAoIW5vZGUuaW5Eb2N1bWVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNTYsMTMgKzE1OCwxMyBAQCB2b2lkIEF1dGhvclN0eWxlU2hl
ZXRzOjphZGRTdHlsZVNoZWV0Q2FuCiAgICAgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaW5z
ZXJ0QmVmb3JlKGZvbGxvd2luZ05vZGUsICZub2RlKTsKIH0KIAotdm9pZCBBdXRob3JTdHlsZVNo
ZWV0czo6cmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSkKK3ZvaWQgU2Nv
cGU6OnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUmIG5vZGUpCiB7CiAgICAgaWYg
KG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLnJlbW92ZSgmbm9kZSkpCiAgICAgICAgIHNjaGVk
dWxlQWN0aXZlU2V0VXBkYXRlKCk7CiB9CiAKLXZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OmNvbGxl
Y3RBY3RpdmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRzKQor
dm9pZCBTY29wZTo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVT
aGVldD4+JiBzaGVldHMpCiB7CiAgICAgaWYgKG1fZG9jdW1lbnQuc2V0dGluZ3MoKSAmJiAhbV9k
b2N1bWVudC5zZXR0aW5ncygpLT5hdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yNDAsNyArMjQyLDcgQEAgdm9pZCBBdXRob3JTdHlsZVNoZWV0czo6Y29s
bGVjdEFjdGl2ZVN0eQogICAgIH0KIH0KIAotQXV0aG9yU3R5bGVTaGVldHM6OlN0eWxlUmVzb2x2
ZXJVcGRhdGVUeXBlIEF1dGhvclN0eWxlU2hlZXRzOjphbmFseXplU3R5bGVTaGVldENoYW5nZShj
b25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgbmV3U3R5bGVzaGVldHMsIGJvb2wm
IHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKQorU2NvcGU6OlN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBl
IFNjb3BlOjphbmFseXplU3R5bGVTaGVldENoYW5nZShjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0
eWxlU2hlZXQ+PiYgbmV3U3R5bGVzaGVldHMsIGJvb2wmIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxj
KQogewogICAgIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjID0gdHJ1ZTsKICAgICAKQEAgLTMwNyw3
ICszMDksNyBAQCBzdGF0aWMgdm9pZCBmaWx0ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHlsCiAgICAg
fQogfQogCi12b2lkIEF1dGhvclN0eWxlU2hlZXRzOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhV
cGRhdGVUeXBlIHVwZGF0ZVR5cGUpCit2b2lkIFNjb3BlOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0
cyhVcGRhdGVUeXBlIHVwZGF0ZVR5cGUpCiB7CiAgICAgQVNTRVJUKCFtX3BlbmRpbmdVcGRhdGVU
eXBlKTsKIApAQCAtMzczLDcgKzM3NSw3IEBAIHZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OnVwZGF0
ZUFjdGl2ZVN0eWwKICAgICB9CiB9CiAKLXZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OnVwZGF0ZVN0
eWxlUmVzb2x2ZXIoVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGFjdGl2ZVN0eWxlU2hl
ZXRzLCBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSB1cGRhdGVUeXBlKQordm9pZCBTY29wZTo6dXBk
YXRlU3R5bGVSZXNvbHZlcihWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgYWN0aXZlU3R5
bGVTaGVldHMsIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIHVwZGF0ZVR5cGUpCiB7CiAgICAgaWYg
KHVwZGF0ZVR5cGUgPT0gUmVjb25zdHJ1Y3QpIHsKICAgICAgICAgaWYgKG1fc2hhZG93Um9vdCkK
QEAgLTQwNCw3ICs0MDYsNyBAQCB2b2lkIEF1dGhvclN0eWxlU2hlZXRzOjp1cGRhdGVTdHlsZVJl
c29sCiAgICAgfQogfQogCi1jb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBBdXRo
b3JTdHlsZVNoZWV0czo6YWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IoKSBjb25zdAorY29u
c3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gU2NvcGU6OmFjdGl2ZVN0eWxlU2hlZXRz
Rm9ySW5zcGVjdG9yKCkgY29uc3QKIHsKICAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+
PiByZXN1bHQ7CiAKQEAgLTQyNSw3ICs0MjcsNyBAQCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0
eWxlU2hlZXQ+PiBBdXRoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBBdXRob3JTdHls
ZVNoZWV0czo6YWN0aXZlU3R5bGVTaGVldHNDb250YWlucyhjb25zdCBDU1NTdHlsZVNoZWV0KiBz
aGVldCkgY29uc3QKK2Jvb2wgU2NvcGU6OmFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMoY29uc3Qg
Q1NTU3R5bGVTaGVldCogc2hlZXQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3dlYWtDb3B5T2ZBY3Rp
dmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXApIHsKICAgICAgICAgbV93ZWFrQ29weU9mQWN0
aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoU2V0
PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4oKTsKQEAgLTQzNSw3ICs0MzcsNyBAQCBib29sIEF1dGhv
clN0eWxlU2hlZXRzOjphY3RpdmVTdHlsZVNoZWV0CiAgICAgcmV0dXJuIG1fd2Vha0NvcHlPZkFj
dGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cC0+Y29udGFpbnMoc2hlZXQpOwogfQogCi12
b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpmbHVzaFBlbmRpbmdVcGRhdGUoKQordm9pZCBTY29wZTo6
Zmx1c2hQZW5kaW5nVXBkYXRlKCkKIHsKICAgICBpZiAoIW1fcGVuZGluZ1VwZGF0ZVR5cGUpCiAg
ICAgICAgIHJldHVybjsKQEAgLTQ0NiwxMyArNDQ4LDEzIEBAIHZvaWQgQXV0aG9yU3R5bGVTaGVl
dHM6OmZsdXNoUGVuZGluZ1VwZGEKICAgICB1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyh1cGRhdGVU
eXBlKTsKIH0KIAotdm9pZCBBdXRob3JTdHlsZVNoZWV0czo6Y2xlYXJQZW5kaW5nVXBkYXRlKCkK
K3ZvaWQgU2NvcGU6OmNsZWFyUGVuZGluZ1VwZGF0ZSgpCiB7CiAgICAgbV9wZW5kaW5nVXBkYXRl
VGltZXIuc3RvcCgpOwogICAgIG1fcGVuZGluZ1VwZGF0ZVR5cGUgPSB7IH07CiB9CiAKLXZvaWQg
QXV0aG9yU3R5bGVTaGVldHM6OnNjaGVkdWxlQWN0aXZlU2V0VXBkYXRlKCkKK3ZvaWQgU2NvcGU6
OnNjaGVkdWxlQWN0aXZlU2V0VXBkYXRlKCkKIHsKICAgICBpZiAobV9zaGFkb3dSb290KSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZsdXNoIHVwZGF0ZXMgcmVjdXJzaXZlbHkgdG8g
c3VwcG9ydCBhc3luY2hyb25vdXMgdXBkYXRlcyBpbiBzaGFkb3cgdHJlZXMuCkBAIC00NjYsMjIg
KzQ2OCwyMyBAQCB2b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpzY2hlZHVsZUFjdGl2ZVNlCiAgICAg
bV9wZW5kaW5nVXBkYXRlVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIEF1dGhvclN0
eWxlU2hlZXRzOjpkaWRDaGFuZ2VDYW5kaWRhdGVzRm9yQWN0aXZlU2V0KCkKK3ZvaWQgU2NvcGU6
OmRpZENoYW5nZUNhbmRpZGF0ZXNGb3JBY3RpdmVTZXQoKQogewogICAgIGF1dG8gdXBkYXRlVHlw
ZSA9IG1fcGVuZGluZ1VwZGF0ZVR5cGUudmFsdWVPcihVcGRhdGVUeXBlOjpBY3RpdmVTZXQpOwog
ICAgIGNsZWFyUGVuZGluZ1VwZGF0ZSgpOwogICAgIHVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKHVw
ZGF0ZVR5cGUpOwogfQogCi12b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpkaWRDaGFuZ2VDb250ZW50
c09ySW50ZXJwcmV0YXRpb24oKQordm9pZCBTY29wZTo6ZGlkQ2hhbmdlQ29udGVudHNPckludGVy
cHJldGF0aW9uKCkKIHsKICAgICBjbGVhclBlbmRpbmdVcGRhdGUoKTsKICAgICB1cGRhdGVBY3Rp
dmVTdHlsZVNoZWV0cyhVcGRhdGVUeXBlOjpDb250ZW50c09ySW50ZXJwcmV0YXRpb24pOwogfQog
Ci12b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpwZW5kaW5nVXBkYXRlVGltZXJGaXJlZCgpCit2b2lk
IFNjb3BlOjpwZW5kaW5nVXBkYXRlVGltZXJGaXJlZCgpCiB7CiAgICAgZmx1c2hQZW5kaW5nVXBk
YXRlKCk7CiB9CiAKIH0KK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmgJKHJldmlz
aW9uIDIwNjg4MCkJKGZyb20gU291cmNlL1dlYkNvcmUvZG9tL0F1dGhvclN0eWxlU2hlZXRzLmg6
MjA2ODgwKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8g
KGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyICht
dWVsbGVyQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
diAoYXBAd2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwLCAyMDEyLTIwMTMs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgQXV0aG9yU3R5bGVT
aGVldHNfaAorI2RlZmluZSBBdXRob3JTdHlsZVNoZWV0c19oCisKKyNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NTdHls
ZVNoZWV0OworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBOb2RlOworY2xhc3MgU3R5bGVSZXNvbHZl
cjsKK2NsYXNzIFN0eWxlU2hlZXQ7CitjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CitjbGFzcyBT
dHlsZVNoZWV0TGlzdDsKK2NsYXNzIFNoYWRvd1Jvb3Q7CitjbGFzcyBUcmVlU2NvcGU7CisKK2Ns
YXNzIEF1dGhvclN0eWxlU2hlZXRzIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBBdXRob3JTdHlsZVNoZWV0cyhEb2N1bWVudCYpOworICAgIGV4
cGxpY2l0IEF1dGhvclN0eWxlU2hlZXRzKFNoYWRvd1Jvb3QmKTsKKworICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBhY3RpdmVTdHlsZVNoZWV0cygpIGNvbnN0IHsgcmV0
dXJuIG1fYWN0aXZlU3R5bGVTaGVldHM7IH0KKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5
bGVTaGVldD4+JiBzdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0OyB9CisgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxDU1NTdHlsZVNoZWV0Pj4gYWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IoKSBjb25zdDsK
KworICAgIHZvaWQgYWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYsIGJvb2wgY3JlYXRl
ZEJ5UGFyc2VyKTsKKyAgICB2b2lkIHJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUm
KTsKKworICAgIFN0cmluZyBwcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWU7IH0KKyAgICBTdHJpbmcgc2VsZWN0ZWRT
dHlsZXNoZWV0U2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0ZWRTdHlsZXNoZWV0U2V0
TmFtZTsgfQorICAgIHZvaWQgc2V0UHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUoY29uc3QgU3Ry
aW5nJiBuYW1lKSB7IG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUgPSBuYW1lOyB9CisgICAg
dm9pZCBzZXRTZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBt
X3NlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUgPSBuYW1lOyB9CisKKyAgICB2b2lkIGFkZFBlbmRp
bmdTaGVldCgpIHsgbV9wZW5kaW5nU3R5bGVTaGVldENvdW50Kys7IH0KKyAgICBlbnVtIFJlbW92
ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlvblR5cGUgeworICAgICAgICBSZW1vdmVQZW5kaW5nU2hl
ZXROb3RpZnlJbW1lZGlhdGVseSwKKyAgICAgICAgUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5TGF0
ZXIKKyAgICB9OworICAgIHZvaWQgcmVtb3ZlUGVuZGluZ1NoZWV0KFJlbW92ZVBlbmRpbmdTaGVl
dE5vdGlmaWNhdGlvblR5cGUgPSBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlJbW1lZGlhdGVseSk7
CisKKyAgICBib29sIGhhc1BlbmRpbmdTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdT
dHlsZVNoZWV0Q291bnQgPiAwOyB9CisKKyAgICBib29sIHVzZXNTdHlsZUJhc2VkRWRpdGFiaWxp
dHkoKSB7IHJldHVybiBtX3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHk7IH0KKworICAgIGJvb2wg
YWN0aXZlU3R5bGVTaGVldHNDb250YWlucyhjb25zdCBDU1NTdHlsZVNoZWV0KikgY29uc3Q7CisK
KyAgICB2b2lkIGRpZENoYW5nZUNhbmRpZGF0ZXNGb3JBY3RpdmVTZXQoKTsKKyAgICB2b2lkIHNj
aGVkdWxlQWN0aXZlU2V0VXBkYXRlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaWRDaGFu
Z2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKKworICAgIGJvb2wgaGFzUGVuZGluZ1VwZGF0
ZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9wZW5kaW5nVXBkYXRlVHlwZTsgfQorICAgIHZvaWQgZmx1
c2hQZW5kaW5nVXBkYXRlKCk7CisKKyAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKCk7
CisgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcklmRXhpc3RzKCk7CisKKyAgICBzdGF0
aWMgQXV0aG9yU3R5bGVTaGVldHMmIGZvck5vZGUoTm9kZSYpOworCitwcml2YXRlOgorICAgIGVu
dW0gY2xhc3MgVXBkYXRlVHlwZSB7IEFjdGl2ZVNldCwgQ29udGVudHNPckludGVycHJldGF0aW9u
IH07CisgICAgdm9pZCB1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhVcGRhdGVUeXBlKTsKKworICAg
IHZvaWQgY29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+
Jik7CisKKyAgICBlbnVtIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIHsKKyAgICAgICAgUmVjb25z
dHJ1Y3QsCisgICAgICAgIFJlc2V0LAorICAgICAgICBBZGRpdGl2ZQorICAgIH07CisgICAgU3R5
bGVSZXNvbHZlclVwZGF0ZVR5cGUgYW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UoY29uc3QgVmVjdG9y
PFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIG5ld1N0eWxlc2hlZXRzLCBib29sJiByZXF1aXJlc0Z1
bGxTdHlsZVJlY2FsYyk7CisgICAgdm9pZCB1cGRhdGVTdHlsZVJlc29sdmVyKFZlY3RvcjxSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4+JiwgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUpOworCisgICAgdm9p
ZCBwZW5kaW5nVXBkYXRlVGltZXJGaXJlZCgpOworICAgIHZvaWQgY2xlYXJQZW5kaW5nVXBkYXRl
KCk7CisKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKKyAgICBTaGFkb3dSb290KiBtX3NoYWRv
d1Jvb3QgeyBudWxscHRyIH07CisKKyAgICBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiBtX3N0
eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0Pj4gbV9hY3RpdmVTdHlsZVNoZWV0czsKKworICAgIFRpbWVyIG1fcGVuZGluZ1VwZGF0ZVRp
bWVyOworCisgICAgLy8gVGhpcyBpcyBhIG1pcnJvciBvZiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hl
ZXRzIHRoYXQgZ2V0cyBwb3B1bGF0ZWQgb24gZGVtYW5kIGZvciBhY3RpdmVTdHlsZVNoZWV0c0Nv
bnRhaW5zKCkuCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxjb25zdCBDU1NT
dHlsZVNoZWV0Kj4+IG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1
cDsKKworICAgIC8vIFRyYWNrIHRoZSBudW1iZXIgb2YgY3VycmVudGx5IGxvYWRpbmcgdG9wLWxl
dmVsIHN0eWxlc2hlZXRzIG5lZWRlZCBmb3IgcmVuZGVyaW5nLgorICAgIC8vIFNoZWV0cyBsb2Fk
ZWQgdXNpbmcgdGhlIEBpbXBvcnQgZGlyZWN0aXZlIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBj
b3VudC4KKyAgICAvLyBXZSB1c2UgdGhpcyBjb3VudCBvZiBwZW5kaW5nIHNoZWV0cyB0byBkZXRl
Y3Qgd2hlbiB3ZSBjYW4gYmVnaW4gYXR0YWNoaW5nCisgICAgLy8gZWxlbWVudHMgYW5kIHdoZW4g
aXQgaXMgc2FmZSB0byBleGVjdXRlIHNjcmlwdHMuCisgICAgaW50IG1fcGVuZGluZ1N0eWxlU2hl
ZXRDb3VudCB7IDAgfTsKKyAgICBib29sIG1fZGlkVXBkYXRlQWN0aXZlU3R5bGVTaGVldHMgeyBm
YWxzZSB9OworCisgICAgT3B0aW9uYWw8VXBkYXRlVHlwZT4gbV9wZW5kaW5nVXBkYXRlVHlwZTsK
KworICAgIExpc3RIYXNoU2V0PE5vZGUqPiBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2RlczsKKwor
ICAgIFN0cmluZyBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lOworICAgIFN0cmluZyBtX3Nl
bGVjdGVkU3R5bGVzaGVldFNldE5hbWU7CisKKyAgICBib29sIG1fdXNlc1N0eWxlQmFzZWRFZGl0
YWJpbGl0eSB7IGZhbHNlIH07Cit9OworCit9CisKKyNlbmRpZgorCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVTY29wZS5oCShyZXZpc2lvbiAyMDY4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDEwLCAyMDEyLTIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAsIDIwMTItMjAxMywgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0yNSw4ICsyNSw4IEBACiAgKgogICovCiAK
LSNpZm5kZWYgQXV0aG9yU3R5bGVTaGVldHNfaAotI2RlZmluZSBBdXRob3JTdHlsZVNoZWV0c19o
CisjaWZuZGVmIFN0eWxlU2NvcGVfaAorI2RlZmluZSBTdHlsZVNjb3BlX2gKIAogI2luY2x1ZGUg
IlRpbWVyLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAtNDksMTEgKzQ5LDEzIEBAIGNsYXNzIFN0
eWxlU2hlZXRMaXN0OwogY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNzIFRyZWVTY29wZTsKIAotY2xh
c3MgQXV0aG9yU3R5bGVTaGVldHMgeworbmFtZXNwYWNlIFN0eWxlIHsKKworY2xhc3MgU2NvcGUg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IEF1
dGhvclN0eWxlU2hlZXRzKERvY3VtZW50Jik7Ci0gICAgZXhwbGljaXQgQXV0aG9yU3R5bGVTaGVl
dHMoU2hhZG93Um9vdCYpOworICAgIGV4cGxpY2l0IFNjb3BlKERvY3VtZW50Jik7CisgICAgZXhw
bGljaXQgU2NvcGUoU2hhZG93Um9vdCYpOwogCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0Pj4mIGFjdGl2ZVN0eWxlU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVT
dHlsZVNoZWV0czsgfQogCkBAIC05MSw3ICs5Myw3IEBAIHB1YmxpYzoKICAgICBTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyKCk7CiAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcklm
RXhpc3RzKCk7CiAKLSAgICBzdGF0aWMgQXV0aG9yU3R5bGVTaGVldHMmIGZvck5vZGUoTm9kZSYp
OworICAgIHN0YXRpYyBTY29wZSYgZm9yTm9kZShOb2RlJik7CiAKIHByaXZhdGU6CiAgICAgZW51
bSBjbGFzcyBVcGRhdGVUeXBlIHsgQWN0aXZlU2V0LCBDb250ZW50c09ySW50ZXJwcmV0YXRpb24g
fTsKQEAgLTExOCw3ICsxMjAsNiBAQCBwcml2YXRlOgogCiAgICAgVGltZXIgbV9wZW5kaW5nVXBk
YXRlVGltZXI7CiAKLSAgICAvLyBUaGlzIGlzIGEgbWlycm9yIG9mIG1fYWN0aXZlQXV0aG9yU3R5
bGVTaGVldHMgdGhhdCBnZXRzIHBvcHVsYXRlZCBvbiBkZW1hbmQgZm9yIGFjdGl2ZVN0eWxlU2hl
ZXRzQ29udGFpbnMoKS4KICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PGNvbnN0
IENTU1N0eWxlU2hlZXQqPj4gbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0
TG9va3VwOwogCiAgICAgLy8gVHJhY2sgdGhlIG51bWJlciBvZiBjdXJyZW50bHkgbG9hZGluZyB0
b3AtbGV2ZWwgc3R5bGVzaGVldHMgbmVlZGVkIGZvciByZW5kZXJpbmcuCkBAIC0xMzksNiArMTQw
LDcgQEAgcHJpdmF0ZToKIH07CiAKIH0KK30KIAogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIwNjg3OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlVHJl
ZVJlc29sdmVyLmgiCiAKLSNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUg
IkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0
b3IuaCIKICNpbmNsdWRlICJDb21wb3NlZFRyZWVJdGVyYXRvci5oIgpAQCAtNDUsNiArNDQsNyBA
QAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rp
b25zLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlN0eWxlU2NvcGUu
aCIKICNpbmNsdWRlICJUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDY4NzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQsNyArMjQsNiBAQAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAjaW5jbHVkZSAiU1ZH
Rm9udEZhY2VFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2lu
Y2x1ZGUgIkNTU0ZvbnRGYWNlU3JjVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCkBAIC00Miw2ICs0MSw3IEBACiAjaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUg
IlN0eWxlUnVsZS5oIgorI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKICNpbmNsdWRlIDxtYXRoLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI2Nyw3ICsyNjcsNyBAQCB2b2lkIFNWR0ZvbnRG
YWNlRWxlbWVudDo6cmVidWlsZEZvbnRGYWNlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkb2N1
bWVudCgpLmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0
aW9uKCk7CisgICAgZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPcklu
dGVycHJldGF0aW9uKCk7CiB9CiAKIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3Qg
U1ZHRm9udEZhY2VFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVu
dCkKQEAgLTI5Miw3ICsyOTIsNyBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVtb3ZlZEZy
b20oQ29uCiAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnVucmVnaXN0
ZXJTVkdGb250RmFjZUVsZW1lbnQodGhpcyk7CiAgICAgICAgIG1fZm9udEZhY2VSdWxlLT5tdXRh
YmxlUHJvcGVydGllcygpLmNsZWFyKCk7CiAKLSAgICAgICAgZG9jdW1lbnQoKS5hdXRob3JTdHls
ZVNoZWV0cygpLmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOworICAgICAgICBk
b2N1bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24o
KTsKICAgICB9IGVsc2UKICAgICAgICAgQVNTRVJUKCFtX2ZvbnRFbGVtZW50KTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxUcmVlVmlld2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MVHJlZVZpZXdlci5jcHAJKHJldmlzaW9uIDIwNjg3OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3htbC9YTUxUcmVlVmlld2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsNiBAQAogCiAjaWYgRU5BQkxFKFhTTFQpCiAKLSNpbmNsdWRlICJBdXRob3JTdHlsZVNo
ZWV0cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgpAQCAtNDEsNiArNDAsNyBAQAogI2lu
Y2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgog
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luUG9saWN5LmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZS5o
IgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJYTUxWaWV3ZXJDU1MuaCIKICNpbmNsdWRl
ICJYTUxWaWV3ZXJKUy5oIgpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFhNTFRyZWVWaWV3ZXI6OnRy
YW5zZm9ybURvY3VtZW50VG9UCiAgICAgU3RyaW5nIGNzc1N0cmluZyA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZVdpdGhvdXRDb3B5aW5nKFhNTFZpZXdlcl9jc3MsIHNpemVvZihYTUxWaWV3ZXJfY3NzKSk7
CiAgICAgYXV0byB0ZXh0ID0gbV9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3NTdHJpbmcpOwog
ICAgIG1fZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU3RyaW5nKEFTQ0lJTGl0ZXJhbCgieG1sLXZp
ZXdlci1zdHlsZSIpKSktPmFwcGVuZENoaWxkKHRleHQsIElHTk9SRV9FWENFUFRJT04pOwotICAg
IG1fZG9jdW1lbnQuYXV0aG9yU3R5bGVTaGVldHMoKS5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJw
cmV0YXRpb24oKTsKKyAgICBtX2RvY3VtZW50LnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDb250ZW50
c09ySW50ZXJwcmV0YXRpb24oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAJKHJl
dmlzaW9uIDIwNjg3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXIuaCIKIAotI2luY2x1ZGUgIkF1dGhv
clN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCiAjaW5jbHVkZSAiQ2Fj
aGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiQ29tbWVudC5oIgpAQCAtNDksNiArNDgsNyBAQAogI2lu
Y2x1ZGUgIlNWR1N0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKICNp
bmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2lu
Y2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJUcmVlRGVwdGhMaW1pdC5o
IgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KQEAgLTIwMCw3ICsyMDAsNyBAQCB2b2lkIFhNTERvY3Vt
ZW50UGFyc2VyOjplbmQoKQogICAgICAgICBpbnNlcnRFcnJvck1lc3NhZ2VCbG9jaygpOwogICAg
IGVsc2UgewogICAgICAgICB1cGRhdGVMZWFmVGV4dE5vZGUoKTsKLSAgICAgICAgZG9jdW1lbnQo
KS0+YXV0aG9yU3R5bGVTaGVldHMoKS5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24o
KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVTY29wZSgpLmRpZENoYW5nZUNvbnRlbnRzT3JJ
bnRlcnByZXRhdGlvbigpOwogICAgIH0KIAogICAgIGlmIChpc1BhcnNpbmcoKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGli
eG1sMi5jcHAJKHJldmlzaW9uIDIwNjg3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyLmgi
CiAKLSNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkNEQVRBU2VjdGlv
bi5oIgogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkNvbW1lbnQuaCIKQEAg
LTU2LDYgKzU1LDcgQEAKICNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxl
U2NvcGUuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVHJh
bnNmb3JtU291cmNlLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgpAQCAtMTM4Nyw3ICsxMzg3
LDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQoKQogICAgICAgICBkb2N1bWVudCgp
LT5zZXRUcmFuc2Zvcm1Tb3VyY2Uoc3RkOjptYWtlX3VuaXF1ZTxUcmFuc2Zvcm1Tb3VyY2U+KGRv
YykpOwogCiAgICAgICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcoZmFsc2UpOyAvLyBNYWtlIHRo
ZSBkb2N1bWVudCB0aGluayBpdCdzIGRvbmUsIHNvIGl0IHdpbGwgYXBwbHkgWFNMIHN0eWxlc2hl
ZXRzLgotICAgICAgICBkb2N1bWVudCgpLT5hdXRob3JTdHlsZVNoZWV0cygpLmRpZENoYW5nZUNv
bnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOworICAgICAgICBkb2N1bWVudCgpLT5zdHlsZVNjb3Bl
KCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CiAKICAgICAgICAgLy8gc3R5
bGVSZXNvbHZlckNoYW5nZWQoKSBjYWxsIGNhbiBkZXRhY2ggdGhlIHBhcnNlciBhbmQgbnVsbCBv
dXQgaXRzIGRvY3VtZW50LgogICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIHdlIGp1c3QgYmFpbCBv
dXQuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290926</attachid>
            <date>2016-10-07 06:32:44 -0700</date>
            <delta_ts>2016-10-07 09:57:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylescope-3.patch</filename>
            <type>text/plain</type>
            <size>122650</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjkwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MyBAQAorMjAxNi0xMC0wNyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIEF1dGhvclN0eWxl
U2hlZXRzIHRvIFN0eWxlOjpTY29wZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYzMTA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSXQgcmVwcmVzZW50cyB0aGUgc3R5bGUgc2NvcGUgaW4gRE9NLgorICAg
ICAgICBBbHNvIG1vdmUgdGhlIGZpbGUgdW5kZXIgc3R5bGUvLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2hlZXQ6OnN0eWxlU2hlZXRTY29wZSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2hlZXQu
aDoKKyAgICAgICAgKiBjc3MvSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDU1NPTVdyYXBwZXJzOjpnZXRXcmFwcGVyRm9yUnVsZUluU2hlZXRz
KToKKyAgICAgICAgKiBjc3MvSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5oOgorICAgICAgICAqIGNz
cy9TdHlsZVNoZWV0TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdDo6
c3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldExpc3Q6OmRldGFjaEZy
b21Eb2N1bWVudCk6CisgICAgICAgICogZG9tL0F1dGhvclN0eWxlU2hlZXRzLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBkb20vQXV0aG9yU3R5bGVTaGVldHMuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRDb250ZW50TGFuZ3VhZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpuZWVkc1N0eWxlUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
Ojp1cGRhdGVTdHlsZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmNyZWF0ZVN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmRpZFJlbW92ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50Ojp1c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50Ojpwcm9jZXNzSHR0cEVxdWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwcmVm
ZXJyZWRTdHlsZXNoZWV0U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZWxlY3Rl
ZFN0eWxlc2hlZXRTZXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFNlbGVjdGVk
U3R5bGVzaGVldFNldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aGF2ZVN0eWxlc2hl
ZXRzTG9hZGVkKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpzdHlsZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphdXRo
b3JTdHlsZVNoZWV0cyk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0V4dGVuc2lvblN0eWxlU2hl
ZXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvblN0eWxlU2hlZXRzOjpjbGVhclBh
Z2VVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6OnVw
ZGF0ZVBhZ2VVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVl
dHM6OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25TdHlsZVNoZWV0czo6YWRkVXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uU3R5bGVTaGVldHM6OmFkZEF1dGhvclN0eWxlU2hlZXRGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvblN0eWxlU2hlZXRzOjpzdHlsZVJlc29sdmVy
Q2hhbmdlZFRpbWVyRmlyZWQpOgorICAgICAgICAqIGRvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lU3R5bGVTaGVldE93bmVyOjppbnNlcnRlZElu
dG9Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OnJl
bW92ZWRGcm9tRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lU3R5bGVTaGVldE93
bmVyOjpjbGVhckRvY3VtZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNo
ZWV0T3duZXI6OmNyZWF0ZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVN0eWxlU2hl
ZXRPd25lcjo6c2hlZXRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lU3R5bGVTaGVl
dE93bmVyOjpzdGFydExvYWRpbmdEeW5hbWljU2hlZXQpOgorICAgICAgICAqIGRvbS9JbmxpbmVT
dHlsZVNoZWV0T3duZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVN0eWxlU2hlZXRPd25l
cjo6c3R5bGVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6
OnN0eWxlU2hlZXRTY29wZSk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0
cnVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246On5Q
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3Ry
dWN0aW9uOjpjaGVja1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0lu
c3RydWN0aW9uOjpzaGVldExvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb246Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb246OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpzdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYWRvd1Jvb3Q6OnN0eWxlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Um9vdDo6dXBkYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6YXV0aG9y
U3R5bGVTaGVldHMpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9TaGFkb3dSb290Lmg6CisgICAg
ICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExp
bmtFbGVtZW50Ojp+SFRNTExpbmtFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5r
RWxlbWVudDo6c2V0RGlzYWJsZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0Vs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVu
dDo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6Omluc2VydGVk
SW50byk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnJlbW92ZWRGcm9tKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6YWRkUGVuZGluZ1NoZWV0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6cmVtb3ZlUGVuZGluZ1NoZWV0KToKKyAg
ICAgICAgKiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2Vu
dDo6Y29sbGVjdEFsbERvY3VtZW50U3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDU1NBZ2VudDo6cmVzZXRQc2V1ZG9TdGF0ZXMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFn
ZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlhKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmdldE1hdGNoZWRDU1NSdWxlcyk6CisgICAg
ICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UHJpbnRp
bmcpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0UGFnaW5h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFZpZXdwb3J0U2l6ZUZvckNT
U1ZpZXdwb3J0VW5pdHMpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzZXRWaWV3TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXROZWVk
c1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6aW52YWxp
ZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXMpOgorICAgICAgICAqIHN0eWxl
L1N0eWxlU2NvcGUuY3BwOiBDb3BpZWQgZnJvbSBkb20vQXV0aG9yU3R5bGVTaGVldHMuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlOjpTY29wZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6U2NvcGU6OnN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OlNjb3BlOjpzdHlsZVJlc29sdmVySWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OlNjb3BlOjpmb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6cmVtb3Zl
UGVuZGluZ1NoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6YWRkU3R5bGVT
aGVldENhbmRpZGF0ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlOjpyZW1v
dmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6U2Nv
cGU6OmNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
U2NvcGU6OmFuYWx5emVTdHlsZVNoZWV0Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpTY29wZTo6dXBkYXRlQWN0aXZlU3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OlNjb3BlOjp1cGRhdGVTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpTY29wZTo6YWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlNjb3BlOjphY3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpTY29wZTo6Zmx1c2hQZW5kaW5nVXBkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpTY29wZTo6Y2xlYXJQZW5kaW5nVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpTY29wZTo6c2NoZWR1bGVBY3RpdmVTZXRVcGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlNjb3BlOjpkaWRDaGFuZ2VDYW5kaWRhdGVzRm9yQWN0aXZlU2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6ZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6cGVuZGluZ1VwZGF0ZVRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OkF1dGhvclN0eWxl
U2hlZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjpz
dHlsZVJlc29sdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hl
ZXRzOjpzdHlsZVJlc29sdmVySWZFeGlzdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
QXV0aG9yU3R5bGVTaGVldHM6OmZvck5vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
QXV0aG9yU3R5bGVTaGVldHM6OnJlbW92ZVBlbmRpbmdTaGVldCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6YWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OnJlbW92ZVN0
eWxlU2hlZXRDYW5kaWRhdGVOb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1dGhv
clN0eWxlU2hlZXRzOjpjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OmFuYWx5emVTdHlsZVNoZWV0Q2hhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjp1cGRhdGVBY3Rp
dmVTdHlsZVNoZWV0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBdXRob3JTdHlsZVNo
ZWV0czo6dXBkYXRlU3R5bGVSZXNvbHZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpB
dXRob3JTdHlsZVNoZWV0czo6YWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6OmFjdGl2ZVN0eWxlU2hlZXRz
Q29udGFpbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QXV0aG9yU3R5bGVTaGVldHM6
OmZsdXNoUGVuZGluZ1VwZGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBdXRob3JT
dHlsZVNoZWV0czo6Y2xlYXJQZW5kaW5nVXBkYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkF1dGhvclN0eWxlU2hlZXRzOjpzY2hlZHVsZUFjdGl2ZVNldFVwZGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpBdXRob3JTdHlsZVNoZWV0czo6ZGlkQ2hhbmdlQ2FuZGlkYXRl
c0ZvckFjdGl2ZVNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBdXRob3JTdHlsZVNo
ZWV0czo6ZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjpwZW5kaW5nVXBkYXRlVGltZXJGaXJlZCk6
IERlbGV0ZWQuCisgICAgICAgICogc3R5bGUvU3R5bGVTY29wZS5oOiBDb3BpZWQgZnJvbSBkb20v
QXV0aG9yU3R5bGVTaGVldHMuaC4KKyAgICAgICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5j
cHA6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiB4bWwvWE1M
VHJlZVZpZXdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxUcmVlVmlld2VyOjp0cmFuc2Zv
cm1Eb2N1bWVudFRvVHJlZVZpZXcpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmVuZCk6Cisg
ICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmRvRW5kKToKKwogMjAxNi0xMC0wNyAgQWRh
bSBCZXJna3Zpc3QgIDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CiAKICAgICAgICAgV2Vi
UlRDOiBNaXNjIGdhcmRlbmluZzogVXNlIHR5cGVkZWZzIGNvbnNpc3RlbnRseSBhbmQgcmVtb3Zl
IHVudXNlZCBjb2RlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA2ODc5KQor
KysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEzODMs
NyArMTM4Myw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBkb20vQWN0aXZlRE9NT2JqZWN0
LmNwcAogICAgIGRvbS9BbmltYXRpb25FdmVudC5jcHAKICAgICBkb20vQXR0ci5jcHAKLSAgICBk
b20vQXV0aG9yU3R5bGVTaGVldHMuY3BwCiAgICAgZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50
LmNwcAogICAgIGRvbS9CZWZvcmVVbmxvYWRFdmVudC5jcHAKICAgICBkb20vQ0RBVEFTZWN0aW9u
LmNwcApAQCAtMjY0OCw2ICsyNjQ3LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHN0eWxl
L1N0eWxlUGVuZGluZ1Jlc291cmNlcy5jcHAKICAgICBzdHlsZS9TdHlsZVJlbGF0aW9ucy5jcHAK
ICAgICBzdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAKKyAgICBzdHlsZS9TdHlsZVNj
b3BlLmNwcAogICAgIHN0eWxlL1N0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcAogICAgIHN0eWxlL1N0
eWxlVHJlZVJlc29sdmVyLmNwcAogICAgIHN0eWxlL1N0eWxlVXBkYXRlLmNwcApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjA2ODc5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MjA2LDggKzYyMDYsOCBAQAogCQlFNDYxODAy
QjFDOEEwNkQ5MDAyNkMwMkMgLyogUmVuZGVyVHJlZVVwZGF0ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2MTgwMkExQzhBMDZEOTAwMjZDMDJD
IC8qIFJlbmRlclRyZWVVcGRhdGVyLmNwcCAqLzsgfTsKIAkJRTQ2MTgwMkQxQzhERDI5MDAwMjZD
MDJDIC8qIFN0eWxlUmVsYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDYxODAyQzFDOEREMjkwMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMu
aCAqLzsgfTsKIAkJRTQ2MTgwMkYxQzhERDREMjAwMjZDMDJDIC8qIFN0eWxlUmVsYXRpb25zLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjE4MDJF
MUM4REQ0RDIwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5jcHAgKi87IH07Ci0JCUU0NjFENjVE
MUJCMEM3RjAwMENCNTY0NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYxRDY1QzFCQjBDN0YwMDBDQjU2NDUg
LyogQXV0aG9yU3R5bGVTaGVldHMuY3BwICovOyB9OwotCQlFNDYxRDY1RjFCQjBDODBEMDBDQjU2
NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0NjFENjVFMUJCMEM4MEQwMENCNTY0NSAvKiBBdXRob3JTdHlsZVNo
ZWV0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUU0NjFENjVEMUJCMEM3RjAwMENCNTY0NSAvKiBTdHlsZVNjb3BlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjFENjVDMUJCMEM3RjAwMENCNTY0
NSAvKiBTdHlsZVNjb3BlLmNwcCAqLzsgfTsKKwkJRTQ2MUQ2NUYxQkIwQzgwRDAwQ0I1NjQ1IC8q
IFN0eWxlU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0NjFENjVFMUJCMEM4MEQwMENCNTY0NSAvKiBTdHlsZVNjb3BlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ2MkE0QTExMTNFNzFCRTAw
NEE0MjIwIC8qIEludFBvaW50SGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ2MkE0QTAxMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NkEy
QjFDMTdDQTY1QjkwMDBEQkNEOCAvKiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkEyQjFCMTdD
QTY1QjkwMDBEQkNEOCAvKiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDZBMkIxRTE3Q0E3
NkIxMDAwREJDRDggLyogRWxlbWVudENoaWxkSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NkEyQjFEMTdDQTc2QjEwMDBEQkNEOCAvKiBF
bGVtZW50Q2hpbGRJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xMzgxNSw4ICsxMzgxNSw4IEBACiAJCUU0NjE4MDJBMUM4QTA2RDkw
MDI2QzAyQyAvKiBSZW5kZXJUcmVlVXBkYXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlVXBkYXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0NjE4MDJDMUM4REQyOTAwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVJlbGF0aW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYxODAyRTFDOERENEQyMDAyNkMwMkMgLyogU3R5bGVS
ZWxhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVS
ZWxhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNDYxRDY1QzFCQjBD
N0YwMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQXV0aG9yU3R5bGVTaGVldHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlFNDYxRDY1RTFCQjBDODBEMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVl
dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0aG9yU3R5bGVTaGVldHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ2MUQ2NUMxQkIwQzdGMDAwQ0I1NjQ1
IC8qIFN0eWxlU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3R5bGVTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NjFENjVFMUJC
MEM4MEQwMENCNTY0NSAvKiBTdHlsZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0eWxlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ2MkE0
QTAxMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbnRQb2ludEhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ2QTJCMUIxN0NBNjVCOTAwMERCQ0Q4IC8qIFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVy
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEVsZW1lbnREZXNj
ZW5kYW50SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ2QTJCMUQx
N0NBNzZCMTAwMERCQ0Q4IC8qIEVsZW1lbnRDaGlsZEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRDaGlsZEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yMjMwNiw2ICsyMjMwNiw4IEBACiAJCQkJRTQ2MTgwMkMxQzhERDI5
MDAwMjZDMDJDIC8qIFN0eWxlUmVsYXRpb25zLmggKi8sCiAJCQkJRTRENThFQjIxN0I0REJEQzAw
Q0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcCAqLywKIAkJCQlFNEQ1OEVCMzE3
QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCAqLywKKwkJCQlFNDYx
RDY1QzFCQjBDN0YwMDBDQjU2NDUgLyogU3R5bGVTY29wZS5jcHAgKi8sCisJCQkJRTQ2MUQ2NUUx
QkIwQzgwRDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuaCAqLywKIAkJCQlFNDdBM0FDMjFDNUVBQkJF
MDBDQ0JGQTcgLyogU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwICovLAogCQkJCUU0N0EzQUM0MUM1
RUFDNzkwMENDQkZBNyAvKiBTdHlsZVNoYXJpbmdSZXNvbHZlci5oICovLAogCQkJCUU0REVBQTE1
MTdBOTNEQzMwMDBFMDQzMCAvKiBTdHlsZVRyZWVSZXNvbHZlci5jcHAgKi8sCkBAIC0yMjk0Miw4
ICsyMjk0NCw2IEBACiAJCQkJQThDNEE3RkIwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHIuaCAqLywK
IAkJCQk5M0VFQzFFNTA5QzI4Nzc3MDBDNTE1RDEgLyogQXR0ci5pZGwgKi8sCiAJCQkJQThDNEE3
RjkwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHJpYnV0ZS5oICovLAotCQkJCUU0NjFENjVDMUJCMEM3
RjAwMENCNTY0NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5jcHAgKi8sCi0JCQkJRTQ2MUQ2NUUxQkIw
QzgwRDAwQ0I1NjQ1IC8qIEF1dGhvclN0eWxlU2hlZXRzLmggKi8sCiAJCQkJNzYwODQ3Q0QxOUE2
QTI3NzAwNDI4Q0NDIC8qIEF1dG9jb21wbGV0ZUVycm9yRXZlbnQuaCAqLywKIAkJCQk3NjA4NDdD
RjE5QTZBMjg2MDA0MjhDQ0MgLyogQXV0b2NvbXBsZXRlRXJyb3JFdmVudC5pZGwgKi8sCiAJCQkJ
QkM5NDYyRDcxMDdBN0I0QzAwODU3MTkzIC8qIEJlZm9yZUxvYWRFdmVudC5oICovLApAQCAtMjM5
MDUsNyArMjM5MDUsNyBAQAogCQkJCTA3MDRBNDA4MUQ2REU5RjEwMDg2RENEQiAvKiBPdmVyY29u
c3RyYWluZWRFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNDc0ODQxMEFBMTYxRDAwQjc5
NDkzIC8qIEF1dGhlbnRpY2F0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY0
QzBDRTkyMzRFMDA3RUYzQ0QgLyogQXV0aGVudGljYXRpb25NYWMuaCBpbiBIZWFkZXJzICovLAot
CQkJCUU0NjFENjVGMUJCMEM4MEQwMENCNTY0NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRTQ2MUQ2NUYxQkIwQzgwRDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1MDE5MjBFMTMyRUJGMkUwMDhCRkU1NSAvKiBBdXRvY2FwaXRh
bGl6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzYwODQ3Q0UxOUE2QTI3ODAwNDI4Q0NDIC8qIEF1
dG9jb21wbGV0ZUVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMTg0M0ZFMUM4Qjcy
ODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzY2Niw3ICsyNzY2
Niw3IEBACiAJCQkJN0VFNjg0NUYxMkQyNkUzODAwRTc5NDE1IC8qIEF1dGhlbnRpY2F0aW9uQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0RjcxMzgwRDVBNkVGRjAwMDE4RDY5IC8qIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTRDNzY0RDBD
RTkyMzRFMDA3RUYzQ0QgLyogQXV0aGVudGljYXRpb25NYWMubW0gaW4gU291cmNlcyAqLywKLQkJ
CQlFNDYxRDY1RDFCQjBDN0YwMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRTQ2MUQ2NUQxQkIwQzdGMDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGNkUxNkIxMzJFRDQ2RTAwOEVEQUUzIC8qIEF1dG9jYXBp
dGFsaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU1OTdGODI2MUQ5MUMzMTMwMDY2QkMyMSAv
KiBJbWFnZUZyYW1lQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODQzRkQxQzhCNzI4
MzAwMkVCOTczIC8qIEF1dG9maWxsLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMjA2ODgwKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogCi0jaW5j
bHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJDU1NDaGFyc2V0UnVsZS5oIgog
I2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgogI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIK
QEAgLTQ0LDcgKzQzLDkgQEAKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgorI2luY2x1ZGUgIlN0eWxlU2Nv
cGUuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKKwogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTcwLDcgKzE3
MSw3IEBAIHZvaWQgQ1NTU3R5bGVTaGVldDo6ZGlkTXV0YXRlUnVsZXMoUnVsZU0KICAgICBBU1NF
UlQobV9jb250ZW50cy0+aXNNdXRhYmxlKCkpOwogICAgIEFTU0VSVChtX2NvbnRlbnRzLT5oYXNP
bmVDbGllbnQoKSk7CiAKLSAgICBhdXRvKiBzY29wZSA9IHN0eWxlU2hlZXRTY29wZSgpOworICAg
IGF1dG8qIHNjb3BlID0gc3R5bGVTY29wZSgpOwogICAgIGlmICghc2NvcGUpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMTkxLDcgKzE5Miw3IEBAIHZvaWQgQ1NTU3R5bGVTaGVldDo6ZGlkTXV0YXRl
UnVsZXMoUnVsZU0KIAogdm9pZCBDU1NTdHlsZVNoZWV0OjpkaWRNdXRhdGUoKQogewotICAgIGF1
dG8qIHNjb3BlID0gc3R5bGVTaGVldFNjb3BlKCk7CisgICAgYXV0byogc2NvcGUgPSBzdHlsZVNj
b3BlKCk7CiAgICAgaWYgKCFzY29wZSkKICAgICAgICAgcmV0dXJuOwogICAgIHNjb3BlLT5kaWRD
aGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKQEAgLTQxNSwxMiArNDE2LDEyIEBAIERv
Y3VtZW50KiBDU1NTdHlsZVNoZWV0Ojpvd25lckRvY3VtZW50KCkKICAgICByZXR1cm4gcm9vdC5v
d25lck5vZGUoKSA/ICZyb290Lm93bmVyTm9kZSgpLT5kb2N1bWVudCgpIDogbnVsbHB0cjsKIH0K
IAotQXV0aG9yU3R5bGVTaGVldHMqIENTU1N0eWxlU2hlZXQ6OnN0eWxlU2hlZXRTY29wZSgpCitT
dHlsZTo6U2NvcGUqIENTU1N0eWxlU2hlZXQ6OnN0eWxlU2NvcGUoKQogewogICAgIGF1dG8qIG93
bmVyTm9kZSA9IHJvb3RTdHlsZVNoZWV0KCkub3duZXJOb2RlKCk7CiAgICAgaWYgKCFvd25lck5v
ZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiAmQXV0aG9yU3R5bGVTaGVl
dHM6OmZvck5vZGUoKm93bmVyTm9kZSk7CisgICAgcmV0dXJuICZTdHlsZTo6U2NvcGU6OmZvck5v
ZGUoKm93bmVyTm9kZSk7CiB9CiAKIHZvaWQgQ1NTU3R5bGVTaGVldDo6Y2xlYXJDaGlsZFJ1bGVD
U1NPTVdyYXBwZXJzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkocmV2aXNp
b24gMjA2ODgwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IEF1dGhvclN0eWxlU2hlZXRzOwogY2xhc3MgQ1NTQ2hhcnNldFJ1bGU7CiBjbGFzcyBDU1NJbXBv
cnRSdWxlOwogY2xhc3MgQ1NTUGFyc2VyOwpAQCAtNDUsNiArNDQsMTAgQEAgY2xhc3MgU2VjdXJp
dHlPcmlnaW47CiBjbGFzcyBTdHlsZVJ1bGVLZXlmcmFtZXM7CiBjbGFzcyBTdHlsZVNoZWV0Q29u
dGVudHM7CiAKK25hbWVzcGFjZSBTdHlsZSB7CitjbGFzcyBTY29wZTsKK30KKwogdHlwZWRlZiBp
bnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgQ1NTU3R5bGVTaGVldCBmaW5hbCA6IHB1YmxpYyBT
dHlsZVNoZWV0IHsKQEAgLTg3LDcgKzkwLDcgQEAgcHVibGljOgogICAgIERvY3VtZW50KiBvd25l
ckRvY3VtZW50KCkgY29uc3Q7CiAgICAgQ1NTU3R5bGVTaGVldCYgcm9vdFN0eWxlU2hlZXQoKTsK
ICAgICBjb25zdCBDU1NTdHlsZVNoZWV0JiByb290U3R5bGVTaGVldCgpIGNvbnN0OwotICAgIEF1
dGhvclN0eWxlU2hlZXRzKiBzdHlsZVNoZWV0U2NvcGUoKTsKKyAgICBTdHlsZTo6U2NvcGUqIHN0
eWxlU2NvcGUoKTsKIAogICAgIE1lZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcygpIGNvbnN0IHsg
cmV0dXJuIG1fbWVkaWFRdWVyaWVzLmdldCgpOyB9CiAgICAgdm9pZCBzZXRNZWRpYVF1ZXJpZXMo
UmVmPE1lZGlhUXVlcnlTZXQ+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0luc3BlY3Rv
ckNTU09NV3JhcHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9JbnNw
ZWN0b3JDU1NPTVdyYXBwZXJzLmNwcAkocmV2aXNpb24gMjA2ODc5KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0luc3BlY3RvckNTU09NV3JhcHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3
ICsyOSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTT01X
cmFwcGVycy5oIgogCi0jaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJD
U1NEZWZhdWx0U3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCiAjaW5j
bHVkZSAiQ1NTTWVkaWFSdWxlLmgiCkBAIC0zOCw2ICszNyw3IEBACiAjaW5jbHVkZSAiQ1NTU3R5
bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1N1cHBvcnRzUnVsZS5oIgogI2luY2x1ZGUgIkV4dGVu
c2lvblN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlN0
eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1ZGUgIldlYktpdENTU1JlZ2lvblJ1bGUuaCIKIApA
QCAtOTYsNyArOTYsNyBAQCB2b2lkIEluc3BlY3RvckNTU09NV3JhcHBlcnM6OmNvbGxlY3RGcm9t
CiAgICAgICAgIGNvbGxlY3Qoc2hlZXRzW2ldLmdldCgpKTsKIH0KIAotQ1NTU3R5bGVSdWxlKiBJ
bnNwZWN0b3JDU1NPTVdyYXBwZXJzOjpnZXRXcmFwcGVyRm9yUnVsZUluU2hlZXRzKFN0eWxlUnVs
ZSogcnVsZSwgQXV0aG9yU3R5bGVTaGVldHMmIGF1dGhvclN0eWxlU2hlZXRzLCBFeHRlbnNpb25T
dHlsZVNoZWV0cyYgZXh0ZW5zaW9uU3R5bGVTaGVldHMpCitDU1NTdHlsZVJ1bGUqIEluc3BlY3Rv
ckNTU09NV3JhcHBlcnM6OmdldFdyYXBwZXJGb3JSdWxlSW5TaGVldHMoU3R5bGVSdWxlKiBydWxl
LCBTdHlsZTo6U2NvcGUmIHN0eWxlU2NvcGUsIEV4dGVuc2lvblN0eWxlU2hlZXRzJiBleHRlbnNp
b25TdHlsZVNoZWV0cykKIHsKICAgICBpZiAobV9zdHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5p
c0VtcHR5KCkpIHsKICAgICAgICAgY29sbGVjdEZyb21TdHlsZVNoZWV0Q29udGVudHMobV9zdHls
ZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OnNpbXBsZURlZmF1
bHRTdHlsZVNoZWV0KTsKQEAgLTEwOCw3ICsxMDgsNyBAQCBDU1NTdHlsZVJ1bGUqIEluc3BlY3Rv
ckNTU09NV3JhcHBlcnM6OmdlCiAgICAgICAgIGNvbGxlY3RGcm9tU3R5bGVTaGVldENvbnRlbnRz
KG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpmdWxs
c2NyZWVuU3R5bGVTaGVldCk7CiAgICAgICAgIGNvbGxlY3RGcm9tU3R5bGVTaGVldENvbnRlbnRz
KG1fc3R5bGVTaGVldENTU09NV3JhcHBlclNldCwgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpwbHVn
SW5zU3R5bGVTaGVldCk7CiAKLSAgICAgICAgY29sbGVjdEZyb21TdHlsZVNoZWV0cyhhdXRob3JT
dHlsZVNoZWV0cy5hY3RpdmVTdHlsZVNoZWV0cygpKTsKKyAgICAgICAgY29sbGVjdEZyb21TdHls
ZVNoZWV0cyhzdHlsZVNjb3BlLmFjdGl2ZVN0eWxlU2hlZXRzKCkpOwogICAgICAgICBjb2xsZWN0
KGV4dGVuc2lvblN0eWxlU2hlZXRzLnBhZ2VVc2VyU2hlZXQoKSk7CiAgICAgICAgIGNvbGxlY3RG
cm9tU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVl
dHMoKSk7CiAgICAgICAgIGNvbGxlY3RGcm9tU3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVl
dHMuZG9jdW1lbnRVc2VyU3R5bGVTaGVldHMoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
SW5zcGVjdG9yQ1NTT01XcmFwcGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9JbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmgJKHJldmlzaW9uIDIwNjg3OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9JbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDE4ICszMSwyMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEF1dGhvclN0eWxl
U2hlZXRzOwogY2xhc3MgQ1NTU3R5bGVSdWxlOwogY2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNsYXNz
IEV4dGVuc2lvblN0eWxlU2hlZXRzOwogY2xhc3MgU3R5bGVSdWxlOwogY2xhc3MgU3R5bGVTaGVl
dENvbnRlbnRzOwogCituYW1lc3BhY2UgU3R5bGUgeworY2xhc3MgU2NvcGU7Cit9CisKIGNsYXNz
IEluc3BlY3RvckNTU09NV3JhcHBlcnMgewogcHVibGljOgogICAgIC8vIFdBUk5JTkcuIFRoaXMg
d2lsbCBjb25zdHJ1Y3QgQ1NTT00gd3JhcHBlcnMgZm9yIGFsbCBzdHlsZSBydWxlcyBhbmQgY2Fj
aGUgdGhlbSBpbiBhIG1hcCBmb3Igc2lnbmlmaWNhbnQgbWVtb3J5IGNvc3QuCiAgICAgLy8gSXQg
aXMgaGVyZSB0byBzdXBwb3J0IGluc3BlY3Rvci4gRG9uJ3QgdXNlIGZvciBhbnkgcmVndWxhciBl
bmdpbmUgZnVuY3Rpb25zLgotICAgIENTU1N0eWxlUnVsZSogZ2V0V3JhcHBlckZvclJ1bGVJblNo
ZWV0cyhTdHlsZVJ1bGUqLCBBdXRob3JTdHlsZVNoZWV0cyYsIEV4dGVuc2lvblN0eWxlU2hlZXRz
Jik7CisgICAgQ1NTU3R5bGVSdWxlKiBnZXRXcmFwcGVyRm9yUnVsZUluU2hlZXRzKFN0eWxlUnVs
ZSosIFN0eWxlOjpTY29wZSYsIEV4dGVuc2lvblN0eWxlU2hlZXRzJik7CiAgICAgdm9pZCBjb2xs
ZWN0RnJvbVN0eWxlU2hlZXRJZk5lZWRlZChDU1NTdHlsZVNoZWV0Kik7CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAJKHJldmlzaW9uIDIwNjg3OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDExICsyMSwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxl
U2hlZXRMaXN0LmgiCiAKLSNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUg
IkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTdHlsZVNj
b3BlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQ1LDEyICs0NSwxMiBAQCBpbmxpbmUgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVNoZWV0Pj4mCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gbV9kZXRh
Y2hlZFN0eWxlU2hlZXRzOwotICAgIHJldHVybiBtX2RvY3VtZW50LT5hdXRob3JTdHlsZVNoZWV0
cygpLnN0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3QoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVu
dC0+c3R5bGVTY29wZSgpLnN0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3QoKTsKIH0KIAogdm9p
ZCBTdHlsZVNoZWV0TGlzdDo6ZGV0YWNoRnJvbURvY3VtZW50KCkKIHsKLSAgICBtX2RldGFjaGVk
U3R5bGVTaGVldHMgPSBtX2RvY3VtZW50LT5hdXRob3JTdHlsZVNoZWV0cygpLnN0eWxlU2hlZXRz
Rm9yU3R5bGVTaGVldExpc3QoKTsKKyAgICBtX2RldGFjaGVkU3R5bGVTaGVldHMgPSBtX2RvY3Vt
ZW50LT5zdHlsZVNjb3BlKCkuc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdCgpOwogICAgIG1f
ZG9jdW1lbnQgPSBudWxscHRyOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9y
U3R5bGVTaGVldHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JT
dHlsZVNoZWV0cy5jcHAJKHJldmlzaW9uIDIwNjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9B
dXRob3JTdHlsZVNoZWV0cy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0ODcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAg
ICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAg
ICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogICAgICAg
ICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAwOSwgMjAxMS0yMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAtMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCi0KLSNpbmNsdWRlICJDU1NT
dHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkVsZW1lbnRDaGls
ZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCIKLSNpbmNsdWRl
ICJIVE1MSUZyYW1lRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5j
bHVkZSAiUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNp
bmNsdWRlICJTVkdTdHlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1
ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgi
Ci0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgotI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50
cy5oIgotI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCi0jaW5jbHVkZSAiVXNlckNvbnRlbnRD
b250cm9sbGVyLmgiCi0jaW5jbHVkZSAiVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmgiCi0jaW5jbHVk
ZSAiVXNlclN0eWxlU2hlZXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1l
c3BhY2UgQ29udGVudEV4dGVuc2lvbnM7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1B
dXRob3JTdHlsZVNoZWV0czo6QXV0aG9yU3R5bGVTaGVldHMoRG9jdW1lbnQmIGRvY3VtZW50KQot
ICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fcGVuZGluZ1VwZGF0ZVRpbWVyKCp0
aGlzLCAmQXV0aG9yU3R5bGVTaGVldHM6OnBlbmRpbmdVcGRhdGVUaW1lckZpcmVkKQotewotfQot
Ci1BdXRob3JTdHlsZVNoZWV0czo6QXV0aG9yU3R5bGVTaGVldHMoU2hhZG93Um9vdCYgc2hhZG93
Um9vdCkKLSAgICA6IG1fZG9jdW1lbnQoc2hhZG93Um9vdC5kb2N1bWVudFNjb3BlKCkpCi0gICAg
LCBtX3NoYWRvd1Jvb3QoJnNoYWRvd1Jvb3QpCi0gICAgLCBtX3BlbmRpbmdVcGRhdGVUaW1lcigq
dGhpcywgJkF1dGhvclN0eWxlU2hlZXRzOjpwZW5kaW5nVXBkYXRlVGltZXJGaXJlZCkKLXsKLX0K
LQotU3R5bGVSZXNvbHZlciYgQXV0aG9yU3R5bGVTaGVldHM6OnN0eWxlUmVzb2x2ZXIoKQotewot
ICAgIGlmIChtX3NoYWRvd1Jvb3QpCi0gICAgICAgIHJldHVybiBtX3NoYWRvd1Jvb3QtPnN0eWxl
UmVzb2x2ZXIoKTsKLQotICAgIHJldHVybiBtX2RvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIo
KTsKLX0KLQotU3R5bGVSZXNvbHZlciogQXV0aG9yU3R5bGVTaGVldHM6OnN0eWxlUmVzb2x2ZXJJ
ZkV4aXN0cygpCi17Ci0gICAgaWYgKG1fc2hhZG93Um9vdCkKLSAgICAgICAgcmV0dXJuIG1fc2hh
ZG93Um9vdC0+c3R5bGVSZXNvbHZlcklmRXhpc3RzKCk7Ci0KLSAgICByZXR1cm4gbV9kb2N1bWVu
dC5zdHlsZVJlc29sdmVySWZFeGlzdHMoKTsKLX0KLQotQXV0aG9yU3R5bGVTaGVldHMmIEF1dGhv
clN0eWxlU2hlZXRzOjpmb3JOb2RlKE5vZGUmIG5vZGUpCi17Ci0gICAgQVNTRVJUKG5vZGUuaW5E
b2N1bWVudCgpKTsKLSAgICBhdXRvKiBzaGFkb3dSb290ID0gbm9kZS5jb250YWluaW5nU2hhZG93
Um9vdCgpOwotICAgIGlmIChzaGFkb3dSb290KQotICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+
YXV0aG9yU3R5bGVTaGVldHMoKTsKLSAgICByZXR1cm4gbm9kZS5kb2N1bWVudCgpLmF1dGhvclN0
eWxlU2hlZXRzKCk7Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhIHRv
cC1sZXZlbCBzdHlsZXNoZWV0IGhhcyBmaW5pc2hlZCBsb2FkaW5nLgotdm9pZCBBdXRob3JTdHls
ZVNoZWV0czo6cmVtb3ZlUGVuZGluZ1NoZWV0KFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlv
blR5cGUgbm90aWZpY2F0aW9uKQotewotICAgIC8vIE1ha2Ugc3VyZSB3ZSBrbmV3IHRoaXMgc2hl
ZXQgd2FzIHBlbmRpbmcsIGFuZCB0aGF0IG91ciBjb3VudCBpc24ndCBvdXQgb2Ygc3luYy4KLSAg
ICBBU1NFUlQobV9wZW5kaW5nU3R5bGVTaGVldENvdW50ID4gMCk7Ci0KLSAgICBtX3BlbmRpbmdT
dHlsZVNoZWV0Q291bnQtLTsKLSAgICAKLSNpZmRlZiBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVM
SU5HCi0gICAgaWYgKCFvd25lckVsZW1lbnQoKSkKLSAgICAgICAgcHJpbnRmKCJTdHlsZXNoZWV0
IGxvYWRlZCBhdCB0aW1lICVkLiAlZCBzdHlsZXNoZWV0cyBzdGlsbCByZW1haW4uXG4iLCBlbGFw
c2VkVGltZSgpLCBtX3BlbmRpbmdTdHlsZXNoZWV0cyk7Ci0jZW5kaWYKLQotICAgIGlmIChtX3Bl
bmRpbmdTdHlsZVNoZWV0Q291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChub3RpZmlj
YXRpb24gPT0gUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5TGF0ZXIpIHsKLSAgICAgICAgbV9kb2N1
bWVudC5zZXROZWVkc05vdGlmeVJlbW92ZUFsbFBlbmRpbmdTdHlsZXNoZWV0KCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9zaGFkb3dSb290KSB7Ci0gICAgICAgIG1fc2hh
ZG93Um9vdC0+dXBkYXRlU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
ZG9jdW1lbnQuZGlkUmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hlZXQoKTsKLX0KLQotdm9pZCBBdXRo
b3JTdHlsZVNoZWV0czo6YWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSwgYm9v
bCBjcmVhdGVkQnlQYXJzZXIpCi17Ci0gICAgaWYgKCFub2RlLmluRG9jdW1lbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIC8vIFVudGlsIHRoZSA8Ym9keT4gZXhpc3RzLCB3ZSBoYXZl
IG5vIGNob2ljZSBidXQgdG8gY29tcGFyZSBkb2N1bWVudCBwb3NpdGlvbnMsCi0gICAgLy8gc2lu
Y2Ugc3R5bGVzIG91dHNpZGUgb2YgdGhlIGJvZHkgYW5kIGhlYWQgY29udGludWUgdG8gYmUgc2h1
bnRlZCBpbnRvIHRoZSBoZWFkCi0gICAgLy8gKGFuZCB0aHVzIGNhbiBzaGlmdCB0byBlbmQgdXAg
YmVmb3JlIGR5bmFtaWNhbGx5IGFkZGVkIERPTSBjb250ZW50IHRoYXQgaXMgYWxzbwotICAgIC8v
IG91dHNpZGUgdGhlIGJvZHkpLgotICAgIGlmICgoY3JlYXRlZEJ5UGFyc2VyICYmIG1fZG9jdW1l
bnQuYm9keU9yRnJhbWVzZXQoKSkgfHwgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmFkZCgmbm9kZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1pbmUgYW4gYXBwcm9wcmlhdGUg
aW5zZXJ0aW9uIHBvaW50LgotICAgIGF1dG8gYmVnaW4gPSBtX3N0eWxlU2hlZXRDYW5kaWRhdGVO
b2Rlcy5iZWdpbigpOwotICAgIGF1dG8gZW5kID0gbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMu
ZW5kKCk7Ci0gICAgYXV0byBpdCA9IGVuZDsKLSAgICBOb2RlKiBmb2xsb3dpbmdOb2RlID0gbnVs
bHB0cjsKLSAgICBkbyB7Ci0gICAgICAgIC0taXQ7Ci0gICAgICAgIE5vZGUqIG4gPSAqaXQ7Ci0g
ICAgICAgIHVuc2lnbmVkIHNob3J0IHBvc2l0aW9uID0gbi0+Y29tcGFyZURvY3VtZW50UG9zaXRp
b24obm9kZSk7Ci0gICAgICAgIGlmIChwb3NpdGlvbiA9PSBOb2RlOjpET0NVTUVOVF9QT1NJVElP
Tl9GT0xMT1dJTkcpIHsKLSAgICAgICAgICAgIG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmlu
c2VydEJlZm9yZShmb2xsb3dpbmdOb2RlLCAmbm9kZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgZm9sbG93aW5nTm9kZSA9IG47Ci0gICAgfSB3aGlsZSAoaXQgIT0g
YmVnaW4pOwotICAgIAotICAgIG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmluc2VydEJlZm9y
ZShmb2xsb3dpbmdOb2RlLCAmbm9kZSk7Ci19Ci0KLXZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OnJl
bW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUmIG5vZGUpCi17Ci0gICAgaWYgKG1fc3R5
bGVTaGVldENhbmRpZGF0ZU5vZGVzLnJlbW92ZSgmbm9kZSkpCi0gICAgICAgIHNjaGVkdWxlQWN0
aXZlU2V0VXBkYXRlKCk7Ci19Ci0KLXZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OmNvbGxlY3RBY3Rp
dmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRzKQotewotICAg
IGlmIChtX2RvY3VtZW50LnNldHRpbmdzKCkgJiYgIW1fZG9jdW1lbnQuc2V0dGluZ3MoKS0+YXV0
aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChh
dXRvJiBub2RlIDogbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMpIHsKLSAgICAgICAgU3R5bGVT
aGVldCogc2hlZXQgPSBudWxscHRyOwotICAgICAgICBpZiAoaXM8UHJvY2Vzc2luZ0luc3RydWN0
aW9uPigqbm9kZSkpIHsKLSAgICAgICAgICAgIC8vIFByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gKFhN
TCBkb2N1bWVudHMgb25seSkuCi0gICAgICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGxpbmtp
bmcgdG8gZW1iZWRkZWQgQ1NTIHN0eWxlc2hlZXRzLCBzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00OTI4MT4gZm9yIGRpc2N1c3Npb24uCi0gICAgICAgICAgICBQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24mIHBpID0gZG93bmNhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9u
Pigqbm9kZSk7Ci0gICAgICAgICAgICBzaGVldCA9IHBpLnNoZWV0KCk7Ci0jaWYgRU5BQkxFKFhT
TFQpCi0gICAgICAgICAgICAvLyBEb24ndCBhcHBseSBYU0wgdHJhbnNmb3JtcyB0byBhbHJlYWR5
IHRyYW5zZm9ybWVkIGRvY3VtZW50cyAtLSA8cmRhcjovL3Byb2JsZW0vNDEzMjgwNj4KLSAgICAg
ICAgICAgIGlmIChwaS5pc1hTTCgpICYmICFtX2RvY3VtZW50LnRyYW5zZm9ybVNvdXJjZURvY3Vt
ZW50KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBhcHBseSBYU0wgdHJhbnNmb3JtcyB1
bnRpbCBsb2FkaW5nIGlzIGZpbmlzaGVkLgotICAgICAgICAgICAgICAgIGlmICghbV9kb2N1bWVu
dC5wYXJzaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQuYXBwbHlYU0xUcmFu
c2Zvcm0oJnBpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0jZW5k
aWYKLSAgICAgICAgfSBlbHNlIGlmIChpczxIVE1MTGlua0VsZW1lbnQ+KCpub2RlKSB8fCBpczxI
VE1MU3R5bGVFbGVtZW50Pigqbm9kZSkgfHwgaXM8U1ZHU3R5bGVFbGVtZW50Pigqbm9kZSkpIHsK
LSAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7
Ci0gICAgICAgICAgICBBdG9taWNTdHJpbmcgdGl0bGUgPSBlbGVtZW50LmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24odGl0bGVBdHRyKTsKLSAgICAgICAgICAgIGJvb2wgZW5hYmxlZFZp
YVNjcmlwdCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGlzPEhUTUxMaW5rRWxlbWVudD4oZWxl
bWVudCkpIHsKLSAgICAgICAgICAgICAgICAvLyA8TElOSz4gZWxlbWVudAotICAgICAgICAgICAg
ICAgIEhUTUxMaW5rRWxlbWVudCYgbGlua0VsZW1lbnQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1l
bnQ+KGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlmIChsaW5rRWxlbWVudC5pc0Rpc2FibGVk
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGVuYWJs
ZWRWaWFTY3JpcHQgPSBsaW5rRWxlbWVudC5pc0VuYWJsZWRWaWFTY3JpcHQoKTsKLSAgICAgICAg
ICAgICAgICBpZiAobGlua0VsZW1lbnQuc3R5bGVTaGVldElzTG9hZGluZygpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIGl0IGlzIGxvYWRpbmcgYnV0IHdlIHNob3VsZCBzdGlsbCBkZWNpZGUg
d2hpY2ggc3R5bGUgc2hlZXQgc2V0IHRvIHVzZQotICAgICAgICAgICAgICAgICAgICBpZiAoIWVu
YWJsZWRWaWFTY3JpcHQgJiYgIXRpdGxlLmlzRW1wdHkoKSAmJiBtX3ByZWZlcnJlZFN0eWxlc2hl
ZXRTZXROYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsaW5r
RWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHJlbEF0dHIpLmNvbnRhaW5z
KCJhbHRlcm5hdGUiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJlZmVycmVk
U3R5bGVzaGVldFNldE5hbWUgPSB0aXRsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3NlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUgPSB0aXRsZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFsaW5rRWxlbWVudC5z
aGVldCgpKQotICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IG51bGxBdG9tOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHByZWZlcnJlZCBzdHlsZXNldC4g
VGhpcyBpcyB0aGUKLSAgICAgICAgICAgIC8vIHNldCBvZiBzaGVldHMgdGhhdCB3aWxsIGJlIGVu
YWJsZWQuCi0gICAgICAgICAgICBpZiAoaXM8U1ZHU3R5bGVFbGVtZW50PihlbGVtZW50KSkKLSAg
ICAgICAgICAgICAgICBzaGVldCA9IGRvd25jYXN0PFNWR1N0eWxlRWxlbWVudD4oZWxlbWVudCku
c2hlZXQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzPEhUTUxMaW5rRWxlbWVudD4oZWxlbWVu
dCkpCi0gICAgICAgICAgICAgICAgc2hlZXQgPSBkb3duY2FzdDxIVE1MTGlua0VsZW1lbnQ+KGVs
ZW1lbnQpLnNoZWV0KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2hlZXQg
PSBkb3duY2FzdDxIVE1MU3R5bGVFbGVtZW50PihlbGVtZW50KS5zaGVldCgpOwotICAgICAgICAg
ICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgc2hlZXQgYmVsb25ncyB0byBhIHN0eWxlc2V0Ci0g
ICAgICAgICAgICAvLyAodGh1cyBtYWtpbmcgaXQgUFJFRkVSUkVEIG9yIEFMVEVSTkFURSByYXRo
ZXIgdGhhbgotICAgICAgICAgICAgLy8gUEVSU0lTVEVOVCkuCi0gICAgICAgICAgICBhdXRvJiBy
ZWwgPSBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocmVsQXR0cik7Ci0g
ICAgICAgICAgICBpZiAoIWVuYWJsZWRWaWFTY3JpcHQgJiYgIXRpdGxlLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgICAgIC8vIFllcywgd2UgaGF2ZSBhIHRpdGxlLgotICAgICAgICAgICAgICAg
IGlmIChtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBObyBwcmVmZXJyZWQgc2V0IGhhcyBiZWVuIGVzdGFibGlzaGVkLiBJZgot
ICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgTk9UIGFuIGFsdGVybmF0ZSBzaGVldCwgdGhl
biBlc3RhYmxpc2gKLSAgICAgICAgICAgICAgICAgICAgLy8gdXMgYXMgdGhlIHByZWZlcnJlZCBz
ZXQuIE90aGVyd2lzZSwganVzdCBpZ25vcmUKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBz
aGVldC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1l
bnQpIHx8ICFyZWwuY29udGFpbnMoImFsdGVybmF0ZSIpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSA9IG1fc2VsZWN0ZWRTdHlsZXNoZWV0U2V0
TmFtZSA9IHRpdGxlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGl0
bGUgIT0gbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSkKLSAgICAgICAgICAgICAgICAgICAg
c2hlZXQgPSBudWxscHRyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmVsLmNv
bnRhaW5zKCJhbHRlcm5hdGUiKSAmJiB0aXRsZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
c2hlZXQgPSBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzaGVldCkKLSAgICAgICAg
ICAgIHNoZWV0cy5hcHBlbmQoc2hlZXQpOwotICAgIH0KLX0KLQotQXV0aG9yU3R5bGVTaGVldHM6
OlN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIEF1dGhvclN0eWxlU2hlZXRzOjphbmFseXplU3R5bGVT
aGVldENoYW5nZShjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgbmV3U3R5bGVz
aGVldHMsIGJvb2wmIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKQotewotICAgIHJlcXVpcmVzRnVs
bFN0eWxlUmVjYWxjID0gdHJ1ZTsKLSAgICAKLSAgICB1bnNpZ25lZCBuZXdTdHlsZXNoZWV0Q291
bnQgPSBuZXdTdHlsZXNoZWV0cy5zaXplKCk7Ci0KLSAgICBpZiAoIXN0eWxlUmVzb2x2ZXJJZkV4
aXN0cygpKQotICAgICAgICByZXR1cm4gUmVjb25zdHJ1Y3Q7Ci0KLSAgICBTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyID0gKnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpOwotCi0gICAgLy8gRmlu
ZCBvdXQgd2hpY2ggc3R5bGVzaGVldHMgYXJlIG5ldy4KLSAgICB1bnNpZ25lZCBvbGRTdHlsZXNo
ZWV0Q291bnQgPSBtX2FjdGl2ZVN0eWxlU2hlZXRzLnNpemUoKTsKLSAgICBpZiAobmV3U3R5bGVz
aGVldENvdW50IDwgb2xkU3R5bGVzaGVldENvdW50KQotICAgICAgICByZXR1cm4gUmVjb25zdHJ1
Y3Q7Ci0KLSAgICBWZWN0b3I8U3R5bGVTaGVldENvbnRlbnRzKj4gYWRkZWRTaGVldHM7Ci0gICAg
dW5zaWduZWQgbmV3SW5kZXggPSAwOwotICAgIGZvciAodW5zaWduZWQgb2xkSW5kZXggPSAwOyBv
bGRJbmRleCA8IG9sZFN0eWxlc2hlZXRDb3VudDsgKytvbGRJbmRleCkgewotICAgICAgICBpZiAo
bmV3SW5kZXggPj0gbmV3U3R5bGVzaGVldENvdW50KQotICAgICAgICAgICAgcmV0dXJuIFJlY29u
c3RydWN0OwotICAgICAgICB3aGlsZSAobV9hY3RpdmVTdHlsZVNoZWV0c1tvbGRJbmRleF0gIT0g
bmV3U3R5bGVzaGVldHNbbmV3SW5kZXhdKSB7Ci0gICAgICAgICAgICBhZGRlZFNoZWV0cy5hcHBl
bmQoJm5ld1N0eWxlc2hlZXRzW25ld0luZGV4XS0+Y29udGVudHMoKSk7Ci0gICAgICAgICAgICAr
K25ld0luZGV4OwotICAgICAgICAgICAgaWYgKG5ld0luZGV4ID09IG5ld1N0eWxlc2hlZXRDb3Vu
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gUmVjb25zdHJ1Y3Q7Ci0gICAgICAgIH0KLSAgICAg
ICAgKytuZXdJbmRleDsKLSAgICB9Ci0gICAgYm9vbCBoYXNJbnNlcnRpb25zID0gIWFkZGVkU2hl
ZXRzLmlzRW1wdHkoKTsKLSAgICB3aGlsZSAobmV3SW5kZXggPCBuZXdTdHlsZXNoZWV0Q291bnQp
IHsKLSAgICAgICAgYWRkZWRTaGVldHMuYXBwZW5kKCZuZXdTdHlsZXNoZWV0c1tuZXdJbmRleF0t
PmNvbnRlbnRzKCkpOwotICAgICAgICArK25ld0luZGV4OwotICAgIH0KLSAgICAvLyBJZiBhbGwg
bmV3IHNoZWV0cyB3ZXJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3Qgd2UgY2FuIGp1c3Qg
YWRkIHRoZW0gdG8gZXhpc3RpbmcgU3R5bGVSZXNvbHZlci4KLSAgICAvLyBJZiB0aGVyZSB3ZXJl
IGluc2VydGlvbnMgd2UgbmVlZCB0byByZS1hZGQgYWxsIHRoZSBzdHlsZXNoZWV0cyBzbyBydWxl
cyBhcmUgb3JkZXJlZCBjb3JyZWN0bHkuCi0gICAgYXV0byBzdHlsZVJlc29sdmVyVXBkYXRlVHlw
ZSA9IGhhc0luc2VydGlvbnMgPyBSZXNldCA6IEFkZGl0aXZlOwotCi0gICAgLy8gSWYgd2UgYXJl
IGFscmVhZHkgcGFyc2luZyB0aGUgYm9keSBhbmQgc28gbWF5IGhhdmUgc2lnbmlmaWNhbnQgYW1v
dW50IG9mIGVsZW1lbnRzLCBwdXQgc29tZSBlZmZvcnQgaW50byB0cnlpbmcgdG8gYXZvaWQgc3R5
bGUgcmVjYWxjcy4KLSAgICBpZiAoIW1fZG9jdW1lbnQuYm9keU9yRnJhbWVzZXQoKSB8fCBtX2Rv
Y3VtZW50Lmhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIHN0
eWxlUmVzb2x2ZXJVcGRhdGVUeXBlOwotCi0gICAgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyBp
bnZhbGlkYXRpb25BbmFseXNpcyhhZGRlZFNoZWV0cywgc3R5bGVSZXNvbHZlci5tZWRpYVF1ZXJ5
RXZhbHVhdG9yKCkpOwotICAgIGlmIChpbnZhbGlkYXRpb25BbmFseXNpcy5kaXJ0aWVzQWxsU3R5
bGUoKSkKLSAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlOwotICAgIGludmFs
aWRhdGlvbkFuYWx5c2lzLmludmFsaWRhdGVTdHlsZShtX2RvY3VtZW50KTsKLSAgICByZXF1aXJl
c0Z1bGxTdHlsZVJlY2FsYyA9IGZhbHNlOwotCi0gICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXJVcGRh
dGVUeXBlOwotfQotCi1zdGF0aWMgdm9pZCBmaWx0ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHlsZVNo
ZWV0cyhWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgcmVzdWx0LCBjb25zdCBWZWN0b3I8
UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRzKQotewotICAgIGZvciAoYXV0byYgc2hlZXQgOiBz
aGVldHMpIHsKLSAgICAgICAgaWYgKCFpczxDU1NTdHlsZVNoZWV0Pigqc2hlZXQpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIENTU1N0eWxlU2hlZXQmIHN0eWxlU2hlZXQgPSBkb3du
Y2FzdDxDU1NTdHlsZVNoZWV0Pigqc2hlZXQpOwotICAgICAgICBpZiAoc3R5bGVTaGVldC5pc0xv
YWRpbmcoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc3R5bGVTaGVldC5k
aXNhYmxlZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghc3R5bGVTaGVl
dC5sZW5ndGgoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXN1bHQuYXBwZW5k
KCZzdHlsZVNoZWV0KTsKLSAgICB9Ci19Ci0KLXZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OnVwZGF0
ZUFjdGl2ZVN0eWxlU2hlZXRzKFVwZGF0ZVR5cGUgdXBkYXRlVHlwZSkKLXsKLSAgICBBU1NFUlQo
IW1fcGVuZGluZ1VwZGF0ZVR5cGUpOwotCi0gICAgaWYgKG1fZG9jdW1lbnQuaW5TdHlsZVJlY2Fs
YygpIHx8IG1fZG9jdW1lbnQuaW5SZW5kZXJUcmVlVXBkYXRlKCkpIHsKLSAgICAgICAgLy8gUHJv
dGVjdCBhZ2FpbnN0IGRlbGV0aW5nIHN0eWxlIHJlc29sdmVyIGluIHRoZSBtaWRkbGUgb2YgYSBz
dHlsZSByZXNvbHV0aW9uLgotICAgICAgICAvLyBDcmFzaCBzdGFja3MgaW5kaWNhdGUgd2UgY2Fu
IGdldCBoZXJlIHdoZW4gYSByZXNvdXJjZSBsb2FkIGZhaWxzIHN5bmNocm9ub3VzbHkgKGZvciBl
eGFtcGxlIGR1ZSB0byBjb250ZW50IGJsb2NraW5nKS4KLSAgICAgICAgLy8gRklYTUU6IFRoZXNl
IGtpbmQgb2YgY2FzZXMgc2hvdWxkIGJlIGVsaW1pbmF0ZWQgYW5kIHRoaXMgcGF0aCByZXBsYWNl
ZCBieSBhbiBhc3NlcnQuCi0gICAgICAgIG1fcGVuZGluZ1VwZGF0ZVR5cGUgPSBVcGRhdGVUeXBl
OjpDb250ZW50c09ySW50ZXJwcmV0YXRpb247Ci0gICAgICAgIG1fZG9jdW1lbnQuc2NoZWR1bGVG
b3JjZWRTdHlsZVJlY2FsYygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFt
X2RvY3VtZW50Lmhhc0xpdmluZ1JlbmRlclRyZWUoKSkgewotICAgICAgICBtX2RvY3VtZW50LmNs
ZWFyU3R5bGVSZXNvbHZlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRG9u
J3QgYm90aGVyIHVwZGF0aW5nLCBzaW5jZSB3ZSBoYXZlbid0IGxvYWRlZCBhbGwgb3VyIHN0eWxl
IGluZm8geWV0Ci0gICAgLy8gYW5kIGhhdmVuJ3QgY2FsY3VsYXRlZCB0aGUgc3R5bGUgcmVzb2x2
ZXIgZm9yIHRoZSBmaXJzdCB0aW1lLgotICAgIGlmICghbV9zaGFkb3dSb290ICYmICFtX2RpZFVw
ZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzICYmIG1fcGVuZGluZ1N0eWxlU2hlZXRDb3VudCkgewotICAg
ICAgICBtX2RvY3VtZW50LmNsZWFyU3R5bGVSZXNvbHZlcigpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gRklYTUU6IFN1cHBvcnQgb3B0aW1pemVkIGludmFsaWRhdGlvbiBpbiBz
aGFkb3cgdHJlZXMuCi0gICAgaWYgKG1fc2hhZG93Um9vdCkKLSAgICAgICAgdXBkYXRlVHlwZSA9
IFVwZGF0ZVR5cGU6OkNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbjsKLQotICAgIG1fZGlkVXBkYXRl
QWN0aXZlU3R5bGVTaGVldHMgPSB0cnVlOwotCi0gICAgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0
Pj4gYWN0aXZlU3R5bGVTaGVldHM7Ci0gICAgY29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKGFjdGl2
ZVN0eWxlU2hlZXRzKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IGFjdGl2
ZUNTU1N0eWxlU2hlZXRzOwotICAgIGFjdGl2ZUNTU1N0eWxlU2hlZXRzLmFwcGVuZFZlY3Rvciht
X2RvY3VtZW50LmV4dGVuc2lvblN0eWxlU2hlZXRzKCkuaW5qZWN0ZWRBdXRob3JTdHlsZVNoZWV0
cygpKTsKLSAgICBhY3RpdmVDU1NTdHlsZVNoZWV0cy5hcHBlbmRWZWN0b3IobV9kb2N1bWVudC5l
eHRlbnNpb25TdHlsZVNoZWV0cygpLmF1dGhvclN0eWxlU2hlZXRzRm9yVGVzdGluZygpKTsKLSAg
ICBmaWx0ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHlsZVNoZWV0cyhhY3RpdmVDU1NTdHlsZVNoZWV0
cywgYWN0aXZlU3R5bGVTaGVldHMpOwotCi0gICAgYm9vbCByZXF1aXJlc0Z1bGxTdHlsZVJlY2Fs
YyA9IHRydWU7Ci0gICAgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgc3R5bGVSZXNvbHZlclVwZGF0
ZVR5cGUgPSBSZWNvbnN0cnVjdDsKLSAgICBpZiAodXBkYXRlVHlwZSA9PSBVcGRhdGVUeXBlOjpB
Y3RpdmVTZXQpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID0gYW5hbHl6ZVN0eWxl
U2hlZXRDaGFuZ2UoYWN0aXZlQ1NTU3R5bGVTaGVldHMsIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxj
KTsKLQotICAgIHVwZGF0ZVN0eWxlUmVzb2x2ZXIoYWN0aXZlQ1NTU3R5bGVTaGVldHMsIHN0eWxl
UmVzb2x2ZXJVcGRhdGVUeXBlKTsKLQotICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRM
aXN0Rm9yRmFzdExvb2t1cCA9IG51bGxwdHI7Ci0gICAgbV9hY3RpdmVTdHlsZVNoZWV0cy5zd2Fw
KGFjdGl2ZUNTU1N0eWxlU2hlZXRzKTsKLSAgICBtX3N0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExp
c3Quc3dhcChhY3RpdmVTdHlsZVNoZWV0cyk7Ci0KLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmFjdGl2ZVN0eWxlU2hlZXRzVXBkYXRlZChtX2RvY3VtZW50KTsKLQotICAgIGZvciAoY29u
c3QgYXV0byYgc2hlZXQgOiBtX2FjdGl2ZVN0eWxlU2hlZXRzKSB7Ci0gICAgICAgIGlmIChzaGVl
dC0+Y29udGVudHMoKS51c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5KCkpCi0gICAgICAgICAgICBt
X3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChyZXF1
aXJlc0Z1bGxTdHlsZVJlY2FsYykgewotICAgICAgICBpZiAobV9zaGFkb3dSb290KSB7Ci0gICAg
ICAgICAgICBmb3IgKGF1dG8mIHNoYWRvd0NoaWxkIDogY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4o
Km1fc2hhZG93Um9vdCkpCi0gICAgICAgICAgICAgICAgc2hhZG93Q2hpbGQuc2V0TmVlZHNTdHls
ZVJlY2FsYygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZG9jdW1lbnQuc2NoZWR1
bGVGb3JjZWRTdHlsZVJlY2FsYygpOwotICAgIH0KLX0KLQotdm9pZCBBdXRob3JTdHlsZVNoZWV0
czo6dXBkYXRlU3R5bGVSZXNvbHZlcihWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgYWN0
aXZlU3R5bGVTaGVldHMsIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIHVwZGF0ZVR5cGUpCi17Ci0g
ICAgaWYgKHVwZGF0ZVR5cGUgPT0gUmVjb25zdHJ1Y3QpIHsKLSAgICAgICAgaWYgKG1fc2hhZG93
Um9vdCkKLSAgICAgICAgICAgIG1fc2hhZG93Um9vdC0+cmVzZXRTdHlsZVJlc29sdmVyKCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZG9jdW1lbnQuY2xlYXJTdHlsZVJlc29sdmVyKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXV0byYgc3R5bGVSZXNvbHZlciA9IHRoaXMt
PnN0eWxlUmVzb2x2ZXIoKTsKLQotICAgIGlmICh1cGRhdGVUeXBlID09IFJlc2V0KSB7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXIucnVsZVNldHMoKS5yZXNldEF1dGhvclN0eWxlKCk7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXIuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoYWN0aXZlU3R5bGVTaGVldHMp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh1cGRhdGVUeXBlID09IEFkZGl0aXZlKTsK
LSAgICAgICAgdW5zaWduZWQgZmlyc3ROZXdJbmRleCA9IG1fYWN0aXZlU3R5bGVTaGVldHMuc2l6
ZSgpOwotICAgICAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBuZXdTdHlsZVNoZWV0
czsKLSAgICAgICAgbmV3U3R5bGVTaGVldHMuYXBwZW5kUmFuZ2UoYWN0aXZlU3R5bGVTaGVldHMu
YmVnaW4oKSArIGZpcnN0TmV3SW5kZXgsIGFjdGl2ZVN0eWxlU2hlZXRzLmVuZCgpKTsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhuZXdTdHlsZVNoZWV0cyk7
Ci0gICAgfQotCi0gICAgaWYgKCFtX3NoYWRvd1Jvb3QpIHsKLSAgICAgICAgYXV0byYgdXNlckFn
ZW50U2hhZG93VHJlZVN0eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LnVzZXJBZ2VudFNoYWRvd1Ry
ZWVTdHlsZVJlc29sdmVyKCk7Ci0gICAgICAgIHVzZXJBZ2VudFNoYWRvd1RyZWVTdHlsZVJlc29s
dmVyLnJ1bGVTZXRzKCkucmVzZXRBdXRob3JTdHlsZSgpOwotICAgICAgICBhdXRvJiBhdXRob3JS
dWxlU2V0ID0gc3R5bGVSZXNvbHZlci5ydWxlU2V0cygpLmF1dGhvclN0eWxlKCk7Ci0gICAgICAg
IGlmIChhdXRob3JSdWxlU2V0Lmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpKQotICAgICAg
ICAgICAgdXNlckFnZW50U2hhZG93VHJlZVN0eWxlUmVzb2x2ZXIucnVsZVNldHMoKS5hdXRob3JT
dHlsZSgpLmNvcHlTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXNGcm9tKGF1dGhvclJ1bGVTZXQpOwot
ICAgIH0KLX0KLQotY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gQXV0aG9yU3R5
bGVTaGVldHM6OmFjdGl2ZVN0eWxlU2hlZXRzRm9ySW5zcGVjdG9yKCkgY29uc3QKLXsKLSAgICBW
ZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiByZXN1bHQ7Ci0KLSAgICByZXN1bHQuYXBwZW5k
VmVjdG9yKG1fZG9jdW1lbnQuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5pbmplY3RlZEF1dGhvclN0
eWxlU2hlZXRzKCkpOwotICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IobV9kb2N1bWVudC5leHRlbnNp
b25TdHlsZVNoZWV0cygpLmF1dGhvclN0eWxlU2hlZXRzRm9yVGVzdGluZygpKTsKLQotICAgIGZv
ciAoYXV0byYgc3R5bGVTaGVldCA6IG1fc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdCkgewot
ICAgICAgICBpZiAoIWlzPENTU1N0eWxlU2hlZXQ+KCpzdHlsZVNoZWV0KSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIENTU1N0eWxlU2hlZXQmIHNoZWV0ID0gZG93bmNhc3Q8Q1NT
U3R5bGVTaGVldD4oKnN0eWxlU2hlZXQpOwotICAgICAgICBpZiAoc2hlZXQuZGlzYWJsZWQoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoJnNoZWV0KTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIEF1dGhvclN0eWxlU2hlZXRz
OjphY3RpdmVTdHlsZVNoZWV0c0NvbnRhaW5zKGNvbnN0IENTU1N0eWxlU2hlZXQqIHNoZWV0KSBj
b25zdAotewotICAgIGlmICghbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0
TG9va3VwKSB7Ci0gICAgICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFz
dExvb2t1cCA9IHN0ZDo6bWFrZV91bmlxdWU8SGFzaFNldDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4+
KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYWN0aXZlU3R5bGVTaGVldCA6IG1fYWN0aXZlU3R5bGVT
aGVldHMpCi0gICAgICAgICAgICBtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZh
c3RMb29rdXAtPmFkZChhY3RpdmVTdHlsZVNoZWV0LmdldCgpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cC0+Y29udGFpbnMo
c2hlZXQpOwotfQotCi12b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpmbHVzaFBlbmRpbmdVcGRhdGUo
KQotewotICAgIGlmICghbV9wZW5kaW5nVXBkYXRlVHlwZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGF1dG8gdXBkYXRlVHlwZSA9ICptX3BlbmRpbmdVcGRhdGVUeXBlOwotCi0gICAgY2xlYXJQZW5k
aW5nVXBkYXRlKCk7Ci0KLSAgICB1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyh1cGRhdGVUeXBlKTsK
LX0KLQotdm9pZCBBdXRob3JTdHlsZVNoZWV0czo6Y2xlYXJQZW5kaW5nVXBkYXRlKCkKLXsKLSAg
ICBtX3BlbmRpbmdVcGRhdGVUaW1lci5zdG9wKCk7Ci0gICAgbV9wZW5kaW5nVXBkYXRlVHlwZSA9
IHsgfTsKLX0KLQotdm9pZCBBdXRob3JTdHlsZVNoZWV0czo6c2NoZWR1bGVBY3RpdmVTZXRVcGRh
dGUoKQotewotICAgIGlmIChtX3NoYWRvd1Jvb3QpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gZmx1c2ggdXBkYXRlcyByZWN1cnNpdmVseSB0byBzdXBwb3J0IGFzeW5jaHJvbm91cyB1
cGRhdGVzIGluIHNoYWRvdyB0cmVlcy4KLSAgICAgICAgZGlkQ2hhbmdlQ2FuZGlkYXRlc0ZvckFj
dGl2ZVNldCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX3BlbmRpbmdVcGRh
dGVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX3BlbmRpbmdV
cGRhdGVUeXBlKQotICAgICAgICBtX3BlbmRpbmdVcGRhdGVUeXBlID0gVXBkYXRlVHlwZTo6QWN0
aXZlU2V0OwotICAgIG1fcGVuZGluZ1VwZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQot
dm9pZCBBdXRob3JTdHlsZVNoZWV0czo6ZGlkQ2hhbmdlQ2FuZGlkYXRlc0ZvckFjdGl2ZVNldCgp
Ci17Ci0gICAgYXV0byB1cGRhdGVUeXBlID0gbV9wZW5kaW5nVXBkYXRlVHlwZS52YWx1ZU9yKFVw
ZGF0ZVR5cGU6OkFjdGl2ZVNldCk7Ci0gICAgY2xlYXJQZW5kaW5nVXBkYXRlKCk7Ci0gICAgdXBk
YXRlQWN0aXZlU3R5bGVTaGVldHModXBkYXRlVHlwZSk7Ci19Ci0KLXZvaWQgQXV0aG9yU3R5bGVT
aGVldHM6OmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpCi17Ci0gICAgY2xlYXJQ
ZW5kaW5nVXBkYXRlKCk7Ci0gICAgdXBkYXRlQWN0aXZlU3R5bGVTaGVldHMoVXBkYXRlVHlwZTo6
Q29udGVudHNPckludGVycHJldGF0aW9uKTsKLX0KLQotdm9pZCBBdXRob3JTdHlsZVNoZWV0czo6
cGVuZGluZ1VwZGF0ZVRpbWVyRmlyZWQoKQotewotICAgIGZsdXNoUGVuZGluZ1VwZGF0ZSgpOwot
fQotCi19CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9yU3R5
bGVTaGVldHMuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCww
ICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0F1dGhvclN0eWxlU2hlZXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0F1dGhvclN0eWxlU2hlZXRzLmgJKHJldmlzaW9uIDIwNjg4MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5oCShub25leGlzdGVudCkKQEAgLTEsMTQ0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKLSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2Rl
Lm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9y
ZykKLSAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAsIDIwMTItMjAxMywgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLykKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBBdXRob3JTdHlsZVNoZWV0c19oCi0jZGVm
aW5lIEF1dGhvclN0eWxlU2hlZXRzX2gKLQotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8
bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFz
cyBEb2N1bWVudDsKLWNsYXNzIE5vZGU7Ci1jbGFzcyBTdHlsZVJlc29sdmVyOwotY2xhc3MgU3R5
bGVTaGVldDsKLWNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKLWNsYXNzIFN0eWxlU2hlZXRMaXN0
OwotY2xhc3MgU2hhZG93Um9vdDsKLWNsYXNzIFRyZWVTY29wZTsKLQotY2xhc3MgQXV0aG9yU3R5
bGVTaGVldHMgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4
cGxpY2l0IEF1dGhvclN0eWxlU2hlZXRzKERvY3VtZW50Jik7Ci0gICAgZXhwbGljaXQgQXV0aG9y
U3R5bGVTaGVldHMoU2hhZG93Um9vdCYpOwotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0Pj4mIGFjdGl2ZVN0eWxlU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVT
dHlsZVNoZWV0czsgfQotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4mIHN0
eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3QoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXRz
Rm9yU3R5bGVTaGVldExpc3Q7IH0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hl
ZXQ+PiBhY3RpdmVTdHlsZVNoZWV0c0Zvckluc3BlY3RvcigpIGNvbnN0OwotCi0gICAgdm9pZCBh
ZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShOb2RlJiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwot
ICAgIHZvaWQgcmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYpOwotCi0gICAgU3Ry
aW5nIHByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wcmVmZXJy
ZWRTdHlsZXNoZWV0U2V0TmFtZTsgfQotICAgIFN0cmluZyBzZWxlY3RlZFN0eWxlc2hlZXRTZXRO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lOyB9Ci0gICAg
dm9pZCBzZXRQcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsg
bV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSA9IG5hbWU7IH0KLSAgICB2b2lkIHNldFNlbGVj
dGVkU3R5bGVzaGVldFNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fc2VsZWN0ZWRTdHls
ZXNoZWV0U2V0TmFtZSA9IG5hbWU7IH0KLQotICAgIHZvaWQgYWRkUGVuZGluZ1NoZWV0KCkgeyBt
X3BlbmRpbmdTdHlsZVNoZWV0Q291bnQrKzsgfQotICAgIGVudW0gUmVtb3ZlUGVuZGluZ1NoZWV0
Tm90aWZpY2F0aW9uVHlwZSB7Ci0gICAgICAgIFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVk
aWF0ZWx5LAotICAgICAgICBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlMYXRlcgotICAgIH07Ci0g
ICAgdm9pZCByZW1vdmVQZW5kaW5nU2hlZXQoUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZpY2F0aW9u
VHlwZSA9IFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5KTsKLQotICAgIGJvb2wg
aGFzUGVuZGluZ1NoZWV0cygpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ1N0eWxlU2hlZXRDb3Vu
dCA+IDA7IH0KLQotICAgIGJvb2wgdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eSgpIHsgcmV0dXJu
IG1fdXNlc1N0eWxlQmFzZWRFZGl0YWJpbGl0eTsgfQotCi0gICAgYm9vbCBhY3RpdmVTdHlsZVNo
ZWV0c0NvbnRhaW5zKGNvbnN0IENTU1N0eWxlU2hlZXQqKSBjb25zdDsKLQotICAgIHZvaWQgZGlk
Q2hhbmdlQ2FuZGlkYXRlc0ZvckFjdGl2ZVNldCgpOwotICAgIHZvaWQgc2NoZWR1bGVBY3RpdmVT
ZXRVcGRhdGUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpZENoYW5nZUNvbnRlbnRzT3JJ
bnRlcnByZXRhdGlvbigpOwotCi0gICAgYm9vbCBoYXNQZW5kaW5nVXBkYXRlKCkgY29uc3QgeyBy
ZXR1cm4gISFtX3BlbmRpbmdVcGRhdGVUeXBlOyB9Ci0gICAgdm9pZCBmbHVzaFBlbmRpbmdVcGRh
dGUoKTsKLQotICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIoKTsKLSAgICBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVySWZFeGlzdHMoKTsKLQotICAgIHN0YXRpYyBBdXRob3JTdHls
ZVNoZWV0cyYgZm9yTm9kZShOb2RlJik7Ci0KLXByaXZhdGU6Ci0gICAgZW51bSBjbGFzcyBVcGRh
dGVUeXBlIHsgQWN0aXZlU2V0LCBDb250ZW50c09ySW50ZXJwcmV0YXRpb24gfTsKLSAgICB2b2lk
IHVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKFVwZGF0ZVR5cGUpOwotCi0gICAgdm9pZCBjb2xsZWN0
QWN0aXZlU3R5bGVTaGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0Pj4mKTsKLQotICAgIGVu
dW0gU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgewotICAgICAgICBSZWNvbnN0cnVjdCwKLSAgICAg
ICAgUmVzZXQsCi0gICAgICAgIEFkZGl0aXZlCi0gICAgfTsKLSAgICBTdHlsZVJlc29sdmVyVXBk
YXRlVHlwZSBhbmFseXplU3R5bGVTaGVldENoYW5nZShjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0
eWxlU2hlZXQ+PiYgbmV3U3R5bGVzaGVldHMsIGJvb2wmIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxj
KTsKLSAgICB2b2lkIHVwZGF0ZVN0eWxlUmVzb2x2ZXIoVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0Pj4mLCBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSk7Ci0KLSAgICB2b2lkIHBlbmRpbmdVcGRh
dGVUaW1lckZpcmVkKCk7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdVcGRhdGUoKTsKLQotICAgIERv
Y3VtZW50JiBtX2RvY3VtZW50OwotICAgIFNoYWRvd1Jvb3QqIG1fc2hhZG93Um9vdCB7IG51bGxw
dHIgfTsKLQotICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+IG1fc3R5bGVTaGVldHNGb3JT
dHlsZVNoZWV0TGlzdDsKLSAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBtX2FjdGl2
ZVN0eWxlU2hlZXRzOwotCi0gICAgVGltZXIgbV9wZW5kaW5nVXBkYXRlVGltZXI7Ci0KLSAgICAv
LyBUaGlzIGlzIGEgbWlycm9yIG9mIG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMgdGhhdCBnZXRz
IHBvcHVsYXRlZCBvbiBkZW1hbmQgZm9yIGFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMoKS4KLSAg
ICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4g
bV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwOwotCi0gICAgLy8g
VHJhY2sgdGhlIG51bWJlciBvZiBjdXJyZW50bHkgbG9hZGluZyB0b3AtbGV2ZWwgc3R5bGVzaGVl
dHMgbmVlZGVkIGZvciByZW5kZXJpbmcuCi0gICAgLy8gU2hlZXRzIGxvYWRlZCB1c2luZyB0aGUg
QGltcG9ydCBkaXJlY3RpdmUgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGlzIGNvdW50LgotICAgIC8v
IFdlIHVzZSB0aGlzIGNvdW50IG9mIHBlbmRpbmcgc2hlZXRzIHRvIGRldGVjdCB3aGVuIHdlIGNh
biBiZWdpbiBhdHRhY2hpbmcKLSAgICAvLyBlbGVtZW50cyBhbmQgd2hlbiBpdCBpcyBzYWZlIHRv
IGV4ZWN1dGUgc2NyaXB0cy4KLSAgICBpbnQgbV9wZW5kaW5nU3R5bGVTaGVldENvdW50IHsgMCB9
OwotICAgIGJvb2wgbV9kaWRVcGRhdGVBY3RpdmVTdHlsZVNoZWV0cyB7IGZhbHNlIH07Ci0KLSAg
ICBPcHRpb25hbDxVcGRhdGVUeXBlPiBtX3BlbmRpbmdVcGRhdGVUeXBlOwotCi0gICAgTGlzdEhh
c2hTZXQ8Tm9kZSo+IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzOwotCi0gICAgU3RyaW5nIG1f
cHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWU7Ci0gICAgU3RyaW5nIG1fc2VsZWN0ZWRTdHlsZXNo
ZWV0U2V0TmFtZTsKLQotICAgIGJvb2wgbV91c2VzU3R5bGVCYXNlZEVkaXRhYmlsaXR5IHsgZmFs
c2UgfTsKLX07Ci0KLX0KLQotI2VuZGlmCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gMjA2ODc5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIK
ICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQXR0ci5oIgotI2lu
Y2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCiAj
aW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJhdGlv
bi5oIgpAQCAtMTY4LDYgKzE2Nyw3IEBACiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAj
aW5jbHVkZSAiU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250
ZW50cy5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiU3R5bGVUcmVl
UmVzb2x2ZXIuaCIKQEAgLTQ1MSw3ICs0NTEsNyBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUq
IGZyYW1lLCBjb25zdCBVCiAgICAgLCBtX2RvbVRyZWVWZXJzaW9uKCsrc19nbG9iYWxUcmVlVmVy
c2lvbikKICAgICAsIG1fbGlzdGVuZXJUeXBlcygwKQogICAgICwgbV9tdXRhdGlvbk9ic2VydmVy
VHlwZXMoMCkKLSAgICAsIG1fYXV0aG9yU3R5bGVTaGVldHMoc3RkOjptYWtlX3VuaXF1ZTxBdXRo
b3JTdHlsZVNoZWV0cz4oKnRoaXMpKQorICAgICwgbV9zdHlsZVNjb3BlKHN0ZDo6bWFrZV91bmlx
dWU8U3R5bGU6OlNjb3BlPigqdGhpcykpCiAgICAgLCBtX2V4dGVuc2lvblN0eWxlU2hlZXRzKHN0
ZDo6bWFrZV91bmlxdWU8RXh0ZW5zaW9uU3R5bGVTaGVldHM+KCp0aGlzKSkKICAgICAsIG1fdmlz
aXRlZExpbmtTdGF0ZShzdGQ6Om1ha2VfdW5pcXVlPFZpc2l0ZWRMaW5rU3RhdGU+KCp0aGlzKSkK
ICAgICAsIG1fdmlzdWFsbHlPcmRlcmVkKGZhbHNlKQpAQCAtMTM1NCw3ICsxMzU0LDcgQEAgdm9p
ZCBEb2N1bWVudDo6c2V0Q29udGVudExhbmd1YWdlKGNvbnN0IAogICAgIG1fY29udGVudExhbmd1
YWdlID0gbGFuZ3VhZ2U7CiAKICAgICAvLyBSZWNhbGN1bGF0ZSBzdHlsZSBzbyBsYW5ndWFnZSBp
cyB1c2VkIHdoZW4gc2VsZWN0aW5nIHRoZSBpbml0aWFsIGZvbnQuCi0gICAgbV9hdXRob3JTdHls
ZVNoZWV0cy0+ZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CisgICAgbV9zdHls
ZVNjb3BlLT5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKIH0KIAogdm9pZCBE
b2N1bWVudDo6c2V0WE1MVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpAQCAtMTgxMiw3ICsxODEyLDcgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGUo
U3R5bGU6OkNoYW5nZQogICAgIC8vIHJlLWF0dGFjaGluZyBvdXIgY29udGFpbmluZyBpZnJhbWUs
IHdoaWNoIHdoZW4gYXNrZWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmlzVVJMQWxsb3dlZAogICAg
IC8vIGhpdHMgYSBudWxsLWRlcmVmZXJlbmNlIGR1ZSB0byBzZWN1cml0eSBjb2RlIGFsd2F5cyBh
c3N1bWluZyB0aGUgZG9jdW1lbnQgaGFzIGEgU2VjdXJpdHlPcmlnaW4uCiAKLSAgICBhdXRob3JT
dHlsZVNoZWV0cygpLmZsdXNoUGVuZGluZ1VwZGF0ZSgpOworICAgIHN0eWxlU2NvcGUoKS5mbHVz
aFBlbmRpbmdVcGRhdGUoKTsKIAogICAgIGZyYW1lVmlldy53aWxsUmVjYWxjU3R5bGUoKTsKIApA
QCAtMTg5NSw3ICsxODk1LDcgQEAgYm9vbCBEb2N1bWVudDo6bmVlZHNTdHlsZVJlY2FsYygpIGNv
bnN0CiAgICAgaWYgKHBhZ2VDYWNoZVN0YXRlKCkgIT0gTm90SW5QYWdlQ2FjaGUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtX3BlbmRpbmdTdHlsZVJlY2FsY1Nob3VsZEZv
cmNlIHx8IGNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IGF1dGhvclN0eWxlU2hlZXRzKCkuaGFz
UGVuZGluZ1VwZGF0ZSgpOworICAgIHJldHVybiBtX3BlbmRpbmdTdHlsZVJlY2FsY1Nob3VsZEZv
cmNlIHx8IGNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IHN0eWxlU2NvcGUoKS5oYXNQZW5kaW5n
VXBkYXRlKCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVN0eWxlSWZOZWVkZWQoKQpAQCAt
MTkwNiw3ICsxOTA2LDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlU3R5bGVJZk5lZWRlZCgpCiAg
ICAgaWYgKCF2aWV3KCkgfHwgdmlldygpLT5pc0luUmVuZGVyVHJlZUxheW91dCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRob3JTdHlsZVNoZWV0cygpLmZsdXNoUGVuZGluZ1VwZGF0ZSgp
OworICAgIHN0eWxlU2NvcGUoKS5mbHVzaFBlbmRpbmdVcGRhdGUoKTsKIAogICAgIGlmICghbmVl
ZHNTdHlsZVJlY2FsYygpKQogICAgICAgICByZXR1cm47CkBAIC0xOTYwLDcgKzE5NjAsNyBAQCB2
b2lkIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nCiAgICAgICAgIEhUTUxFbGVt
ZW50KiBib2R5RWxlbWVudCA9IGJvZHlPckZyYW1lc2V0KCk7CiAgICAgICAgIGlmIChib2R5RWxl
bWVudCAmJiAhYm9keUVsZW1lbnQtPnJlbmRlcmVyKCkgJiYgbV9wZW5kaW5nU2hlZXRMYXlvdXQg
PT0gTm9MYXlvdXRXaXRoUGVuZGluZ1NoZWV0cykgewogICAgICAgICAgICAgbV9wZW5kaW5nU2hl
ZXRMYXlvdXQgPSBEaWRMYXlvdXRXaXRoUGVuZGluZ1NoZWV0czsKLSAgICAgICAgICAgIGF1dGhv
clN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CisgICAg
ICAgICAgICBzdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7
CiAgICAgICAgICAgICByZWNhbGNTdHlsZShTdHlsZTo6Rm9yY2UpOwogICAgICAgICB9IGVsc2Ug
aWYgKG1faGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSkKICAgICAgICAgICAgIC8vIElmIG5l
dyBub2RlcyBoYXZlIGJlZW4gYWRkZWQgb3Igc3R5bGUgcmVjYWxjIGhhcyBiZWVuIGRvbmUgd2l0
aCBzdHlsZSBzaGVldHMgc3RpbGwgcGVuZGluZywgc29tZSBub2RlcyAKQEAgLTIxNDIsNyArMjE0
Miw3IEBAIHZvaWQgRG9jdW1lbnQ6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWwKIHZvaWQgRG9j
dW1lbnQ6OmNyZWF0ZVN0eWxlUmVzb2x2ZXIoKQogewogICAgIG1fc3R5bGVSZXNvbHZlciA9IHN0
ZDo6bWFrZV91bmlxdWU8U3R5bGVSZXNvbHZlcj4oKnRoaXMpOwotICAgIG1fc3R5bGVSZXNvbHZl
ci0+YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoYXV0aG9yU3R5bGVTaGVldHMoKS5hY3RpdmVTdHls
ZVNoZWV0cygpKTsKKyAgICBtX3N0eWxlUmVzb2x2ZXItPmFwcGVuZEF1dGhvclN0eWxlU2hlZXRz
KHN0eWxlU2NvcGUoKS5hY3RpdmVTdHlsZVNoZWV0cygpKTsKIH0KIAogU3R5bGVSZXNvbHZlciYg
RG9jdW1lbnQ6OnVzZXJBZ2VudFNoYWRvd1RyZWVTdHlsZVJlc29sdmVyKCkKQEAgLTMwODUsNyAr
MzA4NSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmRpZFJlbW92ZUFsbFBlbmRpbmdTdHlsZXMKIHsKICAg
ICBtX25lZWRzTm90aWZ5UmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hlZXQgPSBmYWxzZTsKIAotICAg
IGF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ2FuZGlkYXRlc0ZvckFjdGl2ZVNldCgpOwor
ICAgIHN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDYW5kaWRhdGVzRm9yQWN0aXZlU2V0KCk7CiAKICAg
ICBpZiAobV9wZW5kaW5nU2hlZXRMYXlvdXQgPT0gRGlkTGF5b3V0V2l0aFBlbmRpbmdTaGVldHMp
IHsKICAgICAgICAgbV9wZW5kaW5nU2hlZXRMYXlvdXQgPSBJZ25vcmVMYXlvdXRXaXRoUGVuZGlu
Z1NoZWV0czsKQEAgLTMxMDgsOSArMzEwOCw5IEBAIGJvb2wgRG9jdW1lbnQ6OnVzZXNTdHlsZUJh
c2VkRWRpdGFiaWxpdHkKICAgICBBU1NFUlQoIW1fcmVuZGVyVmlldyB8fCAhbV9yZW5kZXJWaWV3
LT5mcmFtZVZpZXcoKS5pc1BhaW50aW5nKCkpOwogICAgIEFTU0VSVCghbV9pblN0eWxlUmVjYWxj
KTsKIAotICAgIGF1dG8mIGF1dGhvclNoZWV0cyA9IGNvbnN0X2Nhc3Q8QXV0aG9yU3R5bGVTaGVl
dHMmPihhdXRob3JTdHlsZVNoZWV0cygpKTsKLSAgICBhdXRob3JTaGVldHMuZmx1c2hQZW5kaW5n
VXBkYXRlKCk7Ci0gICAgcmV0dXJuIGF1dGhvclNoZWV0cy51c2VzU3R5bGVCYXNlZEVkaXRhYmls
aXR5KCk7CisgICAgYXV0byYgc3R5bGVTY29wZSA9IGNvbnN0X2Nhc3Q8U3R5bGU6OlNjb3BlJj4o
dGhpcy0+c3R5bGVTY29wZSgpKTsKKyAgICBzdHlsZVNjb3BlLmZsdXNoUGVuZGluZ1VwZGF0ZSgp
OworICAgIHJldHVybiBzdHlsZVNjb3BlLnVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKTsKIH0K
IAogdm9pZCBEb2N1bWVudDo6c2V0SGFzRWxlbWVudFVzaW5nU3R5bGVCYXNlZEVkaXRhYmlsaXR5
KCkKQEAgLTMxNTYsOSArMzE1Niw5IEBAIHZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NIdHRwRXF1aXYo
Y29uc3QgU3QKICAgICAgICAgLy8gRm9yIG1vcmUgaW5mbywgc2VlIHRoZSB0ZXN0IGF0OgogICAg
ICAgICAvLyBodHRwOi8vd3d3LmhpeGllLmNoL3Rlc3RzL2V2aWwvY3NzL2ltcG9ydC9tYWluL3By
ZWZlcnJlZC5odG1sCiAgICAgICAgIC8vIC1kd2gKLSAgICAgICAgYXV0aG9yU3R5bGVTaGVldHMo
KS5zZXRTZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lKGNvbnRlbnQpOwotICAgICAgICBhdXRob3JT
dHlsZVNoZWV0cygpLnNldFByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lKGNvbnRlbnQpOwotICAg
ICAgICBhdXRob3JTdHlsZVNoZWV0cygpLmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlv
bigpOworICAgICAgICBzdHlsZVNjb3BlKCkuc2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZShj
b250ZW50KTsKKyAgICAgICAgc3R5bGVTY29wZSgpLnNldFByZWZlcnJlZFN0eWxlc2hlZXRTZXRO
YW1lKGNvbnRlbnQpOworICAgICAgICBzdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPcklu
dGVycHJldGF0aW9uKCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBIVFRQSGVhZGVyTmFt
ZTo6UmVmcmVzaDogewpAQCAtMzQ1MiwxOCArMzQ1MiwxOCBAQCBTdHlsZVNoZWV0TGlzdCYgRG9j
dW1lbnQ6OnN0eWxlU2hlZXRzKCkKIAogU3RyaW5nIERvY3VtZW50OjpwcmVmZXJyZWRTdHlsZXNo
ZWV0U2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gYXV0aG9yU3R5bGVTaGVldHMoKS5wcmVmZXJy
ZWRTdHlsZXNoZWV0U2V0TmFtZSgpOworICAgIHJldHVybiBzdHlsZVNjb3BlKCkucHJlZmVycmVk
U3R5bGVzaGVldFNldE5hbWUoKTsKIH0KIAogU3RyaW5nIERvY3VtZW50OjpzZWxlY3RlZFN0eWxl
c2hlZXRTZXQoKSBjb25zdAogewotICAgIHJldHVybiBhdXRob3JTdHlsZVNoZWV0cygpLnNlbGVj
dGVkU3R5bGVzaGVldFNldE5hbWUoKTsKKyAgICByZXR1cm4gc3R5bGVTY29wZSgpLnNlbGVjdGVk
U3R5bGVzaGVldFNldE5hbWUoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0U2VsZWN0ZWRTdHls
ZXNoZWV0U2V0KGNvbnN0IFN0cmluZyYgYVN0cmluZykKIHsKLSAgICBhdXRob3JTdHlsZVNoZWV0
cygpLnNldFNlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUoYVN0cmluZyk7Ci0gICAgYXV0aG9yU3R5
bGVTaGVldHMoKS5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKKyAgICBzdHls
ZVNjb3BlKCkuc2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZShhU3RyaW5nKTsKKyAgICBzdHls
ZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CiB9CiAKIHZvaWQg
RG9jdW1lbnQ6OmV2YWx1YXRlTWVkaWFRdWVyeUxpc3QoKQpAQCAtNjY2NSw3ICs2NjY1LDcgQEAg
dm9pZCBEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjbwogCiBib29sIERvY3VtZW50
OjpoYXZlU3R5bGVzaGVldHNMb2FkZWQoKSBjb25zdAogewotICAgIHJldHVybiAhYXV0aG9yU3R5
bGVTaGVldHMoKS5oYXNQZW5kaW5nU2hlZXRzKCkgfHwgbV9pZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHM7CisgICAgcmV0dXJuICFzdHlsZVNjb3BlKCkuaGFzUGVuZGluZ1NoZWV0cygpIHx8IG1faWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzOwogfQogCiBMb2NhbGUmIERvY3VtZW50OjpnZXRDYWNoZWRM
b2NhbGUoY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAkocmV2aXNpb24gMjA2ODc5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBBWE9iamVjdENhY2hlOwogY2xhc3MgQXR0cjsKLWNsYXNzIEF1dGhvclN0eWxlU2hlZXRzOwog
Y2xhc3MgQ0RBVEFTZWN0aW9uOwogY2xhc3MgQ1NTRm9udFNlbGVjdG9yOwogY2xhc3MgQ1NTU3R5
bGVEZWNsYXJhdGlvbjsKQEAgLTIyNCw2ICsyMjMsMTAgQEAgc3RydWN0IFRleHRBdXRvU2l6aW5n
VHJhaXRzIDogV1RGOjpHZW5lcgogY2xhc3MgTWVkaWFTZXNzaW9uOwogI2VuZGlmCiAKK25hbWVz
cGFjZSBTdHlsZSB7CitjbGFzcyBTY29wZTsKK307CisKIGNvbnN0IHVpbnQ2NF90IEhUTUxNZWRp
YUVsZW1lbnRJbnZhbGlkSUQgPSAwOwogCiBlbnVtIFBhZ2VzaG93RXZlbnRQZXJzaXN0ZW5jZSB7
CkBAIC01MDQsOCArNTA3LDggQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3R5bGVT
aGVldExpc3QmIHN0eWxlU2hlZXRzKCk7CiAKLSAgICBBdXRob3JTdHlsZVNoZWV0cyYgYXV0aG9y
U3R5bGVTaGVldHMoKSB7IHJldHVybiAqbV9hdXRob3JTdHlsZVNoZWV0czsgfQotICAgIGNvbnN0
IEF1dGhvclN0eWxlU2hlZXRzJiBhdXRob3JTdHlsZVNoZWV0cygpIGNvbnN0IHsgcmV0dXJuICpt
X2F1dGhvclN0eWxlU2hlZXRzOyB9CisgICAgU3R5bGU6OlNjb3BlJiBzdHlsZVNjb3BlKCkgeyBy
ZXR1cm4gKm1fc3R5bGVTY29wZTsgfQorICAgIGNvbnN0IFN0eWxlOjpTY29wZSYgc3R5bGVTY29w
ZSgpIGNvbnN0IHsgcmV0dXJuICptX3N0eWxlU2NvcGU7IH0KICAgICBFeHRlbnNpb25TdHlsZVNo
ZWV0cyYgZXh0ZW5zaW9uU3R5bGVTaGVldHMoKSB7IHJldHVybiAqbV9leHRlbnNpb25TdHlsZVNo
ZWV0czsgfQogICAgIGNvbnN0IEV4dGVuc2lvblN0eWxlU2hlZXRzJiBleHRlbnNpb25TdHlsZVNo
ZWV0cygpIGNvbnN0IHsgcmV0dXJuICptX2V4dGVuc2lvblN0eWxlU2hlZXRzOyB9CiAKQEAgLTE0
NjksNyArMTQ3Miw3IEBAIHByaXZhdGU6CiAKICAgICBNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBt
X211dGF0aW9uT2JzZXJ2ZXJUeXBlczsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxBdXRob3JTdHls
ZVNoZWV0cz4gbV9hdXRob3JTdHlsZVNoZWV0czsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3R5bGU6
OlNjb3BlPiBtX3N0eWxlU2NvcGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvblN0eWxl
U2hlZXRzPiBtX2V4dGVuc2lvblN0eWxlU2hlZXRzOwogICAgIFJlZlB0cjxTdHlsZVNoZWV0TGlz
dD4gbV9zdHlsZVNoZWV0TGlzdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V4dGVuc2lv
blN0eWxlU2hlZXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXh0ZW5z
aW9uU3R5bGVTaGVldHMuY3BwCShyZXZpc2lvbiAyMDY4NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uU3R5bGVTaGVldHMu
aCIKIAotI2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVT
aGVldC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVu
dC5oIgpAQCAtNDIsNiArNDEsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
KyNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgi
CiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJVc2VyQ29udGVudENvbnRy
b2xsZXIuaCIKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBFeHRlbnNpb25TdHlsZVNoZWV0czo6Y2xl
YXJQYWdlVXNlcgogewogICAgIGlmIChtX3BhZ2VVc2VyU2hlZXQpIHsKICAgICAgICAgbV9wYWdl
VXNlclNoZWV0ID0gbnVsbHB0cjsKLSAgICAgICAgbV9kb2N1bWVudC5hdXRob3JTdHlsZVNoZWV0
cygpLmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOworICAgICAgICBtX2RvY3Vt
ZW50LnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKICAg
ICB9CiB9CiAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBFeHRlbnNpb25TdHlsZVNoZWV0czo6dXBk
YXRlUGFnZVVzZQogewogICAgIGNsZWFyUGFnZVVzZXJTaGVldCgpOwogICAgIGlmIChwYWdlVXNl
clNoZWV0KCkpCi0gICAgICAgIG1fZG9jdW1lbnQuYXV0aG9yU3R5bGVTaGVldHMoKS5kaWRDaGFu
Z2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKKyAgICAgICAgbV9kb2N1bWVudC5zdHlsZVNj
b3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CiB9CiAKIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBFeHRlbnNpb25TdHlsZVNoZWV0czo6aW5qZWN0
ZWRVc2VyU3R5bGVTaGVldHMoKSBjb25zdApAQCAtMTU1LDIxICsxNTUsMjEgQEAgdm9pZCBFeHRl
bnNpb25TdHlsZVNoZWV0czo6aW52YWxpZGF0ZUluagogICAgIG1faW5qZWN0ZWRTdHlsZVNoZWV0
Q2FjaGVWYWxpZCA9IGZhbHNlOwogICAgIGlmIChtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmlz
RW1wdHkoKSAmJiBtX2luamVjdGVkQXV0aG9yU3R5bGVTaGVldHMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgbV9kb2N1bWVudC5hdXRob3JTdHlsZVNoZWV0cygpLmRpZENoYW5nZUNv
bnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOworICAgIG1fZG9jdW1lbnQuc3R5bGVTY29wZSgpLmRp
ZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOwogfQogCiB2b2lkIEV4dGVuc2lvblN0
eWxlU2hlZXRzOjphZGRVc2VyU3R5bGVTaGVldChSZWY8U3R5bGVTaGVldENvbnRlbnRzPiYmIHVz
ZXJTaGVldCkKIHsKICAgICBBU1NFUlQodXNlclNoZWV0LmdldCgpLmlzVXNlclN0eWxlU2hlZXQo
KSk7CiAgICAgbV91c2VyU3R5bGVTaGVldHMuYXBwZW5kKENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShX
VEZNb3ZlKHVzZXJTaGVldCksIG1fZG9jdW1lbnQpKTsKLSAgICBtX2RvY3VtZW50LmF1dGhvclN0
eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CisgICAgbV9k
b2N1bWVudC5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7
CiB9CiAKIHZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OmFkZEF1dGhvclN0eWxlU2hlZXRGb3JU
ZXN0aW5nKFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYgYXV0aG9yU2hlZXQpCiB7CiAgICAgQVNT
RVJUKCFhdXRob3JTaGVldC5nZXQoKS5pc1VzZXJTdHlsZVNoZWV0KCkpOwogICAgIG1fYXV0aG9y
U3R5bGVTaGVldHNGb3JUZXN0aW5nLmFwcGVuZChDU1NTdHlsZVNoZWV0OjpjcmVhdGUoV1RGTW92
ZShhdXRob3JTaGVldCksIG1fZG9jdW1lbnQpKTsKLSAgICBtX2RvY3VtZW50LmF1dGhvclN0eWxl
U2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CisgICAgbV9kb2N1
bWVudC5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CiB9
CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpAQCAtMjAxLDcgKzIwMSw3IEBAIHZv
aWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6Om1heWJlQWRkQ29udGUKIAogdm9pZCBFeHRlbnNpb25T
dHlsZVNoZWV0czo6c3R5bGVSZXNvbHZlckNoYW5nZWRUaW1lckZpcmVkKCkKIHsKLSAgICBtX2Rv
Y3VtZW50LmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0
aW9uKCk7CisgICAgbV9kb2N1bWVudC5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPcklu
dGVycHJldGF0aW9uKCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uU3R5bGVTaGVldHM6OmRldGFjaEZy
b21Eb2N1bWVudCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVTaGVldE93
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVTaGVl
dE93bmVyLmNwcAkocmV2aXNpb24gMjA2ODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0lubGlu
ZVN0eWxlU2hlZXRPd25lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEzICsyMSwxMyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklubGluZVN0eWxlU2hlZXRPd25lci5oIgog
Ci0jaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJp
dHlQb2xpY3kuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0Lmgi
CiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVE
b2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTdHls
ZVNjb3BlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5jbHVkZSAiVGV4
dE5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTUx
LDggKzUxLDggQEAgSW5saW5lU3R5bGVTaGVldE93bmVyOjp+SW5saW5lU3R5bGVTaGVldAogCiB2
b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoRWxlbWVudCYg
ZWxlbWVudCkKIHsKLSAgICBtX3N0eWxlU2hlZXRTY29wZSA9ICZBdXRob3JTdHlsZVNoZWV0czo6
Zm9yTm9kZShlbGVtZW50KTsKLSAgICBtX3N0eWxlU2hlZXRTY29wZS0+YWRkU3R5bGVTaGVldENh
bmRpZGF0ZU5vZGUoZWxlbWVudCwgbV9pc1BhcnNpbmdDaGlsZHJlbik7CisgICAgbV9zdHlsZVNj
b3BlID0gJlN0eWxlOjpTY29wZTo6Zm9yTm9kZShlbGVtZW50KTsKKyAgICBtX3N0eWxlU2NvcGUt
PmFkZFN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKGVsZW1lbnQsIG1faXNQYXJzaW5nQ2hpbGRyZW4p
OwogCiAgICAgaWYgKG1faXNQYXJzaW5nQ2hpbGRyZW4pCiAgICAgICAgIHJldHVybjsKQEAgLTYx
LDkgKzYxLDkgQEAgdm9pZCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6Omluc2VydGVkSW50bwogCiB2
b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6cmVtb3ZlZEZyb21Eb2N1bWVudChFbGVtZW50JiBl
bGVtZW50KQogewotICAgIGlmIChtX3N0eWxlU2hlZXRTY29wZSkgewotICAgICAgICBtX3N0eWxl
U2hlZXRTY29wZS0+cmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoZWxlbWVudCk7Ci0gICAg
ICAgIG1fc3R5bGVTaGVldFNjb3BlID0gbnVsbHB0cjsKKyAgICBpZiAobV9zdHlsZVNjb3BlKSB7
CisgICAgICAgIG1fc3R5bGVTY29wZS0+cmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoZWxl
bWVudCk7CisgICAgICAgIG1fc3R5bGVTY29wZSA9IG51bGxwdHI7CiAgICAgfQogICAgIGlmICht
X3NoZWV0KQogICAgICAgICBjbGVhclNoZWV0KCk7CkBAIC03NCw5ICs3NCw5IEBAIHZvaWQgSW5s
aW5lU3R5bGVTaGVldE93bmVyOjpjbGVhckRvY3VtZW4KICAgICBpZiAobV9zaGVldCkKICAgICAg
ICAgbV9zaGVldC0+Y2xlYXJPd25lck5vZGUoKTsKIAotICAgIGlmIChtX3N0eWxlU2hlZXRTY29w
ZSkgewotICAgICAgICBtX3N0eWxlU2hlZXRTY29wZS0+cmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0
ZU5vZGUoZWxlbWVudCk7Ci0gICAgICAgIG1fc3R5bGVTaGVldFNjb3BlID0gbnVsbHB0cjsKKyAg
ICBpZiAobV9zdHlsZVNjb3BlKSB7CisgICAgICAgIG1fc3R5bGVTY29wZS0+cmVtb3ZlU3R5bGVT
aGVldENhbmRpZGF0ZU5vZGUoZWxlbWVudCk7CisgICAgICAgIG1fc3R5bGVTY29wZSA9IG51bGxw
dHI7CiAgICAgfQogfQogCkBAIC0xMjQsOCArMTI0LDggQEAgdm9pZCBJbmxpbmVTdHlsZVNoZWV0
T3duZXI6OmNyZWF0ZVNoZWV0KAogICAgIEFTU0VSVChlbGVtZW50LmluRG9jdW1lbnQoKSk7CiAg
ICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudC5kb2N1bWVudCgpOwogICAgIGlmIChtX3No
ZWV0KSB7Ci0gICAgICAgIGlmIChtX3NoZWV0LT5pc0xvYWRpbmcoKSAmJiBtX3N0eWxlU2hlZXRT
Y29wZSkKLSAgICAgICAgICAgIG1fc3R5bGVTaGVldFNjb3BlLT5yZW1vdmVQZW5kaW5nU2hlZXQo
KTsKKyAgICAgICAgaWYgKG1fc2hlZXQtPmlzTG9hZGluZygpICYmIG1fc3R5bGVTY29wZSkKKyAg
ICAgICAgICAgIG1fc3R5bGVTY29wZS0+cmVtb3ZlUGVuZGluZ1NoZWV0KCk7CiAgICAgICAgIGNs
ZWFyU2hlZXQoKTsKICAgICB9CiAKQEAgLTE0OSw4ICsxNDksOCBAQCB2b2lkIElubGluZVN0eWxl
U2hlZXRPd25lcjo6Y3JlYXRlU2hlZXQoCiAgICAgaWYgKCFzY3JlZW5FdmFsLmV2YWx1YXRlKCpt
ZWRpYVF1ZXJpZXMpICYmICFwcmludEV2YWwuZXZhbHVhdGUoKm1lZGlhUXVlcmllcykpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChtX3N0eWxlU2hlZXRTY29wZSkKLSAgICAgICAgbV9zdHls
ZVNoZWV0U2NvcGUtPmFkZFBlbmRpbmdTaGVldCgpOworICAgIGlmIChtX3N0eWxlU2NvcGUpCisg
ICAgICAgIG1fc3R5bGVTY29wZS0+YWRkUGVuZGluZ1NoZWV0KCk7CiAKICAgICBtX2xvYWRpbmcg
PSB0cnVlOwogCkBAIC0xNzcsMTYgKzE3NywxNiBAQCBib29sIElubGluZVN0eWxlU2hlZXRPd25l
cjo6c2hlZXRMb2FkZWQoCiAgICAgaWYgKGlzTG9hZGluZygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAobV9zdHlsZVNoZWV0U2NvcGUpCi0gICAgICAgIG1fc3R5bGVTaGVldFNj
b3BlLT5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKKyAgICBpZiAobV9zdHlsZVNjb3BlKQorICAgICAg
ICBtX3N0eWxlU2NvcGUtPnJlbW92ZVBlbmRpbmdTaGVldCgpOwogCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpzdGFydExvYWRpbmdEeW5hbWljU2hl
ZXQoRWxlbWVudCYpCiB7Ci0gICAgaWYgKG1fc3R5bGVTaGVldFNjb3BlKQotICAgICAgICBtX3N0
eWxlU2hlZXRTY29wZS0+YWRkUGVuZGluZ1NoZWV0KCk7CisgICAgaWYgKG1fc3R5bGVTY29wZSkK
KyAgICAgICAgbV9zdHlsZVNjb3BlLT5hZGRQZW5kaW5nU2hlZXQoKTsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuaAkocmV2aXNpb24gMjA2
ODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNoaWxkcmVuQ2hh
bmdlZChFbGVtZW50Jik7CiAgICAgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oRWxlbWVudCYp
OwogCi0gICAgQXV0aG9yU3R5bGVTaGVldHMqIHN0eWxlU2hlZXRTY29wZSgpIHsgcmV0dXJuIG1f
c3R5bGVTaGVldFNjb3BlOyB9CisgICAgU3R5bGU6OlNjb3BlKiBzdHlsZVNjb3BlKCkgeyByZXR1
cm4gbV9zdHlsZVNjb3BlOyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVTaGVldChFbGVt
ZW50JiwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKQEAgLTYzLDcgKzYzLDcgQEAgcHJpdmF0ZToKICAg
ICBBdG9taWNTdHJpbmcgbV9jb250ZW50VHlwZTsKICAgICBBdG9taWNTdHJpbmcgbV9tZWRpYTsK
ICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zaGVldDsKLSAgICBBdXRob3JTdHlsZVNoZWV0
cyogbV9zdHlsZVNoZWV0U2NvcGUgeyBudWxscHRyIH07CisgICAgU3R5bGU6OlNjb3BlKiBtX3N0
eWxlU2NvcGUgeyBudWxscHRyIH07CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
UHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gMjA2ODc5KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24uaCIKIAotI2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVk
ZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKICNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgpAQCAtMzUsNiArMzQsNyBAQAogI2luY2x1
ZGUgIlhTTFN0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5oIiAvLyBm
b3IgcGFyc2VBdHRyaWJ1dGVzKCkKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKKyNpbmNsdWRlICJT
dHlsZVNjb3BlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTU5LDcgKzU5LDcgQEAgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjp+UHJv
Y2Vzc2luZ0luc3RydQogICAgICAgICBtX2NhY2hlZFNoZWV0LT5yZW1vdmVDbGllbnQoKnRoaXMp
OwogCiAgICAgaWYgKGluRG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS5hdXRob3JTdHls
ZVNoZWV0cygpLnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKCp0aGlzKTsKKyAgICAgICAg
ZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkucmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoKnRo
aXMpOwogfQogCiBTdHJpbmcgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpub2RlTmFtZSgpIGNvbnN0
CkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5
bGVTaAogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgbV9sb2FkaW5nID0g
dHJ1ZTsKLSAgICAgICAgICAgIGRvY3VtZW50KCkuYXV0aG9yU3R5bGVTaGVldHMoKS5hZGRQZW5k
aW5nU2hlZXQoKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkuc3R5bGVTY29wZSgpLmFkZFBlbmRp
bmdTaGVldCgpOwogCiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgICAgICAgICBpZiAobV9pc1hTTCkg
ewpAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0
eWxlU2gKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFRoZSByZXF1ZXN0
IG1heSBoYXZlIGJlZW4gZGVuaWVkIGlmIChmb3IgZXhhbXBsZSkgdGhlIHN0eWxlc2hlZXQgaXMg
bG9jYWwgYW5kIHRoZSBkb2N1bWVudCBpcyByZW1vdGUuCiAgICAgICAgICAgICAgICAgbV9sb2Fk
aW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5hdXRob3JTdHlsZVNoZWV0
cygpLnJlbW92ZVBlbmRpbmdTaGVldCgpOworICAgICAgICAgICAgICAgIGRvY3VtZW50KCkuc3R5
bGVTY29wZSgpLnJlbW92ZVBlbmRpbmdTaGVldCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpp
c0xvYWRpbmcoKSAKIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpzaGVldExvYWRlZCgpCiB7
CiAgICAgaWYgKCFpc0xvYWRpbmcoKSkgewotICAgICAgICBkb2N1bWVudCgpLmF1dGhvclN0eWxl
U2hlZXRzKCkucmVtb3ZlUGVuZGluZ1NoZWV0KCk7CisgICAgICAgIGRvY3VtZW50KCkuc3R5bGVT
Y29wZSgpLnJlbW92ZVBlbmRpbmdTaGVldCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjUxLDcgKzI1MSw3IEBAIE5vZGU6Okluc2VydGlvbk5v
dGlmaWNhdGlvblJlcXVlc3QgUHJvY2UKICAgICBDaGFyYWN0ZXJEYXRhOjppbnNlcnRlZEludG8o
aW5zZXJ0aW9uUG9pbnQpOwogICAgIGlmICghaW5zZXJ0aW9uUG9pbnQuaW5Eb2N1bWVudCgpKQog
ICAgICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKLSAgICBkb2N1bWVudCgpLmF1dGhvclN0eWxl
U2hlZXRzKCkuYWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoKnRoaXMsIG1fY3JlYXRlZEJ5UGFy
c2VyKTsKKyAgICBkb2N1bWVudCgpLnN0eWxlU2NvcGUoKS5hZGRTdHlsZVNoZWV0Q2FuZGlkYXRl
Tm9kZSgqdGhpcywgbV9jcmVhdGVkQnlQYXJzZXIpOwogICAgIGNoZWNrU3R5bGVTaGVldCgpOwog
ICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwogfQpAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQgUHJv
Y2Vzc2luZ0luc3RydWN0aW9uOjpyZW1vdmVkRnJvbSgKICAgICBpZiAoIWluc2VydGlvblBvaW50
LmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGRvY3VtZW50KCkuYXV0
aG9yU3R5bGVTaGVldHMoKS5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSgqdGhpcyk7Cisg
ICAgZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkucmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUo
KnRoaXMpOwogCiAgICAgaWYgKG1fc2hlZXQpIHsKICAgICAgICAgQVNTRVJUKG1fc2hlZXQtPm93
bmVyTm9kZSgpID09IHRoaXMpOwpAQCAtMjcyLDEyICsyNzIsMTIgQEAgdm9pZCBQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb246OnJlbW92ZWRGcm9tKAogCiAgICAgaWYgKG1fbG9hZGluZykgewogICAgICAg
ICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAgICAgICAgZG9jdW1lbnQoKS5hdXRob3JTdHlsZVNoZWV0
cygpLnJlbW92ZVBlbmRpbmdTaGVldCgpOworICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2NvcGUo
KS5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKICAgICB9CiAKICAgICAvLyBJZiB3ZSdyZSBpbiBkb2N1
bWVudCB0ZWFyZG93biwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBub3RpZmljYXRpb24g
b2Ygb3VyIHNoZWV0J3MgcmVtb3ZhbC4KICAgICBpZiAoZG9jdW1lbnQoKS5oYXNMaXZpbmdSZW5k
ZXJUcmVlKCkpCi0gICAgICAgIGRvY3VtZW50KCkuYXV0aG9yU3R5bGVTaGVldHMoKS5kaWRDaGFu
Z2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKKyAgICAgICAgZG9jdW1lbnQoKS5zdHlsZVNj
b3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CiB9CiAKIHZvaWQgUHJv
Y2Vzc2luZ0luc3RydWN0aW9uOjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TaGFkb3dSb290LmNwcAkocmV2aXNpb24gMjA2ODgwKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1NoYWRvd1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMyArMjgsMTMgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAKLSNpbmNsdWRlICJB
dXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRl
ICJFbGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTbG90QXNzaWdubWVudC5o
IgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCiAj
aW5jbHVkZSAibWFya3VwLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDcgKzQyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IFNhbWVTaXplQXNTaGFkb3dSb290IDogcHVi
bGljIERvY3VtZW50RnJhZ21lbnQsIHB1YmxpYyBUcmVlU2NvcGUgewogICAgIHVuc2lnbmVkIGNv
dW50ZXJzQW5kRmxhZ3NbMV07CiAgICAgdm9pZCogc3R5bGVSZXNvbHZlcjsKLSAgICB2b2lkKiBh
dXRob3JTdHlsZVNoZWV0czsKKyAgICB2b2lkKiBzdHlsZVNjb3BlOwogICAgIHZvaWQqIGhvc3Q7
CiAgICAgdm9pZCogc2xvdEFzc2lnbm1lbnQ7CiB9OwpAQCAtODgsOCArODgsOCBAQCBTdHlsZVJl
c29sdmVyJiBTaGFkb3dSb290OjpzdHlsZVJlc29sdmVyCiAgICAgaWYgKCFtX3N0eWxlUmVzb2x2
ZXIpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHNoYXJlIHN0eWxlIHJlc29sdmVyIHdp
dGggc2hhZG93IHJvb3RzIHRoYXQgaGF2ZSBpZGVudGljYWwgc3R5bGUuCiAgICAgICAgIG1fc3R5
bGVSZXNvbHZlciA9IHN0ZDo6bWFrZV91bmlxdWU8U3R5bGVSZXNvbHZlcj4oZG9jdW1lbnQoKSk7
Ci0gICAgICAgIGlmIChtX2F1dGhvclN0eWxlU2hlZXRzKQotICAgICAgICAgICAgbV9zdHlsZVJl
c29sdmVyLT5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhtX2F1dGhvclN0eWxlU2hlZXRzLT5hY3Rp
dmVTdHlsZVNoZWV0cygpKTsKKyAgICAgICAgaWYgKG1fc3R5bGVTY29wZSkKKyAgICAgICAgICAg
IG1fc3R5bGVSZXNvbHZlci0+YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMobV9zdHlsZVNjb3BlLT5h
Y3RpdmVTdHlsZVNoZWV0cygpKTsKICAgICB9CiAgICAgcmV0dXJuICptX3N0eWxlUmVzb2x2ZXI7
CiB9CkBAIC0xMDcsMTkgKzEwNywxOSBAQCB2b2lkIFNoYWRvd1Jvb3Q6OnJlc2V0U3R5bGVSZXNv
bHZlcigpCiAgICAgbV9zdHlsZVJlc29sdmVyID0gbnVsbHB0cjsKIH0KIAotQXV0aG9yU3R5bGVT
aGVldHMmIFNoYWRvd1Jvb3Q6OmF1dGhvclN0eWxlU2hlZXRzKCkKK1N0eWxlOjpTY29wZSYgU2hh
ZG93Um9vdDo6c3R5bGVTY29wZSgpCiB7Ci0gICAgaWYgKCFtX2F1dGhvclN0eWxlU2hlZXRzKQot
ICAgICAgICBtX2F1dGhvclN0eWxlU2hlZXRzID0gc3RkOjptYWtlX3VuaXF1ZTxBdXRob3JTdHls
ZVNoZWV0cz4oKnRoaXMpOwotICAgIHJldHVybiAqbV9hdXRob3JTdHlsZVNoZWV0czsKKyAgICBp
ZiAoIW1fc3R5bGVTY29wZSkKKyAgICAgICAgbV9zdHlsZVNjb3BlID0gc3RkOjptYWtlX3VuaXF1
ZTxTdHlsZTo6U2NvcGU+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fc3R5bGVTY29wZTsKIH0KIAog
dm9pZCBTaGFkb3dSb290Ojp1cGRhdGVTdHlsZSgpCiB7Ci0gICAgaWYgKCFtX2F1dGhvclN0eWxl
U2hlZXRzKQorICAgIGlmICghbV9zdHlsZVNjb3BlKQogICAgICAgICByZXR1cm47CiAgICAgLy8g
RklYTUU6IE1ha2Ugb3B0aW1pemVkIHVwZGF0ZWQgd29yay4KLSAgICBtX2F1dGhvclN0eWxlU2hl
ZXRzLT5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKKyAgICBtX3N0eWxlU2Nv
cGUtPmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOwogfQogCiBTdHJpbmcgU2hh
ZG93Um9vdDo6aW5uZXJIVE1MKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFk
b3dSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAko
cmV2aXNpb24gMjA2ODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEF1dGhvclN0eWxlU2hlZXRzOwogY2xhc3MgSFRNTFNsb3RFbGVtZW50OwogY2xhc3MgU2xv
dEFzc2lnbm1lbnQ7CiAKQEAgLTY0LDcgKzYzLDcgQEAgcHVibGljOgogCiAgICAgU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlcigpOwogICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXJJ
ZkV4aXN0cygpOwotICAgIEF1dGhvclN0eWxlU2hlZXRzJiBhdXRob3JTdHlsZVNoZWV0cygpOwor
ICAgIFN0eWxlOjpTY29wZSYgc3R5bGVTY29wZSgpOwogCiAgICAgdm9pZCB1cGRhdGVTdHlsZSgp
OwogICAgIHZvaWQgcmVzZXRTdHlsZVJlc29sdmVyKCk7CkBAIC0xMTYsNyArMTE1LDcgQEAgcHJp
dmF0ZToKICAgICBFbGVtZW50KiBtX2hvc3QgeyBudWxscHRyIH07CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U3R5bGVSZXNvbHZlcj4gbV9zdHlsZVJlc29sdmVyOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxBdXRob3JTdHlsZVNoZWV0cz4gbV9hdXRob3JTdHlsZVNoZWV0czsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8U3R5bGU6OlNjb3BlPiBtX3N0eWxlU2NvcGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
U2xvdEFzc2lnbm1lbnQ+IG1fc2xvdEFzc2lnbm1lbnQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24gMjA2ODgwKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw2IEBACiAjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyaWJ1
dGUuaCIKLSNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkNhY2hlZENT
U1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlTG9hZGVyLmgiCkBAIC01NCw2ICs1Myw3IEBACiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKICNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVGb3JEb2N1bWVudC5oIgorI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKICNpbmNsdWRlICJT
dHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgpAQCAtMTAyLDcgKzEwMiw3IEBAIEhUTUxMaW5rRWxlbWVudDo6fkhU
TUxMaW5rRWxlbWVudCgpCiAgICAgICAgIG1fY2FjaGVkU2hlZXQtPnJlbW92ZUNsaWVudCgqdGhp
cyk7CiAKICAgICBpZiAoaW5Eb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudCgpLmF1dGhvclN0
eWxlU2hlZXRzKCkucmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoKnRoaXMpOworICAgICAg
ICBkb2N1bWVudCgpLnN0eWxlU2NvcGUoKS5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSgq
dGhpcyk7CiAKICAgICBsaW5rTG9hZEV2ZW50U2VuZGVyKCkuY2FuY2VsRXZlbnQoKnRoaXMpOwog
ICAgIGxpbmtFcnJvckV2ZW50U2VuZGVyKCkuY2FuY2VsRXZlbnQoKnRoaXMpOwpAQCAtMTQwLDcg
KzE0MCw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXREaXNhYmxlZFN0YXRlKGIKICAgICAg
ICAgaWYgKCFtX3NoZWV0ICYmIG1fZGlzYWJsZWRTdGF0ZSA9PSBFbmFibGVkVmlhU2NyaXB0KQog
ICAgICAgICAgICAgcHJvY2VzcygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVu
dCgpLmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9u
KCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDb250ZW50
c09ySW50ZXJwcmV0YXRpb24oKTsKICAgICB9CiB9CiAKQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lk
IEhUTUxMaW5rRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uCiAgICAgICAgIG1fbWVkaWEgPSB2
YWx1ZS5zdHJpbmcoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogICAgICAgICBwcm9jZXNz
KCk7CiAgICAgICAgIGlmIChtX3NoZWV0ICYmICFpc0Rpc2FibGVkKCkpCi0gICAgICAgICAgICBk
b2N1bWVudCgpLmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJl
dGF0aW9uKCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VD
b250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAobmFtZSA9PSBkaXNhYmxlZEF0dHIpIHsKQEAgLTI4Myw3ICsyODMsNyBAQCB2b2lkIEhUTUxM
aW5rRWxlbWVudDo6cHJvY2VzcygpCiAgICAgfSBlbHNlIGlmIChtX3NoZWV0KSB7CiAgICAgICAg
IC8vIHdlIG5vIGxvbmdlciBjb250YWluIGEgc3R5bGVzaGVldCwgZS5nLiBwZXJoYXBzIHJlbCBv
ciB0eXBlIHdhcyBjaGFuZ2VkCiAgICAgICAgIGNsZWFyU2hlZXQoKTsKLSAgICAgICAgZG9jdW1l
bnQoKS5hdXRob3JTdHlsZVNoZWV0cygpLmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlv
bigpOworICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDb250ZW50c09y
SW50ZXJwcmV0YXRpb24oKTsKICAgICB9CiB9CiAKQEAgLTMwNSw3ICszMDUsNyBAQCBOb2RlOjpJ
bnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxMCiAgICAgaWYgKG1faXNJblNoYWRvd1Ry
ZWUpCiAgICAgICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwogCi0gICAgZG9jdW1lbnQoKS5hdXRo
b3JTdHlsZVNoZWV0cygpLmFkZFN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKCp0aGlzLCBtX2NyZWF0
ZWRCeVBhcnNlcik7CisgICAgZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkuYWRkU3R5bGVTaGVldENh
bmRpZGF0ZU5vZGUoKnRoaXMsIG1fY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIHByb2Nlc3MoKTsK
ICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKQEAgLTMyMSw3ICszMjEsNyBAQCB2b2lkIEhUTUxM
aW5rRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpCiAgICAgICAgIEFTU0VSVCghbV9zaGVldCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZG9jdW1lbnQoKS5hdXRob3JTdHlsZVNoZWV0
cygpLnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKCp0aGlzKTsKKyAgICBkb2N1bWVudCgp
LnN0eWxlU2NvcGUoKS5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSgqdGhpcyk7CiAKICAg
ICBpZiAobV9zaGVldCkKICAgICAgICAgY2xlYXJTaGVldCgpOwpAQCAtNTQ0LDcgKzU0NCw3IEBA
IHZvaWQgSFRNTExpbmtFbGVtZW50OjphZGRQZW5kaW5nU2hlZXQoUGUKIAogICAgIGlmIChtX3Bl
bmRpbmdTaGVldFR5cGUgPT0gSW5hY3RpdmVTaGVldCkKICAgICAgICAgcmV0dXJuOwotICAgIGRv
Y3VtZW50KCkuYXV0aG9yU3R5bGVTaGVldHMoKS5hZGRQZW5kaW5nU2hlZXQoKTsKKyAgICBkb2N1
bWVudCgpLnN0eWxlU2NvcGUoKS5hZGRQZW5kaW5nU2hlZXQoKTsKIH0KIAogdm9pZCBIVE1MTGlu
a0VsZW1lbnQ6OnJlbW92ZVBlbmRpbmdTaGVldChSZW1vdmVQZW5kaW5nU2hlZXROb3RpZmljYXRp
b25UeXBlIG5vdGlmaWNhdGlvbikKQEAgLTU1NywxNCArNTU3LDE0IEBAIHZvaWQgSFRNTExpbmtF
bGVtZW50OjpyZW1vdmVQZW5kaW5nU2hlZXQKIAogICAgIGlmICh0eXBlID09IEluYWN0aXZlU2hl
ZXQpIHsKICAgICAgICAgLy8gRG9jdW1lbnQganVzdCBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBz
aGVldCBmb3IgZXhwb3N1cmUgdGhyb3VnaCBkb2N1bWVudC5zdHlsZVNoZWV0cwotICAgICAgICBk
b2N1bWVudCgpLmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ2FuZGlkYXRlc0ZvckFjdGl2
ZVNldCgpOworICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDYW5kaWRh
dGVzRm9yQWN0aXZlU2V0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBkb2N1bWVu
dCgpLmF1dGhvclN0eWxlU2hlZXRzKCkucmVtb3ZlUGVuZGluZ1NoZWV0KAorICAgIGRvY3VtZW50
KCkuc3R5bGVTY29wZSgpLnJlbW92ZVBlbmRpbmdTaGVldCgKICAgICAgICAgbm90aWZpY2F0aW9u
ID09IFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5Ci0gICAgICAgID8gQXV0aG9y
U3R5bGVTaGVldHM6OlJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5Ci0gICAgICAg
IDogQXV0aG9yU3R5bGVTaGVldHM6OlJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUxhdGVyKTsKKyAg
ICAgICAgPyBTdHlsZTo6U2NvcGU6OlJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5
CisgICAgICAgIDogU3R5bGU6OlNjb3BlOjpSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlMYXRlcik7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFN0eWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMjA2ODgwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKIAot
I2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2Uu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCkBAIC0zNSw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNj
cmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNs
dWRlICJTdHlsZVNjb3BlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZShjbwogICAgICAgICBtX3N0eWxlU2hlZXRPd25lci5zZXRNZWRpYSh2
YWx1ZSk7CiAgICAgICAgIGlmIChzaGVldCgpKSB7CiAgICAgICAgICAgICBzaGVldCgpLT5zZXRN
ZWRpYVF1ZXJpZXMoTWVkaWFRdWVyeVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5bnRh
eCh2YWx1ZSkpOwotICAgICAgICAgICAgaWYgKGF1dG8qIHNjb3BlID0gbV9zdHlsZVNoZWV0T3du
ZXIuc3R5bGVTaGVldFNjb3BlKCkpCisgICAgICAgICAgICBpZiAoYXV0byogc2NvcGUgPSBtX3N0
eWxlU2hlZXRPd25lci5zdHlsZVNjb3BlKCkpCiAgICAgICAgICAgICAgICAgc2NvcGUtPmRpZENo
YW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIG1fc3R5bGVTaGVldE93bmVyLmNoaWxkcmVuQ2hhbmdlZCgqdGhpcyk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAJKHJldmlzaW9u
IDIwNjg3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JDU1NBZ2VudC5oIgogCi0jaW5jbHVkZSAiQXV0aG9yU3R5bGVT
aGVldHMuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNs
dWRlICJDU1NJbXBvcnRSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgpAQCAt
NTYsNiArNTUsNyBAQAogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKICNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAi
U3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiV2Vi
S2l0TmFtZWRGbG93LmgiCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sT2Jq
ZWN0cy5oPgpAQCAtNjcwLDcgKzY3MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxl
Y3RBbGxTdHlsZVMKIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Y29sbGVjdEFsbERvY3VtZW50
U3R5bGVTaGVldHMoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0b3I8Q1NTU3R5bGVTaGVldCo+JiBy
ZXN1bHQpCiB7Ci0gICAgYXV0byBjc3NTdHlsZVNoZWV0cyA9IGRvY3VtZW50LmF1dGhvclN0eWxl
U2hlZXRzKCkuYWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IoKTsKKyAgICBhdXRvIGNzc1N0
eWxlU2hlZXRzID0gZG9jdW1lbnQuc3R5bGVTY29wZSgpLmFjdGl2ZVN0eWxlU2hlZXRzRm9ySW5z
cGVjdG9yKCk7CiAgICAgZm9yIChhdXRvJiBjc3NTdHlsZVNoZWV0IDogY3NzU3R5bGVTaGVldHMp
CiAgICAgICAgIGNvbGxlY3RTdHlsZVNoZWV0cyhjc3NTdHlsZVNoZWV0LmdldCgpLCByZXN1bHQp
OwogfQpAQCAtODg5LDcgKzg4OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNl
dWRvU3RhdGUKICAgICAgICAgbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLnNldChub2RlSWQs
IGZvcmNlZFBzZXVkb1N0YXRlKTsKICAgICBlbHNlCiAgICAgICAgIG1fbm9kZUlkVG9Gb3JjZWRQ
c2V1ZG9TdGF0ZS5yZW1vdmUobm9kZUlkKTsKLSAgICBlbGVtZW50LT5kb2N1bWVudCgpLmF1dGhv
clN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CisgICAg
ZWxlbWVudC0+ZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVy
cHJldGF0aW9uKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE5hbWVkRmxvd0Nv
bGxlY3Rpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnROb2RlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
Ok5hbWVkRmxvdz4+JiByZXN1bHQpCkBAIC0xMDE1LDcgKzEwMTUsNyBAQCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlCiAKICAgICAvLyBTdHlsZVJ1bGVzIHJldHVybmVk
IGJ5IFN0eWxlUmVzb2x2ZXI6OnN0eWxlUnVsZXNGb3JFbGVtZW50IGxhY2sgcGFyZW50IHBvaW50
ZXJzIHNpbmNlIHRoYXQgaW5mb21hdGlvbiBpcyBub3QgY2hlYXBseSBhdmFpbGFibGUuCiAgICAg
Ly8gU2luY2UgdGhlIGluc3BlY3RvciB3YW50cyB0byB3YWxrIHRoZSBwYXJlbnQgY2hhaW4sIHdl
IGNvbnN0cnVjdCB0aGUgZnVsbCB3cmFwcGVycyBoZXJlLgotICAgIENTU1N0eWxlUnVsZSogY3Nz
b21XcmFwcGVyID0gc3R5bGVSZXNvbHZlci5pbnNwZWN0b3JDU1NPTVdyYXBwZXJzKCkuZ2V0V3Jh
cHBlckZvclJ1bGVJblNoZWV0cyhzdHlsZVJ1bGUsIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5h
dXRob3JTdHlsZVNoZWV0cygpLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkuZXh0ZW5zaW9uU3R5
bGVTaGVldHMoKSk7CisgICAgQ1NTU3R5bGVSdWxlKiBjc3NvbVdyYXBwZXIgPSBzdHlsZVJlc29s
dmVyLmluc3BlY3RvckNTU09NV3JhcHBlcnMoKS5nZXRXcmFwcGVyRm9yUnVsZUluU2hlZXRzKHN0
eWxlUnVsZSwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLnN0eWxlU2NvcGUoKSwgc3R5bGVSZXNv
bHZlci5kb2N1bWVudCgpLmV4dGVuc2lvblN0eWxlU2hlZXRzKCkpOwogICAgIGlmICghY3Nzb21X
cmFwcGVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0
KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYmluZFN0eWxlU2hlZXQoY3Nzb21XcmFwcGVyLT5wYXJl
bnRTdHlsZVNoZWV0KCkpOwpAQCAtMTE4OSw3ICsxMTg5LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6cmVzZXRQc2V1ZG9TdGF0ZQogCiAgICAgbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRl
LmNsZWFyKCk7CiAgICAgZm9yIChhdXRvJiBkb2N1bWVudCA6IGRvY3VtZW50c1RvQ2hhbmdlKQot
ICAgICAgICBkb2N1bWVudC0+YXV0aG9yU3R5bGVTaGVldHMoKS5kaWRDaGFuZ2VDb250ZW50c09y
SW50ZXJwcmV0YXRpb24oKTsKKyAgICAgICAgZG9jdW1lbnQtPnN0eWxlU2NvcGUoKS5kaWRDaGFu
Z2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHJldmlzaW9uIDIwNjg3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCiAKLSNpbmNs
dWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQu
aCIKICNpbmNsdWRlICJDYWNoZWRGb250LmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKQEAg
LTY3LDYgKzY2LDcgQEAKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxl
U2NvcGUuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKQEAgLTEwMDIs
NyArMTAwMiw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGkKICAg
ICBtX2VtdWxhdGVkTWVkaWEgPSBtZWRpYTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX3Bh
Z2UubWFpbkZyYW1lKCkuZG9jdW1lbnQoKTsKICAgICBpZiAoZG9jdW1lbnQpIHsKLSAgICAgICAg
ZG9jdW1lbnQtPmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJl
dGF0aW9uKCk7CisgICAgICAgIGRvY3VtZW50LT5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVu
dHNPckludGVycHJldGF0aW9uKCk7CiAgICAgICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXQoKTsK
ICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiAyMDY4
ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJET01XaW5k
b3cuaCIKIAotI2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQmFja0Zv
cndhcmRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQmFyUHJvcC5oIgogI2luY2x1ZGUgIkJlZm9y
ZVVubG9hZEV2ZW50LmgiCkBAIC05Nyw2ICs5Niw3IEBACiAjaW5jbHVkZSAiU3RvcmFnZU5hbWVz
cGFjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVNZWRpYS5oIgogI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCiAjaW5jbHVkZSAiU3VkZGVuVGVy
bWluYXRpb24uaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGlj
YXRvci5oIgpAQCAtMTQzMiw3ICsxNDMyLDcgQEAgUmVmUHRyPENTU1J1bGVMaXN0PiBET01XaW5k
b3c6OmdldE1hdGNoZQogICAgIGlmIChwc2V1ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9F
bGVtZW50VW5rbm93biAmJiAhcHNldWRvRWxlbWVudC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YXV0aG9yU3R5bGVTaGVldHMo
KS5mbHVzaFBlbmRpbmdVcGRhdGUoKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zdHlsZVNj
b3BlKCkuZmx1c2hQZW5kaW5nVXBkYXRlKCk7CiAKICAgICB1bnNpZ25lZCBydWxlc1RvSW5jbHVk
ZSA9IFN0eWxlUmVzb2x2ZXI6OkF1dGhvckNTU1J1bGVzOwogICAgIGlmICghYXV0aG9yT25seSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAyMDY4NzkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogCiAj
aW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkFwcGx5U3R5bGVDb21t
YW5kLmgiCi0jaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJCYWNrRm9y
d2FyZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
aCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCkBAIC05Myw2ICs5Miw3IEBACiAjaW5j
bHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgorI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKICNpbmNs
dWRlICJUZXh0Tm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIu
aCIKICNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xsZXIuaCIKQEAgLTY0NCw3ICs2NDQsNyBA
QCB2b2lkIEZyYW1lOjpzZXRQcmludGluZyhib29sIHByaW50aW5nLCBjCiAgICAgbV9kb2MtPnNl
dFByaW50aW5nKHByaW50aW5nKTsKICAgICB2aWV3KCktPmFkanVzdE1lZGlhVHlwZUZvclByaW50
aW5nKHByaW50aW5nKTsKIAotICAgIG1fZG9jLT5hdXRob3JTdHlsZVNoZWV0cygpLmRpZENoYW5n
ZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOworICAgIG1fZG9jLT5zdHlsZVNjb3BlKCkuZGlk
Q2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CiAgICAgaWYgKHNob3VsZFVzZVByaW50
aW5nTGF5b3V0KCkpIHsKICAgICAgICAgdmlldygpLT5mb3JjZUxheW91dEZvclBhZ2luYXRpb24o
cGFnZVNpemUsIG9yaWdpbmFsUGFnZVNpemUsIG1heGltdW1TaHJpbmtSYXRpbywgc2hvdWxkQWRq
dXN0Vmlld1NpemUpOwogICAgIH0gZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCShyZXZpc2lvbiAyMDY4NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIkFYT2JqZWN0
Q2FjaGUuaCIKICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiQXV0
aG9yU3R5bGVTaGVldHMuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgi
CkBAIC05Miw2ICs5MSw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRl
ICJTdHlsZVNjb3BlLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKQEAgLTEzMzUsNyAr
MTMzNSw3IEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlvdXQoYm9vbCBhbGxvd1N1YnRyZWUKICAgICAg
ICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9IGRvY3VtZW50LnN0eWxlUmVzb2x2ZXJJ
ZkV4aXN0cygpOwogICAgICAgICBpZiAoIXN0eWxlUmVzb2x2ZXIgfHwgc3R5bGVSZXNvbHZlci0+
aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKCkpIHsKICAgICAgICAgICAg
IExPRyhMYXlvdXQsICIgIGhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSwg
ZW5xdWV1ZWluZyBzdHlsZSByZWNhbGMiKTsKLSAgICAgICAgICAgIGRvY3VtZW50LmF1dGhvclN0
eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CisgICAgICAg
ICAgICBkb2N1bWVudC5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0
aW9uKCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpbnN0cnVtZW50YXRpb24gZXZlbnQg
aXMgbm90IHN0cmljdGx5IGFjY3VyYXRlIHNpbmNlIGNhY2hlZCBtZWRpYSBxdWVyeSByZXN1bHRz
IGRvIG5vdCBwZXJzaXN0IGFjcm9zcyBTdHlsZVJlc29sdmVyIHJlYnVpbGRzLgogICAgICAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjptZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZChkb2N1
bWVudCk7CiAgICAgICAgIH0gZWxzZQpAQCAtMzUzMiw3ICszNTMyLDcgQEAgdm9pZCBGcmFtZVZp
ZXc6OnNldFBhZ2luYXRpb24oY29uc3QgUGFnaQogCiAgICAgbV9wYWdpbmF0aW9uID0gcGFnaW5h
dGlvbjsKIAotICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+YXV0aG9yU3R5bGVTaGVldHMoKS5kaWRD
aGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKKyAgICBmcmFtZSgpLmRvY3VtZW50KCkt
PnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKIH0KIAog
SW50UmVjdCBGcmFtZVZpZXc6OndpbmRvd0NsaXBSZWN0KCkgY29uc3QKQEAgLTUwMDEsNyArNTAw
MSw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRWaWV3cG9ydFNpemVGb3JDU1NWaWUKICAgICBpZiAo
RG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUoKS5kb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiB0aGlzIHNob3VsZCBwcm9iYWJseSBiZSB1cGRhdGVWaWV3cG9ydFVuaXRzT25SZXNpemUo
KSwgYnV0IHN5bmNocm9ub3VzbHkKICAgICAgICAgLy8gZGlydHlpbmcgc3R5bGUgaGVyZSBjYXVz
ZXMgYXNzZXJ0aW9ucyBvbiBpT1MgKHJkYXI6Ly9wcm9ibGVtLzE5OTk4MTY2KS4KLSAgICAgICAg
ZG9jdW1lbnQtPmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJl
dGF0aW9uKCk7CisgICAgICAgIGRvY3VtZW50LT5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVu
dHNPckludGVycHJldGF0aW9uKCk7CiAgICAgfQogfQogICAgIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCShyZXZpc2lvbiAyMDY4NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiQWx0ZXJuYXRpdmVUZXh0
Q2xpZW50LmgiCiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCi0jaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIK
ICNpbmNsdWRlICJCYWNrRm9yd2FyZENsaWVudC5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgpAQCAtOTAsNiArODksNyBAQAogI2luY2x1
ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlUHJvdmlk
ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZS5o
IgogI2luY2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVj
b2Rlci5oIgogI2luY2x1ZGUgIlVzZXJDb250ZW50UHJvdmlkZXIuaCIKQEAgLTQyNCw3ICs0MjQs
NyBAQCB2b2lkIFBhZ2U6OnNldFZpZXdNb2RlKFZpZXdNb2RlIHZpZXdNb2RlCiAgICAgICAgIG1f
bWFpbkZyYW1lLT52aWV3KCktPmZvcmNlTGF5b3V0KCk7CiAKICAgICBpZiAobV9tYWluRnJhbWUt
PmRvY3VtZW50KCkpCi0gICAgICAgIG1fbWFpbkZyYW1lLT5kb2N1bWVudCgpLT5hdXRob3JTdHls
ZVNoZWV0cygpLmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOworICAgICAgICBt
X21haW5GcmFtZS0+ZG9jdW1lbnQoKS0+c3R5bGVTY29wZSgpLmRpZENoYW5nZUNvbnRlbnRzT3JJ
bnRlcnByZXRhdGlvbigpOwogfQogI2VuZGlmIC8vIEVOQUJMRShWSUVXX01PREVfQ1NTX01FRElB
KQogCkBAIC01MDIsNyArNTAyLDcgQEAgdm9pZCBQYWdlOjpzZXROZWVkc1JlY2FsY1N0eWxlSW5B
bGxGcmFtZQogewogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAgICAgIGlmIChEb2N1
bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50
LT5hdXRob3JTdHlsZVNoZWV0cygpLmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigp
OworICAgICAgICAgICAgZG9jdW1lbnQtPnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VDb250ZW50c09y
SW50ZXJwcmV0YXRpb24oKTsKICAgICB9CiB9CiAKQEAgLTExNjMsNyArMTE2Myw3IEBAIHZvaWQg
UGFnZTo6aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldEMKICAgICAgICAgaWYgKCFkb2N1bWVu
dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBkb2N1bWVudC0+ZXh0ZW5zaW9uU3R5
bGVTaGVldHMoKS5pbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKLSAgICAgICAg
ZG9jdW1lbnQtPmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJl
dGF0aW9uKCk7CisgICAgICAgIGRvY3VtZW50LT5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVu
dHNPckludGVycHJldGF0aW9uKCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVNjb3BlLmNwcAkocmV2aXNpb24gMjA2ODgwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9kb20v
QXV0aG9yU3R5bGVTaGVldHMuY3BwOjIwNjg4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDg3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAg
KEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMp
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDA5LCAyMDExLTIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC0yMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKKworI2luY2x1ZGUgIkNTU1N0eWxlU2hl
ZXQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25TdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgIkhUTUxJ
RnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUg
IlNWR1N0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaCIKKyNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCisj
aW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCIKKyNpbmNsdWRlICJVc2Vy
U3R5bGVTaGVldC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBD
b250ZW50RXh0ZW5zaW9uczsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK0F1dGhvclN0
eWxlU2hlZXRzOjpBdXRob3JTdHlsZVNoZWV0cyhEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBt
X2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9wZW5kaW5nVXBkYXRlVGltZXIoKnRoaXMsICZB
dXRob3JTdHlsZVNoZWV0czo6cGVuZGluZ1VwZGF0ZVRpbWVyRmlyZWQpCit7Cit9CisKK0F1dGhv
clN0eWxlU2hlZXRzOjpBdXRob3JTdHlsZVNoZWV0cyhTaGFkb3dSb290JiBzaGFkb3dSb290KQor
ICAgIDogbV9kb2N1bWVudChzaGFkb3dSb290LmRvY3VtZW50U2NvcGUoKSkKKyAgICAsIG1fc2hh
ZG93Um9vdCgmc2hhZG93Um9vdCkKKyAgICAsIG1fcGVuZGluZ1VwZGF0ZVRpbWVyKCp0aGlzLCAm
QXV0aG9yU3R5bGVTaGVldHM6OnBlbmRpbmdVcGRhdGVUaW1lckZpcmVkKQoreworfQorCitTdHls
ZVJlc29sdmVyJiBBdXRob3JTdHlsZVNoZWV0czo6c3R5bGVSZXNvbHZlcigpCit7CisgICAgaWYg
KG1fc2hhZG93Um9vdCkKKyAgICAgICAgcmV0dXJuIG1fc2hhZG93Um9vdC0+c3R5bGVSZXNvbHZl
cigpOworCisgICAgcmV0dXJuIG1fZG9jdW1lbnQuZW5zdXJlU3R5bGVSZXNvbHZlcigpOworfQor
CitTdHlsZVJlc29sdmVyKiBBdXRob3JTdHlsZVNoZWV0czo6c3R5bGVSZXNvbHZlcklmRXhpc3Rz
KCkKK3sKKyAgICBpZiAobV9zaGFkb3dSb290KQorICAgICAgICByZXR1cm4gbV9zaGFkb3dSb290
LT5zdHlsZVJlc29sdmVySWZFeGlzdHMoKTsKKworICAgIHJldHVybiBtX2RvY3VtZW50LnN0eWxl
UmVzb2x2ZXJJZkV4aXN0cygpOworfQorCitBdXRob3JTdHlsZVNoZWV0cyYgQXV0aG9yU3R5bGVT
aGVldHM6OmZvck5vZGUoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZS5pbkRvY3VtZW50
KCkpOworICAgIGF1dG8qIHNoYWRvd1Jvb3QgPSBub2RlLmNvbnRhaW5pbmdTaGFkb3dSb290KCk7
CisgICAgaWYgKHNoYWRvd1Jvb3QpCisgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5hdXRob3JT
dHlsZVNoZWV0cygpOworICAgIHJldHVybiBub2RlLmRvY3VtZW50KCkuYXV0aG9yU3R5bGVTaGVl
dHMoKTsKK30KKworLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGEgdG9wLWxldmVs
IHN0eWxlc2hlZXQgaGFzIGZpbmlzaGVkIGxvYWRpbmcuCit2b2lkIEF1dGhvclN0eWxlU2hlZXRz
OjpyZW1vdmVQZW5kaW5nU2hlZXQoUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZpY2F0aW9uVHlwZSBu
b3RpZmljYXRpb24pCit7CisgICAgLy8gTWFrZSBzdXJlIHdlIGtuZXcgdGhpcyBzaGVldCB3YXMg
cGVuZGluZywgYW5kIHRoYXQgb3VyIGNvdW50IGlzbid0IG91dCBvZiBzeW5jLgorICAgIEFTU0VS
VChtX3BlbmRpbmdTdHlsZVNoZWV0Q291bnQgPiAwKTsKKworICAgIG1fcGVuZGluZ1N0eWxlU2hl
ZXRDb3VudC0tOworICAgIAorI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcKKyAg
ICBpZiAoIW93bmVyRWxlbWVudCgpKQorICAgICAgICBwcmludGYoIlN0eWxlc2hlZXQgbG9hZGVk
IGF0IHRpbWUgJWQuICVkIHN0eWxlc2hlZXRzIHN0aWxsIHJlbWFpbi5cbiIsIGVsYXBzZWRUaW1l
KCksIG1fcGVuZGluZ1N0eWxlc2hlZXRzKTsKKyNlbmRpZgorCisgICAgaWYgKG1fcGVuZGluZ1N0
eWxlU2hlZXRDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG5vdGlmaWNhdGlvbiA9
PSBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlMYXRlcikgeworICAgICAgICBtX2RvY3VtZW50LnNl
dE5lZWRzTm90aWZ5UmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hlZXQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX3NoYWRvd1Jvb3QpIHsKKyAgICAgICAgbV9zaGFkb3dSb290
LT51cGRhdGVTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kb2N1bWVu
dC5kaWRSZW1vdmVBbGxQZW5kaW5nU3R5bGVzaGVldCgpOworfQorCit2b2lkIEF1dGhvclN0eWxl
U2hlZXRzOjphZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShOb2RlJiBub2RlLCBib29sIGNyZWF0
ZWRCeVBhcnNlcikKK3sKKyAgICBpZiAoIW5vZGUuaW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgLy8gVW50aWwgdGhlIDxib2R5PiBleGlzdHMsIHdlIGhhdmUgbm8gY2hv
aWNlIGJ1dCB0byBjb21wYXJlIGRvY3VtZW50IHBvc2l0aW9ucywKKyAgICAvLyBzaW5jZSBzdHls
ZXMgb3V0c2lkZSBvZiB0aGUgYm9keSBhbmQgaGVhZCBjb250aW51ZSB0byBiZSBzaHVudGVkIGlu
dG8gdGhlIGhlYWQKKyAgICAvLyAoYW5kIHRodXMgY2FuIHNoaWZ0IHRvIGVuZCB1cCBiZWZvcmUg
ZHluYW1pY2FsbHkgYWRkZWQgRE9NIGNvbnRlbnQgdGhhdCBpcyBhbHNvCisgICAgLy8gb3V0c2lk
ZSB0aGUgYm9keSkuCisgICAgaWYgKChjcmVhdGVkQnlQYXJzZXIgJiYgbV9kb2N1bWVudC5ib2R5
T3JGcmFtZXNldCgpKSB8fCBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuYWRkKCZub2RlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIERldGVybWluZSBhbiBhcHByb3ByaWF0ZSBpbnNlcnRp
b24gcG9pbnQuCisgICAgYXV0byBiZWdpbiA9IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmJl
Z2luKCk7CisgICAgYXV0byBlbmQgPSBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5lbmQoKTsK
KyAgICBhdXRvIGl0ID0gZW5kOworICAgIE5vZGUqIGZvbGxvd2luZ05vZGUgPSBudWxscHRyOwor
ICAgIGRvIHsKKyAgICAgICAgLS1pdDsKKyAgICAgICAgTm9kZSogbiA9ICppdDsKKyAgICAgICAg
dW5zaWduZWQgc2hvcnQgcG9zaXRpb24gPSBuLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihub2Rl
KTsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09IE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExP
V0lORykgeworICAgICAgICAgICAgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaW5zZXJ0QmVm
b3JlKGZvbGxvd2luZ05vZGUsICZub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBmb2xsb3dpbmdOb2RlID0gbjsKKyAgICB9IHdoaWxlIChpdCAhPSBiZWdpbik7
CisgICAgCisgICAgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaW5zZXJ0QmVmb3JlKGZvbGxv
d2luZ05vZGUsICZub2RlKTsKK30KKwordm9pZCBBdXRob3JTdHlsZVNoZWV0czo6cmVtb3ZlU3R5
bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSkKK3sKKyAgICBpZiAobV9zdHlsZVNoZWV0
Q2FuZGlkYXRlTm9kZXMucmVtb3ZlKCZub2RlKSkKKyAgICAgICAgc2NoZWR1bGVBY3RpdmVTZXRV
cGRhdGUoKTsKK30KKwordm9pZCBBdXRob3JTdHlsZVNoZWV0czo6Y29sbGVjdEFjdGl2ZVN0eWxl
U2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+JiBzaGVldHMpCit7CisgICAgaWYgKG1f
ZG9jdW1lbnQuc2V0dGluZ3MoKSAmJiAhbV9kb2N1bWVudC5zZXR0aW5ncygpLT5hdXRob3JBbmRV
c2VyU3R5bGVzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIG5v
ZGUgOiBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2RlcykgeworICAgICAgICBTdHlsZVNoZWV0KiBz
aGVldCA9IG51bGxwdHI7CisgICAgICAgIGlmIChpczxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KCpu
b2RlKSkgeworICAgICAgICAgICAgLy8gUHJvY2Vzc2luZyBpbnN0cnVjdGlvbiAoWE1MIGRvY3Vt
ZW50cyBvbmx5KS4KKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgbGlua2luZyB0byBl
bWJlZGRlZCBDU1Mgc3R5bGVzaGVldHMsIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ5MjgxPiBmb3IgZGlzY3Vzc2lvbi4KKyAgICAgICAgICAgIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbiYgcGkgPSBkb3duY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KCpub2Rl
KTsKKyAgICAgICAgICAgIHNoZWV0ID0gcGkuc2hlZXQoKTsKKyNpZiBFTkFCTEUoWFNMVCkKKyAg
ICAgICAgICAgIC8vIERvbid0IGFwcGx5IFhTTCB0cmFuc2Zvcm1zIHRvIGFscmVhZHkgdHJhbnNm
b3JtZWQgZG9jdW1lbnRzIC0tIDxyZGFyOi8vcHJvYmxlbS80MTMyODA2PgorICAgICAgICAgICAg
aWYgKHBpLmlzWFNMKCkgJiYgIW1fZG9jdW1lbnQudHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIC8vIERvbid0IGFwcGx5IFhTTCB0cmFuc2Zvcm1zIHVudGlsIGxv
YWRpbmcgaXMgZmluaXNoZWQuCisgICAgICAgICAgICAgICAgaWYgKCFtX2RvY3VtZW50LnBhcnNp
bmcoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC5hcHBseVhTTFRyYW5zZm9ybSgm
cGkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAg
ICAgICB9IGVsc2UgaWYgKGlzPEhUTUxMaW5rRWxlbWVudD4oKm5vZGUpIHx8IGlzPEhUTUxTdHls
ZUVsZW1lbnQ+KCpub2RlKSB8fCBpczxTVkdTdHlsZUVsZW1lbnQ+KCpub2RlKSkgeworICAgICAg
ICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKKyAgICAg
ICAgICAgIEF0b21pY1N0cmluZyB0aXRsZSA9IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbih0aXRsZUF0dHIpOworICAgICAgICAgICAgYm9vbCBlbmFibGVkVmlhU2NyaXB0
ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoaXM8SFRNTExpbmtFbGVtZW50PihlbGVtZW50KSkg
eworICAgICAgICAgICAgICAgIC8vIDxMSU5LPiBlbGVtZW50CisgICAgICAgICAgICAgICAgSFRN
TExpbmtFbGVtZW50JiBsaW5rRWxlbWVudCA9IGRvd25jYXN0PEhUTUxMaW5rRWxlbWVudD4oZWxl
bWVudCk7CisgICAgICAgICAgICAgICAgaWYgKGxpbmtFbGVtZW50LmlzRGlzYWJsZWQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZW5hYmxlZFZpYVNj
cmlwdCA9IGxpbmtFbGVtZW50LmlzRW5hYmxlZFZpYVNjcmlwdCgpOworICAgICAgICAgICAgICAg
IGlmIChsaW5rRWxlbWVudC5zdHlsZVNoZWV0SXNMb2FkaW5nKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gaXQgaXMgbG9hZGluZyBidXQgd2Ugc2hvdWxkIHN0aWxsIGRlY2lkZSB3aGljaCBz
dHlsZSBzaGVldCBzZXQgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgIGlmICghZW5hYmxlZFZp
YVNjcmlwdCAmJiAhdGl0bGUuaXNFbXB0eSgpICYmIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5h
bWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxpbmtFbGVtZW50
LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocmVsQXR0cikuY29udGFpbnMoImFsdGVy
bmF0ZSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNo
ZWV0U2V0TmFtZSA9IHRpdGxlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2VsZWN0
ZWRTdHlsZXNoZWV0U2V0TmFtZSA9IHRpdGxlOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWxpbmtFbGVtZW50LnNoZWV0KCkp
CisgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gbnVsbEF0b207CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcHJlZmVycmVkIHN0eWxlc2V0LiBUaGlzIGlz
IHRoZQorICAgICAgICAgICAgLy8gc2V0IG9mIHNoZWV0cyB0aGF0IHdpbGwgYmUgZW5hYmxlZC4K
KyAgICAgICAgICAgIGlmIChpczxTVkdTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpKQorICAgICAgICAg
ICAgICAgIHNoZWV0ID0gZG93bmNhc3Q8U1ZHU3R5bGVFbGVtZW50PihlbGVtZW50KS5zaGVldCgp
OworICAgICAgICAgICAgZWxzZSBpZiAoaXM8SFRNTExpbmtFbGVtZW50PihlbGVtZW50KSkKKyAg
ICAgICAgICAgICAgICBzaGVldCA9IGRvd25jYXN0PEhUTUxMaW5rRWxlbWVudD4oZWxlbWVudCku
c2hlZXQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzaGVldCA9IGRvd25j
YXN0PEhUTUxTdHlsZUVsZW1lbnQ+KGVsZW1lbnQpLnNoZWV0KCk7CisgICAgICAgICAgICAvLyBD
aGVjayB0byBzZWUgaWYgdGhpcyBzaGVldCBiZWxvbmdzIHRvIGEgc3R5bGVzZXQKKyAgICAgICAg
ICAgIC8vICh0aHVzIG1ha2luZyBpdCBQUkVGRVJSRUQgb3IgQUxURVJOQVRFIHJhdGhlciB0aGFu
CisgICAgICAgICAgICAvLyBQRVJTSVNURU5UKS4KKyAgICAgICAgICAgIGF1dG8mIHJlbCA9IGVs
ZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihyZWxBdHRyKTsKKyAgICAgICAg
ICAgIGlmICghZW5hYmxlZFZpYVNjcmlwdCAmJiAhdGl0bGUuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgLy8gWWVzLCB3ZSBoYXZlIGEgdGl0bGUuCisgICAgICAgICAgICAgICAgaWYgKG1f
cHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIE5vIHByZWZlcnJlZCBzZXQgaGFzIGJlZW4gZXN0YWJsaXNoZWQuIElmCisgICAgICAg
ICAgICAgICAgICAgIC8vIHdlIGFyZSBOT1QgYW4gYWx0ZXJuYXRlIHNoZWV0LCB0aGVuIGVzdGFi
bGlzaAorICAgICAgICAgICAgICAgICAgICAvLyB1cyBhcyB0aGUgcHJlZmVycmVkIHNldC4gT3Ro
ZXJ3aXNlLCBqdXN0IGlnbm9yZQorICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHNoZWV0Lgor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTFN0eWxlRWxlbWVudD4oZWxlbWVudCkgfHwg
IXJlbC5jb250YWlucygiYWx0ZXJuYXRlIikpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3By
ZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lID0gbV9zZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lID0g
dGl0bGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aXRsZSAhPSBt
X3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lKQorICAgICAgICAgICAgICAgICAgICBzaGVldCA9
IG51bGxwdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZWwuY29udGFpbnMo
ImFsdGVybmF0ZSIpICYmIHRpdGxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzaGVldCA9
IG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNoZWV0KQorICAgICAgICAgICAgc2hl
ZXRzLmFwcGVuZChzaGVldCk7CisgICAgfQorfQorCitBdXRob3JTdHlsZVNoZWV0czo6U3R5bGVS
ZXNvbHZlclVwZGF0ZVR5cGUgQXV0aG9yU3R5bGVTaGVldHM6OmFuYWx5emVTdHlsZVNoZWV0Q2hh
bmdlKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBuZXdTdHlsZXNoZWV0cywg
Ym9vbCYgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpCit7CisgICAgcmVxdWlyZXNGdWxsU3R5bGVS
ZWNhbGMgPSB0cnVlOworICAgIAorICAgIHVuc2lnbmVkIG5ld1N0eWxlc2hlZXRDb3VudCA9IG5l
d1N0eWxlc2hlZXRzLnNpemUoKTsKKworICAgIGlmICghc3R5bGVSZXNvbHZlcklmRXhpc3RzKCkp
CisgICAgICAgIHJldHVybiBSZWNvbnN0cnVjdDsKKworICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIgPSAqc3R5bGVSZXNvbHZlcklmRXhpc3RzKCk7CisKKyAgICAvLyBGaW5kIG91dCB3
aGljaCBzdHlsZXNoZWV0cyBhcmUgbmV3LgorICAgIHVuc2lnbmVkIG9sZFN0eWxlc2hlZXRDb3Vu
dCA9IG1fYWN0aXZlU3R5bGVTaGVldHMuc2l6ZSgpOworICAgIGlmIChuZXdTdHlsZXNoZWV0Q291
bnQgPCBvbGRTdHlsZXNoZWV0Q291bnQpCisgICAgICAgIHJldHVybiBSZWNvbnN0cnVjdDsKKwor
ICAgIFZlY3RvcjxTdHlsZVNoZWV0Q29udGVudHMqPiBhZGRlZFNoZWV0czsKKyAgICB1bnNpZ25l
ZCBuZXdJbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBvbGRJbmRleCA9IDA7IG9sZEluZGV4
IDwgb2xkU3R5bGVzaGVldENvdW50OyArK29sZEluZGV4KSB7CisgICAgICAgIGlmIChuZXdJbmRl
eCA+PSBuZXdTdHlsZXNoZWV0Q291bnQpCisgICAgICAgICAgICByZXR1cm4gUmVjb25zdHJ1Y3Q7
CisgICAgICAgIHdoaWxlIChtX2FjdGl2ZVN0eWxlU2hlZXRzW29sZEluZGV4XSAhPSBuZXdTdHls
ZXNoZWV0c1tuZXdJbmRleF0pIHsKKyAgICAgICAgICAgIGFkZGVkU2hlZXRzLmFwcGVuZCgmbmV3
U3R5bGVzaGVldHNbbmV3SW5kZXhdLT5jb250ZW50cygpKTsKKyAgICAgICAgICAgICsrbmV3SW5k
ZXg7CisgICAgICAgICAgICBpZiAobmV3SW5kZXggPT0gbmV3U3R5bGVzaGVldENvdW50KQorICAg
ICAgICAgICAgICAgIHJldHVybiBSZWNvbnN0cnVjdDsKKyAgICAgICAgfQorICAgICAgICArK25l
d0luZGV4OworICAgIH0KKyAgICBib29sIGhhc0luc2VydGlvbnMgPSAhYWRkZWRTaGVldHMuaXNF
bXB0eSgpOworICAgIHdoaWxlIChuZXdJbmRleCA8IG5ld1N0eWxlc2hlZXRDb3VudCkgeworICAg
ICAgICBhZGRlZFNoZWV0cy5hcHBlbmQoJm5ld1N0eWxlc2hlZXRzW25ld0luZGV4XS0+Y29udGVu
dHMoKSk7CisgICAgICAgICsrbmV3SW5kZXg7CisgICAgfQorICAgIC8vIElmIGFsbCBuZXcgc2hl
ZXRzIHdlcmUgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCB3ZSBjYW4ganVzdCBhZGQgdGhl
bSB0byBleGlzdGluZyBTdHlsZVJlc29sdmVyLgorICAgIC8vIElmIHRoZXJlIHdlcmUgaW5zZXJ0
aW9ucyB3ZSBuZWVkIHRvIHJlLWFkZCBhbGwgdGhlIHN0eWxlc2hlZXRzIHNvIHJ1bGVzIGFyZSBv
cmRlcmVkIGNvcnJlY3RseS4KKyAgICBhdXRvIHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID0gaGFz
SW5zZXJ0aW9ucyA/IFJlc2V0IDogQWRkaXRpdmU7CisKKyAgICAvLyBJZiB3ZSBhcmUgYWxyZWFk
eSBwYXJzaW5nIHRoZSBib2R5IGFuZCBzbyBtYXkgaGF2ZSBzaWduaWZpY2FudCBhbW91bnQgb2Yg
ZWxlbWVudHMsIHB1dCBzb21lIGVmZm9ydCBpbnRvIHRyeWluZyB0byBhdm9pZCBzdHlsZSByZWNh
bGNzLgorICAgIGlmICghbV9kb2N1bWVudC5ib2R5T3JGcmFtZXNldCgpIHx8IG1fZG9jdW1lbnQu
aGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpKQorICAgICAgICByZXR1cm4gc3R5bGVSZXNv
bHZlclVwZGF0ZVR5cGU7CisKKyAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzIGludmFsaWRh
dGlvbkFuYWx5c2lzKGFkZGVkU2hlZXRzLCBzdHlsZVJlc29sdmVyLm1lZGlhUXVlcnlFdmFsdWF0
b3IoKSk7CisgICAgaWYgKGludmFsaWRhdGlvbkFuYWx5c2lzLmRpcnRpZXNBbGxTdHlsZSgpKQor
ICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGU7CisgICAgaW52YWxpZGF0aW9u
QW5hbHlzaXMuaW52YWxpZGF0ZVN0eWxlKG1fZG9jdW1lbnQpOworICAgIHJlcXVpcmVzRnVsbFN0
eWxlUmVjYWxjID0gZmFsc2U7CisKKyAgICByZXR1cm4gc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGU7
Cit9CisKK3N0YXRpYyB2b2lkIGZpbHRlckVuYWJsZWROb25lbXB0eUNTU1N0eWxlU2hlZXRzKFZl
Y3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiByZXN1bHQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
U3R5bGVTaGVldD4+JiBzaGVldHMpCit7CisgICAgZm9yIChhdXRvJiBzaGVldCA6IHNoZWV0cykg
eworICAgICAgICBpZiAoIWlzPENTU1N0eWxlU2hlZXQ+KCpzaGVldCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgQ1NTU3R5bGVTaGVldCYgc3R5bGVTaGVldCA9IGRvd25jYXN0PENT
U1N0eWxlU2hlZXQ+KCpzaGVldCk7CisgICAgICAgIGlmIChzdHlsZVNoZWV0LmlzTG9hZGluZygp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChzdHlsZVNoZWV0LmRpc2FibGVk
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFzdHlsZVNoZWV0Lmxlbmd0
aCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJnN0eWxl
U2hlZXQpOworICAgIH0KK30KKwordm9pZCBBdXRob3JTdHlsZVNoZWV0czo6dXBkYXRlQWN0aXZl
U3R5bGVTaGVldHMoVXBkYXRlVHlwZSB1cGRhdGVUeXBlKQoreworICAgIEFTU0VSVCghbV9wZW5k
aW5nVXBkYXRlVHlwZSk7CisKKyAgICBpZiAobV9kb2N1bWVudC5pblN0eWxlUmVjYWxjKCkgfHwg
bV9kb2N1bWVudC5pblJlbmRlclRyZWVVcGRhdGUoKSkgeworICAgICAgICAvLyBQcm90ZWN0IGFn
YWluc3QgZGVsZXRpbmcgc3R5bGUgcmVzb2x2ZXIgaW4gdGhlIG1pZGRsZSBvZiBhIHN0eWxlIHJl
c29sdXRpb24uCisgICAgICAgIC8vIENyYXNoIHN0YWNrcyBpbmRpY2F0ZSB3ZSBjYW4gZ2V0IGhl
cmUgd2hlbiBhIHJlc291cmNlIGxvYWQgZmFpbHMgc3luY2hyb25vdXNseSAoZm9yIGV4YW1wbGUg
ZHVlIHRvIGNvbnRlbnQgYmxvY2tpbmcpLgorICAgICAgICAvLyBGSVhNRTogVGhlc2Uga2luZCBv
ZiBjYXNlcyBzaG91bGQgYmUgZWxpbWluYXRlZCBhbmQgdGhpcyBwYXRoIHJlcGxhY2VkIGJ5IGFu
IGFzc2VydC4KKyAgICAgICAgbV9wZW5kaW5nVXBkYXRlVHlwZSA9IFVwZGF0ZVR5cGU6OkNvbnRl
bnRzT3JJbnRlcnByZXRhdGlvbjsKKyAgICAgICAgbV9kb2N1bWVudC5zY2hlZHVsZUZvcmNlZFN0
eWxlUmVjYWxjKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fZG9jdW1l
bnQuaGFzTGl2aW5nUmVuZGVyVHJlZSgpKSB7CisgICAgICAgIG1fZG9jdW1lbnQuY2xlYXJTdHls
ZVJlc29sdmVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBib3Ro
ZXIgdXBkYXRpbmcsIHNpbmNlIHdlIGhhdmVuJ3QgbG9hZGVkIGFsbCBvdXIgc3R5bGUgaW5mbyB5
ZXQKKyAgICAvLyBhbmQgaGF2ZW4ndCBjYWxjdWxhdGVkIHRoZSBzdHlsZSByZXNvbHZlciBmb3Ig
dGhlIGZpcnN0IHRpbWUuCisgICAgaWYgKCFtX3NoYWRvd1Jvb3QgJiYgIW1fZGlkVXBkYXRlQWN0
aXZlU3R5bGVTaGVldHMgJiYgbV9wZW5kaW5nU3R5bGVTaGVldENvdW50KSB7CisgICAgICAgIG1f
ZG9jdW1lbnQuY2xlYXJTdHlsZVJlc29sdmVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogU3VwcG9ydCBvcHRpbWl6ZWQgaW52YWxpZGF0aW9uIGluIHNoYWRvdyB0
cmVlcy4KKyAgICBpZiAobV9zaGFkb3dSb290KQorICAgICAgICB1cGRhdGVUeXBlID0gVXBkYXRl
VHlwZTo6Q29udGVudHNPckludGVycHJldGF0aW9uOworCisgICAgbV9kaWRVcGRhdGVBY3RpdmVT
dHlsZVNoZWV0cyA9IHRydWU7CisKKyAgICBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiBhY3Rp
dmVTdHlsZVNoZWV0czsKKyAgICBjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMoYWN0aXZlU3R5bGVT
aGVldHMpOworCisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gYWN0aXZlQ1NTU3R5
bGVTaGVldHM7CisgICAgYWN0aXZlQ1NTU3R5bGVTaGVldHMuYXBwZW5kVmVjdG9yKG1fZG9jdW1l
bnQuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5pbmplY3RlZEF1dGhvclN0eWxlU2hlZXRzKCkpOwor
ICAgIGFjdGl2ZUNTU1N0eWxlU2hlZXRzLmFwcGVuZFZlY3RvcihtX2RvY3VtZW50LmV4dGVuc2lv
blN0eWxlU2hlZXRzKCkuYXV0aG9yU3R5bGVTaGVldHNGb3JUZXN0aW5nKCkpOworICAgIGZpbHRl
ckVuYWJsZWROb25lbXB0eUNTU1N0eWxlU2hlZXRzKGFjdGl2ZUNTU1N0eWxlU2hlZXRzLCBhY3Rp
dmVTdHlsZVNoZWV0cyk7CisKKyAgICBib29sIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjID0gdHJ1
ZTsKKyAgICBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9
IFJlY29uc3RydWN0OworICAgIGlmICh1cGRhdGVUeXBlID09IFVwZGF0ZVR5cGU6OkFjdGl2ZVNl
dCkKKyAgICAgICAgc3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgPSBhbmFseXplU3R5bGVTaGVldENo
YW5nZShhY3RpdmVDU1NTdHlsZVNoZWV0cywgcmVxdWlyZXNGdWxsU3R5bGVSZWNhbGMpOworCisg
ICAgdXBkYXRlU3R5bGVSZXNvbHZlcihhY3RpdmVDU1NTdHlsZVNoZWV0cywgc3R5bGVSZXNvbHZl
clVwZGF0ZVR5cGUpOworCisgICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JG
YXN0TG9va3VwID0gbnVsbHB0cjsKKyAgICBtX2FjdGl2ZVN0eWxlU2hlZXRzLnN3YXAoYWN0aXZl
Q1NTU3R5bGVTaGVldHMpOworICAgIG1fc3R5bGVTaGVldHNGb3JTdHlsZVNoZWV0TGlzdC5zd2Fw
KGFjdGl2ZVN0eWxlU2hlZXRzKTsKKworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWN0
aXZlU3R5bGVTaGVldHNVcGRhdGVkKG1fZG9jdW1lbnQpOworCisgICAgZm9yIChjb25zdCBhdXRv
JiBzaGVldCA6IG1fYWN0aXZlU3R5bGVTaGVldHMpIHsKKyAgICAgICAgaWYgKHNoZWV0LT5jb250
ZW50cygpLnVzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHkoKSkKKyAgICAgICAgICAgIG1fdXNlc1N0
eWxlQmFzZWRFZGl0YWJpbGl0eSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKHJlcXVpcmVzRnVs
bFN0eWxlUmVjYWxjKSB7CisgICAgICAgIGlmIChtX3NoYWRvd1Jvb3QpIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byYgc2hhZG93Q2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxFbGVtZW50PigqbV9zaGFk
b3dSb290KSkKKyAgICAgICAgICAgICAgICBzaGFkb3dDaGlsZC5zZXROZWVkc1N0eWxlUmVjYWxj
KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9kb2N1bWVudC5zY2hlZHVsZUZvcmNl
ZFN0eWxlUmVjYWxjKCk7CisgICAgfQorfQorCit2b2lkIEF1dGhvclN0eWxlU2hlZXRzOjp1cGRh
dGVTdHlsZVJlc29sdmVyKFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBhY3RpdmVTdHls
ZVNoZWV0cywgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgdXBkYXRlVHlwZSkKK3sKKyAgICBpZiAo
dXBkYXRlVHlwZSA9PSBSZWNvbnN0cnVjdCkgeworICAgICAgICBpZiAobV9zaGFkb3dSb290KQor
ICAgICAgICAgICAgbV9zaGFkb3dSb290LT5yZXNldFN0eWxlUmVzb2x2ZXIoKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9kb2N1bWVudC5jbGVhclN0eWxlUmVzb2x2ZXIoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBhdXRvJiBzdHlsZVJlc29sdmVyID0gdGhpcy0+c3R5bGVS
ZXNvbHZlcigpOworCisgICAgaWYgKHVwZGF0ZVR5cGUgPT0gUmVzZXQpIHsKKyAgICAgICAgc3R5
bGVSZXNvbHZlci5ydWxlU2V0cygpLnJlc2V0QXV0aG9yU3R5bGUoKTsKKyAgICAgICAgc3R5bGVS
ZXNvbHZlci5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhhY3RpdmVTdHlsZVNoZWV0cyk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHVwZGF0ZVR5cGUgPT0gQWRkaXRpdmUpOworICAgICAg
ICB1bnNpZ25lZCBmaXJzdE5ld0luZGV4ID0gbV9hY3RpdmVTdHlsZVNoZWV0cy5zaXplKCk7Cisg
ICAgICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+IG5ld1N0eWxlU2hlZXRzOworICAg
ICAgICBuZXdTdHlsZVNoZWV0cy5hcHBlbmRSYW5nZShhY3RpdmVTdHlsZVNoZWV0cy5iZWdpbigp
ICsgZmlyc3ROZXdJbmRleCwgYWN0aXZlU3R5bGVTaGVldHMuZW5kKCkpOworICAgICAgICBzdHls
ZVJlc29sdmVyLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKG5ld1N0eWxlU2hlZXRzKTsKKyAgICB9
CisKKyAgICBpZiAoIW1fc2hhZG93Um9vdCkgeworICAgICAgICBhdXRvJiB1c2VyQWdlbnRTaGFk
b3dUcmVlU3R5bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQudXNlckFnZW50U2hhZG93VHJlZVN0eWxl
UmVzb2x2ZXIoKTsKKyAgICAgICAgdXNlckFnZW50U2hhZG93VHJlZVN0eWxlUmVzb2x2ZXIucnVs
ZVNldHMoKS5yZXNldEF1dGhvclN0eWxlKCk7CisgICAgICAgIGF1dG8mIGF1dGhvclJ1bGVTZXQg
PSBzdHlsZVJlc29sdmVyLnJ1bGVTZXRzKCkuYXV0aG9yU3R5bGUoKTsKKyAgICAgICAgaWYgKGF1
dGhvclJ1bGVTZXQuaGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKCkpCisgICAgICAgICAgICB1
c2VyQWdlbnRTaGFkb3dUcmVlU3R5bGVSZXNvbHZlci5ydWxlU2V0cygpLmF1dGhvclN0eWxlKCku
Y29weVNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlc0Zyb20oYXV0aG9yUnVsZVNldCk7CisgICAgfQor
fQorCitjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBBdXRob3JTdHlsZVNoZWV0
czo6YWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IoKSBjb25zdAoreworICAgIFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4+IHJlc3VsdDsKKworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3Io
bV9kb2N1bWVudC5leHRlbnNpb25TdHlsZVNoZWV0cygpLmluamVjdGVkQXV0aG9yU3R5bGVTaGVl
dHMoKSk7CisgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihtX2RvY3VtZW50LmV4dGVuc2lvblN0eWxl
U2hlZXRzKCkuYXV0aG9yU3R5bGVTaGVldHNGb3JUZXN0aW5nKCkpOworCisgICAgZm9yIChhdXRv
JiBzdHlsZVNoZWV0IDogbV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KSB7CisgICAgICAg
IGlmICghaXM8Q1NTU3R5bGVTaGVldD4oKnN0eWxlU2hlZXQpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgQ1NTU3R5bGVTaGVldCYgc2hlZXQgPSBkb3duY2FzdDxDU1NTdHlsZVNo
ZWV0Pigqc3R5bGVTaGVldCk7CisgICAgICAgIGlmIChzaGVldC5kaXNhYmxlZCgpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgmc2hlZXQpOworICAgIH0K
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQXV0aG9yU3R5bGVTaGVldHM6OmFjdGl2
ZVN0eWxlU2hlZXRzQ29udGFpbnMoY29uc3QgQ1NTU3R5bGVTaGVldCogc2hlZXQpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3dlYWtDb3B5T2ZBY3RpdmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXAp
IHsKKyAgICAgICAgbV93ZWFrQ29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3Vw
ID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoU2V0PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4oKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBhY3RpdmVTdHlsZVNoZWV0IDogbV9hY3RpdmVTdHlsZVNoZWV0cykK
KyAgICAgICAgICAgIG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1
cC0+YWRkKGFjdGl2ZVN0eWxlU2hlZXQuZ2V0KCkpOworICAgIH0KKyAgICByZXR1cm4gbV93ZWFr
Q29weU9mQWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwLT5jb250YWlucyhzaGVldCk7
Cit9CisKK3ZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OmZsdXNoUGVuZGluZ1VwZGF0ZSgpCit7Cisg
ICAgaWYgKCFtX3BlbmRpbmdVcGRhdGVUeXBlKQorICAgICAgICByZXR1cm47CisgICAgYXV0byB1
cGRhdGVUeXBlID0gKm1fcGVuZGluZ1VwZGF0ZVR5cGU7CisKKyAgICBjbGVhclBlbmRpbmdVcGRh
dGUoKTsKKworICAgIHVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKHVwZGF0ZVR5cGUpOworfQorCit2
b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpjbGVhclBlbmRpbmdVcGRhdGUoKQoreworICAgIG1fcGVu
ZGluZ1VwZGF0ZVRpbWVyLnN0b3AoKTsKKyAgICBtX3BlbmRpbmdVcGRhdGVUeXBlID0geyB9Owor
fQorCit2b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpzY2hlZHVsZUFjdGl2ZVNldFVwZGF0ZSgpCit7
CisgICAgaWYgKG1fc2hhZG93Um9vdCkgeworICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBm
bHVzaCB1cGRhdGVzIHJlY3Vyc2l2ZWx5IHRvIHN1cHBvcnQgYXN5bmNocm9ub3VzIHVwZGF0ZXMg
aW4gc2hhZG93IHRyZWVzLgorICAgICAgICBkaWRDaGFuZ2VDYW5kaWRhdGVzRm9yQWN0aXZlU2V0
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fcGVuZGluZ1VwZGF0ZVRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fcGVuZGluZ1VwZGF0ZVR5
cGUpCisgICAgICAgIG1fcGVuZGluZ1VwZGF0ZVR5cGUgPSBVcGRhdGVUeXBlOjpBY3RpdmVTZXQ7
CisgICAgbV9wZW5kaW5nVXBkYXRlVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIEF1
dGhvclN0eWxlU2hlZXRzOjpkaWRDaGFuZ2VDYW5kaWRhdGVzRm9yQWN0aXZlU2V0KCkKK3sKKyAg
ICBhdXRvIHVwZGF0ZVR5cGUgPSBtX3BlbmRpbmdVcGRhdGVUeXBlLnZhbHVlT3IoVXBkYXRlVHlw
ZTo6QWN0aXZlU2V0KTsKKyAgICBjbGVhclBlbmRpbmdVcGRhdGUoKTsKKyAgICB1cGRhdGVBY3Rp
dmVTdHlsZVNoZWV0cyh1cGRhdGVUeXBlKTsKK30KKwordm9pZCBBdXRob3JTdHlsZVNoZWV0czo6
ZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCkKK3sKKyAgICBjbGVhclBlbmRpbmdV
cGRhdGUoKTsKKyAgICB1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhVcGRhdGVUeXBlOjpDb250ZW50
c09ySW50ZXJwcmV0YXRpb24pOworfQorCit2b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpwZW5kaW5n
VXBkYXRlVGltZXJGaXJlZCgpCit7CisgICAgZmx1c2hQZW5kaW5nVXBkYXRlKCk7Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCShyZXZpc2lvbiAyMDY4ODApCisr
KyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Myw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3
ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDksIDIwMTEtMjAxMiwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAw
OSwgMjAxMS0yMDEyLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKQEAgLTI2LDcgKzI2LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQXV0aG9yU3R5bGVTaGVldHMuaCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlLmgi
CiAKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgpAQCAt
NTYsMjAgKzU2LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBDb250
ZW50RXh0ZW5zaW9uczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUF1dGhvclN0eWxl
U2hlZXRzOjpBdXRob3JTdHlsZVNoZWV0cyhEb2N1bWVudCYgZG9jdW1lbnQpCituYW1lc3BhY2Ug
U3R5bGUgeworCitTY29wZTo6U2NvcGUoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogbV9kb2N1
bWVudChkb2N1bWVudCkKLSAgICAsIG1fcGVuZGluZ1VwZGF0ZVRpbWVyKCp0aGlzLCAmQXV0aG9y
U3R5bGVTaGVldHM6OnBlbmRpbmdVcGRhdGVUaW1lckZpcmVkKQorICAgICwgbV9wZW5kaW5nVXBk
YXRlVGltZXIoKnRoaXMsICZTY29wZTo6cGVuZGluZ1VwZGF0ZVRpbWVyRmlyZWQpCiB7CiB9CiAK
LUF1dGhvclN0eWxlU2hlZXRzOjpBdXRob3JTdHlsZVNoZWV0cyhTaGFkb3dSb290JiBzaGFkb3dS
b290KQorU2NvcGU6OlNjb3BlKFNoYWRvd1Jvb3QmIHNoYWRvd1Jvb3QpCiAgICAgOiBtX2RvY3Vt
ZW50KHNoYWRvd1Jvb3QuZG9jdW1lbnRTY29wZSgpKQogICAgICwgbV9zaGFkb3dSb290KCZzaGFk
b3dSb290KQotICAgICwgbV9wZW5kaW5nVXBkYXRlVGltZXIoKnRoaXMsICZBdXRob3JTdHlsZVNo
ZWV0czo6cGVuZGluZ1VwZGF0ZVRpbWVyRmlyZWQpCisgICAgLCBtX3BlbmRpbmdVcGRhdGVUaW1l
cigqdGhpcywgJlNjb3BlOjpwZW5kaW5nVXBkYXRlVGltZXJGaXJlZCkKIHsKIH0KIAotU3R5bGVS
ZXNvbHZlciYgQXV0aG9yU3R5bGVTaGVldHM6OnN0eWxlUmVzb2x2ZXIoKQorU3R5bGVSZXNvbHZl
ciYgU2NvcGU6OnN0eWxlUmVzb2x2ZXIoKQogewogICAgIGlmIChtX3NoYWRvd1Jvb3QpCiAgICAg
ICAgIHJldHVybiBtX3NoYWRvd1Jvb3QtPnN0eWxlUmVzb2x2ZXIoKTsKQEAgLTc3LDcgKzc5LDcg
QEAgU3R5bGVSZXNvbHZlciYgQXV0aG9yU3R5bGVTaGVldHM6OnN0eWxlUgogICAgIHJldHVybiBt
X2RvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKIH0KIAotU3R5bGVSZXNvbHZlciogQXV0
aG9yU3R5bGVTaGVldHM6OnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpCitTdHlsZVJlc29sdmVyKiBT
Y29wZTo6c3R5bGVSZXNvbHZlcklmRXhpc3RzKCkKIHsKICAgICBpZiAobV9zaGFkb3dSb290KQog
ICAgICAgICByZXR1cm4gbV9zaGFkb3dSb290LT5zdHlsZVJlc29sdmVySWZFeGlzdHMoKTsKQEAg
LTg1LDE3ICs4NywxNyBAQCBTdHlsZVJlc29sdmVyKiBBdXRob3JTdHlsZVNoZWV0czo6c3R5bGVS
CiAgICAgcmV0dXJuIG1fZG9jdW1lbnQuc3R5bGVSZXNvbHZlcklmRXhpc3RzKCk7CiB9CiAKLUF1
dGhvclN0eWxlU2hlZXRzJiBBdXRob3JTdHlsZVNoZWV0czo6Zm9yTm9kZShOb2RlJiBub2RlKQor
U2NvcGUmIFNjb3BlOjpmb3JOb2RlKE5vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUuaW5E
b2N1bWVudCgpKTsKICAgICBhdXRvKiBzaGFkb3dSb290ID0gbm9kZS5jb250YWluaW5nU2hhZG93
Um9vdCgpOwogICAgIGlmIChzaGFkb3dSb290KQotICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+
YXV0aG9yU3R5bGVTaGVldHMoKTsKLSAgICByZXR1cm4gbm9kZS5kb2N1bWVudCgpLmF1dGhvclN0
eWxlU2hlZXRzKCk7CisgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5zdHlsZVNjb3BlKCk7Cisg
ICAgcmV0dXJuIG5vZGUuZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCk7CiB9CiAKIC8vIFRoaXMgbWV0
aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhIHRvcC1sZXZlbCBzdHlsZXNoZWV0IGhhcyBmaW5pc2hl
ZCBsb2FkaW5nLgotdm9pZCBBdXRob3JTdHlsZVNoZWV0czo6cmVtb3ZlUGVuZGluZ1NoZWV0KFJl
bW92ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlvblR5cGUgbm90aWZpY2F0aW9uKQordm9pZCBTY29w
ZTo6cmVtb3ZlUGVuZGluZ1NoZWV0KFJlbW92ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlvblR5cGUg
bm90aWZpY2F0aW9uKQogewogICAgIC8vIE1ha2Ugc3VyZSB3ZSBrbmV3IHRoaXMgc2hlZXQgd2Fz
IHBlbmRpbmcsIGFuZCB0aGF0IG91ciBjb3VudCBpc24ndCBvdXQgb2Ygc3luYy4KICAgICBBU1NF
UlQobV9wZW5kaW5nU3R5bGVTaGVldENvdW50ID4gMCk7CkBAIC0xMjMsNyArMTI1LDcgQEAgdm9p
ZCBBdXRob3JTdHlsZVNoZWV0czo6cmVtb3ZlUGVuZGluZ1NoZQogICAgIG1fZG9jdW1lbnQuZGlk
UmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hlZXQoKTsKIH0KIAotdm9pZCBBdXRob3JTdHlsZVNoZWV0
czo6YWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSwgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpCit2b2lkIFNjb3BlOjphZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShOb2RlJiBub2Rl
LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKICAgICBpZiAoIW5vZGUuaW5Eb2N1bWVudCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNTYsMTMgKzE1OCwxMyBAQCB2b2lkIEF1dGhvclN0eWxlU2hl
ZXRzOjphZGRTdHlsZVNoZWV0Q2FuCiAgICAgbV9zdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZXMuaW5z
ZXJ0QmVmb3JlKGZvbGxvd2luZ05vZGUsICZub2RlKTsKIH0KIAotdm9pZCBBdXRob3JTdHlsZVNo
ZWV0czo6cmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYgbm9kZSkKK3ZvaWQgU2Nv
cGU6OnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUmIG5vZGUpCiB7CiAgICAgaWYg
KG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLnJlbW92ZSgmbm9kZSkpCiAgICAgICAgIHNjaGVk
dWxlQWN0aXZlU2V0VXBkYXRlKCk7CiB9CiAKLXZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OmNvbGxl
Y3RBY3RpdmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiYgc2hlZXRzKQor
dm9pZCBTY29wZTo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVT
aGVldD4+JiBzaGVldHMpCiB7CiAgICAgaWYgKG1fZG9jdW1lbnQuc2V0dGluZ3MoKSAmJiAhbV9k
b2N1bWVudC5zZXR0aW5ncygpLT5hdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yNDAsNyArMjQyLDcgQEAgdm9pZCBBdXRob3JTdHlsZVNoZWV0czo6Y29s
bGVjdEFjdGl2ZVN0eQogICAgIH0KIH0KIAotQXV0aG9yU3R5bGVTaGVldHM6OlN0eWxlUmVzb2x2
ZXJVcGRhdGVUeXBlIEF1dGhvclN0eWxlU2hlZXRzOjphbmFseXplU3R5bGVTaGVldENoYW5nZShj
b25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgbmV3U3R5bGVzaGVldHMsIGJvb2wm
IHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKQorU2NvcGU6OlN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBl
IFNjb3BlOjphbmFseXplU3R5bGVTaGVldENoYW5nZShjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0
eWxlU2hlZXQ+PiYgbmV3U3R5bGVzaGVldHMsIGJvb2wmIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxj
KQogewogICAgIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjID0gdHJ1ZTsKICAgICAKQEAgLTMwNyw3
ICszMDksNyBAQCBzdGF0aWMgdm9pZCBmaWx0ZXJFbmFibGVkTm9uZW1wdHlDU1NTdHlsCiAgICAg
fQogfQogCi12b2lkIEF1dGhvclN0eWxlU2hlZXRzOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhV
cGRhdGVUeXBlIHVwZGF0ZVR5cGUpCit2b2lkIFNjb3BlOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0
cyhVcGRhdGVUeXBlIHVwZGF0ZVR5cGUpCiB7CiAgICAgQVNTRVJUKCFtX3BlbmRpbmdVcGRhdGVU
eXBlKTsKIApAQCAtMzczLDcgKzM3NSw3IEBAIHZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OnVwZGF0
ZUFjdGl2ZVN0eWwKICAgICB9CiB9CiAKLXZvaWQgQXV0aG9yU3R5bGVTaGVldHM6OnVwZGF0ZVN0
eWxlUmVzb2x2ZXIoVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGFjdGl2ZVN0eWxlU2hl
ZXRzLCBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSB1cGRhdGVUeXBlKQordm9pZCBTY29wZTo6dXBk
YXRlU3R5bGVSZXNvbHZlcihWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiYgYWN0aXZlU3R5
bGVTaGVldHMsIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIHVwZGF0ZVR5cGUpCiB7CiAgICAgaWYg
KHVwZGF0ZVR5cGUgPT0gUmVjb25zdHJ1Y3QpIHsKICAgICAgICAgaWYgKG1fc2hhZG93Um9vdCkK
QEAgLTQwNCw3ICs0MDYsNyBAQCB2b2lkIEF1dGhvclN0eWxlU2hlZXRzOjp1cGRhdGVTdHlsZVJl
c29sCiAgICAgfQogfQogCi1jb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+PiBBdXRo
b3JTdHlsZVNoZWV0czo6YWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IoKSBjb25zdAorY29u
c3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4gU2NvcGU6OmFjdGl2ZVN0eWxlU2hlZXRz
Rm9ySW5zcGVjdG9yKCkgY29uc3QKIHsKICAgICBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+
PiByZXN1bHQ7CiAKQEAgLTQyNSw3ICs0MjcsNyBAQCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0
eWxlU2hlZXQ+PiBBdXRoCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBBdXRob3JTdHls
ZVNoZWV0czo6YWN0aXZlU3R5bGVTaGVldHNDb250YWlucyhjb25zdCBDU1NTdHlsZVNoZWV0KiBz
aGVldCkgY29uc3QKK2Jvb2wgU2NvcGU6OmFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMoY29uc3Qg
Q1NTU3R5bGVTaGVldCogc2hlZXQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3dlYWtDb3B5T2ZBY3Rp
dmVTdHlsZVNoZWV0TGlzdEZvckZhc3RMb29rdXApIHsKICAgICAgICAgbV93ZWFrQ29weU9mQWN0
aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwID0gc3RkOjptYWtlX3VuaXF1ZTxIYXNoU2V0
PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4oKTsKQEAgLTQzNSw3ICs0MzcsNyBAQCBib29sIEF1dGhv
clN0eWxlU2hlZXRzOjphY3RpdmVTdHlsZVNoZWV0CiAgICAgcmV0dXJuIG1fd2Vha0NvcHlPZkFj
dGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1cC0+Y29udGFpbnMoc2hlZXQpOwogfQogCi12
b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpmbHVzaFBlbmRpbmdVcGRhdGUoKQordm9pZCBTY29wZTo6
Zmx1c2hQZW5kaW5nVXBkYXRlKCkKIHsKICAgICBpZiAoIW1fcGVuZGluZ1VwZGF0ZVR5cGUpCiAg
ICAgICAgIHJldHVybjsKQEAgLTQ0NiwxMyArNDQ4LDEzIEBAIHZvaWQgQXV0aG9yU3R5bGVTaGVl
dHM6OmZsdXNoUGVuZGluZ1VwZGEKICAgICB1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyh1cGRhdGVU
eXBlKTsKIH0KIAotdm9pZCBBdXRob3JTdHlsZVNoZWV0czo6Y2xlYXJQZW5kaW5nVXBkYXRlKCkK
K3ZvaWQgU2NvcGU6OmNsZWFyUGVuZGluZ1VwZGF0ZSgpCiB7CiAgICAgbV9wZW5kaW5nVXBkYXRl
VGltZXIuc3RvcCgpOwogICAgIG1fcGVuZGluZ1VwZGF0ZVR5cGUgPSB7IH07CiB9CiAKLXZvaWQg
QXV0aG9yU3R5bGVTaGVldHM6OnNjaGVkdWxlQWN0aXZlU2V0VXBkYXRlKCkKK3ZvaWQgU2NvcGU6
OnNjaGVkdWxlQWN0aXZlU2V0VXBkYXRlKCkKIHsKICAgICBpZiAobV9zaGFkb3dSb290KSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZsdXNoIHVwZGF0ZXMgcmVjdXJzaXZlbHkgdG8g
c3VwcG9ydCBhc3luY2hyb25vdXMgdXBkYXRlcyBpbiBzaGFkb3cgdHJlZXMuCkBAIC00NjYsMjIg
KzQ2OCwyMyBAQCB2b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpzY2hlZHVsZUFjdGl2ZVNlCiAgICAg
bV9wZW5kaW5nVXBkYXRlVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIEF1dGhvclN0
eWxlU2hlZXRzOjpkaWRDaGFuZ2VDYW5kaWRhdGVzRm9yQWN0aXZlU2V0KCkKK3ZvaWQgU2NvcGU6
OmRpZENoYW5nZUNhbmRpZGF0ZXNGb3JBY3RpdmVTZXQoKQogewogICAgIGF1dG8gdXBkYXRlVHlw
ZSA9IG1fcGVuZGluZ1VwZGF0ZVR5cGUudmFsdWVPcihVcGRhdGVUeXBlOjpBY3RpdmVTZXQpOwog
ICAgIGNsZWFyUGVuZGluZ1VwZGF0ZSgpOwogICAgIHVwZGF0ZUFjdGl2ZVN0eWxlU2hlZXRzKHVw
ZGF0ZVR5cGUpOwogfQogCi12b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpkaWRDaGFuZ2VDb250ZW50
c09ySW50ZXJwcmV0YXRpb24oKQordm9pZCBTY29wZTo6ZGlkQ2hhbmdlQ29udGVudHNPckludGVy
cHJldGF0aW9uKCkKIHsKICAgICBjbGVhclBlbmRpbmdVcGRhdGUoKTsKICAgICB1cGRhdGVBY3Rp
dmVTdHlsZVNoZWV0cyhVcGRhdGVUeXBlOjpDb250ZW50c09ySW50ZXJwcmV0YXRpb24pOwogfQog
Ci12b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpwZW5kaW5nVXBkYXRlVGltZXJGaXJlZCgpCit2b2lk
IFNjb3BlOjpwZW5kaW5nVXBkYXRlVGltZXJGaXJlZCgpCiB7CiAgICAgZmx1c2hQZW5kaW5nVXBk
YXRlKCk7CiB9CiAKIH0KK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmgJKHJldmlz
aW9uIDIwNjg4MCkJKGZyb20gU291cmNlL1dlYkNvcmUvZG9tL0F1dGhvclN0eWxlU2hlZXRzLmg6
MjA2ODgwKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8g
KGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyICht
dWVsbGVyQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
diAoYXBAd2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwLCAyMDEyLTIwMTMs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgQXV0aG9yU3R5bGVT
aGVldHNfaAorI2RlZmluZSBBdXRob3JTdHlsZVNoZWV0c19oCisKKyNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NTdHls
ZVNoZWV0OworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBOb2RlOworY2xhc3MgU3R5bGVSZXNvbHZl
cjsKK2NsYXNzIFN0eWxlU2hlZXQ7CitjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CitjbGFzcyBT
dHlsZVNoZWV0TGlzdDsKK2NsYXNzIFNoYWRvd1Jvb3Q7CitjbGFzcyBUcmVlU2NvcGU7CisKK2Ns
YXNzIEF1dGhvclN0eWxlU2hlZXRzIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBBdXRob3JTdHlsZVNoZWV0cyhEb2N1bWVudCYpOworICAgIGV4
cGxpY2l0IEF1dGhvclN0eWxlU2hlZXRzKFNoYWRvd1Jvb3QmKTsKKworICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBhY3RpdmVTdHlsZVNoZWV0cygpIGNvbnN0IHsgcmV0
dXJuIG1fYWN0aXZlU3R5bGVTaGVldHM7IH0KKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5
bGVTaGVldD4+JiBzdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0OyB9CisgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxDU1NTdHlsZVNoZWV0Pj4gYWN0aXZlU3R5bGVTaGVldHNGb3JJbnNwZWN0b3IoKSBjb25zdDsK
KworICAgIHZvaWQgYWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoTm9kZSYsIGJvb2wgY3JlYXRl
ZEJ5UGFyc2VyKTsKKyAgICB2b2lkIHJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKE5vZGUm
KTsKKworICAgIFN0cmluZyBwcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWU7IH0KKyAgICBTdHJpbmcgc2VsZWN0ZWRT
dHlsZXNoZWV0U2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0ZWRTdHlsZXNoZWV0U2V0
TmFtZTsgfQorICAgIHZvaWQgc2V0UHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUoY29uc3QgU3Ry
aW5nJiBuYW1lKSB7IG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUgPSBuYW1lOyB9CisgICAg
dm9pZCBzZXRTZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBt
X3NlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUgPSBuYW1lOyB9CisKKyAgICB2b2lkIGFkZFBlbmRp
bmdTaGVldCgpIHsgbV9wZW5kaW5nU3R5bGVTaGVldENvdW50Kys7IH0KKyAgICBlbnVtIFJlbW92
ZVBlbmRpbmdTaGVldE5vdGlmaWNhdGlvblR5cGUgeworICAgICAgICBSZW1vdmVQZW5kaW5nU2hl
ZXROb3RpZnlJbW1lZGlhdGVseSwKKyAgICAgICAgUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5TGF0
ZXIKKyAgICB9OworICAgIHZvaWQgcmVtb3ZlUGVuZGluZ1NoZWV0KFJlbW92ZVBlbmRpbmdTaGVl
dE5vdGlmaWNhdGlvblR5cGUgPSBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlJbW1lZGlhdGVseSk7
CisKKyAgICBib29sIGhhc1BlbmRpbmdTaGVldHMoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdT
dHlsZVNoZWV0Q291bnQgPiAwOyB9CisKKyAgICBib29sIHVzZXNTdHlsZUJhc2VkRWRpdGFiaWxp
dHkoKSB7IHJldHVybiBtX3VzZXNTdHlsZUJhc2VkRWRpdGFiaWxpdHk7IH0KKworICAgIGJvb2wg
YWN0aXZlU3R5bGVTaGVldHNDb250YWlucyhjb25zdCBDU1NTdHlsZVNoZWV0KikgY29uc3Q7CisK
KyAgICB2b2lkIGRpZENoYW5nZUNhbmRpZGF0ZXNGb3JBY3RpdmVTZXQoKTsKKyAgICB2b2lkIHNj
aGVkdWxlQWN0aXZlU2V0VXBkYXRlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaWRDaGFu
Z2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKKworICAgIGJvb2wgaGFzUGVuZGluZ1VwZGF0
ZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9wZW5kaW5nVXBkYXRlVHlwZTsgfQorICAgIHZvaWQgZmx1
c2hQZW5kaW5nVXBkYXRlKCk7CisKKyAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKCk7
CisgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcklmRXhpc3RzKCk7CisKKyAgICBzdGF0
aWMgQXV0aG9yU3R5bGVTaGVldHMmIGZvck5vZGUoTm9kZSYpOworCitwcml2YXRlOgorICAgIGVu
dW0gY2xhc3MgVXBkYXRlVHlwZSB7IEFjdGl2ZVNldCwgQ29udGVudHNPckludGVycHJldGF0aW9u
IH07CisgICAgdm9pZCB1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyhVcGRhdGVUeXBlKTsKKworICAg
IHZvaWQgY29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4+
Jik7CisKKyAgICBlbnVtIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIHsKKyAgICAgICAgUmVjb25z
dHJ1Y3QsCisgICAgICAgIFJlc2V0LAorICAgICAgICBBZGRpdGl2ZQorICAgIH07CisgICAgU3R5
bGVSZXNvbHZlclVwZGF0ZVR5cGUgYW5hbHl6ZVN0eWxlU2hlZXRDaGFuZ2UoY29uc3QgVmVjdG9y
PFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIG5ld1N0eWxlc2hlZXRzLCBib29sJiByZXF1aXJlc0Z1
bGxTdHlsZVJlY2FsYyk7CisgICAgdm9pZCB1cGRhdGVTdHlsZVJlc29sdmVyKFZlY3RvcjxSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4+JiwgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUpOworCisgICAgdm9p
ZCBwZW5kaW5nVXBkYXRlVGltZXJGaXJlZCgpOworICAgIHZvaWQgY2xlYXJQZW5kaW5nVXBkYXRl
KCk7CisKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKKyAgICBTaGFkb3dSb290KiBtX3NoYWRv
d1Jvb3QgeyBudWxscHRyIH07CisKKyAgICBWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+PiBtX3N0
eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0Pj4gbV9hY3RpdmVTdHlsZVNoZWV0czsKKworICAgIFRpbWVyIG1fcGVuZGluZ1VwZGF0ZVRp
bWVyOworCisgICAgLy8gVGhpcyBpcyBhIG1pcnJvciBvZiBtX2FjdGl2ZUF1dGhvclN0eWxlU2hl
ZXRzIHRoYXQgZ2V0cyBwb3B1bGF0ZWQgb24gZGVtYW5kIGZvciBhY3RpdmVTdHlsZVNoZWV0c0Nv
bnRhaW5zKCkuCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8SGFzaFNldDxjb25zdCBDU1NT
dHlsZVNoZWV0Kj4+IG1fd2Vha0NvcHlPZkFjdGl2ZVN0eWxlU2hlZXRMaXN0Rm9yRmFzdExvb2t1
cDsKKworICAgIC8vIFRyYWNrIHRoZSBudW1iZXIgb2YgY3VycmVudGx5IGxvYWRpbmcgdG9wLWxl
dmVsIHN0eWxlc2hlZXRzIG5lZWRlZCBmb3IgcmVuZGVyaW5nLgorICAgIC8vIFNoZWV0cyBsb2Fk
ZWQgdXNpbmcgdGhlIEBpbXBvcnQgZGlyZWN0aXZlIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBj
b3VudC4KKyAgICAvLyBXZSB1c2UgdGhpcyBjb3VudCBvZiBwZW5kaW5nIHNoZWV0cyB0byBkZXRl
Y3Qgd2hlbiB3ZSBjYW4gYmVnaW4gYXR0YWNoaW5nCisgICAgLy8gZWxlbWVudHMgYW5kIHdoZW4g
aXQgaXMgc2FmZSB0byBleGVjdXRlIHNjcmlwdHMuCisgICAgaW50IG1fcGVuZGluZ1N0eWxlU2hl
ZXRDb3VudCB7IDAgfTsKKyAgICBib29sIG1fZGlkVXBkYXRlQWN0aXZlU3R5bGVTaGVldHMgeyBm
YWxzZSB9OworCisgICAgT3B0aW9uYWw8VXBkYXRlVHlwZT4gbV9wZW5kaW5nVXBkYXRlVHlwZTsK
KworICAgIExpc3RIYXNoU2V0PE5vZGUqPiBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2RlczsKKwor
ICAgIFN0cmluZyBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXROYW1lOworICAgIFN0cmluZyBtX3Nl
bGVjdGVkU3R5bGVzaGVldFNldE5hbWU7CisKKyAgICBib29sIG1fdXNlc1N0eWxlQmFzZWRFZGl0
YWJpbGl0eSB7IGZhbHNlIH07Cit9OworCit9CisKKyNlbmRpZgorCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVTY29wZS5oCShyZXZpc2lvbiAyMDY4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDEwLCAyMDEyLTIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAsIDIwMTItMjAxMywgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0yNSw4ICsyNSw3IEBACiAgKgogICovCiAK
LSNpZm5kZWYgQXV0aG9yU3R5bGVTaGVldHNfaAotI2RlZmluZSBBdXRob3JTdHlsZVNoZWV0c19o
CisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgpA
QCAtNDksMTEgKzQ4LDEzIEBAIGNsYXNzIFN0eWxlU2hlZXRMaXN0OwogY2xhc3MgU2hhZG93Um9v
dDsKIGNsYXNzIFRyZWVTY29wZTsKIAotY2xhc3MgQXV0aG9yU3R5bGVTaGVldHMgeworbmFtZXNw
YWNlIFN0eWxlIHsKKworY2xhc3MgU2NvcGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIGV4cGxpY2l0IEF1dGhvclN0eWxlU2hlZXRzKERvY3VtZW50Jik7Ci0g
ICAgZXhwbGljaXQgQXV0aG9yU3R5bGVTaGVldHMoU2hhZG93Um9vdCYpOworICAgIGV4cGxpY2l0
IFNjb3BlKERvY3VtZW50Jik7CisgICAgZXhwbGljaXQgU2NvcGUoU2hhZG93Um9vdCYpOwogCiAg
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIGFjdGl2ZVN0eWxlU2hlZXRz
KCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVTdHlsZVNoZWV0czsgfQogCkBAIC05MSw3ICs5Miw3
IEBAIHB1YmxpYzoKICAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKCk7CiAgICAgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcklmRXhpc3RzKCk7CiAKLSAgICBzdGF0aWMgQXV0aG9y
U3R5bGVTaGVldHMmIGZvck5vZGUoTm9kZSYpOworICAgIHN0YXRpYyBTY29wZSYgZm9yTm9kZShO
b2RlJik7CiAKIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBVcGRhdGVUeXBlIHsgQWN0aXZlU2V0
LCBDb250ZW50c09ySW50ZXJwcmV0YXRpb24gfTsKQEAgLTExOCw3ICsxMTksNiBAQCBwcml2YXRl
OgogCiAgICAgVGltZXIgbV9wZW5kaW5nVXBkYXRlVGltZXI7CiAKLSAgICAvLyBUaGlzIGlzIGEg
bWlycm9yIG9mIG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMgdGhhdCBnZXRzIHBvcHVsYXRlZCBv
biBkZW1hbmQgZm9yIGFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnMoKS4KICAgICBtdXRhYmxlIHN0
ZDo6dW5pcXVlX3B0cjxIYXNoU2V0PGNvbnN0IENTU1N0eWxlU2hlZXQqPj4gbV93ZWFrQ29weU9m
QWN0aXZlU3R5bGVTaGVldExpc3RGb3JGYXN0TG9va3VwOwogCiAgICAgLy8gVHJhY2sgdGhlIG51
bWJlciBvZiBjdXJyZW50bHkgbG9hZGluZyB0b3AtbGV2ZWwgc3R5bGVzaGVldHMgbmVlZGVkIGZv
ciByZW5kZXJpbmcuCkBAIC0xMzksNiArMTM5LDQgQEAgcHJpdmF0ZToKIH07CiAKIH0KLQotI2Vu
ZGlmCi0KK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5j
cHAJKHJldmlzaW9uIDIwNjg3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJl
c29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlVHJlZVJlc29sdmVyLmgiCiAKLSNpbmNsdWRlICJBdXRo
b3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUg
IkNvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3IuaCIKICNpbmNsdWRlICJDb21wb3NlZFRyZWVJ
dGVyYXRvci5oIgpAQCAtNDUsNiArNDQsNyBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNp
bmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgorI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAyMDY4NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZh
Y2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNiBAQAogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAKLSNpbmNsdWRl
ICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU3JjVmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCkBA
IC00Miw2ICs0MSw3IEBACiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAi
U3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgorI2luY2x1ZGUgIlN0eWxl
U2NvcGUuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI2
Nyw3ICsyNjcsNyBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZvbnRGYWNlCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBkb2N1bWVudCgpLmF1dGhvclN0eWxlU2hlZXRzKCkuZGlk
Q2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CisgICAgZG9jdW1lbnQoKS5zdHlsZVNj
b3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CiB9CiAKIE5vZGU6Oklu
c2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHRm9udEZhY2VFbGVtZW50OjppbnNlcnRlZElu
dG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKQEAgLTI5Miw3ICsyOTIsNyBAQCB2b2lkIFNW
R0ZvbnRGYWNlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29uCiAgICAgICAgIGRvY3VtZW50KCkuYWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLnVucmVnaXN0ZXJTVkdGb250RmFjZUVsZW1lbnQodGhpcyk7CiAg
ICAgICAgIG1fZm9udEZhY2VSdWxlLT5tdXRhYmxlUHJvcGVydGllcygpLmNsZWFyKCk7CiAKLSAg
ICAgICAgZG9jdW1lbnQoKS5hdXRob3JTdHlsZVNoZWV0cygpLmRpZENoYW5nZUNvbnRlbnRzT3JJ
bnRlcnByZXRhdGlvbigpOworICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFu
Z2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKICAgICB9IGVsc2UKICAgICAgICAgQVNTRVJU
KCFtX2ZvbnRFbGVtZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxUcmVlVmll
d2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MVHJlZVZpZXdlci5j
cHAJKHJldmlzaW9uIDIwNjg3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxUcmVlVmlld2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogCiAjaWYgRU5BQkxFKFhTTFQp
CiAKLSNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRl
ci5oIgpAQCAtNDEsNiArNDAsNyBAQAogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luUG9saWN5
LmgiCisjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRl
ICJYTUxWaWV3ZXJDU1MuaCIKICNpbmNsdWRlICJYTUxWaWV3ZXJKUy5oIgpAQCAtNjQsNyArNjQs
NyBAQCB2b2lkIFhNTFRyZWVWaWV3ZXI6OnRyYW5zZm9ybURvY3VtZW50VG9UCiAgICAgU3RyaW5n
IGNzc1N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKFhNTFZpZXdlcl9j
c3MsIHNpemVvZihYTUxWaWV3ZXJfY3NzKSk7CiAgICAgYXV0byB0ZXh0ID0gbV9kb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShjc3NTdHJpbmcpOwogICAgIG1fZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgieG1sLXZpZXdlci1zdHlsZSIpKSktPmFwcGVuZENoaWxkKHRl
eHQsIElHTk9SRV9FWENFUFRJT04pOwotICAgIG1fZG9jdW1lbnQuYXV0aG9yU3R5bGVTaGVldHMo
KS5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKKyAgICBtX2RvY3VtZW50LnN0
eWxlU2NvcGUoKS5kaWRDaGFuZ2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxE
b2N1bWVudFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlci5jcHAJKHJldmlzaW9uIDIwNjg3OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiWE1MRG9jdW1lbnRQ
YXJzZXIuaCIKIAotI2luY2x1ZGUgIkF1dGhvclN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ0RB
VEFTZWN0aW9uLmgiCiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiQ29tbWVu
dC5oIgpAQCAtNDksNiArNDgsNyBAQAogI2luY2x1ZGUgIlNWR1N0eWxlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCisj
aW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIK
ICNpbmNsdWRlICJUcmVlRGVwdGhMaW1pdC5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KQEAgLTIw
MCw3ICsyMDAsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmQoKQogICAgICAgICBpbnNl
cnRFcnJvck1lc3NhZ2VCbG9jaygpOwogICAgIGVsc2UgewogICAgICAgICB1cGRhdGVMZWFmVGV4
dE5vZGUoKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+YXV0aG9yU3R5bGVTaGVldHMoKS5kaWRDaGFu
Z2VDb250ZW50c09ySW50ZXJwcmV0YXRpb24oKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVT
Y29wZSgpLmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOwogICAgIH0KIAogICAg
IGlmIChpc1BhcnNpbmcoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAJKHJldmlzaW9uIDIwNjg3OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlhNTERvY3VtZW50UGFyc2VyLmgiCiAKLSNpbmNsdWRlICJBdXRob3JTdHlsZVNoZWV0
cy5oIgogI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5o
IgogI2luY2x1ZGUgIkNvbW1lbnQuaCIKQEAgLTU2LDYgKzU1LDcgQEAKICNpbmNsdWRlICJTY3Jp
cHRTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKICNpbmNsdWRlICJUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU291cmNlLmgiCiAjaW5jbHVkZSAiWE1M
TlNOYW1lcy5oIgpAQCAtMTM4Nyw3ICsxMzg3LDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6
ZG9FbmQoKQogICAgICAgICBkb2N1bWVudCgpLT5zZXRUcmFuc2Zvcm1Tb3VyY2Uoc3RkOjptYWtl
X3VuaXF1ZTxUcmFuc2Zvcm1Tb3VyY2U+KGRvYykpOwogCiAgICAgICAgIGRvY3VtZW50KCktPnNl
dFBhcnNpbmcoZmFsc2UpOyAvLyBNYWtlIHRoZSBkb2N1bWVudCB0aGluayBpdCdzIGRvbmUsIHNv
IGl0IHdpbGwgYXBwbHkgWFNMIHN0eWxlc2hlZXRzLgotICAgICAgICBkb2N1bWVudCgpLT5hdXRo
b3JTdHlsZVNoZWV0cygpLmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlvbigpOworICAg
ICAgICBkb2N1bWVudCgpLT5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJl
dGF0aW9uKCk7CiAKICAgICAgICAgLy8gc3R5bGVSZXNvbHZlckNoYW5nZWQoKSBjYWxsIGNhbiBk
ZXRhY2ggdGhlIHBhcnNlciBhbmQgbnVsbCBvdXQgaXRzIGRvY3VtZW50LgogICAgICAgICAvLyBJ
biB0aGF0IGNhc2UsIHdlIGp1c3QgYmFpbCBvdXQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDIwNjg3OSkKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDYg
QEAKICNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlVJRGVsZWdhdGVQ
cml2YXRlLmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgPFdlYkNvcmUv
QXV0aG9yU3R5bGVTaGVldHMuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ1NTU3R5bGVEZWNsYXJhdGlv
bi5oPgogI2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRJbWFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9D
YWNoZWRSZXNvdXJjZUNsaWVudC5oPgpAQCAtMTE5LDYgKzExOCw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRC
dWZmZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU3R5bGVQcm9wZXJ0aWVzLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1N0eWxlU2NvcGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9UZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4
dEluZGljYXRvci5oPgpAQCAtMzYxMiw3ICszNjEyLDcgQEAgLSAodm9pZClyZWFwcGx5U3R5bGVz
CiAjZW5kaWYKIAogICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KSkgewotICAgICAgICBjb3JlRnJhbWUtPmRvY3VtZW50KCktPmF1dGhvclN0eWxlU2hlZXRzKCku
ZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0aW9uKCk7CisgICAgICAgIGNvcmVGcmFtZS0+
ZG9jdW1lbnQoKS0+c3R5bGVTY29wZSgpLmRpZENoYW5nZUNvbnRlbnRzT3JJbnRlcnByZXRhdGlv
bigpOwogICAgICAgICBjb3JlRnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQo
KTsKICAgICB9CiAKQEAgLTUwMDcsNyArNTAwNyw3IEBAIC0gKHZvaWQpX3NldFByaW50aW5nOihC
T09MKXByaW50aW5nIG1pbmkKIAogICAgICAgICAgICAgZG9jdW1lbnQtPnNldFBhZ2luYXRlZEZv
clNjcmVlbihfcHJpdmF0ZS0+cGFnaW5hdGVTY3JlZW5Db250ZW50KTsKICAgICAgICAgICAgIGRv
Y3VtZW50LT5zZXRQcmludGluZyhfcHJpdmF0ZS0+cHJpbnRpbmcpOwotICAgICAgICAgICAgZG9j
dW1lbnQtPmF1dGhvclN0eWxlU2hlZXRzKCkuZGlkQ2hhbmdlQ29udGVudHNPckludGVycHJldGF0
aW9uKCk7CisgICAgICAgICAgICBkb2N1bWVudC0+c3R5bGVTY29wZSgpLmRpZENoYW5nZUNvbnRl
bnRzT3JJbnRlcnByZXRhdGlvbigpOwogICAgICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>