<?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>218051</bug_id>
          
          <creation_ts>2020-10-21 13:59:21 -0700</creation_ts>
          <short_desc>Share more code between WorkerThread and AudioWorkletThread</short_desc>
          <delta_ts>2020-10-27 12:00:10 -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>Web Audio</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=218253</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>217995</dependson>
          <blocked>217724</blocked>
    
    <blocked>217058</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1700378</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-21 13:59:21 -0700</bug_when>
    <thetext>Share more code between WorkerThread and AudioWorkletThread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700813</commentid>
    <comment_count>1</comment_count>
      <attachid>412127</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-22 13:48:45 -0700</bug_when>
    <thetext>Created attachment 412127
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700859</commentid>
    <comment_count>2</comment_count>
      <attachid>412127</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-10-22 15:19:42 -0700</bug_when>
    <thetext>Comment on attachment 412127
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700862</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-22 15:25:49 -0700</bug_when>
    <thetext>Committed r268897: &lt;https://trac.webkit.org/changeset/268897&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 412127.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700864</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-22 15:26:34 -0700</bug_when>
    <thetext>&lt;rdar://problem/70591813&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412127</attachid>
            <date>2020-10-22 13:48:45 -0700</date>
            <delta_ts>2020-10-22 15:25:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218051-20201022134844.patch</filename>
            <type>text/plain</type>
            <size>56776</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4ODc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E4NTk3NzVhYThiZjdj
ODYwYmU1ZTQ1ZjYzZWVjNjM1N2VhZjk0Zi4uMjQyYzQ1MmMxZmEwODAxMTM1MmRmNWJlZDI3NDY5
YzEzZmExYTE4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDIwLTEwLTIyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhcmUgbW9yZSBjb2RlIGJl
dHdlZW4gV29ya2VyVGhyZWFkIGFuZCBBdWRpb1dvcmtsZXRUaHJlYWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODA1MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNoYXJlIG1vcmUgY29kZSBiZXR3ZWVu
IFdvcmtlclRocmVhZCBhbmQgQXVkaW9Xb3JrbGV0VGhyZWFkIGJ5IG1vdmluZyBtb3JlIGxvZ2lj
CisgICAgICAgIHRvIHRoZSBXb3JrZXJPcldvcmtsZXQgYmFzZSBjbGFzcy4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIHdlYi1mYWNpbmcgYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1dvcmtsZXRNZXNzYWdpbmdQcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpnZW5lcmF0ZVdvcmtsZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvV29ya2xldFRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b1dvcmtsZXRUaHJlYWQ6OkF1ZGlvV29ya2xldFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1dvcmtsZXRUaHJlYWQ6OmNyZWF0ZUdsb2JhbFNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvV29ya2xldFRocmVhZDo6d29ya2VyTG9hZGVyUHJveHkpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9Xb3JrbGV0VGhyZWFkOjpjcmVhdGVUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9Xb3JrbGV0VGhyZWFkOjpnbG9iYWxTY29wZSBjb25zdCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9BdWRpb1dvcmtsZXRUaHJlYWQuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
cGFnZS9NZW1vcnlSZWxlYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbGVhc2VNZW1vcnkp
OgorICAgICAgICAqIHBhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6cGxhdGZvcm1Db2xsZWN0Q1BVRGF0
YSk6CisgICAgICAgICogcGFnZS9saW51eC9SZXNvdXJjZVVzYWdlVGhyZWFkTGludXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZVRocmVhZDo6cGxhdGZvcm1Db2xsZWN0Q1BV
RGF0YSk6CisgICAgICAgICogd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGVkaWNhdGVkV29ya2VyVGhyZWFkOjpydW5FdmVudExvb3ApOgorICAg
ICAgICAqIHdvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dv
cmtlck9yV29ya2xldEdsb2JhbFNjb3BlLmg6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJPcldv
cmtsZXRHbG9iYWxTY29wZTo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJPcldv
cmtsZXRHbG9iYWxTY29wZTo6cmVzdW1lKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlck9yV29y
a2xldFRocmVhZC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
VGhyZWFkLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck9yV29ya2xldFRocmVhZDo6d29y
a2VyT3JXb3JrbGV0VGhyZWFkc0xvY2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyT3JXb3Jr
bGV0VGhyZWFkOjpXb3JrZXJPcldvcmtsZXRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyT3JXb3JrbGV0VGhyZWFkOjp+V29ya2VyT3JXb3JrbGV0VGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6Oldvcmtlck9yV29ya2xldFRocmVhZDo6c3RhcnRSdW5uaW5nRGVidWdnZXJUYXNrcyk6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJPcldvcmtsZXRUaHJlYWQ6OnN0b3BSdW5uaW5nRGVi
dWdnZXJUYXNrcyk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJPcldvcmtsZXRUaHJlYWQ6OnJ1
bkV2ZW50TG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJPcldvcmtsZXRUaHJlYWQ6Ondv
cmtlck9yV29ya2xldFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJPcldvcmtsZXRU
aHJlYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck9yV29ya2xldFRocmVhZDo6
c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJPcldvcmtsZXRUaHJlYWQ6OnN1c3BlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyT3JXb3JrbGV0VGhyZWFkOjpyZXN1bWUpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyT3JXb3JrbGV0VGhyZWFkOjpyZWxlYXNlRmFzdE1hbGxvY0Zy
ZWVNZW1vcnlJbkFsbFRocmVhZHMpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyT3JXb3JrbGV0
VGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJPcldvcmtsZXRUaHJlYWQ6OnRocmVh
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJPcldvcmtsZXRUaHJlYWQ6Omdsb2Jh
bFNjb3BlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck9yV29ya2xldFRocmVhZDo6
cnVuTG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJPcldvcmtsZXRUaHJlYWQ6OnN0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck9yV29ya2xldFRocmVhZDo6c3RvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJPcldvcmtsZXRUaHJlYWQ6OmlkZW50aWZpZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyT3JXb3JrbGV0VGhyZWFkOjpldmFsdWF0ZVNjcmlwdElm
TmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck9yV29ya2xldFRocmVhZDo6c2hv
dWxkV2FpdEZvcldlYkluc3BlY3Rvck9uU3RhcnR1cCBjb25zdCk6CisgICAgICAgICogd29ya2Vy
cy9Xb3JrZXJUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3b3Jr
ZXJUaHJlYWRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OldvcmtlclRo
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6On5Xb3JrZXJUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjpjcmVhdGVUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyVGhyZWFkOjpjcmVhdGVHbG9iYWxTY29wZSk6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWQ6OnNob3VsZFdhaXRGb3JXZWJJbnNwZWN0b3JPblN0YXJ0dXAgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjpldmFsdWF0ZVNjcmlwdElmTmVj
ZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6Z2xvYmFsU2NvcGUpOgor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmg6CisgICAgICAgICogd29ya2Vycy9zZXJ2
aWNlL2NvbnRleHQvU2VydmljZVdvcmtlclRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
ZXJ2aWNlV29ya2VyVGhyZWFkOjpxdWV1ZVRhc2tUb0ZpcmVGZXRjaEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlcnZpY2VXb3JrZXJUaHJlYWQ6OnF1ZXVlVGFza1RvUG9zdE1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VydmljZVdvcmtlclRocmVhZDo6cXVldWVUYXNrVG9GaXJlSW5z
dGFsbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2VXb3JrZXJUaHJlYWQ6OnF1ZXVl
VGFza1RvRmlyZUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZVdvcmtl
clRocmVhZDo6ZmluaXNoZWRFdmFsdWF0aW5nU2NyaXB0KToKKyAgICAgICAgKiB3b3JrbGV0cy9X
b3JrbGV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtsZXQ6OldvcmtsZXQpOgorICAgICAg
ICAqIHdvcmtsZXRzL1dvcmtsZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtsZXQ6OmlkZW50
aWZpZXIgY29uc3QpOgorICAgICAgICAqIHdvcmtsZXRzL1dvcmtsZXRQYXJhbWV0ZXJzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrbGV0UGFyYW1ldGVyczo6aXNvbGF0ZWRDb3B5IGNvbnN0KToK
KwogMjAyMC0xMC0yMiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAg
ICAgSW50cm9kdWNlIHdvcmtsZXQgZGVzdGluYXRpb25zIGFuZCBhbGxvdyB0byBmZXRjaCBtb2R1
bGVzIHdpdGggQ09SUyBiYXNlZCBvbiBkZXN0aW5hdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1dvcmtsZXRNZXNzYWdpbmdQcm94eS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvV29ya2xldE1lc3NhZ2luZ1Byb3h5
LmNwcAppbmRleCBhNzA2MTNlOTgwNDBhNjAyMDNkYzc3ZjY5MzBhNjU3MGM3N2FlNDVmLi5iOTAy
YTYzMjMxZjFmYzM0YjZkY2E5NDljODRmMTBmYTQ5MzJiOTA0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvV29ya2xldE1lc3NhZ2luZ1Byb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvV29ya2xldE1lc3NhZ2lu
Z1Byb3h5LmNwcApAQCAtNTEsNyArNTEsOCBAQCBzdGF0aWMgV29ya2xldFBhcmFtZXRlcnMgZ2Vu
ZXJhdGVXb3JrbGV0UGFyYW1ldGVycyhBdWRpb1dvcmtsZXQmIHdvcmtsZXQpCiAgICAgcmV0dXJu
IHsKICAgICAgICAgZG9jdW1lbnQtPnVybCgpLAogICAgICAgICBqc1J1bnRpbWVGbGFncywKLSAg
ICAgICAgd29ya2xldC5hdWRpb0NvbnRleHQoKSA/IHdvcmtsZXQuYXVkaW9Db250ZXh0KCktPnNh
bXBsZVJhdGUoKSA6IDAuMGYKKyAgICAgICAgd29ya2xldC5hdWRpb0NvbnRleHQoKSA/IHdvcmts
ZXQuYXVkaW9Db250ZXh0KCktPnNhbXBsZVJhdGUoKSA6IDAuMGYsCisgICAgICAgIHdvcmtsZXQu
aWRlbnRpZmllcigpCiAgICAgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb1dvcmtsZXRUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb1dvcmtsZXRUaHJlYWQuY3BwCmluZGV4IDgxNTYxNDBjZTM1YmY2
NTliOWU1ZTMwNDUwYjhlNTEyNWVkZjM1NTQuLjIwZGM1ODkzMWEzZGJhMDAwZDlhYjE3NmZhYjlm
NTliYWU4MDExMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Xb3JrbGV0VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvV29ya2xldFRocmVhZC5jcHAKQEAgLTMzLDE0OCArMzMsMzkgQEAKIAogI2luY2x1
ZGUgIkF1ZGlvV29ya2xldEdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiQXVkaW9Xb3JrbGV0TWVz
c2FnaW5nUHJveHkuaCIKLSNpbmNsdWRlICJXb3JrZXJPcldvcmtsZXRTY3JpcHRDb250cm9sbGVy
LmgiCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIkZsb2F0aW5nUG9pbnRF
bnZpcm9ubWVudC5oIgotI2VuZGlmCi0KLSNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDx3dGYvZ2xp
Yi9HUmVmUHRyLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogQXVkaW9Xb3JrbGV0VGhyZWFkOjpBdWRpb1dvcmtsZXRUaHJlYWQo
QXVkaW9Xb3JrbGV0TWVzc2FnaW5nUHJveHkmIG1lc3NhZ2luZ1Byb3h5LCBjb25zdCBXb3JrbGV0
UGFyYW1ldGVycyYgcGFyYW1ldGVycykKLSAgICA6IG1fbWVzc2FnaW5nUHJveHkobWVzc2FnaW5n
UHJveHkpCisgICAgOiBXb3JrZXJPcldvcmtsZXRUaHJlYWQocGFyYW1ldGVycy5pZGVudGlmaWVy
Lmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9tZXNzYWdpbmdQcm94eShtZXNzYWdpbmdQcm94eSkK
ICAgICAsIG1fcGFyYW1ldGVycyhwYXJhbWV0ZXJzLmlzb2xhdGVkQ29weSgpKQogewogfQogCiBB
dWRpb1dvcmtsZXRUaHJlYWQ6On5BdWRpb1dvcmtsZXRUaHJlYWQoKSA9IGRlZmF1bHQ7CiAKLXZv
aWQgQXVkaW9Xb3JrbGV0VGhyZWFkOjpzdGFydCgpCi17Ci0gICAgYXV0byBsb2NrID0gaG9sZExv
Y2sobV90aHJlYWRDcmVhdGlvbkFuZFdvcmtsZXRHbG9iYWxTY29wZUxvY2spOwotCi0gICAgUmVm
PFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIldlYkNvcmU6IEF1ZGlvV29ya2xldCIs
IFt0aGlzXSB7Ci0gICAgICAgIHdvcmtsZXRUaHJlYWQoKTsKLSAgICB9LCBUaHJlYWRUeXBlOjpB
dWRpbyk7Ci0gICAgLy8gRm9yY2UgdGhlIFRocmVhZCBvYmplY3QgdG8gYmUgaW5pdGlhbGl6ZWQg
ZnVsbHkgYmVmb3JlIHN0b3JpbmcgaXQgdG8gbV90aHJlYWQgKGFuZCBiZWNvbWluZyB2aXNpYmxl
IHRvIG90aGVyIHRocmVhZHMpLgotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgbV90
aHJlYWQgPSBXVEZNb3ZlKHRocmVhZCk7Ci19Ci0KLXZvaWQgQXVkaW9Xb3JrbGV0VGhyZWFkOjpz
dG9wKCkKK1JlZjxXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZT4gQXVkaW9Xb3JrbGV0VGhyZWFk
OjpjcmVhdGVHbG9iYWxTY29wZSgpCiB7Ci0gICAgLy8gTXV0ZXggcHJvdGVjdGlvbiBpcyBuZWNl
c3NhcnkgdG8gZW5zdXJlIHRoYXQgbV93b3JrZXJHbG9iYWxTY29wZSBpc24ndCBjaGFuZ2VkIGJ5
Ci0gICAgLy8gV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKSB3aGlsZSB3ZSdyZSBhY2Nlc3Np
bmcgaXQuIE5vdGUgYWxzbyB0aGF0IHN0b3AoKSBjYW4KLSAgICAvLyBiZSBjYWxsZWQgYmVmb3Jl
IG1fd29ya2VyR2xvYmFsU2NvcGUgaXMgZnVsbHkgY3JlYXRlZC4KLSAgICBhdXRvIGxvY2tlciA9
IHRyeUhvbGRMb2NrKG1fdGhyZWFkQ3JlYXRpb25BbmRXb3JrbGV0R2xvYmFsU2NvcGVMb2NrKTsK
LSAgICBpZiAoIWxvY2tlcikgewotICAgICAgICAvLyBUaGUgdGhyZWFkIGlzIHN0aWxsIHN0YXJ0
aW5nLCBzcGluIHRoZSBydW5sb29wIGFuZCB0cnkgYWdhaW4gdG8gYXZvaWQgZGVhZGxvY2tzIGlm
IHRoZSB3b3JrZXIgdGhyZWFkCi0gICAgICAgIC8vIG5lZWRzIHRvIGludGVyYWN0IHdpdGggdGhl
IG1haW4gdGhyZWFkIGR1cmluZyBzdGFydHVwLgotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0
aGlzXSgpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcCgpOwotICAgICAgICB9KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEVuc3VyZSB0aGF0IHRhc2tzIGFyZSBiZWluZyBo
YW5kbGVkIGJ5IHRocmVhZCBldmVudCBsb29wLiBJZiBzY3JpcHQgZXhlY3V0aW9uIHdlcmVuJ3Qg
Zm9yYmlkZGVuLCBhIHdoaWxlKDEpIGxvb3AgaW4gSlMgY291bGQga2VlcCB0aGUgdGhyZWFkIGFs
aXZlIGZvcmV2ZXIuCi0gICAgaWYgKG1fd29ya2xldEdsb2JhbFNjb3BlKSB7Ci0gICAgICAgIG1f
d29ya2xldEdsb2JhbFNjb3BlLT5zY3JpcHQoKS0+c2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlv
bigpOwotCi0gICAgICAgIG1fcnVuTG9vcC5wb3N0VGFza0FuZFRlcm1pbmF0ZSh7IFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2s6OkNsZWFudXBUYXNrLCBbXSAoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCApIHsKLSAgICAgICAgICAgIGF1dG8mIHdvcmtsZXRHbG9iYWxTY29wZSA9
IGRvd25jYXN0PEF1ZGlvV29ya2xldEdsb2JhbFNjb3BlPihjb250ZXh0KTsKLQotICAgICAgICAg
ICAgd29ya2xldEdsb2JhbFNjb3BlLnByZXBhcmVGb3JEZXN0cnVjdGlvbigpOwotCi0gICAgICAg
ICAgICAvLyBTdGljayBhIHNodXRkb3duIGNvbW1hbmQgYXQgdGhlIGVuZCBvZiB0aGUgcXVldWUs
IHNvIHRoYXQgd2UgZGVhbAotICAgICAgICAgICAgLy8gd2l0aCBhbGwgdGhlIGNsZWFudXAgdGFz
a3MgdGhlIGRhdGFiYXNlcyBwb3N0IGZpcnN0LgotICAgICAgICAgICAgd29ya2xldEdsb2JhbFNj
b3BlLnBvc3RUYXNrKHsgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzazo6Q2xlYW51cFRhc2ss
IFtdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAg
YXV0byYgd29ya2xldEdsb2JhbFNjb3BlID0gZG93bmNhc3Q8QXVkaW9Xb3JrbGV0R2xvYmFsU2Nv
cGU+KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IHNhZmUgdG8gY2FsbCBj
bGVhclNjcmlwdCB1bnRpbCBhbGwgdGhlIGNsZWFudXAgdGFza3MgcG9zdGVkIGJ5IGZ1bmN0aW9u
cyBpbml0aWF0ZWQgYnkgV29ya2VyVGhyZWFkU2h1dGRvd25TdGFydFRhc2sgaGF2ZSBjb21wbGV0
ZWQuCi0gICAgICAgICAgICAgICAgd29ya2xldEdsb2JhbFNjb3BlLmNsZWFyU2NyaXB0KCk7Ci0g
ICAgICAgICAgICB9IH0pOwotCi0gICAgICAgIH0gfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgbV9ydW5Mb29wLnRlcm1pbmF0ZSgpOworICAgIHJldHVybiBBdWRpb1dvcmtsZXRHbG9i
YWxTY29wZTo6Y3JlYXRlKCp0aGlzLCBtX3BhcmFtZXRlcnMpOwogfQogCi12b2lkIEF1ZGlvV29y
a2xldFRocmVhZDo6d29ya2xldFRocmVhZCgpCitXb3JrZXJMb2FkZXJQcm94eSYgQXVkaW9Xb3Jr
bGV0VGhyZWFkOjp3b3JrZXJMb2FkZXJQcm94eSgpCiB7Ci0gICAgYXV0byBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyk7Ci0KLSAgICAvLyBQcm9wYWdhdGUgdGhlIG1haW5UaHJlYWQncyBm
ZW52IHRvIHdvcmtlcnMuCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBGbG9hdGluZ1Bv
aW50RW52aXJvbm1lbnQ6OnNpbmdsZXRvbigpLnByb3BhZ2F0ZU1haW5UaHJlYWRFbnZpcm9ubWVu
dCgpOwotI2VuZGlmCi0KLSNpZiBVU0UoR0xJQikKLSAgICBHUmVmUHRyPEdNYWluQ29udGV4dD4g
bWFpbkNvbnRleHQgPSBhZG9wdEdSZWYoZ19tYWluX2NvbnRleHRfbmV3KCkpOwotICAgIGdfbWFp
bl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQobWFpbkNvbnRleHQuZ2V0KCkpOwotI2VuZGlm
Ci0KLSAgICBXb3JrZXJPcldvcmtsZXRTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRDb250cm9sbGVy
OwotICAgIHsKLSAgICAgICAgYXV0byBsb2NrID0gaG9sZExvY2sobV90aHJlYWRDcmVhdGlvbkFu
ZFdvcmtsZXRHbG9iYWxTY29wZUxvY2spOwotICAgICAgICBtX3dvcmtsZXRHbG9iYWxTY29wZSA9
IEF1ZGlvV29ya2xldEdsb2JhbFNjb3BlOjpjcmVhdGUoKnRoaXMsIG1fcGFyYW1ldGVycyk7Ci0K
LSAgICAgICAgc2NyaXB0Q29udHJvbGxlciA9IG1fd29ya2xldEdsb2JhbFNjb3BlLT5zY3JpcHQo
KTsKLQotICAgICAgICBpZiAobV9ydW5Mb29wLnRlcm1pbmF0ZWQoKSkgewotICAgICAgICAgICAg
Ly8gVGhlIHdvcmtlciB3YXMgdGVybWluYXRlZCBiZWZvcmUgdGhlIHRocmVhZCBoYWQgYSBjaGFu
Y2UgdG8gcnVuLiBTaW5jZSB0aGUgY29udGV4dCBkaWRuJ3QgZXhpc3QgeWV0LAotICAgICAgICAg
ICAgLy8gZm9yYmlkRXhlY3V0aW9uKCkgY291bGRuJ3QgYmUgY2FsbGVkIGZyb20gc3RvcCgpLgot
ICAgICAgICAgICAgc2NyaXB0Q29udHJvbGxlci0+c2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlv
bigpOwotICAgICAgICAgICAgc2NyaXB0Q29udHJvbGxlci0+Zm9yYmlkRXhlY3V0aW9uKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBydW5FdmVudExvb3AoKTsKLQotI2lmIFVTRShHTElCKQot
ICAgIGdfbWFpbl9jb250ZXh0X3BvcF90aHJlYWRfZGVmYXVsdChtYWluQ29udGV4dC5nZXQoKSk7
Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxUaHJlYWQ+IHByb3RlY3RvciA9IG1fdGhyZWFkOwotCi0g
ICAgQVNTRVJUKG1fd29ya2xldEdsb2JhbFNjb3BlLT5oYXNPbmVSZWYoKSk7Ci0KLSAgICBSZWZQ
dHI8QXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGU+IHdvcmtsZXRHbG9iYWxTY29wZVRvRGVsZXRlOwot
ICAgIHsKLSAgICAgICAgLy8gTXV0ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJl
IHRoYXQgd2UgZG9uJ3QgY2hhbmdlIG1fd29ya2VyR2xvYmFsU2NvcGUKLSAgICAgICAgLy8gd2hp
bGUgV29ya2VyVGhyZWFkOjpzdG9wIGlzIGFjY2Vzc2luZyBpdC4KLSAgICAgICAgYXV0byBsb2Nr
ID0gaG9sZExvY2sobV90aHJlYWRDcmVhdGlvbkFuZFdvcmtsZXRHbG9iYWxTY29wZUxvY2spOwot
Ci0gICAgICAgIC8vIERlbGF5IHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgV29ya2VyR2xvYmFsU2Nv
cGUgY29udGV4dCB1bnRpbCBhZnRlciB3ZSd2ZSB1bmxvY2tlZCB0aGUKLSAgICAgICAgLy8gbV90
aHJlYWRDcmVhdGlvbkFuZFdvcmtlckdsb2JhbFNjb3BlTXV0ZXguIFRoaXMgaXMgbmVlZGVkIGJl
Y2F1c2UgZGVzdHJ1Y3RpbmcgdGhlCi0gICAgICAgIC8vIGNvbnRleHQgd2lsbCB0cmlnZ2VyIHRo
ZSBtYWluIHRocmVhZCB0byByYWNlIGFnYWluc3QgdXMgdG8gZGVsZXRlIHRoZSBXb3JrZXJUaHJl
YWQKLSAgICAgICAgLy8gb2JqZWN0LCBhbmQgdGhlIFdvcmtlclRocmVhZCBvYmplY3Qgb3ducyB0
aGUgbXV0ZXggd2UgbmVlZCB0byB1bmxvY2sgYWZ0ZXIgdGhpcy4KLSAgICAgICAgd29ya2xldEds
b2JhbFNjb3BlVG9EZWxldGUgPSBXVEZNb3ZlKG1fd29ya2xldEdsb2JhbFNjb3BlKTsKLSAgICB9
Ci0KLSAgICAvLyBUaGUgYmVsb3cgYXNzaWdubWVudCB3aWxsIGRlc3Ryb3kgdGhlIGNvbnRleHQs
IHdoaWNoIHdpbGwgaW4gdHVybiBub3RpZnkgbWVzc2FnaW5nIHByb3h5LgotICAgIC8vIFdlIGNh
bm5vdCBsZXQgYW55IG9iamVjdHMgc3Vydml2ZSBwYXN0IHRocmVhZCBleGl0LCBiZWNhdXNlIG5v
IG90aGVyIHRocmVhZCB3aWxsIHJ1biBHQyBvciBvdGhlcndpc2UgZGVzdHJveSB0aGVtLgotICAg
IHdvcmtsZXRHbG9iYWxTY29wZVRvRGVsZXRlID0gbnVsbHB0cjsKLQotICAgIC8vIFNlbmQgdGhl
IGxhc3QgV29ya2VyVGhyZWFkIFJlZiB0byBiZSBEZXJlZidlZCBvbiB0aGUgbWFpbiB0aHJlYWQu
Ci0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyldIHsgfSk7Ci0KLSAgICAvLyBUaGUgdGhyZWFkIG9iamVjdCBtYXkgYmUgYWxyZWFkeSBk
ZXN0cm95ZWQgZnJvbSBub3RpZmljYXRpb24gbm93LCBkb24ndCB0cnkgdG8gYWNjZXNzICJ0aGlz
Ii4KLSAgICBwcm90ZWN0b3ItPmRldGFjaCgpOworICAgIHJldHVybiBtX21lc3NhZ2luZ1Byb3h5
OwogfQogCi12b2lkIEF1ZGlvV29ya2xldFRocmVhZDo6cnVuRXZlbnRMb29wKCkKK1JlZjxUaHJl
YWQ+IEF1ZGlvV29ya2xldFRocmVhZDo6Y3JlYXRlVGhyZWFkKCkKIHsKLSAgICAvLyBEb2VzIG5v
dCByZXR1cm4gdW50aWwgdGVybWluYXRlZC4KLSAgICBtX3J1bkxvb3AucnVuKG1fd29ya2xldEds
b2JhbFNjb3BlLmdldCgpKTsKKyAgICByZXR1cm4gVGhyZWFkOjpjcmVhdGUoIldlYkNvcmU6IEF1
ZGlvV29ya2xldCIsIFt0aGlzXSB7CisgICAgICAgIHdvcmtlck9yV29ya2xldFRocmVhZCgpOwor
ICAgIH0sIFRocmVhZFR5cGU6OkF1ZGlvKTsKIH0KIAotV29ya2VyTG9hZGVyUHJveHkmIEF1ZGlv
V29ya2xldFRocmVhZDo6d29ya2VyTG9hZGVyUHJveHkoKQorQXVkaW9Xb3JrbGV0R2xvYmFsU2Nv
cGUqIEF1ZGlvV29ya2xldFRocmVhZDo6Z2xvYmFsU2NvcGUoKSBjb25zdAogewotICAgIHJldHVy
biBtX21lc3NhZ2luZ1Byb3h5OworICAgIHJldHVybiBkb3duY2FzdDxBdWRpb1dvcmtsZXRHbG9i
YWxTY29wZT4oV29ya2VyT3JXb3JrbGV0VGhyZWFkOjpnbG9iYWxTY29wZSgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb1dvcmtsZXRUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Xb3JrbGV0VGhyZWFkLmgKaW5kZXggMDMwYzYxZjlkNTE4MDIyOTJjYjM0Mzgx
NGQ5MTBjMmJlYTdiM2ViOS4uNDZmYWNiNjVlN2IxNDVmZWI2OWRlMzFhNmQ5MjFjYTE2M2UxNDE2
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1dvcmts
ZXRUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvV29y
a2xldFRocmVhZC5oCkBAIC0zMCwxMSArMzAsNyBAQAogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykK
ICNpbmNsdWRlICJXb3JrZXJPcldvcmtsZXRUaHJlYWQuaCIKLSNpbmNsdWRlICJXb3JrZXJSdW5M
b29wLmgiCiAjaW5jbHVkZSAiV29ya2xldFBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ5LDI5ICs0NSwyMiBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIH5BdWRpb1dvcmtsZXRUaHJlYWQoKTsKIAotICAgIEF1ZGlvV29ya2xldEdsb2Jh
bFNjb3BlKiBnbG9iYWxTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2xldEdsb2JhbFNjb3Bl
LmdldCgpOyB9Ci0KLSAgICB2b2lkIHN0YXJ0KCk7Ci0gICAgdm9pZCBzdG9wKCk7CisgICAgQXVk
aW9Xb3JrbGV0R2xvYmFsU2NvcGUqIGdsb2JhbFNjb3BlKCkgY29uc3Q7CiAKICAgICAvLyBXb3Jr
ZXJPcldvcmtsZXRUaHJlYWQuCi0gICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCgpIGZpbmFsIHsg
cmV0dXJuIG1fcnVuTG9vcDsgfQogICAgIFdvcmtlckxvYWRlclByb3h5JiB3b3JrZXJMb2FkZXJQ
cm94eSgpIGZpbmFsOwotICAgIFRocmVhZCogdGhyZWFkKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV90aHJlYWQuZ2V0KCk7IH0KKwogICAgIEF1ZGlvV29ya2xldE1lc3NhZ2luZ1Byb3h5JiBtZXNz
YWdpbmdQcm94eSgpIHsgcmV0dXJuIG1fbWVzc2FnaW5nUHJveHk7IH0KIAogcHJpdmF0ZToKICAg
ICBBdWRpb1dvcmtsZXRUaHJlYWQoQXVkaW9Xb3JrbGV0TWVzc2FnaW5nUHJveHkmLCBjb25zdCBX
b3JrbGV0UGFyYW1ldGVycyYpOwogCi0gICAgdm9pZCBydW5FdmVudExvb3AoKTsKLSAgICB2b2lk
IHdvcmtsZXRUaHJlYWQoKTsKKyAgICAvLyBXb3JrZXJPcldvcmtsZXRUaHJlYWQuCisgICAgUmVm
PFdURjo6VGhyZWFkPiBjcmVhdGVUaHJlYWQoKSBmaW5hbDsKKyAgICBSZWY8V29ya2VyT3JXb3Jr
bGV0R2xvYmFsU2NvcGU+IGNyZWF0ZUdsb2JhbFNjb3BlKCkgZmluYWw7CiAKICAgICBBdWRpb1dv
cmtsZXRNZXNzYWdpbmdQcm94eSYgbV9tZXNzYWdpbmdQcm94eTsKLSAgICBSZWZQdHI8VGhyZWFk
PiBtX3RocmVhZDsKLSAgICBXb3JrZXJSdW5Mb29wIG1fcnVuTG9vcDsKICAgICBXb3JrbGV0UGFy
YW1ldGVycyBtX3BhcmFtZXRlcnM7Ci0gICAgUmVmUHRyPEF1ZGlvV29ya2xldEdsb2JhbFNjb3Bl
PiBtX3dvcmtsZXRHbG9iYWxTY29wZTsKLSAgICBMb2NrIG1fdGhyZWFkQ3JlYXRpb25BbmRXb3Jr
bGV0R2xvYmFsU2NvcGVMb2NrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCBmYWNmYjMwOTZkZTY2YjQzOGY3ODlkNjlmYjQ5NTgwY2NmZGE2NmIyLi4wZDNi
ZTU4ZTczNjVjMjNkZTg0MWQwMDkxODI4YjIzM2FiN2Q3YjdjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAt
MjU2Miw2ICsyNTYyLDcgQEAgd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5jcHAKIHdvcmtlcnMvV29y
a2VyTWVzc2FnaW5nUHJveHkuY3BwCiB3b3JrZXJzL1dvcmtlck9yV29ya2xldEdsb2JhbFNjb3Bl
LmNwcAogd29ya2Vycy9Xb3JrZXJPcldvcmtsZXRTY3JpcHRDb250cm9sbGVyLmNwcAord29ya2Vy
cy9Xb3JrZXJPcldvcmtsZXRUaHJlYWQuY3BwCiB3b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwCiB3
b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAKIHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGYxZTA2ODMxOTgzMzEyZmJmMzdmM2ZmNDU3ZTA1ZDNlM2I2YTY3OWIuLjhhMjk1YjkwZTAy
ZjkwYmMyMDdhYjAxNGVmM2MyOTQ3MDk4NzU3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwNzUzLDYgKzEwNzUzLDcgQEAK
IAkJODM3RkIzNDAxRjlFQTA2NjAwRDBGQzMxIC8qIEV4dGVuZGFibGVNZXNzYWdlRXZlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzdGQjM0MjFGOUVBMDY3MDBEMEZDMzEg
LyogRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFeHRlbmRhYmxlTWVzc2FnZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODM3RkIzNDMxRjlFQTA2ODAwRDBGQzMxIC8qIEV4dGVuZGFibGVNZXNzYWdl
RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEV4dGVuZGFibGVNZXNzYWdlRXZlbnQu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzdGQ0I0RDI1NDBFM0M3MDA5MzRE
NEYgLyogV29ya2VyT3JXb3JrbGV0VGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdvcmtlck9yV29ya2xldFRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTgzODZBOTZFMTlGNjFFNEYwMEUxRUM0QSAvKiBTdHlsZUJ1aWxkZXJHZW5l
cmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3R5bGVCdWls
ZGVyR2VuZXJhdGVkLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvU3R5bGVCdWls
ZGVyR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJ
ODM4ODY3MzQxRDEzQkE1OTAwMzY5N0QwIC8qIFJlbmRlck9iamVjdEVudW1zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck9iamVjdEVudW1zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTgzODg2OUVCMUNFODFFOUUwMEQxNkE5RSAvKiBKU1RleHRDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUZXh0Q3VzdG9t
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4ODc2LDYgKzE4ODc3LDcgQEAK
IAkJCQk4M0Q2QUFFNDI1MjRFRTEzMDA0MjhCNEIgLyogV29ya2VyT3JXb3JrbGV0R2xvYmFsU2Nv
cGUuaCAqLywKIAkJCQk4MzVBQTM4ODI1M0Y1NUJCMDA3NDY1NTQgLyogV29ya2VyT3JXb3JrbGV0
U2NyaXB0Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJODM5QTA5NUIyNTI0RjM3NjAwRUVGMzI4IC8q
IFdvcmtlck9yV29ya2xldFNjcmlwdENvbnRyb2xsZXIuaCAqLywKKwkJCQk4MzdGQ0I0RDI1NDBF
M0M3MDA5MzRENEYgLyogV29ya2VyT3JXb3JrbGV0VGhyZWFkLmNwcCAqLywKIAkJCQk4M0U4MjhC
MjI1Mjc5NENEMDAyN0UwRjcgLyogV29ya2VyT3JXb3JrbGV0VGhyZWFkLmggKi8sCiAJCQkJNDE2
RTI5QTUxMDJGQTk2MjAwN0ZDMTRFIC8qIFdvcmtlclJlcG9ydGluZ1Byb3h5LmggKi8sCiAJCQkJ
MkU0MzQ2NDAwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclJ1bkxvb3AuY3BwICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvTWVtb3J5UmVsZWFzZS5jcHAKaW5kZXggNDc3ZGY3MjBiM2Q3OTNlNjBhNTQxZDBm
MzkyOGJmN2UxYTkzODEyYy4uN2NjYjM0ZjIwZmZiNWQ0NTA3YTU3MzRkY2U2OWQyYmM5YzhjZGY2
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01lbW9yeVJlbGVhc2UuY3BwCkBAIC0xNDcsNyArMTQ3LDcg
QEAgdm9pZCByZWxlYXNlTWVtb3J5KENyaXRpY2FsIGNyaXRpY2FsLCBTeW5jaHJvbm91cyBzeW5j
aHJvbm91cywgTWFpbnRhaW5CYWNrRm9yd2EKIAogICAgIGlmIChzeW5jaHJvbm91cyA9PSBTeW5j
aHJvbm91czo6WWVzKSB7CiAgICAgICAgIC8vIEZhc3RNYWxsb2MgaGFzIGxvY2stZnJlZSB0aHJl
YWQgc3BlY2lmaWMgY2FjaGVzIHRoYXQgY2FuIG9ubHkgYmUgY2xlYXJlZCBmcm9tIHRoZSB0aHJl
YWQgaXRzZWxmLgotICAgICAgICBXb3JrZXJUaHJlYWQ6OnJlbGVhc2VGYXN0TWFsbG9jRnJlZU1l
bW9yeUluQWxsVGhyZWFkcygpOworICAgICAgICBXb3JrZXJPcldvcmtsZXRUaHJlYWQ6OnJlbGVh
c2VGYXN0TWFsbG9jRnJlZU1lbW9yeUluQWxsVGhyZWFkcygpOwogI2lmIEVOQUJMRShTQ1JPTExJ
TkdfVEhSRUFEKQogICAgICAgICBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKFdURjo6cmVsZWFz
ZUZhc3RNYWxsb2NGcmVlTWVtb3J5KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlVGhyZWFkQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQppbmRleCBhNjUwZTU1OGQ3
NmJkMjE3MTIzNzg1YmY3ZmYyN2UxYTg1YmFjMDgzLi40MGZlYTQwODBkZjRjNzIyMmUxODQ5YTJh
ZTFhNDA5NTBlZGE5OGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jl
c291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29h
L1Jlc291cmNlVXNhZ2VUaHJlYWRDb2NvYS5tbQpAQCAtMTcxLDggKzE3MSw4IEBAIHZvaWQgUmVz
b3VyY2VVc2FnZVRocmVhZDo6cGxhdGZvcm1Db2xsZWN0Q1BVRGF0YShKU0M6OlZNKiwgUmVzb3Vy
Y2VVc2FnZURhdGEmIGRhCiAKICAgICBIYXNoTWFwPG1hY2hfcG9ydF90LCBTdHJpbmc+IGtub3du
V29ya2VyVGhyZWFkczsKICAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9jayhXb3JrZXJUaHJl
YWQ6OndvcmtlclRocmVhZHNNdXRleCgpKTsKLSAgICAgICAgZm9yIChhdXRvKiB0aHJlYWQgOiBX
b3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZHMobG9jaykpIHsKKyAgICAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhXb3JrZXJPcldvcmtsZXRUaHJlYWQ6Ondvcmtlck9yV29ya2xldFRocmVhZHNM
b2NrKCkpOworICAgICAgICBmb3IgKGF1dG8qIHRocmVhZCA6IFdvcmtlck9yV29ya2xldFRocmVh
ZDo6d29ya2VyT3JXb3JrbGV0VGhyZWFkcygpKSB7CiAgICAgICAgICAgICAvLyBJZ25vcmUgd29y
a2VyIHRocmVhZHMgdGhhdCBoYXZlIG5vdCBiZWVuIGZ1bGx5IHN0YXJ0ZWQgeWV0LgogICAgICAg
ICAgICAgaWYgKCF0aHJlYWQtPnRocmVhZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9saW51eC9SZXNvdXJjZVVzYWdlVGhyZWFk
TGludXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9saW51eC9SZXNvdXJjZVVzYWdlVGhyZWFk
TGludXguY3BwCmluZGV4IGEwZDQxODdhNzI5ZDY2OTIwMDc3NTljYTk0NGExM2Y1ZGU0NGM0ZmYu
LmM3ZTczZjBjMWMyNWJiYTA1ZjA2Yjg1MzI1YjVjMzAzZTc3Y2RhNDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvbGludXgvUmVzb3VyY2VVc2FnZVRocmVhZExpbnV4LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2xpbnV4L1Jlc291cmNlVXNhZ2VUaHJlYWRMaW51eC5jcHAK
QEAgLTI0Niw4ICsyNDYsOCBAQCB2b2lkIFJlc291cmNlVXNhZ2VUaHJlYWQ6OnBsYXRmb3JtQ29s
bGVjdENQVURhdGEoSlNDOjpWTSosIFJlc291cmNlVXNhZ2VEYXRhJiBkYQogCiAgICAgSGFzaE1h
cDxwaWRfdCwgU3RyaW5nPiBrbm93bldvcmtlclRocmVhZHM7CiAgICAgewotICAgICAgICBMb2Nr
SG9sZGVyIGxvY2soV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRzTXV0ZXgoKSk7Ci0gICAgICAg
IGZvciAoYXV0byogdGhyZWFkIDogV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRzKGxvY2spKSB7
CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soV29ya2VyT3JXb3JrbGV0VGhyZWFkOjp3
b3JrZXJPcldvcmtsZXRUaHJlYWRzTG9jaygpKTsKKyAgICAgICAgZm9yIChhdXRvKiB0aHJlYWQg
OiBXb3JrZXJPcldvcmtsZXRUaHJlYWQ6Ondvcmtlck9yV29ya2xldFRocmVhZHMoKSkgewogICAg
ICAgICAgICAgLy8gSWdub3JlIHdvcmtlciB0aHJlYWRzIHRoYXQgaGF2ZSBub3QgYmVlbiBmdWxs
eSBzdGFydGVkIHlldC4KICAgICAgICAgICAgIGlmICghdGhyZWFkLT50aHJlYWQoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
RGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNh
dGVkV29ya2VyVGhyZWFkLmNwcAppbmRleCBjMzVlZTY0ODNjMjdmNGZkY2VlNjIwZmFlNjRjZTAz
YmNjMmY1NmU3Li4wMzc2NTc4MTY4NmI3YTdiNTUzYmRkY2RmYzNjZGU5YWY3MDk1NDEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlclRocmVhZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwCkBA
IC01NCw3ICs1NCw3IEBAIFJlZjxXb3JrZXJHbG9iYWxTY29wZT4gRGVkaWNhdGVkV29ya2VyVGhy
ZWFkOjpjcmVhdGVXb3JrZXJHbG9iYWxTY29wZShjb25zdCBXb3JrCiB2b2lkIERlZGljYXRlZFdv
cmtlclRocmVhZDo6cnVuRXZlbnRMb29wKCkKIHsKICAgICAvLyBOb3RpZnkgdGhlIHBhcmVudCBv
YmplY3Qgb2Ygb3VyIGN1cnJlbnQgYWN0aXZlIHN0YXRlIGJlZm9yZSBjYWxsaW5nIHRoZSBzdXBl
cmNsYXNzIHRvIHJ1biB0aGUgZXZlbnQgbG9vcC4KLSAgICBtX3dvcmtlck9iamVjdFByb3h5LnJl
cG9ydFBlbmRpbmdBY3Rpdml0eSh3b3JrZXJHbG9iYWxTY29wZSgpLT5oYXNQZW5kaW5nQWN0aXZp
dHkoKSk7CisgICAgbV93b3JrZXJPYmplY3RQcm94eS5yZXBvcnRQZW5kaW5nQWN0aXZpdHkoZ2xv
YmFsU2NvcGUoKS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpOwogICAgIFdvcmtlclRocmVhZDo6cnVu
RXZlbnRMb29wKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyR2xvYmFsU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2Nv
cGUuaAppbmRleCAyZjVhOTFjMjY2ZWRkN2Y2MDViYjU2YzgzYjJjOTliZmQ2ZjFlMGQ2Li4yZGU4
MGUxNGMyYjYzOGM0NTFjOTMzZjYyODYxOTY3NmFmYjkzZmRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCkBAIC03MSw4ICs3MSw4IEBAIHB1YmxpYzoKIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIElEQkNsaWVudDo6SURCQ29ubmVjdGlv
blByb3h5KiBpZGJDb25uZWN0aW9uUHJveHkoKSBmaW5hbDsKLSAgICB2b2lkIHN1c3BlbmQoKTsK
LSAgICB2b2lkIHJlc3VtZSgpOworICAgIHZvaWQgc3VzcGVuZCgpIGZpbmFsOworICAgIHZvaWQg
cmVzdW1lKCkgZmluYWw7CiAjZW5kaWYKIAogICAgIFdvcmtlckNhY2hlU3RvcmFnZUNvbm5lY3Rp
b24mIGNhY2hlU3RvcmFnZUNvbm5lY3Rpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGUuaAppbmRleCAzNjAwNGJhMmU4NzRhMTU5
YWM4NzU2YTAwYmY0YjAxOTI2ODcxZjlmLi44YTE3ODBmNjg1MGQ5MWQzNTA0MTNhNzU3OTA1ZWVm
MmE4OWE5MTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlck9yV29y
a2xldEdsb2JhbFNjb3BlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJPcldv
cmtsZXRHbG9iYWxTY29wZS5oCkBAIC02MSw2ICs2MSw5IEBAIHB1YmxpYzoKICAgICB1c2luZyBS
ZWZDb3VudGVkOjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDo6ZGVyZWY7CiAKKyAgICB2aXJ0
dWFsIHZvaWQgc3VzcGVuZCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKSB7IH0KKwog
cHJvdGVjdGVkOgogICAgIFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlKFJlZjxKU0M6OlZNPiYm
LCBXb3JrZXJPcldvcmtsZXRUaHJlYWQqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJPcldvcmtsZXRUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJPcldvcmtsZXRUaHJlYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxYjA0ZjIyNzYwOTM4Nzdj
NjlkZTZjZmEyZGNiMjBiMjJiMmI5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlck9yV29ya2xldFRocmVhZC5jcHAKQEAgLTAsMCArMSwyNzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3JrZXJPcldvcmtsZXRUaHJlYWQuaCIKKworI2luY2x1
ZGUgIldvcmtlck9yV29ya2xldFNjcmlwdENvbnRyb2xsZXIuaCIKKworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisjaW5jbHVkZSAiRmxvYXRpbmdQb2ludEVudmlyb25tZW50LmgiCisjZW5kaWYK
KworI2lmIFVTRShHTElCKQorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xvY2smIFdvcmtlck9yV29ya2xldFRocmVhZDo6d29y
a2VyT3JXb3JrbGV0VGhyZWFkc0xvY2soKQoreworICAgIHN0YXRpYyBMb2NrIG11dGV4OworICAg
IHJldHVybiBtdXRleDsKK30KKworSGFzaFNldDxXb3JrZXJPcldvcmtsZXRUaHJlYWQqPiYgV29y
a2VyT3JXb3JrbGV0VGhyZWFkOjp3b3JrZXJPcldvcmtsZXRUaHJlYWRzKCkKK3sKKyAgICBBU1NF
UlQod29ya2VyT3JXb3JrbGV0VGhyZWFkc0xvY2soKS5pc0hlbGQoKSk7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhhc2hTZXQ8V29ya2VyT3JXb3JrbGV0VGhyZWFkKj4+IHdvcmtlck9yV29y
a2xldFRocmVhZHM7CisgICAgcmV0dXJuIHdvcmtlck9yV29ya2xldFRocmVhZHM7Cit9CisKK1dv
cmtlck9yV29ya2xldFRocmVhZDo6V29ya2VyT3JXb3JrbGV0VGhyZWFkKGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllcikKKyAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQoreworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sod29ya2VyT3JXb3JrbGV0VGhyZWFkc0xvY2soKSk7CisgICAgd29y
a2VyT3JXb3JrbGV0VGhyZWFkcygpLmFkZCh0aGlzKTsKK30KKworV29ya2VyT3JXb3JrbGV0VGhy
ZWFkOjp+V29ya2VyT3JXb3JrbGV0VGhyZWFkKCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKHdvcmtlck9yV29ya2xldFRocmVhZHNMb2NrKCkpOworICAgIEFTU0VSVCh3b3JrZXJPcldv
cmtsZXRUaHJlYWRzKCkuY29udGFpbnModGhpcykpOworICAgIHdvcmtlck9yV29ya2xldFRocmVh
ZHMoKS5yZW1vdmUodGhpcyk7Cit9CisKK3ZvaWQgV29ya2VyT3JXb3JrbGV0VGhyZWFkOjpzdGFy
dFJ1bm5pbmdEZWJ1Z2dlclRhc2tzKCkKK3sKKyAgICBBU1NFUlQoIW1fcGF1c2VkRm9yRGVidWdn
ZXIpOworICAgIG1fcGF1c2VkRm9yRGVidWdnZXIgPSB0cnVlOworCisgICAgTWVzc2FnZVF1ZXVl
V2FpdFJlc3VsdCByZXN1bHQ7CisgICAgZG8geworICAgICAgICByZXN1bHQgPSBtX3J1bkxvb3Au
cnVuSW5EZWJ1Z2dlck1vZGUoKm1fZ2xvYmFsU2NvcGUpOworICAgIH0gd2hpbGUgKHJlc3VsdCAh
PSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkICYmIG1fcGF1c2VkRm9yRGVidWdnZXIpOworfQorCit2
b2lkIFdvcmtlck9yV29ya2xldFRocmVhZDo6c3RvcFJ1bm5pbmdEZWJ1Z2dlclRhc2tzKCkKK3sK
KyAgICBtX3BhdXNlZEZvckRlYnVnZ2VyID0gZmFsc2U7Cit9CisKK3ZvaWQgV29ya2VyT3JXb3Jr
bGV0VGhyZWFkOjpydW5FdmVudExvb3AoKQoreworICAgIC8vIERvZXMgbm90IHJldHVybiB1bnRp
bCB0ZXJtaW5hdGVkLgorICAgIG1fcnVuTG9vcC5ydW4obV9nbG9iYWxTY29wZS5nZXQoKSk7Cit9
CisKK3ZvaWQgV29ya2VyT3JXb3JrbGV0VGhyZWFkOjp3b3JrZXJPcldvcmtsZXRUaHJlYWQoKQor
eworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOworCisgICAgLy8gUHJv
cGFnYXRlIHRoZSBtYWluVGhyZWFkJ3MgZmVudiB0byB3b3JrZXJzLgorI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisgICAgRmxvYXRpbmdQb2ludEVudmlyb25tZW50OjpzaW5nbGV0b24oKS5wcm9w
YWdhdGVNYWluVGhyZWFkRW52aXJvbm1lbnQoKTsKKyNlbmRpZgorCisjaWYgVVNFKEdMSUIpCisg
ICAgR1JlZlB0cjxHTWFpbkNvbnRleHQ+IG1haW5Db250ZXh0ID0gYWRvcHRHUmVmKGdfbWFpbl9j
b250ZXh0X25ldygpKTsKKyAgICBnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0KG1h
aW5Db250ZXh0LmdldCgpKTsKKyNlbmRpZgorCisgICAgV29ya2VyT3JXb3JrbGV0U2NyaXB0Q29u
dHJvbGxlciogc2NyaXB0Q29udHJvbGxlcjsKKyAgICB7CisgICAgICAgIC8vIE11dGV4IHByb3Rl
Y3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IGNoYW5nZSBtX2dsb2Jh
bFNjb3BlCisgICAgICAgIC8vIHdoaWxlIFdvcmtlclRocmVhZDo6c3RvcCgpIGlzIGFjY2Vzc2lu
ZyBpdC4gTm90ZSB0aGF0IFdvcmtlclRocmVhZDo6c3RvcCgpIGNhbgorICAgICAgICAvLyBiZSBj
YWxsZWQgYmVmb3JlIHdlJ3ZlIGZpbmlzaGVkIGNyZWF0aW5nIHRoZSBXb3JrZXJHbG9iYWxTY29w
ZS4KKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3RocmVhZENyZWF0aW9uQW5kR2xv
YmFsU2NvcGVMb2NrKTsKKyAgICAgICAgbV9nbG9iYWxTY29wZSA9IGNyZWF0ZUdsb2JhbFNjb3Bl
KCk7CisKKyAgICAgICAgc2NyaXB0Q29udHJvbGxlciA9IG1fZ2xvYmFsU2NvcGUtPnNjcmlwdCgp
OworCisgICAgICAgIGlmIChtX3J1bkxvb3AudGVybWluYXRlZCgpKSB7CisgICAgICAgICAgICAv
LyBUaGUgd29ya2VyIHdhcyB0ZXJtaW5hdGVkIGJlZm9yZSB0aGUgdGhyZWFkIGhhZCBhIGNoYW5j
ZSB0byBydW4uIFNpbmNlIHRoZSBjb250ZXh0IGRpZG4ndCBleGlzdCB5ZXQsCisgICAgICAgICAg
ICAvLyBmb3JiaWRFeGVjdXRpb24oKSBjb3VsZG4ndCBiZSBjYWxsZWQgZnJvbSBzdG9wKCkuCisg
ICAgICAgICAgICBzY3JpcHRDb250cm9sbGVyLT5zY2hlZHVsZUV4ZWN1dGlvblRlcm1pbmF0aW9u
KCk7CisgICAgICAgICAgICBzY3JpcHRDb250cm9sbGVyLT5mb3JiaWRFeGVjdXRpb24oKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChzaG91bGRXYWl0Rm9yV2ViSW5zcGVjdG9yT25TdGFy
dHVwKCkpIHsKKyAgICAgICAgc3RhcnRSdW5uaW5nRGVidWdnZXJUYXNrcygpOworCisgICAgICAg
IC8vIElmIHRoZSB3b3JrZXIgd2FzIHNvbWVob3cgdGVybWluYXRlZCB3aGlsZSBwcm9jZXNzaW5n
IGRlYnVnZ2VyIGNvbW1hbmRzLgorICAgICAgICBpZiAobV9ydW5Mb29wLnRlcm1pbmF0ZWQoKSkK
KyAgICAgICAgICAgIHNjcmlwdENvbnRyb2xsZXItPmZvcmJpZEV4ZWN1dGlvbigpOworICAgIH0K
KworICAgIFN0cmluZyBleGNlcHRpb25NZXNzYWdlOworICAgIGV2YWx1YXRlU2NyaXB0SWZOZWNl
c3NhcnkoZXhjZXB0aW9uTWVzc2FnZSk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtldmFsdWF0
ZUNhbGxiYWNrID0gV1RGTW92ZShtX2V2YWx1YXRlQ2FsbGJhY2spLCBtZXNzYWdlID0gZXhjZXB0
aW9uTWVzc2FnZS5pc29sYXRlZENvcHkoKV0geworICAgICAgICBpZiAoZXZhbHVhdGVDYWxsYmFj
aykKKyAgICAgICAgICAgIGV2YWx1YXRlQ2FsbGJhY2sobWVzc2FnZSk7CisgICAgfSk7CisKKyAg
ICBydW5FdmVudExvb3AoKTsKKworI2lmIFVTRShHTElCKQorICAgIGdfbWFpbl9jb250ZXh0X3Bv
cF90aHJlYWRfZGVmYXVsdChtYWluQ29udGV4dC5nZXQoKSk7CisjZW5kaWYKKworICAgIFJlZlB0
cjxUaHJlYWQ+IHByb3RlY3RvciA9IG1fdGhyZWFkOworCisgICAgQVNTRVJUKG1fZ2xvYmFsU2Nv
cGUtPmhhc09uZVJlZigpKTsKKworICAgIFJlZlB0cjxXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29w
ZT4gd29ya2VyR2xvYmFsU2NvcGVUb0RlbGV0ZTsKKyAgICB7CisgICAgICAgIC8vIE11dGV4IHBy
b3RlY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IGNoYW5nZSBtX2ds
b2JhbFNjb3BlCisgICAgICAgIC8vIHdoaWxlIFdvcmtlclRocmVhZDo6c3RvcCBpcyBhY2Nlc3Np
bmcgaXQuCisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV90aHJlYWRDcmVhdGlvbkFu
ZEdsb2JhbFNjb3BlTG9jayk7CisKKyAgICAgICAgLy8gRGVsYXkgdGhlIGRlc3RydWN0aW9uIG9m
IHRoZSBXb3JrZXJHbG9iYWxTY29wZSBjb250ZXh0IHVudGlsIGFmdGVyIHdlJ3ZlIHVubG9ja2Vk
IHRoZQorICAgICAgICAvLyBtX3RocmVhZENyZWF0aW9uQW5kV29ya2VyR2xvYmFsU2NvcGVNdXRl
eC4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBkZXN0cnVjdGluZyB0aGUKKyAgICAgICAgLy8gY29u
dGV4dCB3aWxsIHRyaWdnZXIgdGhlIG1haW4gdGhyZWFkIHRvIHJhY2UgYWdhaW5zdCB1cyB0byBk
ZWxldGUgdGhlIFdvcmtlclRocmVhZAorICAgICAgICAvLyBvYmplY3QsIGFuZCB0aGUgV29ya2Vy
VGhyZWFkIG9iamVjdCBvd25zIHRoZSBtdXRleCB3ZSBuZWVkIHRvIHVubG9jayBhZnRlciB0aGlz
LgorICAgICAgICB3b3JrZXJHbG9iYWxTY29wZVRvRGVsZXRlID0gc3RkOjpleGNoYW5nZShtX2ds
b2JhbFNjb3BlLCBudWxscHRyKTsKKworICAgICAgICBpZiAobV9zdG9wcGVkQ2FsbGJhY2spCisg
ICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFdURk1vdmUobV9zdG9wcGVkQ2FsbGJhY2spKTsK
KyAgICB9CisKKyAgICAvLyBUaGUgYmVsb3cgYXNzaWdubWVudCB3aWxsIGRlc3Ryb3kgdGhlIGNv
bnRleHQsIHdoaWNoIHdpbGwgaW4gdHVybiBub3RpZnkgbWVzc2FnaW5nIHByb3h5LgorICAgIC8v
IFdlIGNhbm5vdCBsZXQgYW55IG9iamVjdHMgc3Vydml2ZSBwYXN0IHRocmVhZCBleGl0LCBiZWNh
dXNlIG5vIG90aGVyIHRocmVhZCB3aWxsIHJ1biBHQyBvciBvdGhlcndpc2UgZGVzdHJveSB0aGVt
LgorICAgIHdvcmtlckdsb2JhbFNjb3BlVG9EZWxldGUgPSBudWxscHRyOworCisgICAgLy8gQ2xl
YW4gdXAgV2ViQ29yZTo6VGhyZWFkR2xvYmFsRGF0YSBiZWZvcmUgV1RGOjpUaHJlYWQgZ29lcyBh
d2F5IQorICAgIHRocmVhZEdsb2JhbERhdGEoKS5kZXN0cm95KCk7CisKKyAgICAvLyBTZW5kIHRo
ZSBsYXN0IFdvcmtlclRocmVhZCBSZWYgdG8gYmUgRGVyZWYnZWQgb24gdGhlIG1haW4gdGhyZWFk
LgorICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3Rl
ZFRoaXMpXSB7IH0pOworCisgICAgLy8gVGhlIHRocmVhZCBvYmplY3QgbWF5IGJlIGFscmVhZHkg
ZGVzdHJveWVkIGZyb20gbm90aWZpY2F0aW9uIG5vdywgZG9uJ3QgdHJ5IHRvIGFjY2VzcyAidGhp
cyIuCisgICAgcHJvdGVjdG9yLT5kZXRhY2goKTsKK30KKwordm9pZCBXb3JrZXJPcldvcmtsZXRU
aHJlYWQ6OnN0YXJ0KFdURjo6RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBldmFsdWF0
ZUNhbGxiYWNrKQoreworICAgIC8vIE11dGV4IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVu
c3VyZSB0aGF0IG1fdGhyZWFkIGlzIGluaXRpYWxpemVkIHdoZW4gdGhlIHRocmVhZCBzdGFydHMu
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX3RocmVhZENyZWF0aW9uQW5kR2xvYmFsU2Nv
cGVMb2NrKTsKKworICAgIGlmIChtX3RocmVhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9l
dmFsdWF0ZUNhbGxiYWNrID0gV1RGTW92ZShldmFsdWF0ZUNhbGxiYWNrKTsKKworICAgIGF1dG8g
dGhyZWFkID0gY3JlYXRlVGhyZWFkKCk7CisKKyAgICAvLyBGb3JjZSB0aGUgVGhyZWFkIG9iamVj
dCB0byBiZSBpbml0aWFsaXplZCBmdWxseSBiZWZvcmUgc3RvcmluZyBpdCB0byBtX3RocmVhZCAo
YW5kIGJlY29taW5nIHZpc2libGUgdG8gb3RoZXIgdGhyZWFkcykuCisgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKworICAgIG1fdGhyZWFkID0gV1RGTW92ZSh0aHJlYWQpOworfQorCit2b2lk
IFdvcmtlck9yV29ya2xldFRocmVhZDo6c3RvcChGdW5jdGlvbjx2b2lkKCk+JiYgc3RvcHBlZENh
bGxiYWNrKQoreworICAgIC8vIE11dGV4IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3Vy
ZSB0aGF0IG1fd29ya2VyR2xvYmFsU2NvcGUgaXNuJ3QgY2hhbmdlZCBieQorICAgIC8vIFdvcmtl
clRocmVhZDo6d29ya2VyVGhyZWFkKCkgd2hpbGUgd2UncmUgYWNjZXNzaW5nIGl0LiBOb3RlIGFs
c28gdGhhdCBzdG9wKCkgY2FuCisgICAgLy8gYmUgY2FsbGVkIGJlZm9yZSBtX3dvcmtlckdsb2Jh
bFNjb3BlIGlzIGZ1bGx5IGNyZWF0ZWQuCisgICAgYXV0byBsb2NrZXIgPSB0cnlIb2xkTG9jayht
X3RocmVhZENyZWF0aW9uQW5kR2xvYmFsU2NvcGVMb2NrKTsKKyAgICBpZiAoIWxvY2tlcikgewor
ICAgICAgICAvLyBUaGUgdGhyZWFkIGlzIHN0aWxsIHN0YXJ0aW5nLCBzcGluIHRoZSBydW5sb29w
IGFuZCB0cnkgYWdhaW4gdG8gYXZvaWQgZGVhZGxvY2tzIGlmIHRoZSB3b3JrZXIgdGhyZWFkCisg
ICAgICAgIC8vIG5lZWRzIHRvIGludGVyYWN0IHdpdGggdGhlIG1haW4gdGhyZWFkIGR1cmluZyBz
dGFydHVwLgorICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBzdG9wcGVkQ2FsbGJhY2sg
PSBXVEZNb3ZlKHN0b3BwZWRDYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBzdG9w
KFdURk1vdmUoc3RvcHBlZENhbGxiYWNrKSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gSWYgdGhlIHRocmVhZCBpcyBzdXNwZW5kZWQsIHJlc3VtZSBpdCBu
b3cgc28gdGhhdCB3ZSBjYW4gZGlzcGF0Y2ggdGhlIGNsZWFudXAgdGFza3MgYmVsb3cuCisgICAg
aWYgKG1faXNTdXNwZW5kZWQpCisgICAgICAgIHJlc3VtZSgpOworCisgICAgQVNTRVJUKCFtX3N0
b3BwZWRDYWxsYmFjayk7CisgICAgbV9zdG9wcGVkQ2FsbGJhY2sgPSBXVEZNb3ZlKHN0b3BwZWRD
YWxsYmFjayk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCB0YXNrcyBhcmUgYmVpbmcgaGFuZGxlZCBi
eSB0aHJlYWQgZXZlbnQgbG9vcC4gSWYgc2NyaXB0IGV4ZWN1dGlvbiB3ZXJlbid0IGZvcmJpZGRl
biwgYSB3aGlsZSgxKSBsb29wIGluIEpTIGNvdWxkIGtlZXAgdGhlIHRocmVhZCBhbGl2ZSBmb3Jl
dmVyLgorICAgIGlmIChnbG9iYWxTY29wZSgpKSB7CisgICAgICAgIGdsb2JhbFNjb3BlKCktPnNj
cmlwdCgpLT5zY2hlZHVsZUV4ZWN1dGlvblRlcm1pbmF0aW9uKCk7CisKKyAgICAgICAgbV9ydW5M
b29wLnBvc3RUYXNrQW5kVGVybWluYXRlKHsgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzazo6
Q2xlYW51cFRhc2ssIFtdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0ICkgeworICAg
ICAgICAgICAgYXV0byYgZ2xvYmFsU2NvcGUgPSBkb3duY2FzdDxXb3JrZXJPcldvcmtsZXRHbG9i
YWxTY29wZT4oY29udGV4dCk7CisKKyAgICAgICAgICAgIGdsb2JhbFNjb3BlLnByZXBhcmVGb3JE
ZXN0cnVjdGlvbigpOworCisgICAgICAgICAgICAvLyBTdGljayBhIHNodXRkb3duIGNvbW1hbmQg
YXQgdGhlIGVuZCBvZiB0aGUgcXVldWUsIHNvIHRoYXQgd2UgZGVhbAorICAgICAgICAgICAgLy8g
d2l0aCBhbGwgdGhlIGNsZWFudXAgdGFza3MgdGhlIGRhdGFiYXNlcyBwb3N0IGZpcnN0LgorICAg
ICAgICAgICAgZ2xvYmFsU2NvcGUucG9zdFRhc2soeyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrOjpDbGVhbnVwVGFzaywgW10gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBnbG9iYWxTY29wZSA9IGRvd25jYXN0PFdvcmtlck9yV29y
a2xldEdsb2JhbFNjb3BlPihjb250ZXh0KTsKKyAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBz
YWZlIHRvIGNhbGwgY2xlYXJTY3JpcHQgdW50aWwgYWxsIHRoZSBjbGVhbnVwIHRhc2tzIHBvc3Rl
ZCBieSBmdW5jdGlvbnMgaW5pdGlhdGVkIGJ5IFdvcmtlclRocmVhZFNodXRkb3duU3RhcnRUYXNr
IGhhdmUgY29tcGxldGVkLgorICAgICAgICAgICAgICAgIGdsb2JhbFNjb3BlLmNsZWFyU2NyaXB0
KCk7CisgICAgICAgICAgICB9IH0pOworCisgICAgICAgIH0gfSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV9ydW5Mb29wLnRlcm1pbmF0ZSgpOworfQorCit2b2lkIFdvcmtlck9yV29y
a2xldFRocmVhZDo6c3VzcGVuZCgpCit7CisgICAgbV9pc1N1c3BlbmRlZCA9IHRydWU7CisgICAg
bV9ydW5Mb29wLnBvc3RUYXNrKFsmXShTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgeworICAgICAg
ICBpZiAoZ2xvYmFsU2NvcGUoKSkKKyAgICAgICAgICAgIGdsb2JhbFNjb3BlKCktPnN1c3BlbmQo
KTsKKworICAgICAgICBtX3N1c3BlbnNpb25TZW1hcGhvcmUud2FpdCgpOworCisgICAgICAgIGlm
IChnbG9iYWxTY29wZSgpKQorICAgICAgICAgICAgZ2xvYmFsU2NvcGUoKS0+cmVzdW1lKCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV29ya2VyT3JXb3JrbGV0VGhyZWFkOjpyZXN1bWUoKQoreworICAg
IEFTU0VSVChtX2lzU3VzcGVuZGVkKTsKKyAgICBtX2lzU3VzcGVuZGVkID0gZmFsc2U7CisgICAg
bV9zdXNwZW5zaW9uU2VtYXBob3JlLnNpZ25hbCgpOworfQorCit2b2lkIFdvcmtlck9yV29ya2xl
dFRocmVhZDo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5SW5BbGxUaHJlYWRzKCkKK3sKKyAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHdvcmtlck9yV29ya2xldFRocmVhZHNMb2NrKCkpOwor
ICAgIGZvciAoYXV0byogd29ya2VyT3JXb3JrbGV0VGhyZWFkIDogd29ya2VyT3JXb3JrbGV0VGhy
ZWFkcygpKSB7CisgICAgICAgIHdvcmtlck9yV29ya2xldFRocmVhZC0+cnVuTG9vcCgpLnBvc3RU
YXNrKFtdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgeworICAgICAgICAgICAgV1RGOjpyZWxl
YXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnkoKTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlck9yV29ya2xldFRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJPcldv
cmtsZXRUaHJlYWQuaAppbmRleCAzNzgwOTYxYzc5NDk4NTdhMWUyMDVmOGMzMTI5NjJjMDcwYmVh
ZjgxLi5iM2U3OTI0MDlkYzkwYTEyYzVmZjg5ZTc2YjA3ZDM4MTQzZTdiMGEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlck9yV29ya2xldFRocmVhZC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyT3JXb3JrbGV0VGhyZWFkLmgKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNyArMjUsMTIg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJXb3JrZXJSdW5Mb29wLmgiCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3
dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNs
YXNzIFRocmVhZDsKQEAgLTM4LDExICs0Myw1MiBAQCBjbGFzcyBXb3JrZXJSdW5Mb29wOwogCiBj
bGFzcyBXb3JrZXJPcldvcmtsZXRUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
V29ya2VyT3JXb3JrbGV0VGhyZWFkPiB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+V29ya2VyT3JX
b3JrbGV0VGhyZWFkKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgfldvcmtlck9yV29ya2xldFRo
cmVhZCgpOwogCi0gICAgdmlydHVhbCBXVEY6OlRocmVhZCogdGhyZWFkKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCgpID0gMDsKKyAgICBXVEY6OlRocmVh
ZCogdGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWQuZ2V0KCk7IH0KICAgICB2aXJ0dWFs
IFdvcmtlckxvYWRlclByb3h5JiB3b3JrZXJMb2FkZXJQcm94eSgpID0gMDsKKworICAgIFdvcmtl
ck9yV29ya2xldEdsb2JhbFNjb3BlKiBnbG9iYWxTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xv
YmFsU2NvcGUuZ2V0KCk7IH0KKyAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wKCkgeyByZXR1cm4g
bV9ydW5Mb29wOyB9CisKKyAgICB2b2lkIHN0YXJ0KEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5n
Jik+JiYgZXZhbHVhdGVDYWxsYmFjayA9IHsgfSk7CisgICAgdm9pZCBzdG9wKEZ1bmN0aW9uPHZv
aWQoKT4mJiB0ZXJtaW5hdGVkQ2FsbGJhY2sgPSB7IH0pOworCisgICAgdm9pZCBzdGFydFJ1bm5p
bmdEZWJ1Z2dlclRhc2tzKCk7CisgICAgdm9pZCBzdG9wUnVubmluZ0RlYnVnZ2VyVGFza3MoKTsK
KworICAgIHZvaWQgc3VzcGVuZCgpOworICAgIHZvaWQgcmVzdW1lKCk7CisKKyAgICBjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAg
IHN0YXRpYyBIYXNoU2V0PFdvcmtlck9yV29ya2xldFRocmVhZCo+JiB3b3JrZXJPcldvcmtsZXRU
aHJlYWRzKCk7CisgICAgc3RhdGljIExvY2smIHdvcmtlck9yV29ya2xldFRocmVhZHNMb2NrKCk7
CisgICAgc3RhdGljIHZvaWQgcmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5SW5BbGxUaHJlYWRz
KCk7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBXb3JrZXJPcldvcmtsZXRUaHJlYWQoY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyKTsKKyAgICB2b2lkIHdvcmtlck9yV29ya2xldFRocmVhZCgp
OworCisgICAgLy8gRXhlY3V0ZXMgdGhlIGV2ZW50IGxvb3AgZm9yIHRoZSB3b3JrZXIgdGhyZWFk
LiBEZXJpdmVkIGNsYXNzZXMgY2FuIG92ZXJyaWRlIHRvIHBlcmZvcm0gYWN0aW9ucyBiZWZvcmUv
YWZ0ZXIgZW50ZXJpbmcgdGhlIGV2ZW50IGxvb3AuCisgICAgdmlydHVhbCB2b2lkIHJ1bkV2ZW50
TG9vcCgpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgUmVmPFdURjo6VGhyZWFkPiBjcmVhdGVU
aHJlYWQoKSA9IDA7CisgICAgdmlydHVhbCBSZWY8V29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGU+
IGNyZWF0ZUdsb2JhbFNjb3BlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZVNjcmlw
dElmTmVjZXNzYXJ5KFN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRXYWl0Rm9y
V2ViSW5zcGVjdG9yT25TdGFydHVwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIFN0
cmluZyBtX2lkZW50aWZpZXI7CisgICAgTG9jayBtX3RocmVhZENyZWF0aW9uQW5kR2xvYmFsU2Nv
cGVMb2NrOworICAgIFJlZlB0cjxXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZT4gbV9nbG9iYWxT
Y29wZTsKKyAgICBSZWZQdHI8V1RGOjpUaHJlYWQ+IG1fdGhyZWFkOworICAgIFdvcmtlclJ1bkxv
b3AgbV9ydW5Mb29wOworICAgIEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+IG1fZXZhbHVh
dGVDYWxsYmFjazsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fc3RvcHBlZENhbGxiYWNrOworICAg
IEJpbmFyeVNlbWFwaG9yZSBtX3N1c3BlbnNpb25TZW1hcGhvcmU7CisgICAgYm9vbCBtX2lzU3Vz
cGVuZGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcGF1c2VkRm9yRGVidWdnZXIgeyBmYWxzZSB9
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJUaHJlYWQuY3BwCmluZGV4IDk5Yjg4M2ZlMzIzNjY3MTE2NDFmMjhlYmY2Y2M0MGRjYjA4NDFl
ZmQuLjk4NzllODBmNjJjM2FiZmVhOGZlOWVmOTc5NzY3ZTdjYmY2N2JiMTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKQEAgLTMxLDQyICszMSwxNiBAQAogI2luY2x1
ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIlNvY2tldFByb3ZpZGVyLmgiCi0jaW5jbHVkZSAiVGhyZWFkR2xvYmFsRGF0YS5oIgog
I2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCi0jaW5jbHVkZSAiV29ya2VySW5zcGVjdG9y
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8d3RmL0xvY2suaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0jaW5jbHVkZSAiRmxvYXRpbmdQb2ludEVudmlyb25tZW50LmgiCi0jaW5jbHVk
ZSAiV2ViQ29yZVRocmVhZC5oIgotI2VuZGlmCi0KLSNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDx3
dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSGFzaFNldDxXb3JrZXJUaHJlYWQqPiYgV29ya2VyVGhy
ZWFkOjp3b3JrZXJUaHJlYWRzKGNvbnN0IExvY2tIb2xkZXImKQotewotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxIYXNoU2V0PFdvcmtlclRocmVhZCo+PiB3b3JrZXJUaHJlYWRzOwotICAgIHJl
dHVybiB3b3JrZXJUaHJlYWRzOwotfQotCi1Mb2NrJiBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVh
ZHNNdXRleCgpCi17Ci0gICAgc3RhdGljIExvY2sgbXV0ZXg7Ci0gICAgcmV0dXJuIG11dGV4Owot
fQorc3RhdGljIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiB3b3JrZXJUaHJlYWRDb3VudGVyIHsgMCB9
OwogCiB1bnNpZ25lZCBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZENvdW50KCkKIHsKLSAgICBM
b2NrSG9sZGVyIGxvY2sod29ya2VyVGhyZWFkc011dGV4KCkpOwotICAgIHJldHVybiB3b3JrZXJU
aHJlYWRzKGxvY2spLnNpemUoKTsKKyAgICByZXR1cm4gd29ya2VyVGhyZWFkQ291bnRlcjsKIH0K
IAogV29ya2VyUGFyYW1ldGVycyBXb3JrZXJQYXJhbWV0ZXJzOjppc29sYXRlZENvcHkoKSBjb25z
dApAQCAtMTA5LDcgKzgzLDcgQEAgV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6OldvcmtlclRocmVh
ZFN0YXJ0dXBEYXRhKGNvbnN0IFdvcmtlclBhcmFtZXRlcnMmIG90aGVyLAogfQogCiBXb3JrZXJU
aHJlYWQ6OldvcmtlclRocmVhZChjb25zdCBXb3JrZXJQYXJhbWV0ZXJzJiBwYXJhbXMsIGNvbnN0
IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyTG9hZGVyUHJveHkmIHdvcmtlckxvYWRlclByb3h5
LCBXb3JrZXJEZWJ1Z2dlclByb3h5JiB3b3JrZXJEZWJ1Z2dlclByb3h5LCBXb3JrZXJSZXBvcnRp
bmdQcm94eSYgd29ya2VyUmVwb3J0aW5nUHJveHksIFdvcmtlclRocmVhZFN0YXJ0TW9kZSBzdGFy
dE1vZGUsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4sIElEQkNsaWVudDo6SURCQ29u
bmVjdGlvblByb3h5KiBjb25uZWN0aW9uUHJveHksIFNvY2tldFByb3ZpZGVyKiBzb2NrZXRQcm92
aWRlciwgSlNDOjpSdW50aW1lRmxhZ3MgcnVudGltZUZsYWdzKQotICAgIDogbV9pZGVudGlmaWVy
KHBhcmFtcy5pZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpKQorICAgIDogV29ya2VyT3JXb3JrbGV0
VGhyZWFkKHBhcmFtcy5pZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpKQogICAgICwgbV93b3JrZXJM
b2FkZXJQcm94eSh3b3JrZXJMb2FkZXJQcm94eSkKICAgICAsIG1fd29ya2VyRGVidWdnZXJQcm94
eSh3b3JrZXJEZWJ1Z2dlclByb3h5KQogICAgICwgbV93b3JrZXJSZXBvcnRpbmdQcm94eSh3b3Jr
ZXJSZXBvcnRpbmdQcm94eSkKQEAgLTEyMywyMjcgKzk3LDQyIEBAIFdvcmtlclRocmVhZDo6V29y
a2VyVGhyZWFkKGNvbnN0IFdvcmtlclBhcmFtZXRlcnMmIHBhcmFtcywgY29uc3QgU3RyaW5nJiBz
b3VyY2VDCiAjaWYgIUVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFVOVVNFRF9QQVJBTShj
b25uZWN0aW9uUHJveHkpOwogI2VuZGlmCi0KLSAgICBMb2NrSG9sZGVyIGxvY2sod29ya2VyVGhy
ZWFkc011dGV4KCkpOwotICAgIHdvcmtlclRocmVhZHMobG9jaykuYWRkKHRoaXMpOworICAgICsr
d29ya2VyVGhyZWFkQ291bnRlcjsKIH0KIAogV29ya2VyVGhyZWFkOjp+V29ya2VyVGhyZWFkKCkK
IHsKLSAgICBMb2NrSG9sZGVyIGxvY2sod29ya2VyVGhyZWFkc011dGV4KCkpOwotICAgIEFTU0VS
VCh3b3JrZXJUaHJlYWRzKGxvY2spLmNvbnRhaW5zKHRoaXMpKTsKLSAgICB3b3JrZXJUaHJlYWRz
KGxvY2spLnJlbW92ZSh0aGlzKTsKKyAgICBBU1NFUlQod29ya2VyVGhyZWFkQ291bnRlcik7Cisg
ICAgLS13b3JrZXJUaHJlYWRDb3VudGVyOwogfQogCi12b2lkIFdvcmtlclRocmVhZDo6c3RhcnQo
V1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGV2YWx1YXRlQ2FsbGJhY2spCitS
ZWY8VGhyZWFkPiBXb3JrZXJUaHJlYWQ6OmNyZWF0ZVRocmVhZCgpCiB7Ci0gICAgLy8gTXV0ZXgg
cHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgbV90aHJlYWQgaXMgaW5pdGlh
bGl6ZWQgd2hlbiB0aGUgdGhyZWFkIHN0YXJ0cy4KLSAgICBMb2NrSG9sZGVyIGxvY2sobV90aHJl
YWRDcmVhdGlvbkFuZFdvcmtlckdsb2JhbFNjb3BlTXV0ZXgpOwotCi0gICAgaWYgKG1fdGhyZWFk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2V2YWx1YXRlQ2FsbGJhY2sgPSBXVEZNb3ZlKGV2
YWx1YXRlQ2FsbGJhY2spOwotCi0gICAgUmVmPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpjcmVh
dGUoaXNTZXJ2aWNlV29ya2VyVGhyZWFkKCkgPyAiV2ViQ29yZTogU2VydmljZSBXb3JrZXIiIDog
IldlYkNvcmU6IFdvcmtlciIsIFt0aGlzXSB7Ci0gICAgICAgIHdvcmtlclRocmVhZCgpOworICAg
IHJldHVybiBUaHJlYWQ6OmNyZWF0ZShpc1NlcnZpY2VXb3JrZXJUaHJlYWQoKSA/ICJXZWJDb3Jl
OiBTZXJ2aWNlIFdvcmtlciIgOiAiV2ViQ29yZTogV29ya2VyIiwgW3RoaXNdIHsKKyAgICAgICAg
d29ya2VyT3JXb3JrbGV0VGhyZWFkKCk7CiAgICAgfSwgVGhyZWFkVHlwZTo6SmF2YVNjcmlwdCk7
Ci0gICAgLy8gRm9yY2UgdGhlIFRocmVhZCBvYmplY3QgdG8gYmUgaW5pdGlhbGl6ZWQgZnVsbHkg
YmVmb3JlIHN0b3JpbmcgaXQgdG8gbV90aHJlYWQgKGFuZCBiZWNvbWluZyB2aXNpYmxlIHRvIG90
aGVyIHRocmVhZHMpLgotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgbV90aHJlYWQg
PSBXVEZNb3ZlKHRocmVhZCk7CiB9CiAKLXZvaWQgV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQo
KQorUmVmPFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlPiBXb3JrZXJUaHJlYWQ6OmNyZWF0ZUds
b2JhbFNjb3BlKCkKIHsKLSAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsK
LQotICAgIC8vIFByb3BhZ2F0ZSB0aGUgbWFpblRocmVhZCdzIGZlbnYgdG8gd29ya2Vycy4KLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDo6c2lu
Z2xldG9uKCkucHJvcGFnYXRlTWFpblRocmVhZEVudmlyb25tZW50KCk7Ci0jZW5kaWYKLQotI2lm
IFVTRShHTElCKQotICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBtYWluQ29udGV4dCA9IGFkb3B0
R1JlZihnX21haW5fY29udGV4dF9uZXcoKSk7Ci0gICAgZ19tYWluX2NvbnRleHRfcHVzaF90aHJl
YWRfZGVmYXVsdChtYWluQ29udGV4dC5nZXQoKSk7Ci0jZW5kaWYKLQotICAgIFdvcmtlck9yV29y
a2xldFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXI7Ci0gICAgewotICAgICAgICAv
LyBNdXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBj
aGFuZ2UgbV93b3JrZXJHbG9iYWxTY29wZQotICAgICAgICAvLyB3aGlsZSBXb3JrZXJUaHJlYWQ6
OnN0b3AoKSBpcyBhY2Nlc3NpbmcgaXQuIE5vdGUgdGhhdCBXb3JrZXJUaHJlYWQ6OnN0b3AoKSBj
YW4KLSAgICAgICAgLy8gYmUgY2FsbGVkIGJlZm9yZSB3ZSd2ZSBmaW5pc2hlZCBjcmVhdGluZyB0
aGUgV29ya2VyR2xvYmFsU2NvcGUuCi0gICAgICAgIExvY2tIb2xkZXIgbG9jayhtX3RocmVhZENy
ZWF0aW9uQW5kV29ya2VyR2xvYmFsU2NvcGVNdXRleCk7Ci0gICAgICAgIG1fd29ya2VyR2xvYmFs
U2NvcGUgPSBjcmVhdGVXb3JrZXJHbG9iYWxTY29wZShtX3N0YXJ0dXBEYXRhLT5wYXJhbXMsIFdU
Rk1vdmUobV9zdGFydHVwRGF0YS0+b3JpZ2luKSwgV1RGTW92ZShtX3N0YXJ0dXBEYXRhLT50b3BP
cmlnaW4pKTsKLQotICAgICAgICBzY3JpcHRDb250cm9sbGVyID0gbV93b3JrZXJHbG9iYWxTY29w
ZS0+c2NyaXB0KCk7Ci0KLSAgICAgICAgaWYgKG1fcnVuTG9vcC50ZXJtaW5hdGVkKCkpIHsKLSAg
ICAgICAgICAgIC8vIFRoZSB3b3JrZXIgd2FzIHRlcm1pbmF0ZWQgYmVmb3JlIHRoZSB0aHJlYWQg
aGFkIGEgY2hhbmNlIHRvIHJ1bi4gU2luY2UgdGhlIGNvbnRleHQgZGlkbid0IGV4aXN0IHlldCwK
LSAgICAgICAgICAgIC8vIGZvcmJpZEV4ZWN1dGlvbigpIGNvdWxkbid0IGJlIGNhbGxlZCBmcm9t
IHN0b3AoKS4KLSAgICAgICAgICAgIHNjcmlwdENvbnRyb2xsZXItPnNjaGVkdWxlRXhlY3V0aW9u
VGVybWluYXRpb24oKTsKLSAgICAgICAgICAgIHNjcmlwdENvbnRyb2xsZXItPmZvcmJpZEV4ZWN1
dGlvbigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fc3RhcnR1cERhdGEtPnN0YXJ0
TW9kZSA9PSBXb3JrZXJUaHJlYWRTdGFydE1vZGU6OldhaXRGb3JJbnNwZWN0b3IpIHsKLSAgICAg
ICAgc3RhcnRSdW5uaW5nRGVidWdnZXJUYXNrcygpOworICAgIHJldHVybiBjcmVhdGVXb3JrZXJH
bG9iYWxTY29wZShtX3N0YXJ0dXBEYXRhLT5wYXJhbXMsIFdURk1vdmUobV9zdGFydHVwRGF0YS0+
b3JpZ2luKSwgV1RGTW92ZShtX3N0YXJ0dXBEYXRhLT50b3BPcmlnaW4pKTsKK30KIAotICAgICAg
ICAvLyBJZiB0aGUgd29ya2VyIHdhcyBzb21laG93IHRlcm1pbmF0ZWQgd2hpbGUgcHJvY2Vzc2lu
ZyBkZWJ1Z2dlciBjb21tYW5kcy4KLSAgICAgICAgaWYgKG1fcnVuTG9vcC50ZXJtaW5hdGVkKCkp
Ci0gICAgICAgICAgICBzY3JpcHRDb250cm9sbGVyLT5mb3JiaWRFeGVjdXRpb24oKTsKLSAgICB9
Citib29sIFdvcmtlclRocmVhZDo6c2hvdWxkV2FpdEZvcldlYkluc3BlY3Rvck9uU3RhcnR1cCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhcnR1cERhdGEtPnN0YXJ0TW9kZSA9PSBXb3JrZXJU
aHJlYWRTdGFydE1vZGU6OldhaXRGb3JJbnNwZWN0b3I7Cit9CiAKLSAgICBTdHJpbmcgZXhjZXB0
aW9uTWVzc2FnZTsKLSAgICBzY3JpcHRDb250cm9sbGVyLT5ldmFsdWF0ZShTY3JpcHRTb3VyY2VD
b2RlKG1fc3RhcnR1cERhdGEtPnNvdXJjZUNvZGUsIFVSTChtX3N0YXJ0dXBEYXRhLT5wYXJhbXMu
c2NyaXB0VVJMKSksICZleGNlcHRpb25NZXNzYWdlKTsKK3ZvaWQgV29ya2VyVGhyZWFkOjpldmFs
dWF0ZVNjcmlwdElmTmVjZXNzYXJ5KFN0cmluZyYgZXhjZXB0aW9uTWVzc2FnZSkKK3sKKyAgICBn
bG9iYWxTY29wZSgpLT5zY3JpcHQoKS0+ZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZShtX3N0YXJ0
dXBEYXRhLT5zb3VyY2VDb2RlLCBVUkwobV9zdGFydHVwRGF0YS0+cGFyYW1zLnNjcmlwdFVSTCkp
LCAmZXhjZXB0aW9uTWVzc2FnZSk7CiAKICAgICBmaW5pc2hlZEV2YWx1YXRpbmdTY3JpcHQoKTsK
IAotICAgIGNhbGxPbk1haW5UaHJlYWQoW2V2YWx1YXRlQ2FsbGJhY2sgPSBXVEZNb3ZlKG1fZXZh
bHVhdGVDYWxsYmFjayksIG1lc3NhZ2UgPSBleGNlcHRpb25NZXNzYWdlLmlzb2xhdGVkQ29weSgp
XSB7Ci0gICAgICAgIGlmIChldmFsdWF0ZUNhbGxiYWNrKQotICAgICAgICAgICAgZXZhbHVhdGVD
YWxsYmFjayhtZXNzYWdlKTsKLSAgICB9KTsKLQogICAgIC8vIEZyZWUgdGhlIHN0YXJ0dXAgZGF0
YSB0byBjYXVzZSBpdHMgbWVtYmVyIHZhcmlhYmxlIGRlcmVmJ3MgaGFwcGVuIG9uIHRoZSB3b3Jr
ZXIncyB0aHJlYWQgKHNpbmNlCiAgICAgLy8gYWxsIHJlZi9kZXJlZnMgb2YgdGhlc2Ugb2JqZWN0
cyBhcmUgaGFwcGVuaW5nIG9uIHRoZSB0aHJlYWQgYXQgdGhpcyBwb2ludCkuIE5vdGUgdGhhdAog
ICAgIC8vIFdvcmtlclRocmVhZDo6fldvcmtlclRocmVhZCBoYXBwZW5zIG9uIGEgZGlmZmVyZW50
IHRocmVhZCB3aGVyZSBpdCB3YXMgY3JlYXRlZC4KICAgICBtX3N0YXJ0dXBEYXRhID0gbnVsbHB0
cjsKLQotICAgIHJ1bkV2ZW50TG9vcCgpOwotCi0jaWYgVVNFKEdMSUIpCi0gICAgZ19tYWluX2Nv
bnRleHRfcG9wX3RocmVhZF9kZWZhdWx0KG1haW5Db250ZXh0LmdldCgpKTsKLSNlbmRpZgotCi0g
ICAgUmVmUHRyPFRocmVhZD4gcHJvdGVjdG9yID0gbV90aHJlYWQ7Ci0KLSAgICBBU1NFUlQobV93
b3JrZXJHbG9iYWxTY29wZS0+aGFzT25lUmVmKCkpOwotCi0gICAgUmVmUHRyPFdvcmtlckdsb2Jh
bFNjb3BlPiB3b3JrZXJHbG9iYWxTY29wZVRvRGVsZXRlOwotICAgIHsKLSAgICAgICAgLy8gTXV0
ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgY2hhbmdl
IG1fd29ya2VyR2xvYmFsU2NvcGUKLSAgICAgICAgLy8gd2hpbGUgV29ya2VyVGhyZWFkOjpzdG9w
IGlzIGFjY2Vzc2luZyBpdC4KLSAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fdGhyZWFkQ3JlYXRp
b25BbmRXb3JrZXJHbG9iYWxTY29wZU11dGV4KTsKLQotICAgICAgICAvLyBEZWxheSB0aGUgZGVz
dHJ1Y3Rpb24gb2YgdGhlIFdvcmtlckdsb2JhbFNjb3BlIGNvbnRleHQgdW50aWwgYWZ0ZXIgd2Un
dmUgdW5sb2NrZWQgdGhlCi0gICAgICAgIC8vIG1fdGhyZWFkQ3JlYXRpb25BbmRXb3JrZXJHbG9i
YWxTY29wZU11dGV4LiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIGRlc3RydWN0aW5nIHRoZQotICAg
ICAgICAvLyBjb250ZXh0IHdpbGwgdHJpZ2dlciB0aGUgbWFpbiB0aHJlYWQgdG8gcmFjZSBhZ2Fp
bnN0IHVzIHRvIGRlbGV0ZSB0aGUgV29ya2VyVGhyZWFkCi0gICAgICAgIC8vIG9iamVjdCwgYW5k
IHRoZSBXb3JrZXJUaHJlYWQgb2JqZWN0IG93bnMgdGhlIG11dGV4IHdlIG5lZWQgdG8gdW5sb2Nr
IGFmdGVyIHRoaXMuCi0gICAgICAgIHdvcmtlckdsb2JhbFNjb3BlVG9EZWxldGUgPSBXVEZNb3Zl
KG1fd29ya2VyR2xvYmFsU2NvcGUpOwotCi0gICAgICAgIGlmIChtX3N0b3BwZWRDYWxsYmFjaykK
LSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoV1RGTW92ZShtX3N0b3BwZWRDYWxsYmFjaykp
OwotICAgIH0KLQotICAgIC8vIFRoZSBiZWxvdyBhc3NpZ25tZW50IHdpbGwgZGVzdHJveSB0aGUg
Y29udGV4dCwgd2hpY2ggd2lsbCBpbiB0dXJuIG5vdGlmeSBtZXNzYWdpbmcgcHJveHkuCi0gICAg
Ly8gV2UgY2Fubm90IGxldCBhbnkgb2JqZWN0cyBzdXJ2aXZlIHBhc3QgdGhyZWFkIGV4aXQsIGJl
Y2F1c2Ugbm8gb3RoZXIgdGhyZWFkIHdpbGwgcnVuIEdDIG9yIG90aGVyd2lzZSBkZXN0cm95IHRo
ZW0uCi0gICAgd29ya2VyR2xvYmFsU2NvcGVUb0RlbGV0ZSA9IG51bGxwdHI7Ci0KLSAgICAvLyBD
bGVhbiB1cCBXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRhIGJlZm9yZSBXVEY6OlRocmVhZCBnb2Vz
IGF3YXkhCi0gICAgdGhyZWFkR2xvYmFsRGF0YSgpLmRlc3Ryb3koKTsKLQotICAgIC8vIFNlbmQg
dGhlIGxhc3QgV29ya2VyVGhyZWFkIFJlZiB0byBiZSBEZXJlZidlZCBvbiB0aGUgbWFpbiB0aHJl
YWQuCi0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVj
dGVkVGhpcyldIHsgfSk7Ci0KLSAgICAvLyBUaGUgdGhyZWFkIG9iamVjdCBtYXkgYmUgYWxyZWFk
eSBkZXN0cm95ZWQgZnJvbSBub3RpZmljYXRpb24gbm93LCBkb24ndCB0cnkgdG8gYWNjZXNzICJ0
aGlzIi4KLSAgICBwcm90ZWN0b3ItPmRldGFjaCgpOwotfQotCi12b2lkIFdvcmtlclRocmVhZDo6
c3RhcnRSdW5uaW5nRGVidWdnZXJUYXNrcygpCi17Ci0gICAgQVNTRVJUKCFtX3BhdXNlZEZvckRl
YnVnZ2VyKTsKLSAgICBtX3BhdXNlZEZvckRlYnVnZ2VyID0gdHJ1ZTsKLQotICAgIE1lc3NhZ2VR
dWV1ZVdhaXRSZXN1bHQgcmVzdWx0OwotICAgIGRvIHsKLSAgICAgICAgcmVzdWx0ID0gbV9ydW5M
b29wLnJ1bkluRGVidWdnZXJNb2RlKCptX3dvcmtlckdsb2JhbFNjb3BlKTsKLSAgICB9IHdoaWxl
IChyZXN1bHQgIT0gTWVzc2FnZVF1ZXVlVGVybWluYXRlZCAmJiBtX3BhdXNlZEZvckRlYnVnZ2Vy
KTsKLX0KLQotdm9pZCBXb3JrZXJUaHJlYWQ6OnN0b3BSdW5uaW5nRGVidWdnZXJUYXNrcygpCi17
Ci0gICAgbV9wYXVzZWRGb3JEZWJ1Z2dlciA9IGZhbHNlOwotfQotCi12b2lkIFdvcmtlclRocmVh
ZDo6cnVuRXZlbnRMb29wKCkKLXsKLSAgICAvLyBEb2VzIG5vdCByZXR1cm4gdW50aWwgdGVybWlu
YXRlZC4KLSAgICBtX3J1bkxvb3AucnVuKG1fd29ya2VyR2xvYmFsU2NvcGUuZ2V0KCkpOwotfQot
Ci12b2lkIFdvcmtlclRocmVhZDo6c3VzcGVuZCgpCi17Ci0gICAgbV9pc1N1c3BlbmRlZCA9IHRy
dWU7Ci0gICAgcnVuTG9vcCgpLnBvc3RUYXNrKFsmXShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jikg
ewotICAgICAgICBpZiAobV93b3JrZXJHbG9iYWxTY29wZSkKLSAgICAgICAgICAgIG1fd29ya2Vy
R2xvYmFsU2NvcGUtPnN1c3BlbmQoKTsKLQotICAgICAgICBtX3N1c3BlbnNpb25TZW1hcGhvcmUu
d2FpdCgpOwotCi0gICAgICAgIGlmIChtX3dvcmtlckdsb2JhbFNjb3BlKQotICAgICAgICAgICAg
bV93b3JrZXJHbG9iYWxTY29wZS0+cmVzdW1lKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV29ya2Vy
VGhyZWFkOjpyZXN1bWUoKQotewotICAgIEFTU0VSVChtX2lzU3VzcGVuZGVkKTsKLSAgICBtX2lz
U3VzcGVuZGVkID0gZmFsc2U7Ci0gICAgbV9zdXNwZW5zaW9uU2VtYXBob3JlLnNpZ25hbCgpOwot
fQotCi12b2lkIFdvcmtlclRocmVhZDo6c3RvcChXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBzdG9w
cGVkQ2FsbGJhY2spCi17Ci0gICAgLy8gTXV0ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8g
ZW5zdXJlIHRoYXQgbV93b3JrZXJHbG9iYWxTY29wZSBpc24ndCBjaGFuZ2VkIGJ5Ci0gICAgLy8g
V29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKSB3aGlsZSB3ZSdyZSBhY2Nlc3NpbmcgaXQuIE5v
dGUgYWxzbyB0aGF0IHN0b3AoKSBjYW4KLSAgICAvLyBiZSBjYWxsZWQgYmVmb3JlIG1fd29ya2Vy
R2xvYmFsU2NvcGUgaXMgZnVsbHkgY3JlYXRlZC4KLSAgICBhdXRvIGxvY2tlciA9IExvY2tlcjxM
b2NrPjo6dHJ5TG9jayhtX3RocmVhZENyZWF0aW9uQW5kV29ya2VyR2xvYmFsU2NvcGVNdXRleCk7
Ci0gICAgaWYgKCFsb2NrZXIpIHsKLSAgICAgICAgLy8gVGhlIHRocmVhZCBpcyBzdGlsbCBzdGFy
dGluZywgc3BpbiB0aGUgcnVubG9vcCBhbmQgdHJ5IGFnYWluIHRvIGF2b2lkIGRlYWRsb2NrcyBp
ZiB0aGUgd29ya2VyIHRocmVhZAotICAgICAgICAvLyBuZWVkcyB0byBpbnRlcmFjdCB3aXRoIHRo
ZSBtYWluIHRocmVhZCBkdXJpbmcgc3RhcnR1cC4KLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChb
dGhpcywgc3RvcHBlZENhbGxiYWNrID0gV1RGTW92ZShzdG9wcGVkQ2FsbGJhY2spXSgpIG11dGFi
bGUgewotICAgICAgICAgICAgc3RvcChXVEZNb3ZlKHN0b3BwZWRDYWxsYmFjaykpOwotICAgICAg
ICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIElmIHRoZSB0aHJlYWQgaXMg
c3VzcGVuZGVkLCByZXN1bWUgaXQgbm93IHNvIHRoYXQgd2UgY2FuIGRpc3BhdGNoIHRoZSBjbGVh
bnVwIHRhc2tzIGJlbG93LgotICAgIGlmIChtX2lzU3VzcGVuZGVkKQotICAgICAgICByZXN1bWUo
KTsKLQotICAgIEFTU0VSVCghbV9zdG9wcGVkQ2FsbGJhY2spOwotICAgIG1fc3RvcHBlZENhbGxi
YWNrID0gV1RGTW92ZShzdG9wcGVkQ2FsbGJhY2spOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgdGFz
a3MgYXJlIGJlaW5nIGhhbmRsZWQgYnkgdGhyZWFkIGV2ZW50IGxvb3AuIElmIHNjcmlwdCBleGVj
dXRpb24gd2VyZW4ndCBmb3JiaWRkZW4sIGEgd2hpbGUoMSkgbG9vcCBpbiBKUyBjb3VsZCBrZWVw
IHRoZSB0aHJlYWQgYWxpdmUgZm9yZXZlci4KLSAgICBpZiAobV93b3JrZXJHbG9iYWxTY29wZSkg
ewotICAgICAgICBtX3dvcmtlckdsb2JhbFNjb3BlLT5zY3JpcHQoKS0+c2NoZWR1bGVFeGVjdXRp
b25UZXJtaW5hdGlvbigpOwotCi0gICAgICAgIG1fcnVuTG9vcC5wb3N0VGFza0FuZFRlcm1pbmF0
ZSh7IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s6OkNsZWFudXBUYXNrLCBbXSAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCApIHsKLSAgICAgICAgICAgIFdvcmtlckdsb2JhbFNj
b3BlJiB3b3JrZXJHbG9iYWxTY29wZSA9IGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPihjb250
ZXh0KTsKLQotICAgICAgICAgICAgd29ya2VyR2xvYmFsU2NvcGUucHJlcGFyZUZvckRlc3RydWN0
aW9uKCk7Ci0KLSAgICAgICAgICAgIC8vIFN0aWNrIGEgc2h1dGRvd24gY29tbWFuZCBhdCB0aGUg
ZW5kIG9mIHRoZSBxdWV1ZSwgc28gdGhhdCB3ZSBkZWFsCi0gICAgICAgICAgICAvLyB3aXRoIGFs
bCB0aGUgY2xlYW51cCB0YXNrcyB0aGUgZGF0YWJhc2VzIHBvc3QgZmlyc3QuCi0gICAgICAgICAg
ICB3b3JrZXJHbG9iYWxTY29wZS5wb3N0VGFzayh7IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s6OkNsZWFudXBUYXNrLCBbXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewot
ICAgICAgICAgICAgICAgIFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSA9IGRv
d25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAvLyBJ
dCdzIG5vdCBzYWZlIHRvIGNhbGwgY2xlYXJTY3JpcHQgdW50aWwgYWxsIHRoZSBjbGVhbnVwIHRh
c2tzIHBvc3RlZCBieSBmdW5jdGlvbnMgaW5pdGlhdGVkIGJ5IFdvcmtlclRocmVhZFNodXRkb3du
U3RhcnRUYXNrIGhhdmUgY29tcGxldGVkLgotICAgICAgICAgICAgICAgIHdvcmtlckdsb2JhbFNj
b3BlLmNsZWFyU2NyaXB0KCk7Ci0gICAgICAgICAgICB9IH0pOwotCi0gICAgICAgIH0gfSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9ydW5Mb29wLnRlcm1pbmF0ZSgpOwotfQotCi12
b2lkIFdvcmtlclRocmVhZDo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5SW5BbGxUaHJlYWRz
KCkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2sod29ya2VyVGhyZWFkc011dGV4KCkpOwotICAgIGZv
ciAoYXV0byogd29ya2VyVGhyZWFkIDogd29ya2VyVGhyZWFkcyhsb2NrKSkgewotICAgICAgICB3
b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFzayhbXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYpIHsKLSAgICAgICAgICAgIFdURjo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5KCk7Ci0g
ICAgICAgIH0pOwotICAgIH0KIH0KIAogSURCQ2xpZW50OjpJREJDb25uZWN0aW9uUHJveHkqIFdv
cmtlclRocmVhZDo6aWRiQ29ubmVjdGlvblByb3h5KCkKQEAgLTM2MCw0ICsxNDksOSBAQCBTb2Nr
ZXRQcm92aWRlciogV29ya2VyVGhyZWFkOjpzb2NrZXRQcm92aWRlcigpCiAgICAgcmV0dXJuIG1f
c29ja2V0UHJvdmlkZXIuZ2V0KCk7CiB9CiAKK1dvcmtlckdsb2JhbFNjb3BlKiBXb3JrZXJUaHJl
YWQ6Omdsb2JhbFNjb3BlKCkKK3sKKyAgICByZXR1cm4gZG93bmNhc3Q8V29ya2VyR2xvYmFsU2Nv
cGU+KFdvcmtlck9yV29ya2xldFRocmVhZDo6Z2xvYmFsU2NvcGUoKSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oCmluZGV4IDEy
MTRiOTE5ZGEzNGQzMmYyZmNhYzlhMjk4MTJmNmZkNmE4N2ExMjguLjM1OTVjNWQ4N2ZlNGFiYTZl
YmI5MGQ2MTEwMzI3MDBjOTk1YWMxZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJl
YWQuaApAQCAtMjcsMTggKzI3LDEyIEBACiAKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xp
Y3lSZXNwb25zZUhlYWRlcnMuaCIKICNpbmNsdWRlICJXb3JrZXJPcldvcmtsZXRUaHJlYWQuaCIK
LSNpbmNsdWRlICJXb3JrZXJSdW5Mb29wLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUnVu
dGltZUZsYWdzLmg+CiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0jaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBo
b3JlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ29udGVudFNlY3VyaXR5UG9s
aWN5UmVzcG9uc2VIZWFkZXJzOwogY2xhc3MgTm90aWZpY2F0aW9uQ2xpZW50OwogY2xhc3MgU2Vj
dXJpdHlPcmlnaW47CiBjbGFzcyBTb2NrZXRQcm92aWRlcjsKQEAgLTgwLDczICs3NCw0OCBAQCBj
bGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMgV29ya2VyT3JXb3JrbGV0VGhyZWFkIHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5Xb3JrZXJUaHJlYWQoKTsKIAotICAgIHN0YXRpYyBIYXNoU2V0PFdv
cmtlclRocmVhZCo+JiB3b3JrZXJUaHJlYWRzKGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICBzdGF0
aWMgTG9jayYgd29ya2VyVGhyZWFkc011dGV4KCk7Ci0KLSAgICB2b2lkIHN0b3AoV1RGOjpGdW5j
dGlvbjx2b2lkKCk+JiYgdGVybWluYXRlZENhbGxiYWNrKTsKLQotICAgIHZvaWQgc3VzcGVuZCgp
OwotICAgIHZvaWQgcmVzdW1lKCk7Ci0KLSAgICBUaHJlYWQqIHRocmVhZCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fdGhyZWFkLmdldCgpOyB9Ci0gICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCgp
IGZpbmFsIHsgcmV0dXJuIG1fcnVuTG9vcDsgfQogICAgIFdvcmtlckxvYWRlclByb3h5JiB3b3Jr
ZXJMb2FkZXJQcm94eSgpIGZpbmFsIHsgcmV0dXJuIG1fd29ya2VyTG9hZGVyUHJveHk7IH0KICAg
ICBXb3JrZXJEZWJ1Z2dlclByb3h5JiB3b3JrZXJEZWJ1Z2dlclByb3h5KCkgY29uc3QgeyByZXR1
cm4gbV93b3JrZXJEZWJ1Z2dlclByb3h5OyB9CiAgICAgV29ya2VyUmVwb3J0aW5nUHJveHkmIHdv
cmtlclJlcG9ydGluZ1Byb3h5KCkgY29uc3QgeyByZXR1cm4gbV93b3JrZXJSZXBvcnRpbmdQcm94
eTsgfQogCiAgICAgLy8gTnVtYmVyIG9mIGFjdGl2ZSB3b3JrZXIgdGhyZWFkcy4KICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgdW5zaWduZWQgd29ya2VyVGhyZWFkQ291bnQoKTsKLSAgICBzdGF0
aWMgdm9pZCByZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnlJbkFsbFRocmVhZHMoKTsKIAogI2lm
IEVOQUJMRShOT1RJRklDQVRJT05TKQogICAgIE5vdGlmaWNhdGlvbkNsaWVudCogZ2V0Tm90aWZp
Y2F0aW9uQ2xpZW50KCkgeyByZXR1cm4gbV9ub3RpZmljYXRpb25DbGllbnQ7IH0KICAgICB2b2lk
IHNldE5vdGlmaWNhdGlvbkNsaWVudChOb3RpZmljYXRpb25DbGllbnQqIGNsaWVudCkgeyBtX25v
dGlmaWNhdGlvbkNsaWVudCA9IGNsaWVudDsgfQogI2VuZGlmCi0KLSAgICB2b2lkIHN0YXJ0UnVu
bmluZ0RlYnVnZ2VyVGFza3MoKTsKLSAgICB2b2lkIHN0b3BSdW5uaW5nRGVidWdnZXJUYXNrcygp
OwogICAgIAogICAgIEpTQzo6UnVudGltZUZsYWdzIHJ1bnRpbWVGbGFncygpIGNvbnN0IHsgcmV0
dXJuIG1fcnVudGltZUZsYWdzOyB9CiAKLSAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1faWRlbnRpZmllcjsgfQotCiBwcm90ZWN0ZWQ6CiAgICAgV29ya2VyVGhyZWFkKGNv
bnN0IFdvcmtlclBhcmFtZXRlcnMmLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxv
YWRlclByb3h5JiwgV29ya2VyRGVidWdnZXJQcm94eSYsIFdvcmtlclJlcG9ydGluZ1Byb3h5Jiwg
V29ya2VyVGhyZWFkU3RhcnRNb2RlLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luLCBJ
REJDbGllbnQ6OklEQkNvbm5lY3Rpb25Qcm94eSosIFNvY2tldFByb3ZpZGVyKiwgSlNDOjpSdW50
aW1lRmxhZ3MpOwogCiAgICAgLy8gRmFjdG9yeSBtZXRob2QgZm9yIGNyZWF0aW5nIGEgbmV3IHdv
cmtlciBjb250ZXh0IGZvciB0aGUgdGhyZWFkLgogICAgIHZpcnR1YWwgUmVmPFdvcmtlckdsb2Jh
bFNjb3BlPiBjcmVhdGVXb3JrZXJHbG9iYWxTY29wZShjb25zdCBXb3JrZXJQYXJhbWV0ZXJzJiwg
UmVmPFNlY3VyaXR5T3JpZ2luPiYmLCBSZWY8U2VjdXJpdHlPcmlnaW4+JiYgdG9wT3JpZ2luKSA9
IDA7CiAKLSAgICAvLyBFeGVjdXRlcyB0aGUgZXZlbnQgbG9vcCBmb3IgdGhlIHdvcmtlciB0aHJl
YWQuIERlcml2ZWQgY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdG8gcGVyZm9ybSBhY3Rpb25zIGJlZm9y
ZS9hZnRlciBlbnRlcmluZyB0aGUgZXZlbnQgbG9vcC4KLSAgICB2aXJ0dWFsIHZvaWQgcnVuRXZl
bnRMb29wKCk7Ci0KLSAgICBXb3JrZXJHbG9iYWxTY29wZSogd29ya2VyR2xvYmFsU2NvcGUoKSB7
IHJldHVybiBtX3dvcmtlckdsb2JhbFNjb3BlLmdldCgpOyB9CisgICAgV29ya2VyR2xvYmFsU2Nv
cGUqIGdsb2JhbFNjb3BlKCk7CiAKICAgICBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Qcm94eSog
aWRiQ29ubmVjdGlvblByb3h5KCk7CiAgICAgU29ja2V0UHJvdmlkZXIqIHNvY2tldFByb3ZpZGVy
KCk7CiAKLSAgICB2b2lkIHN0YXJ0KEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgZXZh
bHVhdGVDYWxsYmFjayk7Ci0KIHByaXZhdGU6Ci0gICAgdm9pZCB3b3JrZXJUaHJlYWQoKTsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTZXJ2aWNlV29ya2VyVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hlZEV2YWx1YXRpbmdTY3JpcHQoKSB7IH0K
IAotICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7
Ci0gICAgV29ya2VyUnVuTG9vcCBtX3J1bkxvb3A7CisgICAgLy8gV29ya2VyT3JXb3JrbGV0VGhy
ZWFkLgorICAgIFJlZjxXVEY6OlRocmVhZD4gY3JlYXRlVGhyZWFkKCkgZmluYWw7CisgICAgUmVm
PFdvcmtlck9yV29ya2xldEdsb2JhbFNjb3BlPiBjcmVhdGVHbG9iYWxTY29wZSgpIGZpbmFsOwor
ICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJZk5lY2Vzc2FyeShTdHJpbmcmIGV4Y2VwdGlvbk1lc3Nh
Z2UpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkV2FpdEZvcldlYkluc3BlY3Rvck9uU3RhcnR1cCgp
IGNvbnN0IGZpbmFsOworCiAgICAgV29ya2VyTG9hZGVyUHJveHkmIG1fd29ya2VyTG9hZGVyUHJv
eHk7CiAgICAgV29ya2VyRGVidWdnZXJQcm94eSYgbV93b3JrZXJEZWJ1Z2dlclByb3h5OwogICAg
IFdvcmtlclJlcG9ydGluZ1Byb3h5JiBtX3dvcmtlclJlcG9ydGluZ1Byb3h5OwogICAgIEpTQzo6
UnVudGltZUZsYWdzIG1fcnVudGltZUZsYWdzOwotICAgIGJvb2wgbV9wYXVzZWRGb3JEZWJ1Z2dl
ciB7IGZhbHNlIH07Ci0KLSAgICBSZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+IG1fd29ya2VyR2xv
YmFsU2NvcGU7Ci0gICAgTG9jayBtX3RocmVhZENyZWF0aW9uQW5kV29ya2VyR2xvYmFsU2NvcGVN
dXRleDsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXb3JrZXJUaHJlYWRTdGFydHVwRGF0YT4gbV9z
dGFydHVwRGF0YTsKLSAgICAKLSAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+
IG1fZXZhbHVhdGVDYWxsYmFjazsKIAogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQogICAgIE5v
dGlmaWNhdGlvbkNsaWVudCogbV9ub3RpZmljYXRpb25DbGllbnQgeyBudWxscHRyIH07CkBAIC0x
NTYsMTAgKzEyNSw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkNsaWVudDo6SURCQ29ubmVj
dGlvblByb3h5PiBtX2lkYkNvbm5lY3Rpb25Qcm94eTsKICNlbmRpZgogICAgIFJlZlB0cjxTb2Nr
ZXRQcm92aWRlcj4gbV9zb2NrZXRQcm92aWRlcjsKLQotICAgIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBtX3N0b3BwZWRDYWxsYmFjazsKLSAgICBCaW5hcnlTZW1hcGhvcmUgbV9zdXNwZW5zaW9uU2Vt
YXBob3JlOwotICAgIGJvb2wgbV9pc1N1c3BlbmRlZCB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZp
Y2UvY29udGV4dC9TZXJ2aWNlV29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvc2VydmljZS9jb250ZXh0L1NlcnZpY2VXb3JrZXJUaHJlYWQuY3BwCmluZGV4IDBkYWYxYjJj
NGQxNjBjOWM1ZmEwNGYwNDcwMWU5YWZlYWVhZTAwZTcuLmE4NGVhNGU5NzAzMWQwZWE5MDViMzQw
MDk1NjlmM2Y3MzBhMDc0N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vy
dmljZS9jb250ZXh0L1NlcnZpY2VXb3JrZXJUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvc2VydmljZS9jb250ZXh0L1NlcnZpY2VXb3JrZXJUaHJlYWQuY3BwCkBAIC05OSw3
ICs5OSw3IEBAIHZvaWQgU2VydmljZVdvcmtlclRocmVhZDo6cnVuRXZlbnRMb29wKCkKIAogdm9p
ZCBTZXJ2aWNlV29ya2VyVGhyZWFkOjpxdWV1ZVRhc2tUb0ZpcmVGZXRjaEV2ZW50KFJlZjxTZXJ2
aWNlV29ya2VyRmV0Y2g6OkNsaWVudD4mJiBjbGllbnQsIE9wdGlvbmFsPFNlcnZpY2VXb3JrZXJD
bGllbnRJZGVudGlmaWVyPiYmIGNsaWVudElkLCBSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBT
dHJpbmcmJiByZWZlcnJlciwgRmV0Y2hPcHRpb25zJiYgb3B0aW9ucykKIHsKLSAgICBhdXRvIHNl
cnZpY2VXb3JrZXJHbG9iYWxTY29wZSA9IG1ha2VSZWYoZG93bmNhc3Q8U2VydmljZVdvcmtlckds
b2JhbFNjb3BlPigqd29ya2VyR2xvYmFsU2NvcGUoKSkpOworICAgIGF1dG8gc2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlID0gbWFrZVJlZihkb3duY2FzdDxTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU+
KCpnbG9iYWxTY29wZSgpKSk7CiAgICAgc2VydmljZVdvcmtlckdsb2JhbFNjb3BlLT5ldmVudExv
b3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6RE9NTWFuaXB1bGF0aW9uLCBbc2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlLCBjbGllbnQgPSBXVEZNb3ZlKGNsaWVudCksIGNsaWVudElkLCByZXF1ZXN0
ID0gV1RGTW92ZShyZXF1ZXN0KSwgcmVmZXJyZXIgPSBXVEZNb3ZlKHJlZmVycmVyKSwgb3B0aW9u
cyA9IFdURk1vdmUob3B0aW9ucyldKCkgbXV0YWJsZSB7CiAgICAgICAgIFNlcnZpY2VXb3JrZXJG
ZXRjaDo6ZGlzcGF0Y2hGZXRjaEV2ZW50KFdURk1vdmUoY2xpZW50KSwgc2VydmljZVdvcmtlckds
b2JhbFNjb3BlLCBjbGllbnRJZCwgV1RGTW92ZShyZXF1ZXN0KSwgV1RGTW92ZShyZWZlcnJlciks
IFdURk1vdmUob3B0aW9ucykpOwogICAgIH0pOwpAQCAtMTE2LDcgKzExNiw3IEBAIHN0YXRpYyB2
b2lkIGZpcmVNZXNzYWdlRXZlbnQoU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJiBzY29wZSwgTWVz
c2FnZVdpdGhNZXNzYWdlCiAKIHZvaWQgU2VydmljZVdvcmtlclRocmVhZDo6cXVldWVUYXNrVG9Q
b3N0TWVzc2FnZShNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0cyYmIG1lc3NhZ2UsIFNlcnZpY2VXb3Jr
ZXJPckNsaWVudERhdGEmJiBzb3VyY2VEYXRhKQogewotICAgIGF1dG8gc2VydmljZVdvcmtlckds
b2JhbFNjb3BlID0gbWFrZVJlZihkb3duY2FzdDxTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU+KCp3
b3JrZXJHbG9iYWxTY29wZSgpKSk7CisgICAgYXV0byBzZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUg
PSBtYWtlUmVmKGRvd25jYXN0PFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZT4oKmdsb2JhbFNjb3Bl
KCkpKTsKICAgICBzZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUtPmV2ZW50TG9vcCgpLnF1ZXVlVGFz
ayhUYXNrU291cmNlOjpET01NYW5pcHVsYXRpb24sIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRo
aXMpLCBzZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUsIG1lc3NhZ2UgPSBXVEZNb3ZlKG1lc3NhZ2Up
LCBzb3VyY2VEYXRhID0gV1RGTW92ZShzb3VyY2VEYXRhKV0oKSBtdXRhYmxlIHsKICAgICAgICAg
VVJMIHNvdXJjZVVSTDsKICAgICAgICAgRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudFNvdXJjZSBzb3Vy
Y2U7CkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBTZXJ2aWNlV29ya2VyVGhyZWFkOjpxdWV1ZVRh
c2tUb1Bvc3RNZXNzYWdlKE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYgbWVzc2EKIAogdm9pZCBT
ZXJ2aWNlV29ya2VyVGhyZWFkOjpxdWV1ZVRhc2tUb0ZpcmVJbnN0YWxsRXZlbnQoKQogewotICAg
IGF1dG8gc2VydmljZVdvcmtlckdsb2JhbFNjb3BlID0gbWFrZVJlZihkb3duY2FzdDxTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGU+KCp3b3JrZXJHbG9iYWxTY29wZSgpKSk7CisgICAgYXV0byBzZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGUgPSBtYWtlUmVmKGRvd25jYXN0PFNlcnZpY2VXb3JrZXJHbG9i
YWxTY29wZT4oKmdsb2JhbFNjb3BlKCkpKTsKICAgICBzZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUt
PmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpET01NYW5pcHVsYXRpb24sIFt3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVdKCkgbXV0
YWJsZSB7CiAgICAgICAgIFJFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJTZXJ2aWNlV29ya2Vy
VGhyZWFkOjpxdWV1ZVRhc2tUb0ZpcmVJbnN0YWxsRXZlbnQgZmlyaW5nIGV2ZW50IGZvciB3b3Jr
ZXIgJWxsdSIsIHNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS0+dGhyZWFkKCkuaWRlbnRpZmllcigp
LnRvVUludDY0KCkpOwogCkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBTZXJ2aWNlV29ya2VyVGhy
ZWFkOjpxdWV1ZVRhc2tUb0ZpcmVJbnN0YWxsRXZlbnQoKQogCiB2b2lkIFNlcnZpY2VXb3JrZXJU
aHJlYWQ6OnF1ZXVlVGFza1RvRmlyZUFjdGl2YXRlRXZlbnQoKQogewotICAgIGF1dG8gc2Vydmlj
ZVdvcmtlckdsb2JhbFNjb3BlID0gbWFrZVJlZihkb3duY2FzdDxTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGU+KCp3b3JrZXJHbG9iYWxTY29wZSgpKSk7CisgICAgYXV0byBzZXJ2aWNlV29ya2VyR2xv
YmFsU2NvcGUgPSBtYWtlUmVmKGRvd25jYXN0PFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZT4oKmds
b2JhbFNjb3BlKCkpKTsKICAgICBzZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUtPmV2ZW50TG9vcCgp
LnF1ZXVlVGFzayhUYXNrU291cmNlOjpET01NYW5pcHVsYXRpb24sIFt3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKHRoaXMpLCBzZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVdKCkgbXV0YWJsZSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HKFNlcnZpY2VXb3JrZXIsICJTZXJ2aWNlV29ya2VyVGhyZWFkOjpxdWV1
ZVRhc2tUb0ZpcmVBY3RpdmF0ZUV2ZW50IGZpcmluZyBldmVudCBmb3Igd29ya2VyICVsbHUiLCBz
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUtPnRocmVhZCgpLmlkZW50aWZpZXIoKS50b1VJbnQ2NCgp
KTsKIApAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgU2VydmljZVdvcmtlclRocmVhZDo6cXVldWVU
YXNrVG9GaXJlQWN0aXZhdGVFdmVudCgpCiB2b2lkIFNlcnZpY2VXb3JrZXJUaHJlYWQ6OmZpbmlz
aGVkRXZhbHVhdGluZ1NjcmlwdCgpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0g
ICAgbV9kb2VzSGFuZGxlRmV0Y2ggPSB3b3JrZXJHbG9iYWxTY29wZSgpLT5oYXNFdmVudExpc3Rl
bmVycyhldmVudE5hbWVzKCkuZmV0Y2hFdmVudCk7CisgICAgbV9kb2VzSGFuZGxlRmV0Y2ggPSBn
bG9iYWxTY29wZSgpLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuZmV0Y2hFdmVudCk7
CiB9CiAKIHZvaWQgU2VydmljZVdvcmtlclRocmVhZDo6c3RhcnQoRnVuY3Rpb248dm9pZChjb25z
dCBTdHJpbmcmLCBib29sKT4mJiBjYWxsYmFjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtsZXRzL1dvcmtsZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2xldHMvV29ya2xldC5j
cHAKaW5kZXggMzkwOGJkZjNhMjk2YzgxYjZmNGJhOGU4ZTA4ZTNmYzU4MmVlNWUzYS4uNDg3NWM3
YjRkZWQ0NDk3N2I4NGI0ODE0NTI0YjJhYzM5OTdlM2M2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvd29ya2xldHMvV29ya2xldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2xldHMv
V29ya2xldC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJXb3JrbGV0R2xvYmFsU2Nv
cGUuaCIKICNpbmNsdWRlICJXb3JrbGV0R2xvYmFsU2NvcGVQcm94eS5oIgogI2luY2x1ZGUgIldv
cmtsZXRQZW5kaW5nVGFza3MuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JZGVudGlmaWVy
c0ZhY3RvcnkuaD4KICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KICNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC00Miw2ICs0Myw3IEBAIFdURl9NQUtFX0lT
T19BTExPQ0FURURfSU1QTChXb3JrbGV0KTsKIAogV29ya2xldDo6V29ya2xldChEb2N1bWVudCYg
ZG9jdW1lbnQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoJmRvY3VtZW50KQorICAgICwgbV9pZGVu
dGlmaWVyKCJ3b3JrbGV0OiIgKyBJbnNwZWN0b3I6OklkZW50aWZpZXJzRmFjdG9yeTo6Y3JlYXRl
SWRlbnRpZmllcigpKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrbGV0
cy9Xb3JrbGV0LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9Xb3JrbGV0LmgKaW5kZXggNDE2
ODY3NGM3M2IyOTkwOWJhNjI5NjI1NzIxYjM4MDUzZTIyN2JlZS4uZmRiNjYzZDdhMzVhODRmYjc3
MGZmMDExZDg2MTJhZTRjYzIyYzRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2xl
dHMvV29ya2xldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXQuaApAQCAt
NTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCk7CiAKICAgICBj
b25zdCBWZWN0b3I8UmVmPFdvcmtsZXRHbG9iYWxTY29wZVByb3h5Pj4mIHByb3hpZXMoKSBjb25z
dCB7IHJldHVybiBtX3Byb3hpZXM7IH0KKyAgICBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0
IFdvcmtsZXQoRG9jdW1lbnQmKTsKQEAgLTYyLDYgKzYzLDcgQEAgcHJpdmF0ZToKICAgICAvLyBB
Y3RpdmVET01PYmplY3QuCiAgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNv
bnN0IGZpbmFsOwogCisgICAgU3RyaW5nIG1faWRlbnRpZmllcjsKICAgICBWZWN0b3I8UmVmPFdv
cmtsZXRHbG9iYWxTY29wZVByb3h5Pj4gbV9wcm94aWVzOwogICAgIEhhc2hTZXQ8UmVmUHRyPFdv
cmtsZXRQZW5kaW5nVGFza3M+PiBtX3BlbmRpbmdUYXNrc1NldDsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93b3JrbGV0cy9Xb3JrbGV0UGFyYW1ldGVycy5oIGIvU291cmNlL1dlYkNv
cmUvd29ya2xldHMvV29ya2xldFBhcmFtZXRlcnMuaAppbmRleCAzYTRmNGU3Mzc5Y2RiZjExOTE3
MmE4MjZlOWQzYTAyODdmYjIxM2Q4Li5hYWI4ZGRiZDk2OWI5N2Y3NTMzMjRkZDY4Nzc0NzQ5Mzc5
NTQ1OWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrbGV0cy9Xb3JrbGV0UGFyYW1l
dGVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtsZXRzL1dvcmtsZXRQYXJhbWV0ZXJzLmgK
QEAgLTM0LDEzICszNCwxNSBAQCBzdHJ1Y3QgV29ya2xldFBhcmFtZXRlcnMgewogICAgIFVSTCB3
aW5kb3dVUkw7CiAgICAgSlNDOjpSdW50aW1lRmxhZ3MganNSdW50aW1lRmxhZ3M7CiAgICAgZmxv
YXQgc2FtcGxlUmF0ZTsKKyAgICBTdHJpbmcgaWRlbnRpZmllcjsKIAogICAgIFdvcmtsZXRQYXJh
bWV0ZXJzIGlzb2xhdGVkQ29weSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gewogICAg
ICAgICAgICAgd2luZG93VVJMLmlzb2xhdGVkQ29weSgpLAogICAgICAgICAgICAganNSdW50aW1l
RmxhZ3MsCi0gICAgICAgICAgICBzYW1wbGVSYXRlCisgICAgICAgICAgICBzYW1wbGVSYXRlLAor
ICAgICAgICAgICAgaWRlbnRpZmllci5pc29sYXRlZENvcHkoKQogICAgICAgICB9OwogICAgIH0K
IH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>