<?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>155285</bug_id>
          
          <creation_ts>2016-03-09 19:11:17 -0800</creation_ts>
          <short_desc>Extract EventPath.h/cpp out of EventDispatcher.cpp</short_desc>
          <delta_ts>2016-03-09 21:28:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</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>
          
          <blocked>153538</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1172957</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-03-09 19:11:17 -0800</bug_when>
    <thetext>Refactor EventPath.h/cpp out of EventDispatcher.cpp to add the support for event.deepPath.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172962</commentid>
    <comment_count>1</comment_count>
      <attachid>273529</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-03-09 19:37:18 -0800</bug_when>
    <thetext>Created attachment 273529
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172966</commentid>
    <comment_count>2</comment_count>
      <attachid>273529</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-09 19:51:40 -0800</bug_when>
    <thetext>Comment on attachment 273529
Cleanup

r=me but please fix other ports before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172967</commentid>
    <comment_count>3</comment_count>
      <attachid>273531</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-03-09 19:56:01 -0800</bug_when>
    <thetext>Created attachment 273531
GTK build fix attempt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172968</commentid>
    <comment_count>4</comment_count>
      <attachid>273532</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-03-09 19:59:28 -0800</bug_when>
    <thetext>Created attachment 273532
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172969</commentid>
    <comment_count>5</comment_count>
      <attachid>273532</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-03-09 19:59:42 -0800</bug_when>
    <thetext>Comment on attachment 273532
Patch for landing

Wait for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172997</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-03-09 21:26:54 -0800</bug_when>
    <thetext>Committed r197924: &lt;http://trac.webkit.org/changeset/197924&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273529</attachid>
            <date>2016-03-09 19:37:18 -0800</date>
            <delta_ts>2016-03-09 19:55:57 -0800</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-155285-20160309193705.patch</filename>
            <type>text/plain</type>
            <size>42390</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzkxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE2LTAzLTA5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEV4dHJhY3QgRXZlbnRQYXRoLmgv
Y3BwIG91dCBvZiBFdmVudERpc3BhdGNoZXIuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUyODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBFeHRyYWN0ZWQgRXZlbnRQYXRoLmgvY3BwIG91dCBvZiBF
dmVudERpc3BhdGNoZXIuY3BwIHRvIGFkZCB0aGUgc3VwcG9ydCBmb3IgRXZlbnQuZGVlcFBhdGgo
KQorICAgICAgICBpbiB3ZWJraXQub3JnL2IvMTUzNTM4LiBUaGUgbmV3IGZpbGUgZGVmaW5lcyBt
ZW1iZXIgZnVuY3Rpb25zIG9mIEV2ZW50UGF0aCBhbmQgUmVsYXRlZE5vZGVSZXRhcmdldGVyLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9ET01BbGxJbk9uZS5jcHA6CisgICAgICAg
ICogZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UGF0aCk6IE1v
dmVkIHRvIEV2ZW50UGF0aC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpldmVudFRhcmdldFJlc3Bl
Y3RpbmdUYXJnZXRSdWxlcyk6IE1vdmVkIHRvIEV2ZW50UGF0aC5oLgorICAgICAgICAoV2ViQ29y
ZTo6c2hvdWxkRXZlbnRDcm9zc1NoYWRvd0JvdW5kYXJ5KTogTW92ZWQgdG8gRXZlbnRQYXRoLmNw
cC4KKyAgICAgICAgKFdlYkNvcmU6Om5vZGVPckhvc3RJZlBzZXVkb0VsZW1lbnQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbGF0ZWROb2RlUmV0YXJnZXRlcik6IE1vdmVkIHRvIEV2ZW50
UGF0aC5jcHAuCisgICAgICAgICogZG9tL0V2ZW50UGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6c2hvdWxkRXZlbnRDcm9zc1NoYWRvd0JvdW5kYXJ5KTogTW92ZWQgZnJvbSBFdmVu
dERpc3BhdGNoZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6bm9kZU9ySG9zdElmUHNldWRvRWxl
bWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRQYXRoOjpFdmVudFBhdGgpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbGF0ZWROb2RlUmV0YXJnZXRlcik6IERpdHRvLgor
ICAgICAgICAqIGRvbS9FdmVudFBhdGguaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVu
dFBhdGg6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRQYXRoOjpzaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50UGF0aDo6Y29udGV4dEF0KToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50UGF0aDo6bGFzdENvbnRleHRJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dFBhdGg6OmV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKTogTW92ZWQgZnJvbSBFdmVu
dERpc3BhdGNoZXIuY3BwLgorCiAyMDE2LTAzLTA5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIGRlZmluZUVsZW1lbnQgc2hvdWxkIHVwZ3JhZGUgZXhpc3Rpbmcg
dW5yZXNvbHZlZCBjdXN0b20gZWxlbWVudHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAxOTc5MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTQ0OSw2ICsxNDQ5LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9F
dmVudERpc3BhdGNoZXIuY3BwCiAgICAgZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCiAgICAgZG9t
L0V2ZW50TmFtZXMuY3BwCisgICAgZG9tL0V2ZW50UGF0aC5jcHAKICAgICBkb20vRXZlbnRUYXJn
ZXQuY3BwCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCiAgICAgZG9tL0V4Y2VwdGlvbkNvZGVQ
bGFjZWhvbGRlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NzkxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDAz
Niw2ICs0MDM2LDggQEAKIAkJOUI2OUQzQjgxQjk5MTAwNzAwRTM1MTJCIC8qIEpTSFRNTFNsb3RF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCNjlEM0I2MUI5OTEwMDcwMEUzNTEyQiAvKiBKU0hUTUxTbG90RWxlbWVudC5jcHAgKi87IH07
CiAJCTlCNjlEM0I5MUI5OTEwMDcwMEUzNTEyQiAvKiBKU0hUTUxTbG90RWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI2OUQzQjcxQjk5MTAw
NzAwRTM1MTJCIC8qIEpTSFRNTFNsb3RFbGVtZW50LmggKi87IH07CiAJCTlCNkM0MTUzMTM0NDk0
OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjZDNDE1MjEzNDQ5NDkwMDAwODVCNjIgLyogU3Ry
aW5nV2l0aERpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTlCNzE0RTIwMUM5MTE2NjkwMEFDMEU5MiAvKiBFdmVudFBhdGguY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI3MTRFMUUxQzkx
MTY2OTAwQUMwRTkyIC8qIEV2ZW50UGF0aC5jcHAgKi87IH07CisJCTlCNzE0RTIxMUM5MTE2Njkw
MEFDMEU5MiAvKiBFdmVudFBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDlCNzE0RTFGMUM5MTE2NjkwMEFDMEU5MiAvKiBFdmVudFBhdGguaCAqLzsg
fTsKIAkJOUJBMjczRjQxNzIyMDZCQjAwOTdDRTQ3IC8qIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRD
YWNoZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
QTI3M0YzMTcyMjA2QkIwMDk3Q0U0NyAvKiBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmgg
Ki87IH07CiAJCTlCQUI2QzZDMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQUI2QzZBMTI1NTA2
MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk5QkFCNkM2RDEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGlu
Z1N0eWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCQUI2QzZCMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuY3BwICovOyB9OwpAQCAt
MTE3MzgsNiArMTE3NDAsOCBAQAogCQk5QjZCQzk2MDFCOTc1OTY2MDA1QUUxRjAgLyogSlNTaGFk
b3dSb290LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2hhZG93
Um9vdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNkJDOTYxMUI5NzU5NjYw
MDVBRTFGMCAvKiBKU1NoYWRvd1Jvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNTaGFkb3dSb290Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNkM0MTUy
MTM0NDk0OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1dpdGhEaXJlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOUI3MTRFMUUxQzkxMTY2OTAwQUMwRTkyIC8qIEV2ZW50UGF0aC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudFBhdGguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjcxNEUxRjFDOTExNjY5MDBBQzBFOTIgLyogRXZl
bnRQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50UGF0aC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkEyNzNGMzE3MjIwNkJCMDA5N0NFNDcgLyog
TG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTlCQUI2QzZBMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ1N0eWxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQUI2QzZCMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5n
U3R5bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRWRpdGluZ1N0
eWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2ODI4LDcgKzE2ODMyLDcg
QEAKIAkJCQk0MUY1NEY3RDFDNTBDNEY2MDAzMzg0ODggLyogRmV0Y2hCb2R5LmNwcCAqLywKIAkJ
CQk0MUY1NEY3RTFDNTBDNEY2MDAzMzg0ODggLyogRmV0Y2hCb2R5LmggKi8sCiAJCQkJNDFGNTRG
N0YxQzUwQzRGNjAwMzM4NDg4IC8qIEZldGNoQm9keS5pZGwgKi8sCi0gCQkJCTQxNDdFMkIyMUM4
ODMzN0YwMEE3RTcxNSAvKiBGZXRjaEJvZHlPd25lci5oICovLAorCQkJCTQxNDdFMkIyMUM4ODMz
N0YwMEE3RTcxNSAvKiBGZXRjaEJvZHlPd25lci5oICovLAogCQkJCTQxRjU0RjgyMUM1MEM0RjYw
MDMzODQ4OCAvKiBGZXRjaEhlYWRlcnMuY3BwICovLAogCQkJCTQxRjU0RjgzMUM1MEM0RjYwMDMz
ODQ4OCAvKiBGZXRjaEhlYWRlcnMuaCAqLywKIAkJCQk0MUY1NEY4NDFDNTBDNEY2MDAzMzg0ODgg
LyogRmV0Y2hIZWFkZXJzLmlkbCAqLywKQEAgLTI0MzQ0LDYgKzI0MzQ4LDggQEAKIAkJCQk5Mzk4
ODVDMTA4QjdFM0QxMDBFNzA3QzQgLyogRXZlbnROYW1lcy5jcHAgKi8sCiAJCQkJOTM5ODg1QzIw
OEI3RTNEMTAwRTcwN0M0IC8qIEV2ZW50TmFtZXMuaCAqLywKIAkJCQlCQzlBNjE0MjE0Njg1OUQ5
MDA2MDU3RkQgLyogRXZlbnROYW1lcy5pbiAqLywKKwkJCQk5QjcxNEUxRTFDOTExNjY5MDBBQzBF
OTIgLyogRXZlbnRQYXRoLmNwcCAqLywKKwkJCQk5QjcxNEUxRjFDOTExNjY5MDBBQzBFOTIgLyog
RXZlbnRQYXRoLmggKi8sCiAJCQkJOEY2NzU2MTkxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVl
dWUuaCAqLywKIAkJCQlDRTVDQjFCMzE0RURBQjZGMDBCQjI3OTUgLyogRXZlbnRTZW5kZXIuaCAq
LywKIAkJCQlFMTJFREJFOTBCMzA4RTBCMDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuY3BwICovLApA
QCAtMjc2MTksNiArMjc2MjUsNyBAQAogCQkJCUJDQTg0NkQ3MERDNjdBMzUwMDI2QzMwOSAvKiBS
ZW5kZXJSZXBsaWNhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc5RkFFRTEwOUFFMzc1MDBERUQ2
NTUgLyogUmVuZGVyUnVieS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3OUZBRjAxMDlBRTM3NTAw
REVENjU1IC8qIFJlbmRlclJ1YnlCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjcxNEUyMTFD
OTExNjY5MDBBQzBFOTIgLyogRXZlbnRQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc5RkFG
MjEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVJ1bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTQ3OUZBRjQxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlUZXh0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzNCRTk5NDBFOUMxQzdDMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyLmggaW4g
SGVhZGVycyAqLywKQEAgLTI5NDA2LDYgKzI5NDEzLDcgQEAKIAkJCQk1OUE4RjFENDExQTY5NTA4
MDAxQUMzNEEgLyogRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTU5RDFDMTA0MTFFQjVEQ0YwMEI2MzhDOCAvKiBEZXZpY2VPcmllbnRhdGlvbkRhdGEu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTlBODVFQTIxMTlENjhEOTAwREVGMUVGIC8qIERldmlj
ZU9yaWVudGF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUI3MTRFMjAxQzkxMTY2
OTAwQUMwRTkyIC8qIEV2ZW50UGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNjc3MjVGQzFB
NUIzQUQ5MDAzQzI0REQgLyogREZBLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDOUE3QTc1MUFB
MEY2RUEwMDk1OEFDRiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDOUE3QTc2MUFBMEY2RUQwMDk1OEFDRiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCShyZXZp
c2lvbiAxOTc5MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmNw
cCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyTWFwLmNwcCIKICNpbmNsdWRlICJFdmVudE5hbWVz
LmNwcCIKKyNpbmNsdWRlICJFdmVudFBhdGguY3BwIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmNw
cCIKICNpbmNsdWRlICJFeGNlcHRpb25CYXNlLmNwcCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
UGxhY2Vob2xkZXIuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5j
cHAJKHJldmlzaW9uIDE5NzkxNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNo
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNyArMjcsMTMgQEAKICNpbmNsdWRlICJFdmVu
dERpc3BhdGNoZXIuaCIKIAogI2luY2x1ZGUgIkV2ZW50Q29udGV4dC5oIgotI2luY2x1ZGUgIkZv
Y3VzRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudFBhdGguaCIKICNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxl
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZl
bnQuaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSAiU2NvcGVkRXZlbnRR
dWV1ZS5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgot
I2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKICNpbmNsdWRlICJUb3VjaEV2ZW50LmgiCiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKQEAgLTc3LDUxICs3MywxMCBAQCBib29sIFdp
bmRvd0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWNsYXNzIEV2ZW50UGF0aCB7Ci1wdWJsaWM6Ci0gICAgRXZlbnRQYXRoKE5vZGUmIG9yaWdpbiwg
RXZlbnQmKTsKLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5pc0Vt
cHR5KCk7IH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5zaXplKCk7
IH0KLSAgICBjb25zdCBFdmVudENvbnRleHQmIGNvbnRleHRBdChzaXplX3QgaSkgY29uc3QgeyBy
ZXR1cm4gKm1fcGF0aFtpXTsgfQotICAgIEV2ZW50Q29udGV4dCYgY29udGV4dEF0KHNpemVfdCBp
KSB7IHJldHVybiAqbV9wYXRoW2ldOyB9Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAg
IHZvaWQgcmV0YXJnZXRUb3VjaExpc3RzKGNvbnN0IFRvdWNoRXZlbnQmKTsKLSNlbmRpZgotICAg
IHZvaWQgc2V0UmVsYXRlZFRhcmdldChOb2RlJiBvcmlnaW4sIEV2ZW50VGFyZ2V0Jik7Ci0KLSAg
ICBib29sIGhhc0V2ZW50TGlzdGVuZXJzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBj
b25zdDsKLQotICAgIEV2ZW50Q29udGV4dCogbGFzdENvbnRleHRJZkV4aXN0cygpIHsgcmV0dXJu
IG1fcGF0aC5pc0VtcHR5KCkgPyBudWxscHRyIDogbV9wYXRoLmxhc3QoKS5nZXQoKTsgfQotCi1w
cml2YXRlOgotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZXRhcmdldFRvdWNo
KFRvdWNoRXZlbnRDb250ZXh0OjpUb3VjaExpc3RUeXBlLCBjb25zdCBUb3VjaCYpOwotI2VuZGlm
Ci0KLSAgICBFdmVudCYgbV9ldmVudDsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV2ZW50
Q29udGV4dD4sIDMyPiBtX3BhdGg7Ci19OwotCi1pbmxpbmUgRXZlbnRUYXJnZXQqIGV2ZW50VGFy
Z2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKE5vZGUmIHJlZmVyZW5jZU5vZGUpCi17Ci0gICAgaWYg
KGlzPFBzZXVkb0VsZW1lbnQ+KHJlZmVyZW5jZU5vZGUpKQotICAgICAgICByZXR1cm4gZG93bmNh
c3Q8UHNldWRvRWxlbWVudD4ocmVmZXJlbmNlTm9kZSkuaG9zdEVsZW1lbnQoKTsKLQotICAgIC8v
IEV2ZW50cyBzZW50IHRvIGVsZW1lbnRzIGluc2lkZSBhbiBTVkcgdXNlIGVsZW1lbnQncyBzaGFk
b3cgdHJlZSBnbyB0byB0aGUgdXNlIGVsZW1lbnQuCi0gICAgaWYgKGlzPFNWR0VsZW1lbnQ+KHJl
ZmVyZW5jZU5vZGUpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB1c2VFbGVtZW50ID0gZG93bmNhc3Q8
U1ZHRWxlbWVudD4ocmVmZXJlbmNlTm9kZSkuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiB1c2VFbGVtZW50OwotICAgIH0KLQotICAgIHJldHVybiAmcmVmZXJl
bmNlTm9kZTsKLX0KLQogdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQo
Tm9kZSYgbm9kZSwgRXZlbnQmIGV2ZW50KQogewogICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSB0
YXJnZXQgaGVyZSBiZWNhdXNlIGl0IGNhbiBnbyBhd2F5IGJ5IHRoZSB0aW1lIHdlIGFjdHVhbGx5
IGZpcmUgdGhlIGV2ZW50LgotICAgIGV2ZW50LnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3Rp
bmdUYXJnZXRSdWxlcyhub2RlKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KEV2ZW50UGF0aDo6ZXZl
bnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMobm9kZSkpOwogICAgIFNjb3BlZEV2ZW50UXVl
dWU6OnNpbmdsZXRvbigpLmVucXVldWVFdmVudChldmVudCk7CiB9CiAKQEAgLTIwOSw3ICsxNjQs
NyBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlCiAKICAgICBDaGls
ZE5vZGVzTGF6eVNuYXBzaG90Ojp0YWtlQ2hpbGROb2Rlc0xhenlTbmFwc2hvdCgpOwogCi0gICAg
RXZlbnRUYXJnZXQqIHRhcmdldCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpu
b2RlKTsKKyAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gRXZlbnRQYXRoOjpldmVudFRhcmdldFJl
c3BlY3RpbmdUYXJnZXRSdWxlcygqbm9kZSk7CiAgICAgZXZlbnQuc2V0VGFyZ2V0KHRhcmdldCk7
CiAgICAgaWYgKCFldmVudC50YXJnZXQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMjUs
NyArMTgwLDcgQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZQogICAg
IGlmICghZXZlbnQucHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgIWV2ZW50UGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgIGRpc3BhdGNoRXZlbnRJbkRPTShldmVudCwgZXZlbnRQYXRoLCB3aW5kb3dFdmVu
dENvbnRleHQpOwogCi0gICAgZXZlbnQuc2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1Rh
cmdldFJ1bGVzKCpub2RlKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KEV2ZW50UGF0aDo6ZXZlbnRU
YXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoKm5vZGUpKTsKICAgICBldmVudC5zZXRDdXJyZW50
VGFyZ2V0KG51bGxwdHIpOwogICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoMCk7CiAKQEAgLTI0Niwz
MjUgKzIwMSw0IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUKICAg
ICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBi
b29sIHNob3VsZEV2ZW50Q3Jvc3NTaGFkb3dCb3VuZGFyeShFdmVudCYgZXZlbnQsIFNoYWRvd1Jv
b3QmIHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0JiB0YXJnZXQpCi17Ci0gICAgTm9kZSogdGFyZ2V0
Tm9kZSA9IHRhcmdldC50b05vZGUoKTsKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIEVO
QUJMRShWSURFTykKLSAgICAvLyBWaWRlby1vbmx5IGZ1bGwgc2NyZWVuIGlzIGEgbW9kZSB3aGVy
ZSB3ZSB1c2UgdGhlIHNoYWRvdyBET00gYXMgYW4gaW1wbGVtZW50YXRpb24KLSAgICAvLyBkZXRh
aWwgdGhhdCBzaG91bGQgbm90IGJlIGRldGVjdGFibGUgYnkgdGhlIHdlYiBjb250ZW50LgotICAg
IGlmICh0YXJnZXROb2RlKSB7Ci0gICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gdGFyZ2V0
Tm9kZS0+ZG9jdW1lbnQoKS53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkgewotICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIGFzc3VtZSB0aGF0IGlmIHRoZSBmdWxsIHNjcmVlbiBlbGVt
ZW50IGlzIGEgbWVkaWEgZWxlbWVudCB0aGF0IGl0J3MKLSAgICAgICAgICAgIC8vIHRoZSB2aWRl
by1vbmx5IGZ1bGwgc2NyZWVuLiBCb3RoIGhlcmUgYW5kIGVsc2V3aGVyZS4gQnV0IHRoYXQgaXMg
cHJvYmFibHkgd3JvbmcuCi0gICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNNZWRpYUVsZW1lbnQo
KSAmJiBzaGFkb3dSb290Lmhvc3QoKSA9PSBlbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gV2ViS2l0IG5ldmVy
IGFsbG93ZWQgc2VsZWN0c3RhcnQgZXZlbnQgdG8gY3Jvc3MgdGhlIHRoZSBzaGFkb3cgRE9NIGJv
dW5kYXJ5LgotICAgIC8vIENoYW5naW5nIHRoaXMgYnJlYWtzIGV4aXN0aW5nIHNpdGVzLgotICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIxOTUgZm9y
IGRldGFpbHMuCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUgPSBldmVudC50eXBl
KCk7Ci0gICAgYm9vbCB0YXJnZXRJc0luU2hhZG93Um9vdCA9IHRhcmdldE5vZGUgJiYgJnRhcmdl
dE5vZGUtPnRyZWVTY29wZSgpLnJvb3ROb2RlKCkgPT0gJnNoYWRvd1Jvb3Q7Ci0gICAgcmV0dXJu
ICF0YXJnZXRJc0luU2hhZG93Um9vdAotICAgICAgICB8fCAhKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkuYWJvcnRFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMo
KS5jaGFuZ2VFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5l
cnJvckV2ZW50Ci0gICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmxvYWRF
dmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNldEV2ZW50
Ci0gICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50Ci0g
ICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50Ci0gICAg
ICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50Ci0gICAgICAg
ICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZlbnQpOwotfQot
Ci1zdGF0aWMgTm9kZSogbm9kZU9ySG9zdElmUHNldWRvRWxlbWVudChOb2RlKiBub2RlKQotewot
ICAgIHJldHVybiBpczxQc2V1ZG9FbGVtZW50Pigqbm9kZSkgPyBkb3duY2FzdDxQc2V1ZG9FbGVt
ZW50Pigqbm9kZSkuaG9zdEVsZW1lbnQoKSA6IG5vZGU7Ci19Ci0KLUV2ZW50UGF0aDo6RXZlbnRQ
YXRoKE5vZGUmIG9yaWdpbmFsVGFyZ2V0LCBFdmVudCYgZXZlbnQpCi0gICAgOiBtX2V2ZW50KGV2
ZW50KQotewotI2lmIEVOQUJMRShTSEFET1dfRE9NKSB8fCBFTkFCTEUoREVUQUlMU19FTEVNRU5U
KQotICAgIFZlY3RvcjxFdmVudFRhcmdldCosIDE2PiB0YXJnZXRTdGFjazsKLSNlbmRpZgotCi0g
ICAgYm9vbCBpc01vdXNlT3JGb2N1c0V2ZW50ID0gZXZlbnQuaXNNb3VzZUV2ZW50KCkgfHwgZXZl
bnQuaXNGb2N1c0V2ZW50KCk7Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBib29sIGlz
VG91Y2hFdmVudCA9IGV2ZW50LmlzVG91Y2hFdmVudCgpOwotI2VuZGlmCi0gICAgRXZlbnRUYXJn
ZXQqIHRhcmdldCA9IG51bGxwdHI7Ci0KLSAgICBOb2RlKiBub2RlID0gbm9kZU9ySG9zdElmUHNl
dWRvRWxlbWVudCgmb3JpZ2luYWxUYXJnZXQpOwotICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAg
IGlmICghdGFyZ2V0KQotICAgICAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXRSZXNwZWN0aW5n
VGFyZ2V0UnVsZXMoKm5vZGUpOwotICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQ7Ci0gICAg
ICAgIGZvciAoOyBub2RlOyBub2RlID0gcGFyZW50KSB7Ci0gICAgICAgICAgICBFdmVudFRhcmdl
dCogY3VycmVudFRhcmdldCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2Rl
KTsKLSAgICAgICAgICAgIGlmIChpc01vdXNlT3JGb2N1c0V2ZW50KQotICAgICAgICAgICAgICAg
IG1fcGF0aC5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ+
KG5vZGUsIGN1cnJlbnRUYXJnZXQsIHRhcmdldCkpOwotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1RvdWNoRXZlbnQpCi0gICAgICAgICAgICAgICAgbV9w
YXRoLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFRvdWNoRXZlbnRDb250ZXh0Pihub2RlLCBjdXJy
ZW50VGFyZ2V0LCB0YXJnZXQpKTsKLSNlbmRpZgotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1fcGF0aC5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxFdmVudENvbnRleHQ+KG5vZGUs
IGN1cnJlbnRUYXJnZXQsIHRhcmdldCkpOwotICAgICAgICAgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+
KCpub2RlKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHBhcmVudCA9IG5v
ZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgIGlmICghcGFyZW50KQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSNpZiBFTkFCTEUoU0hBRE9XX0RPTSkgfHwgRU5BQkxFKERFVEFJTFNfRUxF
TUVOVCkKLSAgICAgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290T2ZQYXJlbnQgPSBw
YXJlbnQtPnNoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBhc3NpZ25l
ZFNsb3QgPSBzaGFkb3dSb290T2ZQYXJlbnQtPmZpbmRBc3NpZ25lZFNsb3QoKm5vZGUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIG5vZGUgaXMgYXNzaWduZWQgdG8gYSBzbG90LiBDb250aW51
ZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQgYXQgdGhpcyBzbG90LgotICAgICAgICAgICAgICAgICAg
ICB0YXJnZXRTdGFjay5hcHBlbmQodGFyZ2V0KTsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50
ID0gYXNzaWduZWRTbG90OwotICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBhc3NpZ25lZFNs
b3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAg
ICBub2RlID0gcGFyZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgU2hhZG93Um9vdCYgc2hhZG93
Um9vdCA9IGRvd25jYXN0PFNoYWRvd1Jvb3Q+KCpub2RlKTsKLSAgICAgICAgLy8gQXQgYSBzaGFk
b3cgcm9vdC4gQ29udGludWUgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50IGF0IHRoZSBzaGFkb3cgaG9z
dC4KLSNpZiBFTkFCTEUoU0hBRE9XX0RPTSkgfHwgRU5BQkxFKERFVEFJTFNfRUxFTUVOVCkKLSAg
ICAgICAgaWYgKCF0YXJnZXRTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIE1vdmUg
dGFyZ2V0IGJhY2sgdG8gYSBkZXNjZW5kYW50IG9mIHRoZSBzaGFkb3cgaG9zdCBpZiB0aGUgZXZl
bnQgZGlkIG5vdCBvcmlnaW5hdGUgaW4gdGhpcyBzaGFkb3cgdHJlZSBvciBpdHMgaW5uZXIgc2hh
ZG93IHRyZWVzLgotICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0U3RhY2subGFzdCgpOwotICAg
ICAgICAgICAgdGFyZ2V0U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgQVNTRVJUKHNo
YWRvd1Jvb3QuaG9zdCgpLT5jb250YWlucyh0YXJnZXQtPnRvTm9kZSgpKSk7Ci0gICAgICAgIH0g
ZWxzZQotI2VuZGlmCi0gICAgICAgICAgICB0YXJnZXQgPSBudWxscHRyOwotCi0gICAgICAgIGlm
ICghc2hvdWxkRXZlbnRDcm9zc1NoYWRvd0JvdW5kYXJ5KGV2ZW50LCBzaGFkb3dSb290LCBvcmln
aW5hbFRhcmdldCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG5vZGUgPSBzaGFkb3dS
b290Lmhvc3QoKTsKLSAgICB9Ci19Ci0KLWNsYXNzIFJlbGF0ZWROb2RlUmV0YXJnZXRlciB7Ci1w
dWJsaWM6Ci0gICAgUmVsYXRlZE5vZGVSZXRhcmdldGVyKE5vZGUmIHJlbGF0ZWROb2RlLCBUcmVl
U2NvcGUmIHRhcmdldFRyZWVTY29wZSkKLSAgICAgICAgOiBtX3JlbGF0ZWROb2RlKHJlbGF0ZWRO
b2RlKQotICAgICAgICAsIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlKCZyZWxhdGVkTm9kZSkKLSAg
ICB7Ci0gICAgICAgIFRyZWVTY29wZSogY3VycmVudFRyZWVTY29wZSA9ICZtX3JlbGF0ZWROb2Rl
LnRyZWVTY29wZSgpOwotICAgICAgICBpZiAoTElLRUxZKGN1cnJlbnRUcmVlU2NvcGUgPT0gJnRh
cmdldFRyZWVTY29wZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCZjdXJy
ZW50VHJlZVNjb3BlLT5kb2N1bWVudFNjb3BlKCkgIT0gJnRhcmdldFRyZWVTY29wZS5kb2N1bWVu
dFNjb3BlKCkpIHsKLSAgICAgICAgICAgIG1faGFzRGlmZmVyZW50VHJlZVJvb3QgPSB0cnVlOwot
ICAgICAgICAgICAgbV9yZXRhcmdldGVkUmVsYXRlZE5vZGUgPSBudWxscHRyOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZWxhdGVkTm9kZS5pbkRvY3VtZW50
KCkgIT0gdGFyZ2V0VHJlZVNjb3BlLnJvb3ROb2RlKCkuaW5Eb2N1bWVudCgpKSB7Ci0gICAgICAg
ICAgICBtX2hhc0RpZmZlcmVudFRyZWVSb290ID0gdHJ1ZTsKLSAgICAgICAgICAgIHdoaWxlICht
X3JldGFyZ2V0ZWRSZWxhdGVkTm9kZS0+aXNJblNoYWRvd1RyZWUoKSkKLSAgICAgICAgICAgICAg
ICBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZSA9IGRvd25jYXN0PFNoYWRvd1Jvb3Q+KG1fcmV0YXJn
ZXRlZFJlbGF0ZWROb2RlLT50cmVlU2NvcGUoKS5yb290Tm9kZSgpKS5ob3N0KCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjb2xsZWN0VHJlZVNjb3BlcygpOwot
Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGlzIHdoaWxlIGNvbnN0cnVj
dGluZyB0aGUgZXZlbnQgcGF0aC4KLSAgICAgICAgVmVjdG9yPFRyZWVTY29wZSosIDg+IHRhcmdl
dFRyZWVTY29wZUFuY2VzdG9yczsKLSAgICAgICAgZm9yIChUcmVlU2NvcGUqIGN1cnJlbnRUcmVl
U2NvcGUgPSAmdGFyZ2V0VHJlZVNjb3BlOyBjdXJyZW50VHJlZVNjb3BlOyBjdXJyZW50VHJlZVNj
b3BlID0gY3VycmVudFRyZWVTY29wZS0+cGFyZW50VHJlZVNjb3BlKCkpCi0gICAgICAgICAgICB0
YXJnZXRUcmVlU2NvcGVBbmNlc3RvcnMuYXBwZW5kKGN1cnJlbnRUcmVlU2NvcGUpOwotICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighdGFyZ2V0VHJlZVNjb3BlQW5jZXN0
b3JzLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgdW5zaWduZWQgaSA9IG1fYW5jZXN0b3JUcmVlU2Nv
cGVzLnNpemUoKTsKLSAgICAgICAgdW5zaWduZWQgaiA9IHRhcmdldFRyZWVTY29wZUFuY2VzdG9y
cy5zaXplKCk7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fYW5j
ZXN0b3JUcmVlU2NvcGVzLmxhc3QoKSA9PSB0YXJnZXRUcmVlU2NvcGVBbmNlc3RvcnMubGFzdCgp
KTsKLSAgICAgICAgd2hpbGUgKG1fYW5jZXN0b3JUcmVlU2NvcGVzW2kgLSAxXSA9PSB0YXJnZXRU
cmVlU2NvcGVBbmNlc3RvcnNbaiAtIDFdKSB7Ci0gICAgICAgICAgICBpLS07Ci0gICAgICAgICAg
ICBqLS07Ci0gICAgICAgICAgICBpZiAoIWkgfHwgIWopCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBtX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXggPSBpOwot
ICAgICAgICBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZSA9IG5vZGVJbkxvd2VzdENvbW1vbkFuY2Vz
dG9yKCk7Ci0gICAgfQotCi0gICAgTm9kZSogY3VycmVudE5vZGUoVHJlZVNjb3BlJiBjdXJyZW50
VHJlZVNjb3BlKQotICAgIHsKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeShjdXJyZW50VHJlZVNj
b3BlKTsKLSAgICAgICAgcmV0dXJuIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlOwotICAgIH0KLQot
ICAgIHZvaWQgbW92ZVRvTmV3VHJlZVNjb3BlKFRyZWVTY29wZSogcHJldmlvdXNUcmVlU2NvcGUs
IFRyZWVTY29wZSYgbmV3VHJlZVNjb3BlKQotICAgIHsKLSAgICAgICAgaWYgKG1faGFzRGlmZmVy
ZW50VHJlZVJvb3QpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byYgY3VycmVu
dFJlbGF0ZWROb2RlU2NvcGUgPSBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZS0+dHJlZVNjb3BlKCk7
Ci0gICAgICAgIGlmIChwcmV2aW91c1RyZWVTY29wZSAhPSAmY3VycmVudFJlbGF0ZWROb2RlU2Nv
cGUpIHsKLSAgICAgICAgICAgIC8vIGN1cnJlbnRSZWxhdGVkTm9kZSBpcyBzdGlsbCBvdXRzaWRl
IG91ciBzaGFkb3cgdHJlZS4gTmV3IHRyZWUgc2NvcGUgbWF5IGNvbnRhaW4gY3VycmVudFJlbGF0
ZWROb2RlCi0gICAgICAgICAgICAvLyBidXQgdGhlcmUgaXMgbm8gbmVlZCB0byByZS10YXJnZXQg
aXQuIE1vdmluZyBpbnRvIGEgc2xvdCAodGhlcmVieSBhIGRlZXBlciBzaGFkb3cgdHJlZSkgZG9l
c24ndCBtYXR0ZXIuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBi
b29sIGVudGVyZWRTbG90ID0gbmV3VHJlZVNjb3BlLnBhcmVudFRyZWVTY29wZSgpID09IHByZXZp
b3VzVHJlZVNjb3BlOwotICAgICAgICBpZiAoZW50ZXJlZFNsb3QpIHsKLSAgICAgICAgICAgIGlm
IChtX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXgpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9h
bmNlc3RvclRyZWVTY29wZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBjb2xsZWN0
VHJlZVNjb3BlcygpOwotICAgICAgICAgICAgICAgIGJvb2wgcmVsYXRlZE5vZGVJc0luU2xvdCA9
IG1fYW5jZXN0b3JUcmVlU2NvcGVzW21fbG93ZXN0Q29tbW9uQW5jZXN0b3JJbmRleCAtIDFdID09
ICZuZXdUcmVlU2NvcGU7Ci0gICAgICAgICAgICAgICAgaWYgKHJlbGF0ZWROb2RlSXNJblNsb3Qp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9sb3dlc3RDb21tb25BbmNlc3RvckluZGV4LS07Ci0g
ICAgICAgICAgICAgICAgICAgIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlID0gbm9kZUluTG93ZXN0
Q29tbW9uQW5jZXN0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCZuZXdUcmVlU2Nv
cGUgPT0gJm1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlLT50cmVlU2NvcGUoKSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1fcmV0
YXJnZXRlZFJlbGF0ZWROb2RlID09ICZtX3JlbGF0ZWROb2RlKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c1RyZWVTY29wZS0+cGFyZW50VHJlZVNjb3BlKCkg
PT0gJm5ld1RyZWVTY29wZSk7Ci0gICAgICAgICAgICBtX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5k
ZXgrKzsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fYW5j
ZXN0b3JUcmVlU2NvcGVzLmlzRW1wdHkoKSB8fCBtX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXgg
PCBtX2FuY2VzdG9yVHJlZVNjb3Blcy5zaXplKCkpOwotICAgICAgICAgICAgbV9yZXRhcmdldGVk
UmVsYXRlZE5vZGUgPSBkb3duY2FzdDxTaGFkb3dSb290PihjdXJyZW50UmVsYXRlZE5vZGVTY29w
ZS5yb290Tm9kZSgpKS5ob3N0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoJm5ld1RyZWVTY29wZSA9
PSAmbV9yZXRhcmdldGVkUmVsYXRlZE5vZGUtPnRyZWVTY29wZSgpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeShUcmVlU2NvcGUmIGN1cnJlbnRUcmVlU2Nv
cGUpCi0gICAgewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgZm9yIChhdXRvKiByZWxh
dGVkTm9kZVNjb3BlID0gJm1fcmVsYXRlZE5vZGUudHJlZVNjb3BlKCk7IHJlbGF0ZWROb2RlU2Nv
cGU7IHJlbGF0ZWROb2RlU2NvcGUgPSByZWxhdGVkTm9kZVNjb3BlLT5wYXJlbnRUcmVlU2NvcGUo
KSkgewotICAgICAgICAgICAgZm9yIChhdXRvKiB0YXJnZXRTY29wZSA9ICZjdXJyZW50VHJlZVNj
b3BlOyB0YXJnZXRTY29wZTsgdGFyZ2V0U2NvcGUgPSB0YXJnZXRTY29wZS0+cGFyZW50VHJlZVNj
b3BlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0U2NvcGUgPT0gcmVsYXRlZE5vZGVT
Y29wZSkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoJm1fcmV0YXJnZXRlZFJlbGF0ZWRO
b2RlLT50cmVlU2NvcGUoKSA9PSByZWxhdGVkTm9kZVNjb3BlKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBBU1NFUlQoIW1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlKTsKLSNlbHNlCi0gICAgICAg
IFVOVVNFRF9QQVJBTShjdXJyZW50VHJlZVNjb3BlKTsKLSNlbmRpZgotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBOb2RlKiBub2RlSW5Mb3dlc3RDb21tb25BbmNlc3RvcigpCi0gICAgewotICAgICAg
ICBpZiAoIW1fbG93ZXN0Q29tbW9uQW5jZXN0b3JJbmRleCkKLSAgICAgICAgICAgIHJldHVybiAm
bV9yZWxhdGVkTm9kZTsKLSAgICAgICAgYXV0byYgcm9vdE5vZGUgPSBtX2FuY2VzdG9yVHJlZVNj
b3Blc1ttX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXggLSAxXS0+cm9vdE5vZGUoKTsKLSAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PFNoYWRvd1Jvb3Q+KHJvb3ROb2RlKS5ob3N0KCk7Ci0gICAgfQot
Ci0gICAgdm9pZCBjb2xsZWN0VHJlZVNjb3BlcygpCi0gICAgewotICAgICAgICBBU1NFUlQobV9h
bmNlc3RvclRyZWVTY29wZXMuaXNFbXB0eSgpKTsKLSAgICAgICAgZm9yIChUcmVlU2NvcGUqIGN1
cnJlbnRUcmVlU2NvcGUgPSAmbV9yZWxhdGVkTm9kZS50cmVlU2NvcGUoKTsgY3VycmVudFRyZWVT
Y29wZTsgY3VycmVudFRyZWVTY29wZSA9IGN1cnJlbnRUcmVlU2NvcGUtPnBhcmVudFRyZWVTY29w
ZSgpKQotICAgICAgICAgICAgbV9hbmNlc3RvclRyZWVTY29wZXMuYXBwZW5kKGN1cnJlbnRUcmVl
U2NvcGUpOwotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbV9hbmNl
c3RvclRyZWVTY29wZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBOb2RlJiBtX3JlbGF0ZWRO
b2RlOwotICAgIE5vZGUqIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlOwotICAgIFZlY3RvcjxUcmVl
U2NvcGUqLCA4PiBtX2FuY2VzdG9yVHJlZVNjb3BlczsKLSAgICB1bnNpZ25lZCBtX2xvd2VzdENv
bW1vbkFuY2VzdG9ySW5kZXggeyAwIH07Ci0gICAgYm9vbCBtX2hhc0RpZmZlcmVudFRyZWVSb290
IHsgZmFsc2UgfTsKLX07Ci0KLXZvaWQgRXZlbnRQYXRoOjpzZXRSZWxhdGVkVGFyZ2V0KE5vZGUm
IG9yaWdpbiwgRXZlbnRUYXJnZXQmIHJlbGF0ZWRUYXJnZXQpCi17Ci0gICAgTm9kZSogcmVsYXRl
ZE5vZGUgPSByZWxhdGVkVGFyZ2V0LnRvTm9kZSgpOwotICAgIGlmICghcmVsYXRlZE5vZGUgfHwg
bV9wYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVsYXRlZE5vZGVSZXRh
cmdldGVyIHJldGFyZ2V0ZXIoKnJlbGF0ZWROb2RlLCBkb3duY2FzdDxNb3VzZU9yRm9jdXNFdmVu
dENvbnRleHQ+KCptX3BhdGhbMF0pLm5vZGUoKS0+dHJlZVNjb3BlKCkpOwotCi0gICAgYm9vbCBv
cmlnaW5Jc1JlbGF0ZWRUYXJnZXQgPSAmb3JpZ2luID09IHJlbGF0ZWROb2RlOwotICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgYWRkIGEgbmV3IGZsYWcgb24gRXZlbnQgaW5zdGVhZC4KLSAgICBib29s
IHNob3VsZFRyaW1FdmVudFBhdGggPSBtX2V2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2VvdmVyRXZlbnQKLSAgICAgICAgfHwgbV9ldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlbW92ZUV2ZW50Ci0gICAgICAgIHx8IG1fZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZW91dEV2ZW50OwotICAgIE5vZGUmIHJvb3ROb2RlSW5PcmlnaW5UcmVlU2NvcGUgPSBvcmln
aW4udHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKLSAgICBUcmVlU2NvcGUqIHByZXZpb3VzVHJlZVNj
b3BlID0gbnVsbHB0cjsKLSAgICBzaXplX3Qgb3JpZ2luYWxFdmVudFBhdGhTaXplID0gbV9wYXRo
LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGNvbnRleHRJbmRleCA9IDA7IGNvbnRleHRJbmRl
eCA8IG9yaWdpbmFsRXZlbnRQYXRoU2l6ZTsgY29udGV4dEluZGV4KyspIHsKLSAgICAgICAgYXV0
byYgY29udGV4dCA9IGRvd25jYXN0PE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dD4oKm1fcGF0aFtj
b250ZXh0SW5kZXhdKTsKLQotICAgICAgICBUcmVlU2NvcGUmIGN1cnJlbnRUcmVlU2NvcGUgPSBj
b250ZXh0Lm5vZGUoKS0+dHJlZVNjb3BlKCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShwcmV2aW91
c1RyZWVTY29wZSAmJiAmY3VycmVudFRyZWVTY29wZSAhPSBwcmV2aW91c1RyZWVTY29wZSkpCi0g
ICAgICAgICAgICByZXRhcmdldGVyLm1vdmVUb05ld1RyZWVTY29wZShwcmV2aW91c1RyZWVTY29w
ZSwgY3VycmVudFRyZWVTY29wZSk7Ci0KLSAgICAgICAgTm9kZSogY3VycmVudFJlbGF0ZWROb2Rl
ID0gcmV0YXJnZXRlci5jdXJyZW50Tm9kZShjdXJyZW50VHJlZVNjb3BlKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHNob3VsZFRyaW1FdmVudFBhdGggJiYgIW9yaWdpbklzUmVsYXRlZFRhcmdldCAm
JiBjb250ZXh0LnRhcmdldCgpID09IGN1cnJlbnRSZWxhdGVkTm9kZSkpIHsKLSAgICAgICAgICAg
IG1fcGF0aC5zaHJpbmsoY29udGV4dEluZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgY29udGV4dC5zZXRSZWxhdGVkVGFyZ2V0KGN1cnJlbnRSZWxhdGVkTm9k
ZSk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKHNob3VsZFRyaW1FdmVudFBhdGggJiYgb3JpZ2lu
SXNSZWxhdGVkVGFyZ2V0ICYmIGNvbnRleHQubm9kZSgpID09ICZyb290Tm9kZUluT3JpZ2luVHJl
ZVNjb3BlKSkgewotICAgICAgICAgICAgbV9wYXRoLnNocmluayhjb250ZXh0SW5kZXggKyAxKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJldmlvdXNUcmVlU2Nv
cGUgPSAmY3VycmVudFRyZWVTY29wZTsKLSAgICB9Ci19Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQotdm9pZCBFdmVudFBhdGg6OnJldGFyZ2V0VG91Y2goVG91Y2hFdmVudENvbnRleHQ6OlRv
dWNoTGlzdFR5cGUgdG91Y2hMaXN0VHlwZSwgY29uc3QgVG91Y2gmIHRvdWNoKQotewotICAgIEV2
ZW50VGFyZ2V0KiBldmVudFRhcmdldCA9IHRvdWNoLnRhcmdldCgpOwotICAgIGlmICghZXZlbnRU
YXJnZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIHRhcmdldE5vZGUgPSBldmVudFRh
cmdldC0+dG9Ob2RlKCk7Ci0gICAgaWYgKCF0YXJnZXROb2RlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBSZWxhdGVkTm9kZVJldGFyZ2V0ZXIgcmV0YXJnZXRlcigqdGFyZ2V0Tm9kZSwgbV9wYXRo
WzBdLT5ub2RlKCktPnRyZWVTY29wZSgpKTsKLSAgICBUcmVlU2NvcGUqIHByZXZpb3VzVHJlZVNj
b3BlID0gbnVsbHB0cjsKLSAgICBmb3IgKGF1dG8mIGNvbnRleHQgOiBtX3BhdGgpIHsKLSAgICAg
ICAgVHJlZVNjb3BlJiBjdXJyZW50VHJlZVNjb3BlID0gY29udGV4dC0+bm9kZSgpLT50cmVlU2Nv
cGUoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHByZXZpb3VzVHJlZVNjb3BlICYmICZjdXJyZW50
VHJlZVNjb3BlICE9IHByZXZpb3VzVHJlZVNjb3BlKSkKLSAgICAgICAgICAgIHJldGFyZ2V0ZXIu
bW92ZVRvTmV3VHJlZVNjb3BlKHByZXZpb3VzVHJlZVNjb3BlLCBjdXJyZW50VHJlZVNjb3BlKTsK
LQotICAgICAgICBOb2RlKiBjdXJyZW50UmVsYXRlZE5vZGUgPSByZXRhcmdldGVyLmN1cnJlbnRO
b2RlKGN1cnJlbnRUcmVlU2NvcGUpOwotICAgICAgICBkb3duY2FzdDxUb3VjaEV2ZW50Q29udGV4
dD4oKmNvbnRleHQpLnRvdWNoTGlzdCh0b3VjaExpc3RUeXBlKS0+YXBwZW5kKHRvdWNoLmNsb25l
V2l0aE5ld1RhcmdldChjdXJyZW50UmVsYXRlZE5vZGUpKTsKLQotICAgICAgICBwcmV2aW91c1Ry
ZWVTY29wZSA9ICZjdXJyZW50VHJlZVNjb3BlOwotICAgIH0KLX0KLQotdm9pZCBFdmVudFBhdGg6
OnJldGFyZ2V0VG91Y2hMaXN0cyhjb25zdCBUb3VjaEV2ZW50JiB0b3VjaEV2ZW50KQotewotICAg
IGlmICh0b3VjaEV2ZW50LnRvdWNoZXMoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHRvdWNoRXZlbnQudG91Y2hlcygpLT5sZW5ndGgoKTsgKytpKQotICAgICAgICAgICAgcmV0
YXJnZXRUb3VjaChUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hlcywgKnRvdWNoRXZlbnQudG91Y2hl
cygpLT5pdGVtKGkpKTsKLSAgICB9Ci0KLSAgICBpZiAodG91Y2hFdmVudC50YXJnZXRUb3VjaGVz
KCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b3VjaEV2ZW50LnRhcmdldFRv
dWNoZXMoKS0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgICAgIHJldGFyZ2V0VG91Y2goVG91Y2hF
dmVudENvbnRleHQ6OlRhcmdldFRvdWNoZXMsICp0b3VjaEV2ZW50LnRhcmdldFRvdWNoZXMoKS0+
aXRlbShpKSk7Ci0gICAgfQotCi0gICAgaWYgKHRvdWNoRXZlbnQuY2hhbmdlZFRvdWNoZXMoKSkg
ewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvdWNoRXZlbnQuY2hhbmdlZFRvdWNo
ZXMoKS0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgICAgIHJldGFyZ2V0VG91Y2goVG91Y2hFdmVu
dENvbnRleHQ6OkNoYW5nZWRUb3VjaGVzLCAqdG91Y2hFdmVudC5jaGFuZ2VkVG91Y2hlcygpLT5p
dGVtKGkpKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotYm9vbCBFdmVudFBhdGg6Omhhc0V2ZW50TGlz
dGVuZXJzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdAotewotICAgIGZvciAo
YXV0byYgZXZlbnRQYXRoIDogbV9wYXRoKSB7Ci0gICAgICAgIGlmIChldmVudFBhdGgtPm5vZGUo
KS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50UGF0aC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRQYXRoLmgiCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2lu
Y2x1ZGUgIkV2ZW50Q29udGV4dC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRl
ICJIVE1MU2xvdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUHNldWRv
RWxlbWVudC5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJUb3VjaEV2ZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBib29sIHNob3VsZEV2
ZW50Q3Jvc3NTaGFkb3dCb3VuZGFyeShFdmVudCYgZXZlbnQsIFNoYWRvd1Jvb3QmIHNoYWRvd1Jv
b3QsIEV2ZW50VGFyZ2V0JiB0YXJnZXQpCit7CisgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IHRhcmdl
dC50b05vZGUoKTsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFKFZJREVP
KQorICAgIC8vIFZpZGVvLW9ubHkgZnVsbCBzY3JlZW4gaXMgYSBtb2RlIHdoZXJlIHdlIHVzZSB0
aGUgc2hhZG93IERPTSBhcyBhbiBpbXBsZW1lbnRhdGlvbgorICAgIC8vIGRldGFpbCB0aGF0IHNo
b3VsZCBub3QgYmUgZGV0ZWN0YWJsZSBieSB0aGUgd2ViIGNvbnRlbnQuCisgICAgaWYgKHRhcmdl
dE5vZGUpIHsKKyAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB0YXJnZXROb2RlLT5kb2N1
bWVudCgpLndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogV2UgYXNzdW1lIHRoYXQgaWYgdGhlIGZ1bGwgc2NyZWVuIGVsZW1lbnQgaXMgYSBt
ZWRpYSBlbGVtZW50IHRoYXQgaXQncworICAgICAgICAgICAgLy8gdGhlIHZpZGVvLW9ubHkgZnVs
bCBzY3JlZW4uIEJvdGggaGVyZSBhbmQgZWxzZXdoZXJlLiBCdXQgdGhhdCBpcyBwcm9iYWJseSB3
cm9uZy4KKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc01lZGlhRWxlbWVudCgpICYmIHNoYWRv
d1Jvb3QuaG9zdCgpID09IGVsZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBXZWJLaXQgbmV2ZXIgYWxsb3dlZCBz
ZWxlY3RzdGFydCBldmVudCB0byBjcm9zcyB0aGUgdGhlIHNoYWRvdyBET00gYm91bmRhcnkuCisg
ICAgLy8gQ2hhbmdpbmcgdGhpcyBicmVha3MgZXhpc3Rpbmcgc2l0ZXMuCisgICAgLy8gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjE5NSBmb3IgZGV0YWlscy4K
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUoKTsKKyAgICBi
b29sIHRhcmdldElzSW5TaGFkb3dSb290ID0gdGFyZ2V0Tm9kZSAmJiAmdGFyZ2V0Tm9kZS0+dHJl
ZVNjb3BlKCkucm9vdE5vZGUoKSA9PSAmc2hhZG93Um9vdDsKKyAgICByZXR1cm4gIXRhcmdldElz
SW5TaGFkb3dSb290CisgICAgICAgIHx8ICEoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hYm9y
dEV2ZW50CisgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQK
KyAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50CisgICAgICAg
IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubG9hZEV2ZW50CisgICAgICAgIHx8IGV2ZW50
VHlwZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAorICAgICAgICB8fCBldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50CisgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkuc2Nyb2xsRXZlbnQKKyAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5z
ZWxlY3RFdmVudAorICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdHN0
YXJ0RXZlbnQpOworfQorCitzdGF0aWMgTm9kZSogbm9kZU9ySG9zdElmUHNldWRvRWxlbWVudChO
b2RlKiBub2RlKQoreworICAgIHJldHVybiBpczxQc2V1ZG9FbGVtZW50Pigqbm9kZSkgPyBkb3du
Y2FzdDxQc2V1ZG9FbGVtZW50Pigqbm9kZSkuaG9zdEVsZW1lbnQoKSA6IG5vZGU7Cit9CisKK2Ns
YXNzIFJlbGF0ZWROb2RlUmV0YXJnZXRlciB7CitwdWJsaWM6CisgICAgUmVsYXRlZE5vZGVSZXRh
cmdldGVyKE5vZGUmIHJlbGF0ZWROb2RlLCBUcmVlU2NvcGUmIHRhcmdldFRyZWVTY29wZSk7CisK
KyAgICBOb2RlKiBjdXJyZW50Tm9kZShUcmVlU2NvcGUmIGN1cnJlbnRUcmVlU2NvcGUpOworICAg
IHZvaWQgbW92ZVRvTmV3VHJlZVNjb3BlKFRyZWVTY29wZSogcHJldmlvdXNUcmVlU2NvcGUsIFRy
ZWVTY29wZSYgbmV3VHJlZVNjb3BlKTsKKworcHJpdmF0ZToKKworICAgIE5vZGUqIG5vZGVJbkxv
d2VzdENvbW1vbkFuY2VzdG9yKCk7CisgICAgdm9pZCBjb2xsZWN0VHJlZVNjb3BlcygpOworCisj
aWYgQVNTRVJUX0RJU0FCTEVECisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KFRyZWVTY29wZSYp
IHsgfQorI2Vsc2UKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koVHJlZVNjb3BlJiBjdXJyZW50
VHJlZVNjb3BlKTsKKyNlbmRpZgorCisgICAgTm9kZSYgbV9yZWxhdGVkTm9kZTsKKyAgICBOb2Rl
KiBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZTsKKyAgICBWZWN0b3I8VHJlZVNjb3BlKiwgOD4gbV9h
bmNlc3RvclRyZWVTY29wZXM7CisgICAgdW5zaWduZWQgbV9sb3dlc3RDb21tb25BbmNlc3Rvcklu
ZGV4IHsgMCB9OworICAgIGJvb2wgbV9oYXNEaWZmZXJlbnRUcmVlUm9vdCB7IGZhbHNlIH07Cit9
OworCitFdmVudFBhdGg6OkV2ZW50UGF0aChOb2RlJiBvcmlnaW5hbFRhcmdldCwgRXZlbnQmIGV2
ZW50KQorICAgIDogbV9ldmVudChldmVudCkKK3sKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkgfHwg
RU5BQkxFKERFVEFJTFNfRUxFTUVOVCkKKyAgICBWZWN0b3I8RXZlbnRUYXJnZXQqLCAxNj4gdGFy
Z2V0U3RhY2s7CisjZW5kaWYKKworICAgIGJvb2wgaXNNb3VzZU9yRm9jdXNFdmVudCA9IGV2ZW50
LmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LmlzRm9jdXNFdmVudCgpOworI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCisgICAgYm9vbCBpc1RvdWNoRXZlbnQgPSBldmVudC5pc1RvdWNoRXZlbnQoKTsK
KyNlbmRpZgorICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBudWxscHRyOworCisgICAgTm9kZSog
bm9kZSA9IG5vZGVPckhvc3RJZlBzZXVkb0VsZW1lbnQoJm9yaWdpbmFsVGFyZ2V0KTsKKyAgICB3
aGlsZSAobm9kZSkgeworICAgICAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgICAgIHRhcmdldCA9
IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2RlKTsKKyAgICAgICAgQ29udGFp
bmVyTm9kZSogcGFyZW50OworICAgICAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IHBhcmVudCkgewor
ICAgICAgICAgICAgRXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJnZXQgPSBldmVudFRhcmdldFJlc3Bl
Y3RpbmdUYXJnZXRSdWxlcygqbm9kZSk7CisKKyAgICAgICAgICAgIGlmIChpc01vdXNlT3JGb2N1
c0V2ZW50KQorICAgICAgICAgICAgICAgIG1fcGF0aC5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxN
b3VzZU9yRm9jdXNFdmVudENvbnRleHQ+KG5vZGUsIGN1cnJlbnRUYXJnZXQsIHRhcmdldCkpOwor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgICAgICAgICBlbHNlIGlmIChpc1RvdWNoRXZl
bnQpCisgICAgICAgICAgICAgICAgbV9wYXRoLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFRvdWNo
RXZlbnRDb250ZXh0Pihub2RlLCBjdXJyZW50VGFyZ2V0LCB0YXJnZXQpKTsKKyNlbmRpZgorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fcGF0aC5hcHBlbmQoc3RkOjptYWtlX3Vu
aXF1ZTxFdmVudENvbnRleHQ+KG5vZGUsIGN1cnJlbnRUYXJnZXQsIHRhcmdldCkpOworCisgICAg
ICAgICAgICBpZiAoaXM8U2hhZG93Um9vdD4oKm5vZGUpKQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7CisKKyAgICAgICAg
ICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShT
SEFET1dfRE9NKSB8fCBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQorICAgICAgICAgICAgaWYgKFNo
YWRvd1Jvb3QqIHNoYWRvd1Jvb3RPZlBhcmVudCA9IHBhcmVudC0+c2hhZG93Um9vdCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIGFzc2lnbmVkU2xvdCA9IHNoYWRvd1Jvb3RPZlBhcmVu
dC0+ZmluZEFzc2lnbmVkU2xvdCgqbm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbm9k
ZSBpcyBhc3NpZ25lZCB0byBhIHNsb3QuIENvbnRpbnVlIGRpc3BhdGNoaW5nIHRoZSBldmVudCBh
dCB0aGlzIHNsb3QuCisgICAgICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrLmFwcGVuZCh0YXJn
ZXQpOworICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBhc3NpZ25lZFNsb3Q7CisgICAgICAg
ICAgICAgICAgICAgIHRhcmdldCA9IGFzc2lnbmVkU2xvdDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIG5vZGUgPSBwYXJlbnQ7CisgICAgICAg
IH0KKworICAgICAgICBTaGFkb3dSb290JiBzaGFkb3dSb290ID0gZG93bmNhc3Q8U2hhZG93Um9v
dD4oKm5vZGUpOworICAgICAgICAvLyBBdCBhIHNoYWRvdyByb290LiBDb250aW51ZSBkaXNwYXRj
aGluZyB0aGUgZXZlbnQgYXQgdGhlIHNoYWRvdyBob3N0LgorI2lmIEVOQUJMRShTSEFET1dfRE9N
KSB8fCBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQorICAgICAgICBpZiAoIXRhcmdldFN0YWNrLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgLy8gTW92ZSB0YXJnZXQgYmFjayB0byBhIGRlc2NlbmRh
bnQgb2YgdGhlIHNoYWRvdyBob3N0IGlmIHRoZSBldmVudCBkaWQgbm90IG9yaWdpbmF0ZSBpbiB0
aGlzIHNoYWRvdyB0cmVlIG9yIGl0cyBpbm5lciBzaGFkb3cgdHJlZXMuCisgICAgICAgICAgICB0
YXJnZXQgPSB0YXJnZXRTdGFjay5sYXN0KCk7CisgICAgICAgICAgICB0YXJnZXRTdGFjay5yZW1v
dmVMYXN0KCk7CisgICAgICAgICAgICBBU1NFUlQoc2hhZG93Um9vdC5ob3N0KCktPmNvbnRhaW5z
KHRhcmdldC0+dG9Ob2RlKCkpKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgICAg
IHRhcmdldCA9IG51bGxwdHI7CisKKyAgICAgICAgaWYgKCFzaG91bGRFdmVudENyb3NzU2hhZG93
Qm91bmRhcnkoZXZlbnQsIHNoYWRvd1Jvb3QsIG9yaWdpbmFsVGFyZ2V0KSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgbm9kZSA9IHNoYWRvd1Jvb3QuaG9zdCgpOworICAgIH0KK30KKwor
dm9pZCBFdmVudFBhdGg6OnNldFJlbGF0ZWRUYXJnZXQoTm9kZSYgb3JpZ2luLCBFdmVudFRhcmdl
dCYgcmVsYXRlZFRhcmdldCkKK3sKKyAgICBOb2RlKiByZWxhdGVkTm9kZSA9IHJlbGF0ZWRUYXJn
ZXQudG9Ob2RlKCk7CisgICAgaWYgKCFyZWxhdGVkTm9kZSB8fCBtX3BhdGguaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZWxhdGVkTm9kZVJldGFyZ2V0ZXIgcmV0YXJnZXRlcigq
cmVsYXRlZE5vZGUsIGRvd25jYXN0PE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dD4oKm1fcGF0aFsw
XSkubm9kZSgpLT50cmVlU2NvcGUoKSk7CisKKyAgICBib29sIG9yaWdpbklzUmVsYXRlZFRhcmdl
dCA9ICZvcmlnaW4gPT0gcmVsYXRlZE5vZGU7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhZGQg
YSBuZXcgZmxhZyBvbiBFdmVudCBpbnN0ZWFkLgorICAgIGJvb2wgc2hvdWxkVHJpbUV2ZW50UGF0
aCA9IG1fZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudAorICAgICAg
ICB8fCBtX2V2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQKKyAgICAg
ICAgfHwgbV9ldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQ7CisgICAg
Tm9kZSYgcm9vdE5vZGVJbk9yaWdpblRyZWVTY29wZSA9IG9yaWdpbi50cmVlU2NvcGUoKS5yb290
Tm9kZSgpOworICAgIFRyZWVTY29wZSogcHJldmlvdXNUcmVlU2NvcGUgPSBudWxscHRyOworICAg
IHNpemVfdCBvcmlnaW5hbEV2ZW50UGF0aFNpemUgPSBtX3BhdGguc2l6ZSgpOworICAgIGZvciAo
dW5zaWduZWQgY29udGV4dEluZGV4ID0gMDsgY29udGV4dEluZGV4IDwgb3JpZ2luYWxFdmVudFBh
dGhTaXplOyBjb250ZXh0SW5kZXgrKykgeworICAgICAgICBhdXRvJiBjb250ZXh0ID0gZG93bmNh
c3Q8TW91c2VPckZvY3VzRXZlbnRDb250ZXh0PigqbV9wYXRoW2NvbnRleHRJbmRleF0pOworCisg
ICAgICAgIFRyZWVTY29wZSYgY3VycmVudFRyZWVTY29wZSA9IGNvbnRleHQubm9kZSgpLT50cmVl
U2NvcGUoKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHByZXZpb3VzVHJlZVNjb3BlICYmICZjdXJy
ZW50VHJlZVNjb3BlICE9IHByZXZpb3VzVHJlZVNjb3BlKSkKKyAgICAgICAgICAgIHJldGFyZ2V0
ZXIubW92ZVRvTmV3VHJlZVNjb3BlKHByZXZpb3VzVHJlZVNjb3BlLCBjdXJyZW50VHJlZVNjb3Bl
KTsKKworICAgICAgICBOb2RlKiBjdXJyZW50UmVsYXRlZE5vZGUgPSByZXRhcmdldGVyLmN1cnJl
bnROb2RlKGN1cnJlbnRUcmVlU2NvcGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2hvdWxkVHJp
bUV2ZW50UGF0aCAmJiAhb3JpZ2luSXNSZWxhdGVkVGFyZ2V0ICYmIGNvbnRleHQudGFyZ2V0KCkg
PT0gY3VycmVudFJlbGF0ZWROb2RlKSkgeworICAgICAgICAgICAgbV9wYXRoLnNocmluayhjb250
ZXh0SW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjb250
ZXh0LnNldFJlbGF0ZWRUYXJnZXQoY3VycmVudFJlbGF0ZWROb2RlKTsKKworICAgICAgICBpZiAo
VU5MSUtFTFkoc2hvdWxkVHJpbUV2ZW50UGF0aCAmJiBvcmlnaW5Jc1JlbGF0ZWRUYXJnZXQgJiYg
Y29udGV4dC5ub2RlKCkgPT0gJnJvb3ROb2RlSW5PcmlnaW5UcmVlU2NvcGUpKSB7CisgICAgICAg
ICAgICBtX3BhdGguc2hyaW5rKGNvbnRleHRJbmRleCArIDEpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBwcmV2aW91c1RyZWVTY29wZSA9ICZjdXJyZW50VHJlZVNj
b3BlOworICAgIH0KK30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCit2b2lkIEV2ZW50UGF0
aDo6cmV0YXJnZXRUb3VjaChUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlwZSB0b3VjaExp
c3RUeXBlLCBjb25zdCBUb3VjaCYgdG91Y2gpCit7CisgICAgRXZlbnRUYXJnZXQqIGV2ZW50VGFy
Z2V0ID0gdG91Y2gudGFyZ2V0KCk7CisgICAgaWYgKCFldmVudFRhcmdldCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IGV2ZW50VGFyZ2V0LT50b05vZGUoKTsKKyAg
ICBpZiAoIXRhcmdldE5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbGF0ZWROb2RlUmV0
YXJnZXRlciByZXRhcmdldGVyKCp0YXJnZXROb2RlLCBtX3BhdGhbMF0tPm5vZGUoKS0+dHJlZVNj
b3BlKCkpOworICAgIFRyZWVTY29wZSogcHJldmlvdXNUcmVlU2NvcGUgPSBudWxscHRyOworICAg
IGZvciAoYXV0byYgY29udGV4dCA6IG1fcGF0aCkgeworICAgICAgICBUcmVlU2NvcGUmIGN1cnJl
bnRUcmVlU2NvcGUgPSBjb250ZXh0LT5ub2RlKCktPnRyZWVTY29wZSgpOworICAgICAgICBpZiAo
VU5MSUtFTFkocHJldmlvdXNUcmVlU2NvcGUgJiYgJmN1cnJlbnRUcmVlU2NvcGUgIT0gcHJldmlv
dXNUcmVlU2NvcGUpKQorICAgICAgICAgICAgcmV0YXJnZXRlci5tb3ZlVG9OZXdUcmVlU2NvcGUo
cHJldmlvdXNUcmVlU2NvcGUsIGN1cnJlbnRUcmVlU2NvcGUpOworCisgICAgICAgIE5vZGUqIGN1
cnJlbnRSZWxhdGVkTm9kZSA9IHJldGFyZ2V0ZXIuY3VycmVudE5vZGUoY3VycmVudFRyZWVTY29w
ZSk7CisgICAgICAgIGRvd25jYXN0PFRvdWNoRXZlbnRDb250ZXh0PigqY29udGV4dCkudG91Y2hM
aXN0KHRvdWNoTGlzdFR5cGUpLT5hcHBlbmQodG91Y2guY2xvbmVXaXRoTmV3VGFyZ2V0KGN1cnJl
bnRSZWxhdGVkTm9kZSkpOworCisgICAgICAgIHByZXZpb3VzVHJlZVNjb3BlID0gJmN1cnJlbnRU
cmVlU2NvcGU7CisgICAgfQorfQorCit2b2lkIEV2ZW50UGF0aDo6cmV0YXJnZXRUb3VjaExpc3Rz
KGNvbnN0IFRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCit7CisgICAgaWYgKHRvdWNoRXZlbnQudG91
Y2hlcygpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG91Y2hFdmVudC50b3Vj
aGVzKCktPmxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICByZXRhcmdldFRvdWNoKFRvdWNoRXZl
bnRDb250ZXh0OjpUb3VjaGVzLCAqdG91Y2hFdmVudC50b3VjaGVzKCktPml0ZW0oaSkpOworICAg
IH0KKworICAgIGlmICh0b3VjaEV2ZW50LnRhcmdldFRvdWNoZXMoKSkgeworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHRvdWNoRXZlbnQudGFyZ2V0VG91Y2hlcygpLT5sZW5ndGgoKTsg
KytpKQorICAgICAgICAgICAgcmV0YXJnZXRUb3VjaChUb3VjaEV2ZW50Q29udGV4dDo6VGFyZ2V0
VG91Y2hlcywgKnRvdWNoRXZlbnQudGFyZ2V0VG91Y2hlcygpLT5pdGVtKGkpKTsKKyAgICB9CisK
KyAgICBpZiAodG91Y2hFdmVudC5jaGFuZ2VkVG91Y2hlcygpKSB7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdG91Y2hFdmVudC5jaGFuZ2VkVG91Y2hlcygpLT5sZW5ndGgoKTsgKytp
KQorICAgICAgICAgICAgcmV0YXJnZXRUb3VjaChUb3VjaEV2ZW50Q29udGV4dDo6Q2hhbmdlZFRv
dWNoZXMsICp0b3VjaEV2ZW50LmNoYW5nZWRUb3VjaGVzKCktPml0ZW0oaSkpOworICAgIH0KK30K
KyNlbmRpZgorCitib29sIEV2ZW50UGF0aDo6aGFzRXZlbnRMaXN0ZW5lcnMoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBldmVudFBhdGggOiBt
X3BhdGgpIHsKKyAgICAgICAgaWYgKGV2ZW50UGF0aC0+bm9kZSgpLT5oYXNFdmVudExpc3RlbmVy
cyhldmVudFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitSZWxhdGVkTm9kZVJldGFyZ2V0ZXI6OlJlbGF0ZWROb2RlUmV0YXJn
ZXRlcihOb2RlJiByZWxhdGVkTm9kZSwgVHJlZVNjb3BlJiB0YXJnZXRUcmVlU2NvcGUpCisgICAg
OiBtX3JlbGF0ZWROb2RlKHJlbGF0ZWROb2RlKQorICAgICwgbV9yZXRhcmdldGVkUmVsYXRlZE5v
ZGUoJnJlbGF0ZWROb2RlKQoreworICAgIFRyZWVTY29wZSogY3VycmVudFRyZWVTY29wZSA9ICZt
X3JlbGF0ZWROb2RlLnRyZWVTY29wZSgpOworICAgIGlmIChMSUtFTFkoY3VycmVudFRyZWVTY29w
ZSA9PSAmdGFyZ2V0VHJlZVNjb3BlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCZjdXJy
ZW50VHJlZVNjb3BlLT5kb2N1bWVudFNjb3BlKCkgIT0gJnRhcmdldFRyZWVTY29wZS5kb2N1bWVu
dFNjb3BlKCkpIHsKKyAgICAgICAgbV9oYXNEaWZmZXJlbnRUcmVlUm9vdCA9IHRydWU7CisgICAg
ICAgIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAocmVsYXRlZE5vZGUuaW5Eb2N1bWVudCgpICE9IHRhcmdldFRyZWVTY29w
ZS5yb290Tm9kZSgpLmluRG9jdW1lbnQoKSkgeworICAgICAgICBtX2hhc0RpZmZlcmVudFRyZWVS
b290ID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlLT5pc0lu
U2hhZG93VHJlZSgpKQorICAgICAgICAgICAgbV9yZXRhcmdldGVkUmVsYXRlZE5vZGUgPSBkb3du
Y2FzdDxTaGFkb3dSb290PihtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZS0+dHJlZVNjb3BlKCkucm9v
dE5vZGUoKSkuaG9zdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29sbGVjdFRy
ZWVTY29wZXMoKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGlzIHdoaWxl
IGNvbnN0cnVjdGluZyB0aGUgZXZlbnQgcGF0aC4KKyAgICBWZWN0b3I8VHJlZVNjb3BlKiwgOD4g
dGFyZ2V0VHJlZVNjb3BlQW5jZXN0b3JzOworICAgIGZvciAoVHJlZVNjb3BlKiBjdXJyZW50VHJl
ZVNjb3BlID0gJnRhcmdldFRyZWVTY29wZTsgY3VycmVudFRyZWVTY29wZTsgY3VycmVudFRyZWVT
Y29wZSA9IGN1cnJlbnRUcmVlU2NvcGUtPnBhcmVudFRyZWVTY29wZSgpKQorICAgICAgICB0YXJn
ZXRUcmVlU2NvcGVBbmNlc3RvcnMuYXBwZW5kKGN1cnJlbnRUcmVlU2NvcGUpOworICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCF0YXJnZXRUcmVlU2NvcGVBbmNlc3RvcnMuaXNF
bXB0eSgpKTsKKworICAgIHVuc2lnbmVkIGkgPSBtX2FuY2VzdG9yVHJlZVNjb3Blcy5zaXplKCk7
CisgICAgdW5zaWduZWQgaiA9IHRhcmdldFRyZWVTY29wZUFuY2VzdG9ycy5zaXplKCk7CisgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9hbmNlc3RvclRyZWVTY29wZXMubGFz
dCgpID09IHRhcmdldFRyZWVTY29wZUFuY2VzdG9ycy5sYXN0KCkpOworICAgIHdoaWxlIChtX2Fu
Y2VzdG9yVHJlZVNjb3Blc1tpIC0gMV0gPT0gdGFyZ2V0VHJlZVNjb3BlQW5jZXN0b3JzW2ogLSAx
XSkgeworICAgICAgICBpLS07CisgICAgICAgIGotLTsKKyAgICAgICAgaWYgKCFpIHx8ICFqKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9sb3dlc3RDb21tb25BbmNlc3Rvcklu
ZGV4ID0gaTsKKyAgICBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZSA9IG5vZGVJbkxvd2VzdENvbW1v
bkFuY2VzdG9yKCk7Cit9CisKK2lubGluZSBOb2RlKiBSZWxhdGVkTm9kZVJldGFyZ2V0ZXI6OmN1
cnJlbnROb2RlKFRyZWVTY29wZSYgY3VycmVudFRyZWVTY29wZSkKK3sKKyAgICBjaGVja0NvbnNp
c3RlbmN5KGN1cnJlbnRUcmVlU2NvcGUpOworICAgIHJldHVybiBtX3JldGFyZ2V0ZWRSZWxhdGVk
Tm9kZTsKK30KKwordm9pZCBSZWxhdGVkTm9kZVJldGFyZ2V0ZXI6Om1vdmVUb05ld1RyZWVTY29w
ZShUcmVlU2NvcGUqIHByZXZpb3VzVHJlZVNjb3BlLCBUcmVlU2NvcGUmIG5ld1RyZWVTY29wZSkK
K3sKKyAgICBpZiAobV9oYXNEaWZmZXJlbnRUcmVlUm9vdCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byYgY3VycmVudFJlbGF0ZWROb2RlU2NvcGUgPSBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9k
ZS0+dHJlZVNjb3BlKCk7CisgICAgaWYgKHByZXZpb3VzVHJlZVNjb3BlICE9ICZjdXJyZW50UmVs
YXRlZE5vZGVTY29wZSkgeworICAgICAgICAvLyBjdXJyZW50UmVsYXRlZE5vZGUgaXMgc3RpbGwg
b3V0c2lkZSBvdXIgc2hhZG93IHRyZWUuIE5ldyB0cmVlIHNjb3BlIG1heSBjb250YWluIGN1cnJl
bnRSZWxhdGVkTm9kZQorICAgICAgICAvLyBidXQgdGhlcmUgaXMgbm8gbmVlZCB0byByZS10YXJn
ZXQgaXQuIE1vdmluZyBpbnRvIGEgc2xvdCAodGhlcmVieSBhIGRlZXBlciBzaGFkb3cgdHJlZSkg
ZG9lc24ndCBtYXR0ZXIuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGVudGVy
ZWRTbG90ID0gbmV3VHJlZVNjb3BlLnBhcmVudFRyZWVTY29wZSgpID09IHByZXZpb3VzVHJlZVNj
b3BlOworICAgIGlmIChlbnRlcmVkU2xvdCkgeworICAgICAgICBpZiAobV9sb3dlc3RDb21tb25B
bmNlc3RvckluZGV4KSB7CisgICAgICAgICAgICBpZiAobV9hbmNlc3RvclRyZWVTY29wZXMuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbGxlY3RUcmVlU2NvcGVzKCk7CisgICAgICAgICAg
ICBib29sIHJlbGF0ZWROb2RlSXNJblNsb3QgPSBtX2FuY2VzdG9yVHJlZVNjb3Blc1ttX2xvd2Vz
dENvbW1vbkFuY2VzdG9ySW5kZXggLSAxXSA9PSAmbmV3VHJlZVNjb3BlOworICAgICAgICAgICAg
aWYgKHJlbGF0ZWROb2RlSXNJblNsb3QpIHsKKyAgICAgICAgICAgICAgICBtX2xvd2VzdENvbW1v
bkFuY2VzdG9ySW5kZXgtLTsKKyAgICAgICAgICAgICAgICBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9k
ZSA9IG5vZGVJbkxvd2VzdENvbW1vbkFuY2VzdG9yKCk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCZuZXdUcmVlU2NvcGUgPT0gJm1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlLT50cmVlU2NvcGUoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUKG1fcmV0
YXJnZXRlZFJlbGF0ZWROb2RlID09ICZtX3JlbGF0ZWROb2RlKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBBU1NFUlQocHJldmlvdXNUcmVlU2NvcGUtPnBhcmVudFRyZWVTY29wZSgpID09ICZuZXdU
cmVlU2NvcGUpOworICAgICAgICBtX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXgrKzsKKyAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9hbmNlc3RvclRyZWVTY29wZXMu
aXNFbXB0eSgpIHx8IG1fbG93ZXN0Q29tbW9uQW5jZXN0b3JJbmRleCA8IG1fYW5jZXN0b3JUcmVl
U2NvcGVzLnNpemUoKSk7CisgICAgICAgIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlID0gZG93bmNh
c3Q8U2hhZG93Um9vdD4oY3VycmVudFJlbGF0ZWROb2RlU2NvcGUucm9vdE5vZGUoKSkuaG9zdCgp
OworICAgICAgICBBU1NFUlQoJm5ld1RyZWVTY29wZSA9PSAmbV9yZXRhcmdldGVkUmVsYXRlZE5v
ZGUtPnRyZWVTY29wZSgpKTsKKyAgICB9Cit9CisKK2lubGluZSBOb2RlKiBSZWxhdGVkTm9kZVJl
dGFyZ2V0ZXI6Om5vZGVJbkxvd2VzdENvbW1vbkFuY2VzdG9yKCkKK3sKKyAgICBpZiAoIW1fbG93
ZXN0Q29tbW9uQW5jZXN0b3JJbmRleCkKKyAgICAgICAgcmV0dXJuICZtX3JlbGF0ZWROb2RlOwor
ICAgIGF1dG8mIHJvb3ROb2RlID0gbV9hbmNlc3RvclRyZWVTY29wZXNbbV9sb3dlc3RDb21tb25B
bmNlc3RvckluZGV4IC0gMV0tPnJvb3ROb2RlKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFNoYWRv
d1Jvb3Q+KHJvb3ROb2RlKS5ob3N0KCk7Cit9CisKK3ZvaWQgUmVsYXRlZE5vZGVSZXRhcmdldGVy
Ojpjb2xsZWN0VHJlZVNjb3BlcygpCit7CisgICAgQVNTRVJUKG1fYW5jZXN0b3JUcmVlU2NvcGVz
LmlzRW1wdHkoKSk7CisgICAgZm9yIChUcmVlU2NvcGUqIGN1cnJlbnRUcmVlU2NvcGUgPSAmbV9y
ZWxhdGVkTm9kZS50cmVlU2NvcGUoKTsgY3VycmVudFRyZWVTY29wZTsgY3VycmVudFRyZWVTY29w
ZSA9IGN1cnJlbnRUcmVlU2NvcGUtPnBhcmVudFRyZWVTY29wZSgpKQorICAgICAgICBtX2FuY2Vz
dG9yVHJlZVNjb3Blcy5hcHBlbmQoY3VycmVudFRyZWVTY29wZSk7CisgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oIW1fYW5jZXN0b3JUcmVlU2NvcGVzLmlzRW1wdHkoKSk7Cit9
CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECit2b2lkIFJlbGF0ZWROb2RlUmV0YXJnZXRlcjo6Y2hl
Y2tDb25zaXN0ZW5jeShUcmVlU2NvcGUmIGN1cnJlbnRUcmVlU2NvcGUpCit7CisgICAgZm9yIChh
dXRvKiByZWxhdGVkTm9kZVNjb3BlID0gJm1fcmVsYXRlZE5vZGUudHJlZVNjb3BlKCk7IHJlbGF0
ZWROb2RlU2NvcGU7IHJlbGF0ZWROb2RlU2NvcGUgPSByZWxhdGVkTm9kZVNjb3BlLT5wYXJlbnRU
cmVlU2NvcGUoKSkgeworICAgICAgICBmb3IgKGF1dG8qIHRhcmdldFNjb3BlID0gJmN1cnJlbnRU
cmVlU2NvcGU7IHRhcmdldFNjb3BlOyB0YXJnZXRTY29wZSA9IHRhcmdldFNjb3BlLT5wYXJlbnRU
cmVlU2NvcGUoKSkgeworICAgICAgICAgICAgaWYgKHRhcmdldFNjb3BlID09IHJlbGF0ZWROb2Rl
U2NvcGUpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoJm1fcmV0YXJnZXRlZFJlbGF0ZWROb2Rl
LT50cmVlU2NvcGUoKSA9PSByZWxhdGVkTm9kZVNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKCFtX3JldGFy
Z2V0ZWRSZWxhdGVkTm9kZSk7Cit9CisjZW5kaWYKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50UGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBh
dGguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgRXZlbnRQYXRoX2gKKyNk
ZWZpbmUgRXZlbnRQYXRoX2gKKworI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEV2ZW50OworY2xhc3MgRXZlbnRDb250ZXh0OworY2xhc3MgRXZlbnRUYXJn
ZXQ7CitjbGFzcyBOb2RlOworY2xhc3MgVG91Y2hFdmVudDsKK2NsYXNzIFRvdWNoRXZlbnRDb250
ZXh0OworCitjbGFzcyBFdmVudFBhdGggeworcHVibGljOgorICAgIEV2ZW50UGF0aChOb2RlJiBv
cmlnaW4sIEV2ZW50Jik7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Bh
dGguaXNFbXB0eSgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3BhdGgu
c2l6ZSgpOyB9CisgICAgY29uc3QgRXZlbnRDb250ZXh0JiBjb250ZXh0QXQoc2l6ZV90IGkpIGNv
bnN0IHsgcmV0dXJuICptX3BhdGhbaV07IH0KKyAgICBFdmVudENvbnRleHQmIGNvbnRleHRBdChz
aXplX3QgaSkgeyByZXR1cm4gKm1fcGF0aFtpXTsgfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKKyAgICB2b2lkIHJldGFyZ2V0VG91Y2hMaXN0cyhjb25zdCBUb3VjaEV2ZW50Jik7CisjZW5k
aWYKKyAgICB2b2lkIHNldFJlbGF0ZWRUYXJnZXQoTm9kZSYgb3JpZ2luLCBFdmVudFRhcmdldCYp
OworCisgICAgYm9vbCBoYXNFdmVudExpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSkgY29uc3Q7CisKKyAgICBFdmVudENvbnRleHQqIGxhc3RDb250ZXh0SWZFeGlzdHMoKSB7
IHJldHVybiBtX3BhdGguaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1fcGF0aC5sYXN0KCkuZ2V0KCk7
IH0KKworICAgIHN0YXRpYyBFdmVudFRhcmdldCogZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0
UnVsZXMoTm9kZSYgcmVmZXJlbmNlTm9kZSkKKyAgICB7CisgICAgICAgIGlmIChpczxQc2V1ZG9F
bGVtZW50PihyZWZlcmVuY2VOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxQc2V1
ZG9FbGVtZW50PihyZWZlcmVuY2VOb2RlKS5ob3N0RWxlbWVudCgpOworCisgICAgICAgIC8vIEV2
ZW50cyBzZW50IHRvIGVsZW1lbnRzIGluc2lkZSBhbiBTVkcgdXNlIGVsZW1lbnQncyBzaGFkb3cg
dHJlZSBnbyB0byB0aGUgdXNlIGVsZW1lbnQuCisgICAgICAgIGlmIChpczxTVkdFbGVtZW50Pihy
ZWZlcmVuY2VOb2RlKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHVzZUVsZW1lbnQgPSBkb3du
Y2FzdDxTVkdFbGVtZW50PihyZWZlcmVuY2VOb2RlKS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiB1c2VFbGVtZW50OworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuICZyZWZlcmVuY2VOb2RlOworICAgIH0KKworcHJpdmF0ZToKKyNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQorICAgIHZvaWQgcmV0YXJnZXRUb3VjaChUb3VjaEV2ZW50Q29udGV4dDo6
VG91Y2hMaXN0VHlwZSwgY29uc3QgVG91Y2gmKTsKKyNlbmRpZgorCisgICAgRXZlbnQmIG1fZXZl
bnQ7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFdmVudENvbnRleHQ+LCAzMj4gbV9wYXRo
OworfTsKKworfQorCisjZW5kaWYgLyogRXZlbnRQYXRoX2ggKi8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273531</attachid>
            <date>2016-03-09 19:56:01 -0800</date>
            <delta_ts>2016-03-09 19:59:23 -0800</delta_ts>
            <desc>GTK build fix attempt</desc>
            <filename>bug-155285-20160309195548.patch</filename>
            <type>text/plain</type>
            <size>42302</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzkxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE2LTAzLTA5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEV4dHJhY3QgRXZlbnRQYXRoLmgv
Y3BwIG91dCBvZiBFdmVudERpc3BhdGNoZXIuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUyODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBFeHRyYWN0ZWQgRXZlbnRQYXRoLmgvY3BwIG91dCBvZiBF
dmVudERpc3BhdGNoZXIuY3BwIHRvIGFkZCB0aGUgc3VwcG9ydCBmb3IgRXZlbnQuZGVlcFBhdGgo
KQorICAgICAgICBpbiB3ZWJraXQub3JnL2IvMTUzNTM4LiBUaGUgbmV3IGZpbGUgZGVmaW5lcyBt
ZW1iZXIgZnVuY3Rpb25zIG9mIEV2ZW50UGF0aCBhbmQgUmVsYXRlZE5vZGVSZXRhcmdldGVyLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9ET01BbGxJbk9uZS5jcHA6CisgICAgICAg
ICogZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UGF0aCk6IE1v
dmVkIHRvIEV2ZW50UGF0aC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpldmVudFRhcmdldFJlc3Bl
Y3RpbmdUYXJnZXRSdWxlcyk6IE1vdmVkIHRvIEV2ZW50UGF0aC5oLgorICAgICAgICAoV2ViQ29y
ZTo6c2hvdWxkRXZlbnRDcm9zc1NoYWRvd0JvdW5kYXJ5KTogTW92ZWQgdG8gRXZlbnRQYXRoLmNw
cC4KKyAgICAgICAgKFdlYkNvcmU6Om5vZGVPckhvc3RJZlBzZXVkb0VsZW1lbnQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbGF0ZWROb2RlUmV0YXJnZXRlcik6IE1vdmVkIHRvIEV2ZW50
UGF0aC5jcHAuCisgICAgICAgICogZG9tL0V2ZW50UGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6c2hvdWxkRXZlbnRDcm9zc1NoYWRvd0JvdW5kYXJ5KTogTW92ZWQgZnJvbSBFdmVu
dERpc3BhdGNoZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6bm9kZU9ySG9zdElmUHNldWRvRWxl
bWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRQYXRoOjpFdmVudFBhdGgpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbGF0ZWROb2RlUmV0YXJnZXRlcik6IERpdHRvLgor
ICAgICAgICAqIGRvbS9FdmVudFBhdGguaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVu
dFBhdGg6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRQYXRoOjpzaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50UGF0aDo6Y29udGV4dEF0KToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50UGF0aDo6bGFzdENvbnRleHRJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dFBhdGg6OmV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKTogTW92ZWQgZnJvbSBFdmVu
dERpc3BhdGNoZXIuY3BwLgorCiAyMDE2LTAzLTA5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIGRlZmluZUVsZW1lbnQgc2hvdWxkIHVwZ3JhZGUgZXhpc3Rpbmcg
dW5yZXNvbHZlZCBjdXN0b20gZWxlbWVudHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAxOTc5MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTQ0OSw2ICsxNDQ5LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9F
dmVudERpc3BhdGNoZXIuY3BwCiAgICAgZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCiAgICAgZG9t
L0V2ZW50TmFtZXMuY3BwCisgICAgZG9tL0V2ZW50UGF0aC5jcHAKICAgICBkb20vRXZlbnRUYXJn
ZXQuY3BwCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCiAgICAgZG9tL0V4Y2VwdGlvbkNvZGVQ
bGFjZWhvbGRlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NzkxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDAz
Niw2ICs0MDM2LDggQEAKIAkJOUI2OUQzQjgxQjk5MTAwNzAwRTM1MTJCIC8qIEpTSFRNTFNsb3RF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCNjlEM0I2MUI5OTEwMDcwMEUzNTEyQiAvKiBKU0hUTUxTbG90RWxlbWVudC5jcHAgKi87IH07
CiAJCTlCNjlEM0I5MUI5OTEwMDcwMEUzNTEyQiAvKiBKU0hUTUxTbG90RWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI2OUQzQjcxQjk5MTAw
NzAwRTM1MTJCIC8qIEpTSFRNTFNsb3RFbGVtZW50LmggKi87IH07CiAJCTlCNkM0MTUzMTM0NDk0
OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjZDNDE1MjEzNDQ5NDkwMDAwODVCNjIgLyogU3Ry
aW5nV2l0aERpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTlCNzE0RTIwMUM5MTE2NjkwMEFDMEU5MiAvKiBFdmVudFBhdGguY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI3MTRFMUUxQzkx
MTY2OTAwQUMwRTkyIC8qIEV2ZW50UGF0aC5jcHAgKi87IH07CisJCTlCNzE0RTIxMUM5MTE2Njkw
MEFDMEU5MiAvKiBFdmVudFBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDlCNzE0RTFGMUM5MTE2NjkwMEFDMEU5MiAvKiBFdmVudFBhdGguaCAqLzsg
fTsKIAkJOUJBMjczRjQxNzIyMDZCQjAwOTdDRTQ3IC8qIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRD
YWNoZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
QTI3M0YzMTcyMjA2QkIwMDk3Q0U0NyAvKiBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmgg
Ki87IH07CiAJCTlCQUI2QzZDMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQUI2QzZBMTI1NTA2
MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk5QkFCNkM2RDEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGlu
Z1N0eWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCQUI2QzZCMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuY3BwICovOyB9OwpAQCAt
MTE3MzgsNiArMTE3NDAsOCBAQAogCQk5QjZCQzk2MDFCOTc1OTY2MDA1QUUxRjAgLyogSlNTaGFk
b3dSb290LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2hhZG93
Um9vdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNkJDOTYxMUI5NzU5NjYw
MDVBRTFGMCAvKiBKU1NoYWRvd1Jvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNTaGFkb3dSb290Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNkM0MTUy
MTM0NDk0OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1dpdGhEaXJlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOUI3MTRFMUUxQzkxMTY2OTAwQUMwRTkyIC8qIEV2ZW50UGF0aC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudFBhdGguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjcxNEUxRjFDOTExNjY5MDBBQzBFOTIgLyogRXZl
bnRQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50UGF0aC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkEyNzNGMzE3MjIwNkJCMDA5N0NFNDcgLyog
TG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTlCQUI2QzZBMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ1N0eWxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQUI2QzZCMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5n
U3R5bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRWRpdGluZ1N0
eWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2ODI4LDcgKzE2ODMyLDcg
QEAKIAkJCQk0MUY1NEY3RDFDNTBDNEY2MDAzMzg0ODggLyogRmV0Y2hCb2R5LmNwcCAqLywKIAkJ
CQk0MUY1NEY3RTFDNTBDNEY2MDAzMzg0ODggLyogRmV0Y2hCb2R5LmggKi8sCiAJCQkJNDFGNTRG
N0YxQzUwQzRGNjAwMzM4NDg4IC8qIEZldGNoQm9keS5pZGwgKi8sCi0gCQkJCTQxNDdFMkIyMUM4
ODMzN0YwMEE3RTcxNSAvKiBGZXRjaEJvZHlPd25lci5oICovLAorCQkJCTQxNDdFMkIyMUM4ODMz
N0YwMEE3RTcxNSAvKiBGZXRjaEJvZHlPd25lci5oICovLAogCQkJCTQxRjU0RjgyMUM1MEM0RjYw
MDMzODQ4OCAvKiBGZXRjaEhlYWRlcnMuY3BwICovLAogCQkJCTQxRjU0RjgzMUM1MEM0RjYwMDMz
ODQ4OCAvKiBGZXRjaEhlYWRlcnMuaCAqLywKIAkJCQk0MUY1NEY4NDFDNTBDNEY2MDAzMzg0ODgg
LyogRmV0Y2hIZWFkZXJzLmlkbCAqLywKQEAgLTI0MzQ0LDYgKzI0MzQ4LDggQEAKIAkJCQk5Mzk4
ODVDMTA4QjdFM0QxMDBFNzA3QzQgLyogRXZlbnROYW1lcy5jcHAgKi8sCiAJCQkJOTM5ODg1QzIw
OEI3RTNEMTAwRTcwN0M0IC8qIEV2ZW50TmFtZXMuaCAqLywKIAkJCQlCQzlBNjE0MjE0Njg1OUQ5
MDA2MDU3RkQgLyogRXZlbnROYW1lcy5pbiAqLywKKwkJCQk5QjcxNEUxRTFDOTExNjY5MDBBQzBF
OTIgLyogRXZlbnRQYXRoLmNwcCAqLywKKwkJCQk5QjcxNEUxRjFDOTExNjY5MDBBQzBFOTIgLyog
RXZlbnRQYXRoLmggKi8sCiAJCQkJOEY2NzU2MTkxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVl
dWUuaCAqLywKIAkJCQlDRTVDQjFCMzE0RURBQjZGMDBCQjI3OTUgLyogRXZlbnRTZW5kZXIuaCAq
LywKIAkJCQlFMTJFREJFOTBCMzA4RTBCMDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuY3BwICovLApA
QCAtMjc2MTksNiArMjc2MjUsNyBAQAogCQkJCUJDQTg0NkQ3MERDNjdBMzUwMDI2QzMwOSAvKiBS
ZW5kZXJSZXBsaWNhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc5RkFFRTEwOUFFMzc1MDBERUQ2
NTUgLyogUmVuZGVyUnVieS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3OUZBRjAxMDlBRTM3NTAw
REVENjU1IC8qIFJlbmRlclJ1YnlCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjcxNEUyMTFD
OTExNjY5MDBBQzBFOTIgLyogRXZlbnRQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc5RkFG
MjEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVJ1bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTQ3OUZBRjQxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlUZXh0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzNCRTk5NDBFOUMxQzdDMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyLmggaW4g
SGVhZGVycyAqLywKQEAgLTI5NDA2LDYgKzI5NDEzLDcgQEAKIAkJCQk1OUE4RjFENDExQTY5NTA4
MDAxQUMzNEEgLyogRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTU5RDFDMTA0MTFFQjVEQ0YwMEI2MzhDOCAvKiBEZXZpY2VPcmllbnRhdGlvbkRhdGEu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTlBODVFQTIxMTlENjhEOTAwREVGMUVGIC8qIERldmlj
ZU9yaWVudGF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUI3MTRFMjAxQzkxMTY2
OTAwQUMwRTkyIC8qIEV2ZW50UGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNjc3MjVGQzFB
NUIzQUQ5MDAzQzI0REQgLyogREZBLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDOUE3QTc1MUFB
MEY2RUEwMDk1OEFDRiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDOUE3QTc2MUFBMEY2RUQwMDk1OEFDRiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCShyZXZp
c2lvbiAxOTc5MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmNw
cCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyTWFwLmNwcCIKICNpbmNsdWRlICJFdmVudE5hbWVz
LmNwcCIKKyNpbmNsdWRlICJFdmVudFBhdGguY3BwIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmNw
cCIKICNpbmNsdWRlICJFeGNlcHRpb25CYXNlLmNwcCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
UGxhY2Vob2xkZXIuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5j
cHAJKHJldmlzaW9uIDE5NzkxNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNo
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNyArMjcsMTMgQEAKICNpbmNsdWRlICJFdmVu
dERpc3BhdGNoZXIuaCIKIAogI2luY2x1ZGUgIkV2ZW50Q29udGV4dC5oIgotI2luY2x1ZGUgIkZv
Y3VzRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudFBhdGguaCIKICNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxl
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZl
bnQuaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSAiU2NvcGVkRXZlbnRR
dWV1ZS5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgot
I2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKICNpbmNsdWRlICJUb3VjaEV2ZW50LmgiCiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKQEAgLTc3LDUxICs3MywxMCBAQCBib29sIFdp
bmRvd0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWNsYXNzIEV2ZW50UGF0aCB7Ci1wdWJsaWM6Ci0gICAgRXZlbnRQYXRoKE5vZGUmIG9yaWdpbiwg
RXZlbnQmKTsKLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5pc0Vt
cHR5KCk7IH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5zaXplKCk7
IH0KLSAgICBjb25zdCBFdmVudENvbnRleHQmIGNvbnRleHRBdChzaXplX3QgaSkgY29uc3QgeyBy
ZXR1cm4gKm1fcGF0aFtpXTsgfQotICAgIEV2ZW50Q29udGV4dCYgY29udGV4dEF0KHNpemVfdCBp
KSB7IHJldHVybiAqbV9wYXRoW2ldOyB9Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAg
IHZvaWQgcmV0YXJnZXRUb3VjaExpc3RzKGNvbnN0IFRvdWNoRXZlbnQmKTsKLSNlbmRpZgotICAg
IHZvaWQgc2V0UmVsYXRlZFRhcmdldChOb2RlJiBvcmlnaW4sIEV2ZW50VGFyZ2V0Jik7Ci0KLSAg
ICBib29sIGhhc0V2ZW50TGlzdGVuZXJzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBj
b25zdDsKLQotICAgIEV2ZW50Q29udGV4dCogbGFzdENvbnRleHRJZkV4aXN0cygpIHsgcmV0dXJu
IG1fcGF0aC5pc0VtcHR5KCkgPyBudWxscHRyIDogbV9wYXRoLmxhc3QoKS5nZXQoKTsgfQotCi1w
cml2YXRlOgotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZXRhcmdldFRvdWNo
KFRvdWNoRXZlbnRDb250ZXh0OjpUb3VjaExpc3RUeXBlLCBjb25zdCBUb3VjaCYpOwotI2VuZGlm
Ci0KLSAgICBFdmVudCYgbV9ldmVudDsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV2ZW50
Q29udGV4dD4sIDMyPiBtX3BhdGg7Ci19OwotCi1pbmxpbmUgRXZlbnRUYXJnZXQqIGV2ZW50VGFy
Z2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKE5vZGUmIHJlZmVyZW5jZU5vZGUpCi17Ci0gICAgaWYg
KGlzPFBzZXVkb0VsZW1lbnQ+KHJlZmVyZW5jZU5vZGUpKQotICAgICAgICByZXR1cm4gZG93bmNh
c3Q8UHNldWRvRWxlbWVudD4ocmVmZXJlbmNlTm9kZSkuaG9zdEVsZW1lbnQoKTsKLQotICAgIC8v
IEV2ZW50cyBzZW50IHRvIGVsZW1lbnRzIGluc2lkZSBhbiBTVkcgdXNlIGVsZW1lbnQncyBzaGFk
b3cgdHJlZSBnbyB0byB0aGUgdXNlIGVsZW1lbnQuCi0gICAgaWYgKGlzPFNWR0VsZW1lbnQ+KHJl
ZmVyZW5jZU5vZGUpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB1c2VFbGVtZW50ID0gZG93bmNhc3Q8
U1ZHRWxlbWVudD4ocmVmZXJlbmNlTm9kZSkuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiB1c2VFbGVtZW50OwotICAgIH0KLQotICAgIHJldHVybiAmcmVmZXJl
bmNlTm9kZTsKLX0KLQogdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQo
Tm9kZSYgbm9kZSwgRXZlbnQmIGV2ZW50KQogewogICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSB0
YXJnZXQgaGVyZSBiZWNhdXNlIGl0IGNhbiBnbyBhd2F5IGJ5IHRoZSB0aW1lIHdlIGFjdHVhbGx5
IGZpcmUgdGhlIGV2ZW50LgotICAgIGV2ZW50LnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3Rp
bmdUYXJnZXRSdWxlcyhub2RlKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KEV2ZW50UGF0aDo6ZXZl
bnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMobm9kZSkpOwogICAgIFNjb3BlZEV2ZW50UXVl
dWU6OnNpbmdsZXRvbigpLmVucXVldWVFdmVudChldmVudCk7CiB9CiAKQEAgLTIwOSw3ICsxNjQs
NyBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlCiAKICAgICBDaGls
ZE5vZGVzTGF6eVNuYXBzaG90Ojp0YWtlQ2hpbGROb2Rlc0xhenlTbmFwc2hvdCgpOwogCi0gICAg
RXZlbnRUYXJnZXQqIHRhcmdldCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpu
b2RlKTsKKyAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gRXZlbnRQYXRoOjpldmVudFRhcmdldFJl
c3BlY3RpbmdUYXJnZXRSdWxlcygqbm9kZSk7CiAgICAgZXZlbnQuc2V0VGFyZ2V0KHRhcmdldCk7
CiAgICAgaWYgKCFldmVudC50YXJnZXQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMjUs
NyArMTgwLDcgQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZQogICAg
IGlmICghZXZlbnQucHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgIWV2ZW50UGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgIGRpc3BhdGNoRXZlbnRJbkRPTShldmVudCwgZXZlbnRQYXRoLCB3aW5kb3dFdmVu
dENvbnRleHQpOwogCi0gICAgZXZlbnQuc2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1Rh
cmdldFJ1bGVzKCpub2RlKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KEV2ZW50UGF0aDo6ZXZlbnRU
YXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoKm5vZGUpKTsKICAgICBldmVudC5zZXRDdXJyZW50
VGFyZ2V0KG51bGxwdHIpOwogICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoMCk7CiAKQEAgLTI0Niwz
MjUgKzIwMSw0IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUKICAg
ICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBi
b29sIHNob3VsZEV2ZW50Q3Jvc3NTaGFkb3dCb3VuZGFyeShFdmVudCYgZXZlbnQsIFNoYWRvd1Jv
b3QmIHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0JiB0YXJnZXQpCi17Ci0gICAgTm9kZSogdGFyZ2V0
Tm9kZSA9IHRhcmdldC50b05vZGUoKTsKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIEVO
QUJMRShWSURFTykKLSAgICAvLyBWaWRlby1vbmx5IGZ1bGwgc2NyZWVuIGlzIGEgbW9kZSB3aGVy
ZSB3ZSB1c2UgdGhlIHNoYWRvdyBET00gYXMgYW4gaW1wbGVtZW50YXRpb24KLSAgICAvLyBkZXRh
aWwgdGhhdCBzaG91bGQgbm90IGJlIGRldGVjdGFibGUgYnkgdGhlIHdlYiBjb250ZW50LgotICAg
IGlmICh0YXJnZXROb2RlKSB7Ci0gICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gdGFyZ2V0
Tm9kZS0+ZG9jdW1lbnQoKS53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkgewotICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIGFzc3VtZSB0aGF0IGlmIHRoZSBmdWxsIHNjcmVlbiBlbGVt
ZW50IGlzIGEgbWVkaWEgZWxlbWVudCB0aGF0IGl0J3MKLSAgICAgICAgICAgIC8vIHRoZSB2aWRl
by1vbmx5IGZ1bGwgc2NyZWVuLiBCb3RoIGhlcmUgYW5kIGVsc2V3aGVyZS4gQnV0IHRoYXQgaXMg
cHJvYmFibHkgd3JvbmcuCi0gICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNNZWRpYUVsZW1lbnQo
KSAmJiBzaGFkb3dSb290Lmhvc3QoKSA9PSBlbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gV2ViS2l0IG5ldmVy
IGFsbG93ZWQgc2VsZWN0c3RhcnQgZXZlbnQgdG8gY3Jvc3MgdGhlIHRoZSBzaGFkb3cgRE9NIGJv
dW5kYXJ5LgotICAgIC8vIENoYW5naW5nIHRoaXMgYnJlYWtzIGV4aXN0aW5nIHNpdGVzLgotICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIxOTUgZm9y
IGRldGFpbHMuCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUgPSBldmVudC50eXBl
KCk7Ci0gICAgYm9vbCB0YXJnZXRJc0luU2hhZG93Um9vdCA9IHRhcmdldE5vZGUgJiYgJnRhcmdl
dE5vZGUtPnRyZWVTY29wZSgpLnJvb3ROb2RlKCkgPT0gJnNoYWRvd1Jvb3Q7Ci0gICAgcmV0dXJu
ICF0YXJnZXRJc0luU2hhZG93Um9vdAotICAgICAgICB8fCAhKGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkuYWJvcnRFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMo
KS5jaGFuZ2VFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5l
cnJvckV2ZW50Ci0gICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmxvYWRF
dmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNldEV2ZW50
Ci0gICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50Ci0g
ICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50Ci0gICAg
ICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50Ci0gICAgICAg
ICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZlbnQpOwotfQot
Ci1zdGF0aWMgTm9kZSogbm9kZU9ySG9zdElmUHNldWRvRWxlbWVudChOb2RlKiBub2RlKQotewot
ICAgIHJldHVybiBpczxQc2V1ZG9FbGVtZW50Pigqbm9kZSkgPyBkb3duY2FzdDxQc2V1ZG9FbGVt
ZW50Pigqbm9kZSkuaG9zdEVsZW1lbnQoKSA6IG5vZGU7Ci19Ci0KLUV2ZW50UGF0aDo6RXZlbnRQ
YXRoKE5vZGUmIG9yaWdpbmFsVGFyZ2V0LCBFdmVudCYgZXZlbnQpCi0gICAgOiBtX2V2ZW50KGV2
ZW50KQotewotI2lmIEVOQUJMRShTSEFET1dfRE9NKSB8fCBFTkFCTEUoREVUQUlMU19FTEVNRU5U
KQotICAgIFZlY3RvcjxFdmVudFRhcmdldCosIDE2PiB0YXJnZXRTdGFjazsKLSNlbmRpZgotCi0g
ICAgYm9vbCBpc01vdXNlT3JGb2N1c0V2ZW50ID0gZXZlbnQuaXNNb3VzZUV2ZW50KCkgfHwgZXZl
bnQuaXNGb2N1c0V2ZW50KCk7Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBib29sIGlz
VG91Y2hFdmVudCA9IGV2ZW50LmlzVG91Y2hFdmVudCgpOwotI2VuZGlmCi0gICAgRXZlbnRUYXJn
ZXQqIHRhcmdldCA9IG51bGxwdHI7Ci0KLSAgICBOb2RlKiBub2RlID0gbm9kZU9ySG9zdElmUHNl
dWRvRWxlbWVudCgmb3JpZ2luYWxUYXJnZXQpOwotICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAg
IGlmICghdGFyZ2V0KQotICAgICAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXRSZXNwZWN0aW5n
VGFyZ2V0UnVsZXMoKm5vZGUpOwotICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQ7Ci0gICAg
ICAgIGZvciAoOyBub2RlOyBub2RlID0gcGFyZW50KSB7Ci0gICAgICAgICAgICBFdmVudFRhcmdl
dCogY3VycmVudFRhcmdldCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2Rl
KTsKLSAgICAgICAgICAgIGlmIChpc01vdXNlT3JGb2N1c0V2ZW50KQotICAgICAgICAgICAgICAg
IG1fcGF0aC5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ+
KG5vZGUsIGN1cnJlbnRUYXJnZXQsIHRhcmdldCkpOwotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
Ci0gICAgICAgICAgICBlbHNlIGlmIChpc1RvdWNoRXZlbnQpCi0gICAgICAgICAgICAgICAgbV9w
YXRoLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFRvdWNoRXZlbnRDb250ZXh0Pihub2RlLCBjdXJy
ZW50VGFyZ2V0LCB0YXJnZXQpKTsKLSNlbmRpZgotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1fcGF0aC5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxFdmVudENvbnRleHQ+KG5vZGUs
IGN1cnJlbnRUYXJnZXQsIHRhcmdldCkpOwotICAgICAgICAgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+
KCpub2RlKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHBhcmVudCA9IG5v
ZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgIGlmICghcGFyZW50KQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSNpZiBFTkFCTEUoU0hBRE9XX0RPTSkgfHwgRU5BQkxFKERFVEFJTFNfRUxF
TUVOVCkKLSAgICAgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290T2ZQYXJlbnQgPSBw
YXJlbnQtPnNoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBhc3NpZ25l
ZFNsb3QgPSBzaGFkb3dSb290T2ZQYXJlbnQtPmZpbmRBc3NpZ25lZFNsb3QoKm5vZGUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIG5vZGUgaXMgYXNzaWduZWQgdG8gYSBzbG90LiBDb250aW51
ZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQgYXQgdGhpcyBzbG90LgotICAgICAgICAgICAgICAgICAg
ICB0YXJnZXRTdGFjay5hcHBlbmQodGFyZ2V0KTsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50
ID0gYXNzaWduZWRTbG90OwotICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBhc3NpZ25lZFNs
b3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAg
ICBub2RlID0gcGFyZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgU2hhZG93Um9vdCYgc2hhZG93
Um9vdCA9IGRvd25jYXN0PFNoYWRvd1Jvb3Q+KCpub2RlKTsKLSAgICAgICAgLy8gQXQgYSBzaGFk
b3cgcm9vdC4gQ29udGludWUgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50IGF0IHRoZSBzaGFkb3cgaG9z
dC4KLSNpZiBFTkFCTEUoU0hBRE9XX0RPTSkgfHwgRU5BQkxFKERFVEFJTFNfRUxFTUVOVCkKLSAg
ICAgICAgaWYgKCF0YXJnZXRTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIE1vdmUg
dGFyZ2V0IGJhY2sgdG8gYSBkZXNjZW5kYW50IG9mIHRoZSBzaGFkb3cgaG9zdCBpZiB0aGUgZXZl
bnQgZGlkIG5vdCBvcmlnaW5hdGUgaW4gdGhpcyBzaGFkb3cgdHJlZSBvciBpdHMgaW5uZXIgc2hh
ZG93IHRyZWVzLgotICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0U3RhY2subGFzdCgpOwotICAg
ICAgICAgICAgdGFyZ2V0U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgQVNTRVJUKHNo
YWRvd1Jvb3QuaG9zdCgpLT5jb250YWlucyh0YXJnZXQtPnRvTm9kZSgpKSk7Ci0gICAgICAgIH0g
ZWxzZQotI2VuZGlmCi0gICAgICAgICAgICB0YXJnZXQgPSBudWxscHRyOwotCi0gICAgICAgIGlm
ICghc2hvdWxkRXZlbnRDcm9zc1NoYWRvd0JvdW5kYXJ5KGV2ZW50LCBzaGFkb3dSb290LCBvcmln
aW5hbFRhcmdldCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG5vZGUgPSBzaGFkb3dS
b290Lmhvc3QoKTsKLSAgICB9Ci19Ci0KLWNsYXNzIFJlbGF0ZWROb2RlUmV0YXJnZXRlciB7Ci1w
dWJsaWM6Ci0gICAgUmVsYXRlZE5vZGVSZXRhcmdldGVyKE5vZGUmIHJlbGF0ZWROb2RlLCBUcmVl
U2NvcGUmIHRhcmdldFRyZWVTY29wZSkKLSAgICAgICAgOiBtX3JlbGF0ZWROb2RlKHJlbGF0ZWRO
b2RlKQotICAgICAgICAsIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlKCZyZWxhdGVkTm9kZSkKLSAg
ICB7Ci0gICAgICAgIFRyZWVTY29wZSogY3VycmVudFRyZWVTY29wZSA9ICZtX3JlbGF0ZWROb2Rl
LnRyZWVTY29wZSgpOwotICAgICAgICBpZiAoTElLRUxZKGN1cnJlbnRUcmVlU2NvcGUgPT0gJnRh
cmdldFRyZWVTY29wZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCZjdXJy
ZW50VHJlZVNjb3BlLT5kb2N1bWVudFNjb3BlKCkgIT0gJnRhcmdldFRyZWVTY29wZS5kb2N1bWVu
dFNjb3BlKCkpIHsKLSAgICAgICAgICAgIG1faGFzRGlmZmVyZW50VHJlZVJvb3QgPSB0cnVlOwot
ICAgICAgICAgICAgbV9yZXRhcmdldGVkUmVsYXRlZE5vZGUgPSBudWxscHRyOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZWxhdGVkTm9kZS5pbkRvY3VtZW50
KCkgIT0gdGFyZ2V0VHJlZVNjb3BlLnJvb3ROb2RlKCkuaW5Eb2N1bWVudCgpKSB7Ci0gICAgICAg
ICAgICBtX2hhc0RpZmZlcmVudFRyZWVSb290ID0gdHJ1ZTsKLSAgICAgICAgICAgIHdoaWxlICht
X3JldGFyZ2V0ZWRSZWxhdGVkTm9kZS0+aXNJblNoYWRvd1RyZWUoKSkKLSAgICAgICAgICAgICAg
ICBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZSA9IGRvd25jYXN0PFNoYWRvd1Jvb3Q+KG1fcmV0YXJn
ZXRlZFJlbGF0ZWROb2RlLT50cmVlU2NvcGUoKS5yb290Tm9kZSgpKS5ob3N0KCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjb2xsZWN0VHJlZVNjb3BlcygpOwot
Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGlzIHdoaWxlIGNvbnN0cnVj
dGluZyB0aGUgZXZlbnQgcGF0aC4KLSAgICAgICAgVmVjdG9yPFRyZWVTY29wZSosIDg+IHRhcmdl
dFRyZWVTY29wZUFuY2VzdG9yczsKLSAgICAgICAgZm9yIChUcmVlU2NvcGUqIGN1cnJlbnRUcmVl
U2NvcGUgPSAmdGFyZ2V0VHJlZVNjb3BlOyBjdXJyZW50VHJlZVNjb3BlOyBjdXJyZW50VHJlZVNj
b3BlID0gY3VycmVudFRyZWVTY29wZS0+cGFyZW50VHJlZVNjb3BlKCkpCi0gICAgICAgICAgICB0
YXJnZXRUcmVlU2NvcGVBbmNlc3RvcnMuYXBwZW5kKGN1cnJlbnRUcmVlU2NvcGUpOwotICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighdGFyZ2V0VHJlZVNjb3BlQW5jZXN0
b3JzLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgdW5zaWduZWQgaSA9IG1fYW5jZXN0b3JUcmVlU2Nv
cGVzLnNpemUoKTsKLSAgICAgICAgdW5zaWduZWQgaiA9IHRhcmdldFRyZWVTY29wZUFuY2VzdG9y
cy5zaXplKCk7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fYW5j
ZXN0b3JUcmVlU2NvcGVzLmxhc3QoKSA9PSB0YXJnZXRUcmVlU2NvcGVBbmNlc3RvcnMubGFzdCgp
KTsKLSAgICAgICAgd2hpbGUgKG1fYW5jZXN0b3JUcmVlU2NvcGVzW2kgLSAxXSA9PSB0YXJnZXRU
cmVlU2NvcGVBbmNlc3RvcnNbaiAtIDFdKSB7Ci0gICAgICAgICAgICBpLS07Ci0gICAgICAgICAg
ICBqLS07Ci0gICAgICAgICAgICBpZiAoIWkgfHwgIWopCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBtX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXggPSBpOwot
ICAgICAgICBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZSA9IG5vZGVJbkxvd2VzdENvbW1vbkFuY2Vz
dG9yKCk7Ci0gICAgfQotCi0gICAgTm9kZSogY3VycmVudE5vZGUoVHJlZVNjb3BlJiBjdXJyZW50
VHJlZVNjb3BlKQotICAgIHsKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeShjdXJyZW50VHJlZVNj
b3BlKTsKLSAgICAgICAgcmV0dXJuIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlOwotICAgIH0KLQot
ICAgIHZvaWQgbW92ZVRvTmV3VHJlZVNjb3BlKFRyZWVTY29wZSogcHJldmlvdXNUcmVlU2NvcGUs
IFRyZWVTY29wZSYgbmV3VHJlZVNjb3BlKQotICAgIHsKLSAgICAgICAgaWYgKG1faGFzRGlmZmVy
ZW50VHJlZVJvb3QpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byYgY3VycmVu
dFJlbGF0ZWROb2RlU2NvcGUgPSBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZS0+dHJlZVNjb3BlKCk7
Ci0gICAgICAgIGlmIChwcmV2aW91c1RyZWVTY29wZSAhPSAmY3VycmVudFJlbGF0ZWROb2RlU2Nv
cGUpIHsKLSAgICAgICAgICAgIC8vIGN1cnJlbnRSZWxhdGVkTm9kZSBpcyBzdGlsbCBvdXRzaWRl
IG91ciBzaGFkb3cgdHJlZS4gTmV3IHRyZWUgc2NvcGUgbWF5IGNvbnRhaW4gY3VycmVudFJlbGF0
ZWROb2RlCi0gICAgICAgICAgICAvLyBidXQgdGhlcmUgaXMgbm8gbmVlZCB0byByZS10YXJnZXQg
aXQuIE1vdmluZyBpbnRvIGEgc2xvdCAodGhlcmVieSBhIGRlZXBlciBzaGFkb3cgdHJlZSkgZG9l
c24ndCBtYXR0ZXIuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBi
b29sIGVudGVyZWRTbG90ID0gbmV3VHJlZVNjb3BlLnBhcmVudFRyZWVTY29wZSgpID09IHByZXZp
b3VzVHJlZVNjb3BlOwotICAgICAgICBpZiAoZW50ZXJlZFNsb3QpIHsKLSAgICAgICAgICAgIGlm
IChtX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXgpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9h
bmNlc3RvclRyZWVTY29wZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBjb2xsZWN0
VHJlZVNjb3BlcygpOwotICAgICAgICAgICAgICAgIGJvb2wgcmVsYXRlZE5vZGVJc0luU2xvdCA9
IG1fYW5jZXN0b3JUcmVlU2NvcGVzW21fbG93ZXN0Q29tbW9uQW5jZXN0b3JJbmRleCAtIDFdID09
ICZuZXdUcmVlU2NvcGU7Ci0gICAgICAgICAgICAgICAgaWYgKHJlbGF0ZWROb2RlSXNJblNsb3Qp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9sb3dlc3RDb21tb25BbmNlc3RvckluZGV4LS07Ci0g
ICAgICAgICAgICAgICAgICAgIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlID0gbm9kZUluTG93ZXN0
Q29tbW9uQW5jZXN0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCZuZXdUcmVlU2Nv
cGUgPT0gJm1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlLT50cmVlU2NvcGUoKSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1fcmV0
YXJnZXRlZFJlbGF0ZWROb2RlID09ICZtX3JlbGF0ZWROb2RlKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c1RyZWVTY29wZS0+cGFyZW50VHJlZVNjb3BlKCkg
PT0gJm5ld1RyZWVTY29wZSk7Ci0gICAgICAgICAgICBtX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5k
ZXgrKzsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fYW5j
ZXN0b3JUcmVlU2NvcGVzLmlzRW1wdHkoKSB8fCBtX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXgg
PCBtX2FuY2VzdG9yVHJlZVNjb3Blcy5zaXplKCkpOwotICAgICAgICAgICAgbV9yZXRhcmdldGVk
UmVsYXRlZE5vZGUgPSBkb3duY2FzdDxTaGFkb3dSb290PihjdXJyZW50UmVsYXRlZE5vZGVTY29w
ZS5yb290Tm9kZSgpKS5ob3N0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoJm5ld1RyZWVTY29wZSA9
PSAmbV9yZXRhcmdldGVkUmVsYXRlZE5vZGUtPnRyZWVTY29wZSgpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeShUcmVlU2NvcGUmIGN1cnJlbnRUcmVlU2Nv
cGUpCi0gICAgewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgZm9yIChhdXRvKiByZWxh
dGVkTm9kZVNjb3BlID0gJm1fcmVsYXRlZE5vZGUudHJlZVNjb3BlKCk7IHJlbGF0ZWROb2RlU2Nv
cGU7IHJlbGF0ZWROb2RlU2NvcGUgPSByZWxhdGVkTm9kZVNjb3BlLT5wYXJlbnRUcmVlU2NvcGUo
KSkgewotICAgICAgICAgICAgZm9yIChhdXRvKiB0YXJnZXRTY29wZSA9ICZjdXJyZW50VHJlZVNj
b3BlOyB0YXJnZXRTY29wZTsgdGFyZ2V0U2NvcGUgPSB0YXJnZXRTY29wZS0+cGFyZW50VHJlZVNj
b3BlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0U2NvcGUgPT0gcmVsYXRlZE5vZGVT
Y29wZSkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoJm1fcmV0YXJnZXRlZFJlbGF0ZWRO
b2RlLT50cmVlU2NvcGUoKSA9PSByZWxhdGVkTm9kZVNjb3BlKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBBU1NFUlQoIW1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlKTsKLSNlbHNlCi0gICAgICAg
IFVOVVNFRF9QQVJBTShjdXJyZW50VHJlZVNjb3BlKTsKLSNlbmRpZgotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBOb2RlKiBub2RlSW5Mb3dlc3RDb21tb25BbmNlc3RvcigpCi0gICAgewotICAgICAg
ICBpZiAoIW1fbG93ZXN0Q29tbW9uQW5jZXN0b3JJbmRleCkKLSAgICAgICAgICAgIHJldHVybiAm
bV9yZWxhdGVkTm9kZTsKLSAgICAgICAgYXV0byYgcm9vdE5vZGUgPSBtX2FuY2VzdG9yVHJlZVNj
b3Blc1ttX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXggLSAxXS0+cm9vdE5vZGUoKTsKLSAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PFNoYWRvd1Jvb3Q+KHJvb3ROb2RlKS5ob3N0KCk7Ci0gICAgfQot
Ci0gICAgdm9pZCBjb2xsZWN0VHJlZVNjb3BlcygpCi0gICAgewotICAgICAgICBBU1NFUlQobV9h
bmNlc3RvclRyZWVTY29wZXMuaXNFbXB0eSgpKTsKLSAgICAgICAgZm9yIChUcmVlU2NvcGUqIGN1
cnJlbnRUcmVlU2NvcGUgPSAmbV9yZWxhdGVkTm9kZS50cmVlU2NvcGUoKTsgY3VycmVudFRyZWVT
Y29wZTsgY3VycmVudFRyZWVTY29wZSA9IGN1cnJlbnRUcmVlU2NvcGUtPnBhcmVudFRyZWVTY29w
ZSgpKQotICAgICAgICAgICAgbV9hbmNlc3RvclRyZWVTY29wZXMuYXBwZW5kKGN1cnJlbnRUcmVl
U2NvcGUpOwotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbV9hbmNl
c3RvclRyZWVTY29wZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBOb2RlJiBtX3JlbGF0ZWRO
b2RlOwotICAgIE5vZGUqIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlOwotICAgIFZlY3RvcjxUcmVl
U2NvcGUqLCA4PiBtX2FuY2VzdG9yVHJlZVNjb3BlczsKLSAgICB1bnNpZ25lZCBtX2xvd2VzdENv
bW1vbkFuY2VzdG9ySW5kZXggeyAwIH07Ci0gICAgYm9vbCBtX2hhc0RpZmZlcmVudFRyZWVSb290
IHsgZmFsc2UgfTsKLX07Ci0KLXZvaWQgRXZlbnRQYXRoOjpzZXRSZWxhdGVkVGFyZ2V0KE5vZGUm
IG9yaWdpbiwgRXZlbnRUYXJnZXQmIHJlbGF0ZWRUYXJnZXQpCi17Ci0gICAgTm9kZSogcmVsYXRl
ZE5vZGUgPSByZWxhdGVkVGFyZ2V0LnRvTm9kZSgpOwotICAgIGlmICghcmVsYXRlZE5vZGUgfHwg
bV9wYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVsYXRlZE5vZGVSZXRh
cmdldGVyIHJldGFyZ2V0ZXIoKnJlbGF0ZWROb2RlLCBkb3duY2FzdDxNb3VzZU9yRm9jdXNFdmVu
dENvbnRleHQ+KCptX3BhdGhbMF0pLm5vZGUoKS0+dHJlZVNjb3BlKCkpOwotCi0gICAgYm9vbCBv
cmlnaW5Jc1JlbGF0ZWRUYXJnZXQgPSAmb3JpZ2luID09IHJlbGF0ZWROb2RlOwotICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgYWRkIGEgbmV3IGZsYWcgb24gRXZlbnQgaW5zdGVhZC4KLSAgICBib29s
IHNob3VsZFRyaW1FdmVudFBhdGggPSBtX2V2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2VvdmVyRXZlbnQKLSAgICAgICAgfHwgbV9ldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlbW92ZUV2ZW50Ci0gICAgICAgIHx8IG1fZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZW91dEV2ZW50OwotICAgIE5vZGUmIHJvb3ROb2RlSW5PcmlnaW5UcmVlU2NvcGUgPSBvcmln
aW4udHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKLSAgICBUcmVlU2NvcGUqIHByZXZpb3VzVHJlZVNj
b3BlID0gbnVsbHB0cjsKLSAgICBzaXplX3Qgb3JpZ2luYWxFdmVudFBhdGhTaXplID0gbV9wYXRo
LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGNvbnRleHRJbmRleCA9IDA7IGNvbnRleHRJbmRl
eCA8IG9yaWdpbmFsRXZlbnRQYXRoU2l6ZTsgY29udGV4dEluZGV4KyspIHsKLSAgICAgICAgYXV0
byYgY29udGV4dCA9IGRvd25jYXN0PE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dD4oKm1fcGF0aFtj
b250ZXh0SW5kZXhdKTsKLQotICAgICAgICBUcmVlU2NvcGUmIGN1cnJlbnRUcmVlU2NvcGUgPSBj
b250ZXh0Lm5vZGUoKS0+dHJlZVNjb3BlKCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShwcmV2aW91
c1RyZWVTY29wZSAmJiAmY3VycmVudFRyZWVTY29wZSAhPSBwcmV2aW91c1RyZWVTY29wZSkpCi0g
ICAgICAgICAgICByZXRhcmdldGVyLm1vdmVUb05ld1RyZWVTY29wZShwcmV2aW91c1RyZWVTY29w
ZSwgY3VycmVudFRyZWVTY29wZSk7Ci0KLSAgICAgICAgTm9kZSogY3VycmVudFJlbGF0ZWROb2Rl
ID0gcmV0YXJnZXRlci5jdXJyZW50Tm9kZShjdXJyZW50VHJlZVNjb3BlKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHNob3VsZFRyaW1FdmVudFBhdGggJiYgIW9yaWdpbklzUmVsYXRlZFRhcmdldCAm
JiBjb250ZXh0LnRhcmdldCgpID09IGN1cnJlbnRSZWxhdGVkTm9kZSkpIHsKLSAgICAgICAgICAg
IG1fcGF0aC5zaHJpbmsoY29udGV4dEluZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgY29udGV4dC5zZXRSZWxhdGVkVGFyZ2V0KGN1cnJlbnRSZWxhdGVkTm9k
ZSk7Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKHNob3VsZFRyaW1FdmVudFBhdGggJiYgb3JpZ2lu
SXNSZWxhdGVkVGFyZ2V0ICYmIGNvbnRleHQubm9kZSgpID09ICZyb290Tm9kZUluT3JpZ2luVHJl
ZVNjb3BlKSkgewotICAgICAgICAgICAgbV9wYXRoLnNocmluayhjb250ZXh0SW5kZXggKyAxKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJldmlvdXNUcmVlU2Nv
cGUgPSAmY3VycmVudFRyZWVTY29wZTsKLSAgICB9Ci19Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQotdm9pZCBFdmVudFBhdGg6OnJldGFyZ2V0VG91Y2goVG91Y2hFdmVudENvbnRleHQ6OlRv
dWNoTGlzdFR5cGUgdG91Y2hMaXN0VHlwZSwgY29uc3QgVG91Y2gmIHRvdWNoKQotewotICAgIEV2
ZW50VGFyZ2V0KiBldmVudFRhcmdldCA9IHRvdWNoLnRhcmdldCgpOwotICAgIGlmICghZXZlbnRU
YXJnZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIHRhcmdldE5vZGUgPSBldmVudFRh
cmdldC0+dG9Ob2RlKCk7Ci0gICAgaWYgKCF0YXJnZXROb2RlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBSZWxhdGVkTm9kZVJldGFyZ2V0ZXIgcmV0YXJnZXRlcigqdGFyZ2V0Tm9kZSwgbV9wYXRo
WzBdLT5ub2RlKCktPnRyZWVTY29wZSgpKTsKLSAgICBUcmVlU2NvcGUqIHByZXZpb3VzVHJlZVNj
b3BlID0gbnVsbHB0cjsKLSAgICBmb3IgKGF1dG8mIGNvbnRleHQgOiBtX3BhdGgpIHsKLSAgICAg
ICAgVHJlZVNjb3BlJiBjdXJyZW50VHJlZVNjb3BlID0gY29udGV4dC0+bm9kZSgpLT50cmVlU2Nv
cGUoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHByZXZpb3VzVHJlZVNjb3BlICYmICZjdXJyZW50
VHJlZVNjb3BlICE9IHByZXZpb3VzVHJlZVNjb3BlKSkKLSAgICAgICAgICAgIHJldGFyZ2V0ZXIu
bW92ZVRvTmV3VHJlZVNjb3BlKHByZXZpb3VzVHJlZVNjb3BlLCBjdXJyZW50VHJlZVNjb3BlKTsK
LQotICAgICAgICBOb2RlKiBjdXJyZW50UmVsYXRlZE5vZGUgPSByZXRhcmdldGVyLmN1cnJlbnRO
b2RlKGN1cnJlbnRUcmVlU2NvcGUpOwotICAgICAgICBkb3duY2FzdDxUb3VjaEV2ZW50Q29udGV4
dD4oKmNvbnRleHQpLnRvdWNoTGlzdCh0b3VjaExpc3RUeXBlKS0+YXBwZW5kKHRvdWNoLmNsb25l
V2l0aE5ld1RhcmdldChjdXJyZW50UmVsYXRlZE5vZGUpKTsKLQotICAgICAgICBwcmV2aW91c1Ry
ZWVTY29wZSA9ICZjdXJyZW50VHJlZVNjb3BlOwotICAgIH0KLX0KLQotdm9pZCBFdmVudFBhdGg6
OnJldGFyZ2V0VG91Y2hMaXN0cyhjb25zdCBUb3VjaEV2ZW50JiB0b3VjaEV2ZW50KQotewotICAg
IGlmICh0b3VjaEV2ZW50LnRvdWNoZXMoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHRvdWNoRXZlbnQudG91Y2hlcygpLT5sZW5ndGgoKTsgKytpKQotICAgICAgICAgICAgcmV0
YXJnZXRUb3VjaChUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hlcywgKnRvdWNoRXZlbnQudG91Y2hl
cygpLT5pdGVtKGkpKTsKLSAgICB9Ci0KLSAgICBpZiAodG91Y2hFdmVudC50YXJnZXRUb3VjaGVz
KCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b3VjaEV2ZW50LnRhcmdldFRv
dWNoZXMoKS0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgICAgIHJldGFyZ2V0VG91Y2goVG91Y2hF
dmVudENvbnRleHQ6OlRhcmdldFRvdWNoZXMsICp0b3VjaEV2ZW50LnRhcmdldFRvdWNoZXMoKS0+
aXRlbShpKSk7Ci0gICAgfQotCi0gICAgaWYgKHRvdWNoRXZlbnQuY2hhbmdlZFRvdWNoZXMoKSkg
ewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvdWNoRXZlbnQuY2hhbmdlZFRvdWNo
ZXMoKS0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgICAgIHJldGFyZ2V0VG91Y2goVG91Y2hFdmVu
dENvbnRleHQ6OkNoYW5nZWRUb3VjaGVzLCAqdG91Y2hFdmVudC5jaGFuZ2VkVG91Y2hlcygpLT5p
dGVtKGkpKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotYm9vbCBFdmVudFBhdGg6Omhhc0V2ZW50TGlz
dGVuZXJzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdAotewotICAgIGZvciAo
YXV0byYgZXZlbnRQYXRoIDogbV9wYXRoKSB7Ci0gICAgICAgIGlmIChldmVudFBhdGgtPm5vZGUo
KS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50UGF0aC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRQYXRoLmgiCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2lu
Y2x1ZGUgIkV2ZW50Q29udGV4dC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRl
ICJIVE1MU2xvdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUHNldWRv
RWxlbWVudC5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJUb3VjaEV2ZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBib29sIHNob3VsZEV2
ZW50Q3Jvc3NTaGFkb3dCb3VuZGFyeShFdmVudCYgZXZlbnQsIFNoYWRvd1Jvb3QmIHNoYWRvd1Jv
b3QsIEV2ZW50VGFyZ2V0JiB0YXJnZXQpCit7CisgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IHRhcmdl
dC50b05vZGUoKTsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFKFZJREVP
KQorICAgIC8vIFZpZGVvLW9ubHkgZnVsbCBzY3JlZW4gaXMgYSBtb2RlIHdoZXJlIHdlIHVzZSB0
aGUgc2hhZG93IERPTSBhcyBhbiBpbXBsZW1lbnRhdGlvbgorICAgIC8vIGRldGFpbCB0aGF0IHNo
b3VsZCBub3QgYmUgZGV0ZWN0YWJsZSBieSB0aGUgd2ViIGNvbnRlbnQuCisgICAgaWYgKHRhcmdl
dE5vZGUpIHsKKyAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB0YXJnZXROb2RlLT5kb2N1
bWVudCgpLndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogV2UgYXNzdW1lIHRoYXQgaWYgdGhlIGZ1bGwgc2NyZWVuIGVsZW1lbnQgaXMgYSBt
ZWRpYSBlbGVtZW50IHRoYXQgaXQncworICAgICAgICAgICAgLy8gdGhlIHZpZGVvLW9ubHkgZnVs
bCBzY3JlZW4uIEJvdGggaGVyZSBhbmQgZWxzZXdoZXJlLiBCdXQgdGhhdCBpcyBwcm9iYWJseSB3
cm9uZy4KKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc01lZGlhRWxlbWVudCgpICYmIHNoYWRv
d1Jvb3QuaG9zdCgpID09IGVsZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBXZWJLaXQgbmV2ZXIgYWxsb3dlZCBz
ZWxlY3RzdGFydCBldmVudCB0byBjcm9zcyB0aGUgdGhlIHNoYWRvdyBET00gYm91bmRhcnkuCisg
ICAgLy8gQ2hhbmdpbmcgdGhpcyBicmVha3MgZXhpc3Rpbmcgc2l0ZXMuCisgICAgLy8gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjE5NSBmb3IgZGV0YWlscy4K
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUoKTsKKyAgICBi
b29sIHRhcmdldElzSW5TaGFkb3dSb290ID0gdGFyZ2V0Tm9kZSAmJiAmdGFyZ2V0Tm9kZS0+dHJl
ZVNjb3BlKCkucm9vdE5vZGUoKSA9PSAmc2hhZG93Um9vdDsKKyAgICByZXR1cm4gIXRhcmdldElz
SW5TaGFkb3dSb290CisgICAgICAgIHx8ICEoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hYm9y
dEV2ZW50CisgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQK
KyAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50CisgICAgICAg
IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubG9hZEV2ZW50CisgICAgICAgIHx8IGV2ZW50
VHlwZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAorICAgICAgICB8fCBldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50CisgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5h
bWVzKCkuc2Nyb2xsRXZlbnQKKyAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5z
ZWxlY3RFdmVudAorICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdHN0
YXJ0RXZlbnQpOworfQorCitzdGF0aWMgTm9kZSogbm9kZU9ySG9zdElmUHNldWRvRWxlbWVudChO
b2RlKiBub2RlKQoreworICAgIHJldHVybiBpczxQc2V1ZG9FbGVtZW50Pigqbm9kZSkgPyBkb3du
Y2FzdDxQc2V1ZG9FbGVtZW50Pigqbm9kZSkuaG9zdEVsZW1lbnQoKSA6IG5vZGU7Cit9CisKK2Ns
YXNzIFJlbGF0ZWROb2RlUmV0YXJnZXRlciB7CitwdWJsaWM6CisgICAgUmVsYXRlZE5vZGVSZXRh
cmdldGVyKE5vZGUmIHJlbGF0ZWROb2RlLCBUcmVlU2NvcGUmIHRhcmdldFRyZWVTY29wZSk7CisK
KyAgICBOb2RlKiBjdXJyZW50Tm9kZShUcmVlU2NvcGUmIGN1cnJlbnRUcmVlU2NvcGUpOworICAg
IHZvaWQgbW92ZVRvTmV3VHJlZVNjb3BlKFRyZWVTY29wZSogcHJldmlvdXNUcmVlU2NvcGUsIFRy
ZWVTY29wZSYgbmV3VHJlZVNjb3BlKTsKKworcHJpdmF0ZToKKworICAgIE5vZGUqIG5vZGVJbkxv
d2VzdENvbW1vbkFuY2VzdG9yKCk7CisgICAgdm9pZCBjb2xsZWN0VHJlZVNjb3BlcygpOworCisj
aWYgQVNTRVJUX0RJU0FCTEVECisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KFRyZWVTY29wZSYp
IHsgfQorI2Vsc2UKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koVHJlZVNjb3BlJiBjdXJyZW50
VHJlZVNjb3BlKTsKKyNlbmRpZgorCisgICAgTm9kZSYgbV9yZWxhdGVkTm9kZTsKKyAgICBOb2Rl
KiBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZTsKKyAgICBWZWN0b3I8VHJlZVNjb3BlKiwgOD4gbV9h
bmNlc3RvclRyZWVTY29wZXM7CisgICAgdW5zaWduZWQgbV9sb3dlc3RDb21tb25BbmNlc3Rvcklu
ZGV4IHsgMCB9OworICAgIGJvb2wgbV9oYXNEaWZmZXJlbnRUcmVlUm9vdCB7IGZhbHNlIH07Cit9
OworCitFdmVudFBhdGg6OkV2ZW50UGF0aChOb2RlJiBvcmlnaW5hbFRhcmdldCwgRXZlbnQmIGV2
ZW50KQorICAgIDogbV9ldmVudChldmVudCkKK3sKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkgfHwg
RU5BQkxFKERFVEFJTFNfRUxFTUVOVCkKKyAgICBWZWN0b3I8RXZlbnRUYXJnZXQqLCAxNj4gdGFy
Z2V0U3RhY2s7CisjZW5kaWYKKworICAgIGJvb2wgaXNNb3VzZU9yRm9jdXNFdmVudCA9IGV2ZW50
LmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LmlzRm9jdXNFdmVudCgpOworI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCisgICAgYm9vbCBpc1RvdWNoRXZlbnQgPSBldmVudC5pc1RvdWNoRXZlbnQoKTsK
KyNlbmRpZgorICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBudWxscHRyOworCisgICAgTm9kZSog
bm9kZSA9IG5vZGVPckhvc3RJZlBzZXVkb0VsZW1lbnQoJm9yaWdpbmFsVGFyZ2V0KTsKKyAgICB3
aGlsZSAobm9kZSkgeworICAgICAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgICAgIHRhcmdldCA9
IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2RlKTsKKyAgICAgICAgQ29udGFp
bmVyTm9kZSogcGFyZW50OworICAgICAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IHBhcmVudCkgewor
ICAgICAgICAgICAgRXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJnZXQgPSBldmVudFRhcmdldFJlc3Bl
Y3RpbmdUYXJnZXRSdWxlcygqbm9kZSk7CisKKyAgICAgICAgICAgIGlmIChpc01vdXNlT3JGb2N1
c0V2ZW50KQorICAgICAgICAgICAgICAgIG1fcGF0aC5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxN
b3VzZU9yRm9jdXNFdmVudENvbnRleHQ+KG5vZGUsIGN1cnJlbnRUYXJnZXQsIHRhcmdldCkpOwor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgICAgICAgICBlbHNlIGlmIChpc1RvdWNoRXZl
bnQpCisgICAgICAgICAgICAgICAgbV9wYXRoLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFRvdWNo
RXZlbnRDb250ZXh0Pihub2RlLCBjdXJyZW50VGFyZ2V0LCB0YXJnZXQpKTsKKyNlbmRpZgorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fcGF0aC5hcHBlbmQoc3RkOjptYWtlX3Vu
aXF1ZTxFdmVudENvbnRleHQ+KG5vZGUsIGN1cnJlbnRUYXJnZXQsIHRhcmdldCkpOworCisgICAg
ICAgICAgICBpZiAoaXM8U2hhZG93Um9vdD4oKm5vZGUpKQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7CisKKyAgICAgICAg
ICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShT
SEFET1dfRE9NKSB8fCBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQorICAgICAgICAgICAgaWYgKFNo
YWRvd1Jvb3QqIHNoYWRvd1Jvb3RPZlBhcmVudCA9IHBhcmVudC0+c2hhZG93Um9vdCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIGFzc2lnbmVkU2xvdCA9IHNoYWRvd1Jvb3RPZlBhcmVu
dC0+ZmluZEFzc2lnbmVkU2xvdCgqbm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbm9k
ZSBpcyBhc3NpZ25lZCB0byBhIHNsb3QuIENvbnRpbnVlIGRpc3BhdGNoaW5nIHRoZSBldmVudCBh
dCB0aGlzIHNsb3QuCisgICAgICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrLmFwcGVuZCh0YXJn
ZXQpOworICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBhc3NpZ25lZFNsb3Q7CisgICAgICAg
ICAgICAgICAgICAgIHRhcmdldCA9IGFzc2lnbmVkU2xvdDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIG5vZGUgPSBwYXJlbnQ7CisgICAgICAg
IH0KKworICAgICAgICBTaGFkb3dSb290JiBzaGFkb3dSb290ID0gZG93bmNhc3Q8U2hhZG93Um9v
dD4oKm5vZGUpOworICAgICAgICAvLyBBdCBhIHNoYWRvdyByb290LiBDb250aW51ZSBkaXNwYXRj
aGluZyB0aGUgZXZlbnQgYXQgdGhlIHNoYWRvdyBob3N0LgorI2lmIEVOQUJMRShTSEFET1dfRE9N
KSB8fCBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQorICAgICAgICBpZiAoIXRhcmdldFN0YWNrLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgLy8gTW92ZSB0YXJnZXQgYmFjayB0byBhIGRlc2NlbmRh
bnQgb2YgdGhlIHNoYWRvdyBob3N0IGlmIHRoZSBldmVudCBkaWQgbm90IG9yaWdpbmF0ZSBpbiB0
aGlzIHNoYWRvdyB0cmVlIG9yIGl0cyBpbm5lciBzaGFkb3cgdHJlZXMuCisgICAgICAgICAgICB0
YXJnZXQgPSB0YXJnZXRTdGFjay5sYXN0KCk7CisgICAgICAgICAgICB0YXJnZXRTdGFjay5yZW1v
dmVMYXN0KCk7CisgICAgICAgICAgICBBU1NFUlQoc2hhZG93Um9vdC5ob3N0KCktPmNvbnRhaW5z
KHRhcmdldC0+dG9Ob2RlKCkpKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgICAg
IHRhcmdldCA9IG51bGxwdHI7CisKKyAgICAgICAgaWYgKCFzaG91bGRFdmVudENyb3NzU2hhZG93
Qm91bmRhcnkoZXZlbnQsIHNoYWRvd1Jvb3QsIG9yaWdpbmFsVGFyZ2V0KSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgbm9kZSA9IHNoYWRvd1Jvb3QuaG9zdCgpOworICAgIH0KK30KKwor
dm9pZCBFdmVudFBhdGg6OnNldFJlbGF0ZWRUYXJnZXQoTm9kZSYgb3JpZ2luLCBFdmVudFRhcmdl
dCYgcmVsYXRlZFRhcmdldCkKK3sKKyAgICBOb2RlKiByZWxhdGVkTm9kZSA9IHJlbGF0ZWRUYXJn
ZXQudG9Ob2RlKCk7CisgICAgaWYgKCFyZWxhdGVkTm9kZSB8fCBtX3BhdGguaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZWxhdGVkTm9kZVJldGFyZ2V0ZXIgcmV0YXJnZXRlcigq
cmVsYXRlZE5vZGUsIGRvd25jYXN0PE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dD4oKm1fcGF0aFsw
XSkubm9kZSgpLT50cmVlU2NvcGUoKSk7CisKKyAgICBib29sIG9yaWdpbklzUmVsYXRlZFRhcmdl
dCA9ICZvcmlnaW4gPT0gcmVsYXRlZE5vZGU7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhZGQg
YSBuZXcgZmxhZyBvbiBFdmVudCBpbnN0ZWFkLgorICAgIGJvb2wgc2hvdWxkVHJpbUV2ZW50UGF0
aCA9IG1fZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudAorICAgICAg
ICB8fCBtX2V2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQKKyAgICAg
ICAgfHwgbV9ldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQ7CisgICAg
Tm9kZSYgcm9vdE5vZGVJbk9yaWdpblRyZWVTY29wZSA9IG9yaWdpbi50cmVlU2NvcGUoKS5yb290
Tm9kZSgpOworICAgIFRyZWVTY29wZSogcHJldmlvdXNUcmVlU2NvcGUgPSBudWxscHRyOworICAg
IHNpemVfdCBvcmlnaW5hbEV2ZW50UGF0aFNpemUgPSBtX3BhdGguc2l6ZSgpOworICAgIGZvciAo
dW5zaWduZWQgY29udGV4dEluZGV4ID0gMDsgY29udGV4dEluZGV4IDwgb3JpZ2luYWxFdmVudFBh
dGhTaXplOyBjb250ZXh0SW5kZXgrKykgeworICAgICAgICBhdXRvJiBjb250ZXh0ID0gZG93bmNh
c3Q8TW91c2VPckZvY3VzRXZlbnRDb250ZXh0PigqbV9wYXRoW2NvbnRleHRJbmRleF0pOworCisg
ICAgICAgIFRyZWVTY29wZSYgY3VycmVudFRyZWVTY29wZSA9IGNvbnRleHQubm9kZSgpLT50cmVl
U2NvcGUoKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHByZXZpb3VzVHJlZVNjb3BlICYmICZjdXJy
ZW50VHJlZVNjb3BlICE9IHByZXZpb3VzVHJlZVNjb3BlKSkKKyAgICAgICAgICAgIHJldGFyZ2V0
ZXIubW92ZVRvTmV3VHJlZVNjb3BlKHByZXZpb3VzVHJlZVNjb3BlLCBjdXJyZW50VHJlZVNjb3Bl
KTsKKworICAgICAgICBOb2RlKiBjdXJyZW50UmVsYXRlZE5vZGUgPSByZXRhcmdldGVyLmN1cnJl
bnROb2RlKGN1cnJlbnRUcmVlU2NvcGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2hvdWxkVHJp
bUV2ZW50UGF0aCAmJiAhb3JpZ2luSXNSZWxhdGVkVGFyZ2V0ICYmIGNvbnRleHQudGFyZ2V0KCkg
PT0gY3VycmVudFJlbGF0ZWROb2RlKSkgeworICAgICAgICAgICAgbV9wYXRoLnNocmluayhjb250
ZXh0SW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjb250
ZXh0LnNldFJlbGF0ZWRUYXJnZXQoY3VycmVudFJlbGF0ZWROb2RlKTsKKworICAgICAgICBpZiAo
VU5MSUtFTFkoc2hvdWxkVHJpbUV2ZW50UGF0aCAmJiBvcmlnaW5Jc1JlbGF0ZWRUYXJnZXQgJiYg
Y29udGV4dC5ub2RlKCkgPT0gJnJvb3ROb2RlSW5PcmlnaW5UcmVlU2NvcGUpKSB7CisgICAgICAg
ICAgICBtX3BhdGguc2hyaW5rKGNvbnRleHRJbmRleCArIDEpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBwcmV2aW91c1RyZWVTY29wZSA9ICZjdXJyZW50VHJlZVNj
b3BlOworICAgIH0KK30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCit2b2lkIEV2ZW50UGF0
aDo6cmV0YXJnZXRUb3VjaChUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlwZSB0b3VjaExp
c3RUeXBlLCBjb25zdCBUb3VjaCYgdG91Y2gpCit7CisgICAgRXZlbnRUYXJnZXQqIGV2ZW50VGFy
Z2V0ID0gdG91Y2gudGFyZ2V0KCk7CisgICAgaWYgKCFldmVudFRhcmdldCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IGV2ZW50VGFyZ2V0LT50b05vZGUoKTsKKyAg
ICBpZiAoIXRhcmdldE5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbGF0ZWROb2RlUmV0
YXJnZXRlciByZXRhcmdldGVyKCp0YXJnZXROb2RlLCBtX3BhdGhbMF0tPm5vZGUoKS0+dHJlZVNj
b3BlKCkpOworICAgIFRyZWVTY29wZSogcHJldmlvdXNUcmVlU2NvcGUgPSBudWxscHRyOworICAg
IGZvciAoYXV0byYgY29udGV4dCA6IG1fcGF0aCkgeworICAgICAgICBUcmVlU2NvcGUmIGN1cnJl
bnRUcmVlU2NvcGUgPSBjb250ZXh0LT5ub2RlKCktPnRyZWVTY29wZSgpOworICAgICAgICBpZiAo
VU5MSUtFTFkocHJldmlvdXNUcmVlU2NvcGUgJiYgJmN1cnJlbnRUcmVlU2NvcGUgIT0gcHJldmlv
dXNUcmVlU2NvcGUpKQorICAgICAgICAgICAgcmV0YXJnZXRlci5tb3ZlVG9OZXdUcmVlU2NvcGUo
cHJldmlvdXNUcmVlU2NvcGUsIGN1cnJlbnRUcmVlU2NvcGUpOworCisgICAgICAgIE5vZGUqIGN1
cnJlbnRSZWxhdGVkTm9kZSA9IHJldGFyZ2V0ZXIuY3VycmVudE5vZGUoY3VycmVudFRyZWVTY29w
ZSk7CisgICAgICAgIGRvd25jYXN0PFRvdWNoRXZlbnRDb250ZXh0PigqY29udGV4dCkudG91Y2hM
aXN0KHRvdWNoTGlzdFR5cGUpLT5hcHBlbmQodG91Y2guY2xvbmVXaXRoTmV3VGFyZ2V0KGN1cnJl
bnRSZWxhdGVkTm9kZSkpOworCisgICAgICAgIHByZXZpb3VzVHJlZVNjb3BlID0gJmN1cnJlbnRU
cmVlU2NvcGU7CisgICAgfQorfQorCit2b2lkIEV2ZW50UGF0aDo6cmV0YXJnZXRUb3VjaExpc3Rz
KGNvbnN0IFRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCit7CisgICAgaWYgKHRvdWNoRXZlbnQudG91
Y2hlcygpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG91Y2hFdmVudC50b3Vj
aGVzKCktPmxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICByZXRhcmdldFRvdWNoKFRvdWNoRXZl
bnRDb250ZXh0OjpUb3VjaGVzLCAqdG91Y2hFdmVudC50b3VjaGVzKCktPml0ZW0oaSkpOworICAg
IH0KKworICAgIGlmICh0b3VjaEV2ZW50LnRhcmdldFRvdWNoZXMoKSkgeworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHRvdWNoRXZlbnQudGFyZ2V0VG91Y2hlcygpLT5sZW5ndGgoKTsg
KytpKQorICAgICAgICAgICAgcmV0YXJnZXRUb3VjaChUb3VjaEV2ZW50Q29udGV4dDo6VGFyZ2V0
VG91Y2hlcywgKnRvdWNoRXZlbnQudGFyZ2V0VG91Y2hlcygpLT5pdGVtKGkpKTsKKyAgICB9CisK
KyAgICBpZiAodG91Y2hFdmVudC5jaGFuZ2VkVG91Y2hlcygpKSB7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdG91Y2hFdmVudC5jaGFuZ2VkVG91Y2hlcygpLT5sZW5ndGgoKTsgKytp
KQorICAgICAgICAgICAgcmV0YXJnZXRUb3VjaChUb3VjaEV2ZW50Q29udGV4dDo6Q2hhbmdlZFRv
dWNoZXMsICp0b3VjaEV2ZW50LmNoYW5nZWRUb3VjaGVzKCktPml0ZW0oaSkpOworICAgIH0KK30K
KyNlbmRpZgorCitib29sIEV2ZW50UGF0aDo6aGFzRXZlbnRMaXN0ZW5lcnMoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBldmVudFBhdGggOiBt
X3BhdGgpIHsKKyAgICAgICAgaWYgKGV2ZW50UGF0aC0+bm9kZSgpLT5oYXNFdmVudExpc3RlbmVy
cyhldmVudFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitSZWxhdGVkTm9kZVJldGFyZ2V0ZXI6OlJlbGF0ZWROb2RlUmV0YXJn
ZXRlcihOb2RlJiByZWxhdGVkTm9kZSwgVHJlZVNjb3BlJiB0YXJnZXRUcmVlU2NvcGUpCisgICAg
OiBtX3JlbGF0ZWROb2RlKHJlbGF0ZWROb2RlKQorICAgICwgbV9yZXRhcmdldGVkUmVsYXRlZE5v
ZGUoJnJlbGF0ZWROb2RlKQoreworICAgIFRyZWVTY29wZSogY3VycmVudFRyZWVTY29wZSA9ICZt
X3JlbGF0ZWROb2RlLnRyZWVTY29wZSgpOworICAgIGlmIChMSUtFTFkoY3VycmVudFRyZWVTY29w
ZSA9PSAmdGFyZ2V0VHJlZVNjb3BlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCZjdXJy
ZW50VHJlZVNjb3BlLT5kb2N1bWVudFNjb3BlKCkgIT0gJnRhcmdldFRyZWVTY29wZS5kb2N1bWVu
dFNjb3BlKCkpIHsKKyAgICAgICAgbV9oYXNEaWZmZXJlbnRUcmVlUm9vdCA9IHRydWU7CisgICAg
ICAgIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAocmVsYXRlZE5vZGUuaW5Eb2N1bWVudCgpICE9IHRhcmdldFRyZWVTY29w
ZS5yb290Tm9kZSgpLmluRG9jdW1lbnQoKSkgeworICAgICAgICBtX2hhc0RpZmZlcmVudFRyZWVS
b290ID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlLT5pc0lu
U2hhZG93VHJlZSgpKQorICAgICAgICAgICAgbV9yZXRhcmdldGVkUmVsYXRlZE5vZGUgPSBkb3du
Y2FzdDxTaGFkb3dSb290PihtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZS0+dHJlZVNjb3BlKCkucm9v
dE5vZGUoKSkuaG9zdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29sbGVjdFRy
ZWVTY29wZXMoKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGlzIHdoaWxl
IGNvbnN0cnVjdGluZyB0aGUgZXZlbnQgcGF0aC4KKyAgICBWZWN0b3I8VHJlZVNjb3BlKiwgOD4g
dGFyZ2V0VHJlZVNjb3BlQW5jZXN0b3JzOworICAgIGZvciAoVHJlZVNjb3BlKiBjdXJyZW50VHJl
ZVNjb3BlID0gJnRhcmdldFRyZWVTY29wZTsgY3VycmVudFRyZWVTY29wZTsgY3VycmVudFRyZWVT
Y29wZSA9IGN1cnJlbnRUcmVlU2NvcGUtPnBhcmVudFRyZWVTY29wZSgpKQorICAgICAgICB0YXJn
ZXRUcmVlU2NvcGVBbmNlc3RvcnMuYXBwZW5kKGN1cnJlbnRUcmVlU2NvcGUpOworICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCF0YXJnZXRUcmVlU2NvcGVBbmNlc3RvcnMuaXNF
bXB0eSgpKTsKKworICAgIHVuc2lnbmVkIGkgPSBtX2FuY2VzdG9yVHJlZVNjb3Blcy5zaXplKCk7
CisgICAgdW5zaWduZWQgaiA9IHRhcmdldFRyZWVTY29wZUFuY2VzdG9ycy5zaXplKCk7CisgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9hbmNlc3RvclRyZWVTY29wZXMubGFz
dCgpID09IHRhcmdldFRyZWVTY29wZUFuY2VzdG9ycy5sYXN0KCkpOworICAgIHdoaWxlIChtX2Fu
Y2VzdG9yVHJlZVNjb3Blc1tpIC0gMV0gPT0gdGFyZ2V0VHJlZVNjb3BlQW5jZXN0b3JzW2ogLSAx
XSkgeworICAgICAgICBpLS07CisgICAgICAgIGotLTsKKyAgICAgICAgaWYgKCFpIHx8ICFqKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9sb3dlc3RDb21tb25BbmNlc3Rvcklu
ZGV4ID0gaTsKKyAgICBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZSA9IG5vZGVJbkxvd2VzdENvbW1v
bkFuY2VzdG9yKCk7Cit9CisKK2lubGluZSBOb2RlKiBSZWxhdGVkTm9kZVJldGFyZ2V0ZXI6OmN1
cnJlbnROb2RlKFRyZWVTY29wZSYgY3VycmVudFRyZWVTY29wZSkKK3sKKyAgICBjaGVja0NvbnNp
c3RlbmN5KGN1cnJlbnRUcmVlU2NvcGUpOworICAgIHJldHVybiBtX3JldGFyZ2V0ZWRSZWxhdGVk
Tm9kZTsKK30KKwordm9pZCBSZWxhdGVkTm9kZVJldGFyZ2V0ZXI6Om1vdmVUb05ld1RyZWVTY29w
ZShUcmVlU2NvcGUqIHByZXZpb3VzVHJlZVNjb3BlLCBUcmVlU2NvcGUmIG5ld1RyZWVTY29wZSkK
K3sKKyAgICBpZiAobV9oYXNEaWZmZXJlbnRUcmVlUm9vdCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byYgY3VycmVudFJlbGF0ZWROb2RlU2NvcGUgPSBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9k
ZS0+dHJlZVNjb3BlKCk7CisgICAgaWYgKHByZXZpb3VzVHJlZVNjb3BlICE9ICZjdXJyZW50UmVs
YXRlZE5vZGVTY29wZSkgeworICAgICAgICAvLyBjdXJyZW50UmVsYXRlZE5vZGUgaXMgc3RpbGwg
b3V0c2lkZSBvdXIgc2hhZG93IHRyZWUuIE5ldyB0cmVlIHNjb3BlIG1heSBjb250YWluIGN1cnJl
bnRSZWxhdGVkTm9kZQorICAgICAgICAvLyBidXQgdGhlcmUgaXMgbm8gbmVlZCB0byByZS10YXJn
ZXQgaXQuIE1vdmluZyBpbnRvIGEgc2xvdCAodGhlcmVieSBhIGRlZXBlciBzaGFkb3cgdHJlZSkg
ZG9lc24ndCBtYXR0ZXIuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGVudGVy
ZWRTbG90ID0gbmV3VHJlZVNjb3BlLnBhcmVudFRyZWVTY29wZSgpID09IHByZXZpb3VzVHJlZVNj
b3BlOworICAgIGlmIChlbnRlcmVkU2xvdCkgeworICAgICAgICBpZiAobV9sb3dlc3RDb21tb25B
bmNlc3RvckluZGV4KSB7CisgICAgICAgICAgICBpZiAobV9hbmNlc3RvclRyZWVTY29wZXMuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbGxlY3RUcmVlU2NvcGVzKCk7CisgICAgICAgICAg
ICBib29sIHJlbGF0ZWROb2RlSXNJblNsb3QgPSBtX2FuY2VzdG9yVHJlZVNjb3Blc1ttX2xvd2Vz
dENvbW1vbkFuY2VzdG9ySW5kZXggLSAxXSA9PSAmbmV3VHJlZVNjb3BlOworICAgICAgICAgICAg
aWYgKHJlbGF0ZWROb2RlSXNJblNsb3QpIHsKKyAgICAgICAgICAgICAgICBtX2xvd2VzdENvbW1v
bkFuY2VzdG9ySW5kZXgtLTsKKyAgICAgICAgICAgICAgICBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9k
ZSA9IG5vZGVJbkxvd2VzdENvbW1vbkFuY2VzdG9yKCk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCZuZXdUcmVlU2NvcGUgPT0gJm1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlLT50cmVlU2NvcGUoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUKG1fcmV0
YXJnZXRlZFJlbGF0ZWROb2RlID09ICZtX3JlbGF0ZWROb2RlKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBBU1NFUlQocHJldmlvdXNUcmVlU2NvcGUtPnBhcmVudFRyZWVTY29wZSgpID09ICZuZXdU
cmVlU2NvcGUpOworICAgICAgICBtX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXgrKzsKKyAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9hbmNlc3RvclRyZWVTY29wZXMu
aXNFbXB0eSgpIHx8IG1fbG93ZXN0Q29tbW9uQW5jZXN0b3JJbmRleCA8IG1fYW5jZXN0b3JUcmVl
U2NvcGVzLnNpemUoKSk7CisgICAgICAgIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlID0gZG93bmNh
c3Q8U2hhZG93Um9vdD4oY3VycmVudFJlbGF0ZWROb2RlU2NvcGUucm9vdE5vZGUoKSkuaG9zdCgp
OworICAgICAgICBBU1NFUlQoJm5ld1RyZWVTY29wZSA9PSAmbV9yZXRhcmdldGVkUmVsYXRlZE5v
ZGUtPnRyZWVTY29wZSgpKTsKKyAgICB9Cit9CisKK2lubGluZSBOb2RlKiBSZWxhdGVkTm9kZVJl
dGFyZ2V0ZXI6Om5vZGVJbkxvd2VzdENvbW1vbkFuY2VzdG9yKCkKK3sKKyAgICBpZiAoIW1fbG93
ZXN0Q29tbW9uQW5jZXN0b3JJbmRleCkKKyAgICAgICAgcmV0dXJuICZtX3JlbGF0ZWROb2RlOwor
ICAgIGF1dG8mIHJvb3ROb2RlID0gbV9hbmNlc3RvclRyZWVTY29wZXNbbV9sb3dlc3RDb21tb25B
bmNlc3RvckluZGV4IC0gMV0tPnJvb3ROb2RlKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFNoYWRv
d1Jvb3Q+KHJvb3ROb2RlKS5ob3N0KCk7Cit9CisKK3ZvaWQgUmVsYXRlZE5vZGVSZXRhcmdldGVy
Ojpjb2xsZWN0VHJlZVNjb3BlcygpCit7CisgICAgQVNTRVJUKG1fYW5jZXN0b3JUcmVlU2NvcGVz
LmlzRW1wdHkoKSk7CisgICAgZm9yIChUcmVlU2NvcGUqIGN1cnJlbnRUcmVlU2NvcGUgPSAmbV9y
ZWxhdGVkTm9kZS50cmVlU2NvcGUoKTsgY3VycmVudFRyZWVTY29wZTsgY3VycmVudFRyZWVTY29w
ZSA9IGN1cnJlbnRUcmVlU2NvcGUtPnBhcmVudFRyZWVTY29wZSgpKQorICAgICAgICBtX2FuY2Vz
dG9yVHJlZVNjb3Blcy5hcHBlbmQoY3VycmVudFRyZWVTY29wZSk7CisgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oIW1fYW5jZXN0b3JUcmVlU2NvcGVzLmlzRW1wdHkoKSk7Cit9
CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECit2b2lkIFJlbGF0ZWROb2RlUmV0YXJnZXRlcjo6Y2hl
Y2tDb25zaXN0ZW5jeShUcmVlU2NvcGUmIGN1cnJlbnRUcmVlU2NvcGUpCit7CisgICAgZm9yIChh
dXRvKiByZWxhdGVkTm9kZVNjb3BlID0gJm1fcmVsYXRlZE5vZGUudHJlZVNjb3BlKCk7IHJlbGF0
ZWROb2RlU2NvcGU7IHJlbGF0ZWROb2RlU2NvcGUgPSByZWxhdGVkTm9kZVNjb3BlLT5wYXJlbnRU
cmVlU2NvcGUoKSkgeworICAgICAgICBmb3IgKGF1dG8qIHRhcmdldFNjb3BlID0gJmN1cnJlbnRU
cmVlU2NvcGU7IHRhcmdldFNjb3BlOyB0YXJnZXRTY29wZSA9IHRhcmdldFNjb3BlLT5wYXJlbnRU
cmVlU2NvcGUoKSkgeworICAgICAgICAgICAgaWYgKHRhcmdldFNjb3BlID09IHJlbGF0ZWROb2Rl
U2NvcGUpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoJm1fcmV0YXJnZXRlZFJlbGF0ZWROb2Rl
LT50cmVlU2NvcGUoKSA9PSByZWxhdGVkTm9kZVNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKCFtX3JldGFy
Z2V0ZWRSZWxhdGVkTm9kZSk7Cit9CisjZW5kaWYKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50UGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBh
dGguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgRXZlbnRQYXRoX2gKKyNk
ZWZpbmUgRXZlbnRQYXRoX2gKKworI2luY2x1ZGUgIkV2ZW50Q29udGV4dC5oIgorI2luY2x1ZGUg
IlBzZXVkb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZH
VXNlRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV2ZW50UGF0aCB7CitwdWJs
aWM6CisgICAgRXZlbnRQYXRoKE5vZGUmIG9yaWdpbiwgRXZlbnQmKTsKKworICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5pc0VtcHR5KCk7IH0KKyAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5zaXplKCk7IH0KKyAgICBjb25zdCBFdmVudENvbnRl
eHQmIGNvbnRleHRBdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gKm1fcGF0aFtpXTsgfQorICAg
IEV2ZW50Q29udGV4dCYgY29udGV4dEF0KHNpemVfdCBpKSB7IHJldHVybiAqbV9wYXRoW2ldOyB9
CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHZvaWQgcmV0YXJnZXRUb3VjaExpc3Rz
KGNvbnN0IFRvdWNoRXZlbnQmKTsKKyNlbmRpZgorICAgIHZvaWQgc2V0UmVsYXRlZFRhcmdldChO
b2RlJiBvcmlnaW4sIEV2ZW50VGFyZ2V0Jik7CisKKyAgICBib29sIGhhc0V2ZW50TGlzdGVuZXJz
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdDsKKworICAgIEV2ZW50Q29udGV4
dCogbGFzdENvbnRleHRJZkV4aXN0cygpIHsgcmV0dXJuIG1fcGF0aC5pc0VtcHR5KCkgPyBudWxs
cHRyIDogbV9wYXRoLmxhc3QoKS5nZXQoKTsgfQorCisgICAgc3RhdGljIEV2ZW50VGFyZ2V0KiBl
dmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhOb2RlJiByZWZlcmVuY2VOb2RlKQorICAg
IHsKKyAgICAgICAgaWYgKGlzPFBzZXVkb0VsZW1lbnQ+KHJlZmVyZW5jZU5vZGUpKQorICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KHJlZmVyZW5jZU5vZGUpLmhvc3RF
bGVtZW50KCk7CisKKyAgICAgICAgLy8gRXZlbnRzIHNlbnQgdG8gZWxlbWVudHMgaW5zaWRlIGFu
IFNWRyB1c2UgZWxlbWVudCdzIHNoYWRvdyB0cmVlIGdvIHRvIHRoZSB1c2UgZWxlbWVudC4KKyAg
ICAgICAgaWYgKGlzPFNWR0VsZW1lbnQ+KHJlZmVyZW5jZU5vZGUpKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byogdXNlRWxlbWVudCA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlZmVyZW5jZU5vZGUp
LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHVzZUVs
ZW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gJnJlZmVyZW5jZU5vZGU7CisgICAg
fQorCitwcml2YXRlOgorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdm9pZCByZXRhcmdl
dFRvdWNoKFRvdWNoRXZlbnRDb250ZXh0OjpUb3VjaExpc3RUeXBlLCBjb25zdCBUb3VjaCYpOwor
I2VuZGlmCisKKyAgICBFdmVudCYgbV9ldmVudDsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PEV2ZW50Q29udGV4dD4sIDMyPiBtX3BhdGg7Cit9OworCit9CisKKyNlbmRpZiAvKiBFdmVudFBh
dGhfaCAqLwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273532</attachid>
            <date>2016-03-09 19:59:28 -0800</date>
            <delta_ts>2016-03-09 21:28:32 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-155285-20160309195915.patch</filename>
            <type>text/plain</type>
            <size>42299</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzkxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE2LTAzLTA5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEV4dHJhY3QgRXZlbnRQYXRoLmgv
Y3BwIG91dCBvZiBFdmVudERpc3BhdGNoZXIuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUyODUKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJp
cyBEdW1lei4KKworICAgICAgICBFeHRyYWN0ZWQgRXZlbnRQYXRoLmgvY3BwIG91dCBvZiBFdmVu
dERpc3BhdGNoZXIuY3BwIHRvIGFkZCB0aGUgc3VwcG9ydCBmb3IgRXZlbnQuZGVlcFBhdGgoKQor
ICAgICAgICBpbiB3ZWJraXQub3JnL2IvMTUzNTM4LiBUaGUgbmV3IGZpbGUgZGVmaW5lcyBtZW1i
ZXIgZnVuY3Rpb25zIG9mIEV2ZW50UGF0aCBhbmQgUmVsYXRlZE5vZGVSZXRhcmdldGVyLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9ET01BbGxJbk9uZS5jcHA6CisgICAgICAgICog
ZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRj
aGVyOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UGF0aCk6IE1vdmVk
IHRvIEV2ZW50UGF0aC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpldmVudFRhcmdldFJlc3BlY3Rp
bmdUYXJnZXRSdWxlcyk6IE1vdmVkIHRvIEV2ZW50UGF0aC5oLgorICAgICAgICAoV2ViQ29yZTo6
c2hvdWxkRXZlbnRDcm9zc1NoYWRvd0JvdW5kYXJ5KTogTW92ZWQgdG8gRXZlbnRQYXRoLmNwcC4K
KyAgICAgICAgKFdlYkNvcmU6Om5vZGVPckhvc3RJZlBzZXVkb0VsZW1lbnQpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbGF0ZWROb2RlUmV0YXJnZXRlcik6IE1vdmVkIHRvIEV2ZW50UGF0
aC5jcHAuCisgICAgICAgICogZG9tL0V2ZW50UGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkRXZlbnRDcm9zc1NoYWRvd0JvdW5kYXJ5KTogTW92ZWQgZnJvbSBFdmVudERp
c3BhdGNoZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6bm9kZU9ySG9zdElmUHNldWRvRWxlbWVu
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRQYXRoOjpFdmVudFBhdGgpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbGF0ZWROb2RlUmV0YXJnZXRlcik6IERpdHRvLgorICAg
ICAgICAqIGRvbS9FdmVudFBhdGguaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudFBh
dGg6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRQYXRoOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50UGF0aDo6Y29udGV4dEF0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50UGF0aDo6bGFzdENvbnRleHRJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFBh
dGg6OmV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKTogTW92ZWQgZnJvbSBFdmVudERp
c3BhdGNoZXIuY3BwLgorCiAyMDE2LTAzLTA5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIGRlZmluZUVsZW1lbnQgc2hvdWxkIHVwZ3JhZGUgZXhpc3RpbmcgdW5y
ZXNvbHZlZCBjdXN0b20gZWxlbWVudHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAxOTc5MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTQ0OSw2ICsxNDQ5LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9FdmVu
dERpc3BhdGNoZXIuY3BwCiAgICAgZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCiAgICAgZG9tL0V2
ZW50TmFtZXMuY3BwCisgICAgZG9tL0V2ZW50UGF0aC5jcHAKICAgICBkb20vRXZlbnRUYXJnZXQu
Y3BwCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCiAgICAgZG9tL0V4Y2VwdGlvbkNvZGVQbGFj
ZWhvbGRlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NzkxNykKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDAzNiw2
ICs0MDM2LDggQEAKIAkJOUI2OUQzQjgxQjk5MTAwNzAwRTM1MTJCIC8qIEpTSFRNTFNsb3RFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
NjlEM0I2MUI5OTEwMDcwMEUzNTEyQiAvKiBKU0hUTUxTbG90RWxlbWVudC5jcHAgKi87IH07CiAJ
CTlCNjlEM0I5MUI5OTEwMDcwMEUzNTEyQiAvKiBKU0hUTUxTbG90RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI2OUQzQjcxQjk5MTAwNzAw
RTM1MTJCIC8qIEpTSFRNTFNsb3RFbGVtZW50LmggKi87IH07CiAJCTlCNkM0MTUzMTM0NDk0OTAw
MDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjZDNDE1MjEzNDQ5NDkwMDAwODVCNjIgLyogU3RyaW5n
V2l0aERpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTlCNzE0RTIwMUM5MTE2NjkwMEFDMEU5MiAvKiBFdmVudFBhdGguY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI3MTRFMUUxQzkxMTY2
OTAwQUMwRTkyIC8qIEV2ZW50UGF0aC5jcHAgKi87IH07CisJCTlCNzE0RTIxMUM5MTE2NjkwMEFD
MEU5MiAvKiBFdmVudFBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDlCNzE0RTFGMUM5MTE2NjkwMEFDMEU5MiAvKiBFdmVudFBhdGguaCAqLzsgfTsK
IAkJOUJBMjczRjQxNzIyMDZCQjAwOTdDRTQ3IC8qIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNo
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQTI3
M0YzMTcyMjA2QkIwMDk3Q0U0NyAvKiBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmggKi87
IH07CiAJCTlCQUI2QzZDMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQUI2QzZBMTI1NTA2MzEw
MDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk5QkFCNkM2RDEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0
eWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
QUI2QzZCMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuY3BwICovOyB9OwpAQCAtMTE3
MzgsNiArMTE3NDAsOCBAQAogCQk5QjZCQzk2MDFCOTc1OTY2MDA1QUUxRjAgLyogSlNTaGFkb3dS
b290LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2hhZG93Um9v
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNkJDOTYxMUI5NzU5NjYwMDVB
RTFGMCAvKiBKU1NoYWRvd1Jvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNTaGFkb3dSb290Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCNkM0MTUyMTM0
NDk0OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0cmluZ1dpdGhEaXJlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOUI3MTRFMUUxQzkxMTY2OTAwQUMwRTkyIC8qIEV2ZW50UGF0aC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudFBhdGguY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5QjcxNEUxRjFDOTExNjY5MDBBQzBFOTIgLyogRXZlbnRQ
YXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50UGF0aC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkEyNzNGMzE3MjIwNkJCMDA5N0NFNDcgLyogTG9n
aWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlCQUI2QzZBMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ1N0eWxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTlCQUI2QzZCMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRWRpdGluZ1N0eWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2ODI4LDcgKzE2ODMyLDcgQEAK
IAkJCQk0MUY1NEY3RDFDNTBDNEY2MDAzMzg0ODggLyogRmV0Y2hCb2R5LmNwcCAqLywKIAkJCQk0
MUY1NEY3RTFDNTBDNEY2MDAzMzg0ODggLyogRmV0Y2hCb2R5LmggKi8sCiAJCQkJNDFGNTRGN0Yx
QzUwQzRGNjAwMzM4NDg4IC8qIEZldGNoQm9keS5pZGwgKi8sCi0gCQkJCTQxNDdFMkIyMUM4ODMz
N0YwMEE3RTcxNSAvKiBGZXRjaEJvZHlPd25lci5oICovLAorCQkJCTQxNDdFMkIyMUM4ODMzN0Yw
MEE3RTcxNSAvKiBGZXRjaEJvZHlPd25lci5oICovLAogCQkJCTQxRjU0RjgyMUM1MEM0RjYwMDMz
ODQ4OCAvKiBGZXRjaEhlYWRlcnMuY3BwICovLAogCQkJCTQxRjU0RjgzMUM1MEM0RjYwMDMzODQ4
OCAvKiBGZXRjaEhlYWRlcnMuaCAqLywKIAkJCQk0MUY1NEY4NDFDNTBDNEY2MDAzMzg0ODggLyog
RmV0Y2hIZWFkZXJzLmlkbCAqLywKQEAgLTI0MzQ0LDYgKzI0MzQ4LDggQEAKIAkJCQk5Mzk4ODVD
MTA4QjdFM0QxMDBFNzA3QzQgLyogRXZlbnROYW1lcy5jcHAgKi8sCiAJCQkJOTM5ODg1QzIwOEI3
RTNEMTAwRTcwN0M0IC8qIEV2ZW50TmFtZXMuaCAqLywKIAkJCQlCQzlBNjE0MjE0Njg1OUQ5MDA2
MDU3RkQgLyogRXZlbnROYW1lcy5pbiAqLywKKwkJCQk5QjcxNEUxRTFDOTExNjY5MDBBQzBFOTIg
LyogRXZlbnRQYXRoLmNwcCAqLywKKwkJCQk5QjcxNEUxRjFDOTExNjY5MDBBQzBFOTIgLyogRXZl
bnRQYXRoLmggKi8sCiAJCQkJOEY2NzU2MTkxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVldWUu
aCAqLywKIAkJCQlDRTVDQjFCMzE0RURBQjZGMDBCQjI3OTUgLyogRXZlbnRTZW5kZXIuaCAqLywK
IAkJCQlFMTJFREJFOTBCMzA4RTBCMDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuY3BwICovLApAQCAt
Mjc2MTksNiArMjc2MjUsNyBAQAogCQkJCUJDQTg0NkQ3MERDNjdBMzUwMDI2QzMwOSAvKiBSZW5k
ZXJSZXBsaWNhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc5RkFFRTEwOUFFMzc1MDBERUQ2NTUg
LyogUmVuZGVyUnVieS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3OUZBRjAxMDlBRTM3NTAwREVE
NjU1IC8qIFJlbmRlclJ1YnlCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjcxNEUyMTFDOTEx
NjY5MDBBQzBFOTIgLyogRXZlbnRQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc5RkFGMjEw
OUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVJ1bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3
OUZBRjQxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlUZXh0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzNCRTk5NDBFOUMxQzdDMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI5NDA2LDYgKzI5NDEzLDcgQEAKIAkJCQk1OUE4RjFENDExQTY5NTA4MDAx
QUMzNEEgLyogRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTU5RDFDMTA0MTFFQjVEQ0YwMEI2MzhDOCAvKiBEZXZpY2VPcmllbnRhdGlvbkRhdGEuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTlBODVFQTIxMTlENjhEOTAwREVGMUVGIC8qIERldmljZU9y
aWVudGF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUI3MTRFMjAxQzkxMTY2OTAw
QUMwRTkyIC8qIEV2ZW50UGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNjc3MjVGQzFBNUIz
QUQ5MDAzQzI0REQgLyogREZBLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDOUE3QTc1MUFBMEY2
RUEwMDk1OEFDRiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDOUE3QTc2MUFBMEY2RUQwMDk1OEFDRiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCShyZXZpc2lv
biAxOTc5MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmNwcCIK
ICNpbmNsdWRlICJFdmVudExpc3RlbmVyTWFwLmNwcCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmNw
cCIKKyNpbmNsdWRlICJFdmVudFBhdGguY3BwIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmNwcCIK
ICNpbmNsdWRlICJFeGNlcHRpb25CYXNlLmNwcCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxh
Y2Vob2xkZXIuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAJ
KHJldmlzaW9uIDE5NzkxNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNyArMjcsMTMgQEAKICNpbmNsdWRlICJFdmVudERp
c3BhdGNoZXIuaCIKIAogI2luY2x1ZGUgIkV2ZW50Q29udGV4dC5oIgotI2luY2x1ZGUgIkZvY3Vz
RXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudFBhdGguaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQu
aCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCiAjaW5jbHVkZSAiU2NvcGVkRXZlbnRRdWV1
ZS5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2lu
Y2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKICNpbmNsdWRlICJUb3VjaEV2ZW50LmgiCiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKQEAgLTc3LDUxICs3MywxMCBAQCBib29sIFdpbmRv
d0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWNs
YXNzIEV2ZW50UGF0aCB7Ci1wdWJsaWM6Ci0gICAgRXZlbnRQYXRoKE5vZGUmIG9yaWdpbiwgRXZl
bnQmKTsKLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5pc0VtcHR5
KCk7IH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5zaXplKCk7IH0K
LSAgICBjb25zdCBFdmVudENvbnRleHQmIGNvbnRleHRBdChzaXplX3QgaSkgY29uc3QgeyByZXR1
cm4gKm1fcGF0aFtpXTsgfQotICAgIEV2ZW50Q29udGV4dCYgY29udGV4dEF0KHNpemVfdCBpKSB7
IHJldHVybiAqbV9wYXRoW2ldOyB9Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHZv
aWQgcmV0YXJnZXRUb3VjaExpc3RzKGNvbnN0IFRvdWNoRXZlbnQmKTsKLSNlbmRpZgotICAgIHZv
aWQgc2V0UmVsYXRlZFRhcmdldChOb2RlJiBvcmlnaW4sIEV2ZW50VGFyZ2V0Jik7Ci0KLSAgICBi
b29sIGhhc0V2ZW50TGlzdGVuZXJzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25z
dDsKLQotICAgIEV2ZW50Q29udGV4dCogbGFzdENvbnRleHRJZkV4aXN0cygpIHsgcmV0dXJuIG1f
cGF0aC5pc0VtcHR5KCkgPyBudWxscHRyIDogbV9wYXRoLmxhc3QoKS5nZXQoKTsgfQotCi1wcml2
YXRlOgotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZXRhcmdldFRvdWNoKFRv
dWNoRXZlbnRDb250ZXh0OjpUb3VjaExpc3RUeXBlLCBjb25zdCBUb3VjaCYpOwotI2VuZGlmCi0K
LSAgICBFdmVudCYgbV9ldmVudDsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV2ZW50Q29u
dGV4dD4sIDMyPiBtX3BhdGg7Ci19OwotCi1pbmxpbmUgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0
UmVzcGVjdGluZ1RhcmdldFJ1bGVzKE5vZGUmIHJlZmVyZW5jZU5vZGUpCi17Ci0gICAgaWYgKGlz
PFBzZXVkb0VsZW1lbnQ+KHJlZmVyZW5jZU5vZGUpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8
UHNldWRvRWxlbWVudD4ocmVmZXJlbmNlTm9kZSkuaG9zdEVsZW1lbnQoKTsKLQotICAgIC8vIEV2
ZW50cyBzZW50IHRvIGVsZW1lbnRzIGluc2lkZSBhbiBTVkcgdXNlIGVsZW1lbnQncyBzaGFkb3cg
dHJlZSBnbyB0byB0aGUgdXNlIGVsZW1lbnQuCi0gICAgaWYgKGlzPFNWR0VsZW1lbnQ+KHJlZmVy
ZW5jZU5vZGUpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB1c2VFbGVtZW50ID0gZG93bmNhc3Q8U1ZH
RWxlbWVudD4ocmVmZXJlbmNlTm9kZSkuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQoKSkKLSAgICAg
ICAgICAgIHJldHVybiB1c2VFbGVtZW50OwotICAgIH0KLQotICAgIHJldHVybiAmcmVmZXJlbmNl
Tm9kZTsKLX0KLQogdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQoTm9k
ZSYgbm9kZSwgRXZlbnQmIGV2ZW50KQogewogICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSB0YXJn
ZXQgaGVyZSBiZWNhdXNlIGl0IGNhbiBnbyBhd2F5IGJ5IHRoZSB0aW1lIHdlIGFjdHVhbGx5IGZp
cmUgdGhlIGV2ZW50LgotICAgIGV2ZW50LnNldFRhcmdldChldmVudFRhcmdldFJlc3BlY3RpbmdU
YXJnZXRSdWxlcyhub2RlKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KEV2ZW50UGF0aDo6ZXZlbnRU
YXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMobm9kZSkpOwogICAgIFNjb3BlZEV2ZW50UXVldWU6
OnNpbmdsZXRvbigpLmVucXVldWVFdmVudChldmVudCk7CiB9CiAKQEAgLTIwOSw3ICsxNjQsNyBA
QCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChOb2RlCiAKICAgICBDaGlsZE5v
ZGVzTGF6eVNuYXBzaG90Ojp0YWtlQ2hpbGROb2Rlc0xhenlTbmFwc2hvdCgpOwogCi0gICAgRXZl
bnRUYXJnZXQqIHRhcmdldCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2Rl
KTsKKyAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gRXZlbnRQYXRoOjpldmVudFRhcmdldFJlc3Bl
Y3RpbmdUYXJnZXRSdWxlcygqbm9kZSk7CiAgICAgZXZlbnQuc2V0VGFyZ2V0KHRhcmdldCk7CiAg
ICAgaWYgKCFldmVudC50YXJnZXQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMjUsNyAr
MTgwLDcgQEAgYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZQogICAgIGlm
ICghZXZlbnQucHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgIWV2ZW50UGF0aC5pc0VtcHR5KCkpCiAg
ICAgICAgIGRpc3BhdGNoRXZlbnRJbkRPTShldmVudCwgZXZlbnRQYXRoLCB3aW5kb3dFdmVudENv
bnRleHQpOwogCi0gICAgZXZlbnQuc2V0VGFyZ2V0KGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1Rhcmdl
dFJ1bGVzKCpub2RlKSk7CisgICAgZXZlbnQuc2V0VGFyZ2V0KEV2ZW50UGF0aDo6ZXZlbnRUYXJn
ZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoKm5vZGUpKTsKICAgICBldmVudC5zZXRDdXJyZW50VGFy
Z2V0KG51bGxwdHIpOwogICAgIGV2ZW50LnNldEV2ZW50UGhhc2UoMCk7CiAKQEAgLTI0NiwzMjUg
KzIwMSw0IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUKICAgICBy
ZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBib29s
IHNob3VsZEV2ZW50Q3Jvc3NTaGFkb3dCb3VuZGFyeShFdmVudCYgZXZlbnQsIFNoYWRvd1Jvb3Qm
IHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0JiB0YXJnZXQpCi17Ci0gICAgTm9kZSogdGFyZ2V0Tm9k
ZSA9IHRhcmdldC50b05vZGUoKTsKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIEVOQUJM
RShWSURFTykKLSAgICAvLyBWaWRlby1vbmx5IGZ1bGwgc2NyZWVuIGlzIGEgbW9kZSB3aGVyZSB3
ZSB1c2UgdGhlIHNoYWRvdyBET00gYXMgYW4gaW1wbGVtZW50YXRpb24KLSAgICAvLyBkZXRhaWwg
dGhhdCBzaG91bGQgbm90IGJlIGRldGVjdGFibGUgYnkgdGhlIHdlYiBjb250ZW50LgotICAgIGlm
ICh0YXJnZXROb2RlKSB7Ci0gICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gdGFyZ2V0Tm9k
ZS0+ZG9jdW1lbnQoKS53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkgewotICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIGFzc3VtZSB0aGF0IGlmIHRoZSBmdWxsIHNjcmVlbiBlbGVtZW50
IGlzIGEgbWVkaWEgZWxlbWVudCB0aGF0IGl0J3MKLSAgICAgICAgICAgIC8vIHRoZSB2aWRlby1v
bmx5IGZ1bGwgc2NyZWVuLiBCb3RoIGhlcmUgYW5kIGVsc2V3aGVyZS4gQnV0IHRoYXQgaXMgcHJv
YmFibHkgd3JvbmcuCi0gICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNNZWRpYUVsZW1lbnQoKSAm
JiBzaGFkb3dSb290Lmhvc3QoKSA9PSBlbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gV2ViS2l0IG5ldmVyIGFs
bG93ZWQgc2VsZWN0c3RhcnQgZXZlbnQgdG8gY3Jvc3MgdGhlIHRoZSBzaGFkb3cgRE9NIGJvdW5k
YXJ5LgotICAgIC8vIENoYW5naW5nIHRoaXMgYnJlYWtzIGV4aXN0aW5nIHNpdGVzLgotICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIxOTUgZm9yIGRl
dGFpbHMuCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUgPSBldmVudC50eXBlKCk7
Ci0gICAgYm9vbCB0YXJnZXRJc0luU2hhZG93Um9vdCA9IHRhcmdldE5vZGUgJiYgJnRhcmdldE5v
ZGUtPnRyZWVTY29wZSgpLnJvb3ROb2RlKCkgPT0gJnNoYWRvd1Jvb3Q7Ci0gICAgcmV0dXJuICF0
YXJnZXRJc0luU2hhZG93Um9vdAotICAgICAgICB8fCAhKGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkuYWJvcnRFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5j
aGFuZ2VFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5lcnJv
ckV2ZW50Ci0gICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmxvYWRFdmVu
dAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNldEV2ZW50Ci0g
ICAgICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50Ci0gICAg
ICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50Ci0gICAgICAg
ICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50Ci0gICAgICAgICAg
ICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZlbnQpOwotfQotCi1z
dGF0aWMgTm9kZSogbm9kZU9ySG9zdElmUHNldWRvRWxlbWVudChOb2RlKiBub2RlKQotewotICAg
IHJldHVybiBpczxQc2V1ZG9FbGVtZW50Pigqbm9kZSkgPyBkb3duY2FzdDxQc2V1ZG9FbGVtZW50
Pigqbm9kZSkuaG9zdEVsZW1lbnQoKSA6IG5vZGU7Ci19Ci0KLUV2ZW50UGF0aDo6RXZlbnRQYXRo
KE5vZGUmIG9yaWdpbmFsVGFyZ2V0LCBFdmVudCYgZXZlbnQpCi0gICAgOiBtX2V2ZW50KGV2ZW50
KQotewotI2lmIEVOQUJMRShTSEFET1dfRE9NKSB8fCBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQot
ICAgIFZlY3RvcjxFdmVudFRhcmdldCosIDE2PiB0YXJnZXRTdGFjazsKLSNlbmRpZgotCi0gICAg
Ym9vbCBpc01vdXNlT3JGb2N1c0V2ZW50ID0gZXZlbnQuaXNNb3VzZUV2ZW50KCkgfHwgZXZlbnQu
aXNGb2N1c0V2ZW50KCk7Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBib29sIGlzVG91
Y2hFdmVudCA9IGV2ZW50LmlzVG91Y2hFdmVudCgpOwotI2VuZGlmCi0gICAgRXZlbnRUYXJnZXQq
IHRhcmdldCA9IG51bGxwdHI7Ci0KLSAgICBOb2RlKiBub2RlID0gbm9kZU9ySG9zdElmUHNldWRv
RWxlbWVudCgmb3JpZ2luYWxUYXJnZXQpOwotICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIGlm
ICghdGFyZ2V0KQotICAgICAgICAgICAgdGFyZ2V0ID0gZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFy
Z2V0UnVsZXMoKm5vZGUpOwotICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQ7Ci0gICAgICAg
IGZvciAoOyBub2RlOyBub2RlID0gcGFyZW50KSB7Ci0gICAgICAgICAgICBFdmVudFRhcmdldCog
Y3VycmVudFRhcmdldCA9IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2RlKTsK
LSAgICAgICAgICAgIGlmIChpc01vdXNlT3JGb2N1c0V2ZW50KQotICAgICAgICAgICAgICAgIG1f
cGF0aC5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ+KG5v
ZGUsIGN1cnJlbnRUYXJnZXQsIHRhcmdldCkpOwotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0g
ICAgICAgICAgICBlbHNlIGlmIChpc1RvdWNoRXZlbnQpCi0gICAgICAgICAgICAgICAgbV9wYXRo
LmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFRvdWNoRXZlbnRDb250ZXh0Pihub2RlLCBjdXJyZW50
VGFyZ2V0LCB0YXJnZXQpKTsKLSNlbmRpZgotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIG1fcGF0aC5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxFdmVudENvbnRleHQ+KG5vZGUsIGN1
cnJlbnRUYXJnZXQsIHRhcmdldCkpOwotICAgICAgICAgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KCpu
b2RlKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHBhcmVudCA9IG5vZGUt
PnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgIGlmICghcGFyZW50KQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSNpZiBFTkFCTEUoU0hBRE9XX0RPTSkgfHwgRU5BQkxFKERFVEFJTFNfRUxFTUVO
VCkKLSAgICAgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290T2ZQYXJlbnQgPSBwYXJl
bnQtPnNoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBhc3NpZ25lZFNs
b3QgPSBzaGFkb3dSb290T2ZQYXJlbnQtPmZpbmRBc3NpZ25lZFNsb3QoKm5vZGUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIG5vZGUgaXMgYXNzaWduZWQgdG8gYSBzbG90LiBDb250aW51ZSBk
aXNwYXRjaGluZyB0aGUgZXZlbnQgYXQgdGhpcyBzbG90LgotICAgICAgICAgICAgICAgICAgICB0
YXJnZXRTdGFjay5hcHBlbmQodGFyZ2V0KTsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0g
YXNzaWduZWRTbG90OwotICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBhc3NpZ25lZFNsb3Q7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICBu
b2RlID0gcGFyZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgU2hhZG93Um9vdCYgc2hhZG93Um9v
dCA9IGRvd25jYXN0PFNoYWRvd1Jvb3Q+KCpub2RlKTsKLSAgICAgICAgLy8gQXQgYSBzaGFkb3cg
cm9vdC4gQ29udGludWUgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50IGF0IHRoZSBzaGFkb3cgaG9zdC4K
LSNpZiBFTkFCTEUoU0hBRE9XX0RPTSkgfHwgRU5BQkxFKERFVEFJTFNfRUxFTUVOVCkKLSAgICAg
ICAgaWYgKCF0YXJnZXRTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIE1vdmUgdGFy
Z2V0IGJhY2sgdG8gYSBkZXNjZW5kYW50IG9mIHRoZSBzaGFkb3cgaG9zdCBpZiB0aGUgZXZlbnQg
ZGlkIG5vdCBvcmlnaW5hdGUgaW4gdGhpcyBzaGFkb3cgdHJlZSBvciBpdHMgaW5uZXIgc2hhZG93
IHRyZWVzLgotICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0U3RhY2subGFzdCgpOwotICAgICAg
ICAgICAgdGFyZ2V0U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgQVNTRVJUKHNoYWRv
d1Jvb3QuaG9zdCgpLT5jb250YWlucyh0YXJnZXQtPnRvTm9kZSgpKSk7Ci0gICAgICAgIH0gZWxz
ZQotI2VuZGlmCi0gICAgICAgICAgICB0YXJnZXQgPSBudWxscHRyOwotCi0gICAgICAgIGlmICgh
c2hvdWxkRXZlbnRDcm9zc1NoYWRvd0JvdW5kYXJ5KGV2ZW50LCBzaGFkb3dSb290LCBvcmlnaW5h
bFRhcmdldCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG5vZGUgPSBzaGFkb3dSb290
Lmhvc3QoKTsKLSAgICB9Ci19Ci0KLWNsYXNzIFJlbGF0ZWROb2RlUmV0YXJnZXRlciB7Ci1wdWJs
aWM6Ci0gICAgUmVsYXRlZE5vZGVSZXRhcmdldGVyKE5vZGUmIHJlbGF0ZWROb2RlLCBUcmVlU2Nv
cGUmIHRhcmdldFRyZWVTY29wZSkKLSAgICAgICAgOiBtX3JlbGF0ZWROb2RlKHJlbGF0ZWROb2Rl
KQotICAgICAgICAsIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlKCZyZWxhdGVkTm9kZSkKLSAgICB7
Ci0gICAgICAgIFRyZWVTY29wZSogY3VycmVudFRyZWVTY29wZSA9ICZtX3JlbGF0ZWROb2RlLnRy
ZWVTY29wZSgpOwotICAgICAgICBpZiAoTElLRUxZKGN1cnJlbnRUcmVlU2NvcGUgPT0gJnRhcmdl
dFRyZWVTY29wZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCZjdXJyZW50
VHJlZVNjb3BlLT5kb2N1bWVudFNjb3BlKCkgIT0gJnRhcmdldFRyZWVTY29wZS5kb2N1bWVudFNj
b3BlKCkpIHsKLSAgICAgICAgICAgIG1faGFzRGlmZmVyZW50VHJlZVJvb3QgPSB0cnVlOwotICAg
ICAgICAgICAgbV9yZXRhcmdldGVkUmVsYXRlZE5vZGUgPSBudWxscHRyOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZWxhdGVkTm9kZS5pbkRvY3VtZW50KCkg
IT0gdGFyZ2V0VHJlZVNjb3BlLnJvb3ROb2RlKCkuaW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgICAg
ICBtX2hhc0RpZmZlcmVudFRyZWVSb290ID0gdHJ1ZTsKLSAgICAgICAgICAgIHdoaWxlIChtX3Jl
dGFyZ2V0ZWRSZWxhdGVkTm9kZS0+aXNJblNoYWRvd1RyZWUoKSkKLSAgICAgICAgICAgICAgICBt
X3JldGFyZ2V0ZWRSZWxhdGVkTm9kZSA9IGRvd25jYXN0PFNoYWRvd1Jvb3Q+KG1fcmV0YXJnZXRl
ZFJlbGF0ZWROb2RlLT50cmVlU2NvcGUoKS5yb290Tm9kZSgpKS5ob3N0KCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjb2xsZWN0VHJlZVNjb3BlcygpOwotCi0g
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGlzIHdoaWxlIGNvbnN0cnVjdGlu
ZyB0aGUgZXZlbnQgcGF0aC4KLSAgICAgICAgVmVjdG9yPFRyZWVTY29wZSosIDg+IHRhcmdldFRy
ZWVTY29wZUFuY2VzdG9yczsKLSAgICAgICAgZm9yIChUcmVlU2NvcGUqIGN1cnJlbnRUcmVlU2Nv
cGUgPSAmdGFyZ2V0VHJlZVNjb3BlOyBjdXJyZW50VHJlZVNjb3BlOyBjdXJyZW50VHJlZVNjb3Bl
ID0gY3VycmVudFRyZWVTY29wZS0+cGFyZW50VHJlZVNjb3BlKCkpCi0gICAgICAgICAgICB0YXJn
ZXRUcmVlU2NvcGVBbmNlc3RvcnMuYXBwZW5kKGN1cnJlbnRUcmVlU2NvcGUpOwotICAgICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighdGFyZ2V0VHJlZVNjb3BlQW5jZXN0b3Jz
LmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgdW5zaWduZWQgaSA9IG1fYW5jZXN0b3JUcmVlU2NvcGVz
LnNpemUoKTsKLSAgICAgICAgdW5zaWduZWQgaiA9IHRhcmdldFRyZWVTY29wZUFuY2VzdG9ycy5z
aXplKCk7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fYW5jZXN0
b3JUcmVlU2NvcGVzLmxhc3QoKSA9PSB0YXJnZXRUcmVlU2NvcGVBbmNlc3RvcnMubGFzdCgpKTsK
LSAgICAgICAgd2hpbGUgKG1fYW5jZXN0b3JUcmVlU2NvcGVzW2kgLSAxXSA9PSB0YXJnZXRUcmVl
U2NvcGVBbmNlc3RvcnNbaiAtIDFdKSB7Ci0gICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICBq
LS07Ci0gICAgICAgICAgICBpZiAoIWkgfHwgIWopCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICBtX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXggPSBpOwotICAg
ICAgICBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZSA9IG5vZGVJbkxvd2VzdENvbW1vbkFuY2VzdG9y
KCk7Ci0gICAgfQotCi0gICAgTm9kZSogY3VycmVudE5vZGUoVHJlZVNjb3BlJiBjdXJyZW50VHJl
ZVNjb3BlKQotICAgIHsKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeShjdXJyZW50VHJlZVNjb3Bl
KTsKLSAgICAgICAgcmV0dXJuIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlOwotICAgIH0KLQotICAg
IHZvaWQgbW92ZVRvTmV3VHJlZVNjb3BlKFRyZWVTY29wZSogcHJldmlvdXNUcmVlU2NvcGUsIFRy
ZWVTY29wZSYgbmV3VHJlZVNjb3BlKQotICAgIHsKLSAgICAgICAgaWYgKG1faGFzRGlmZmVyZW50
VHJlZVJvb3QpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byYgY3VycmVudFJl
bGF0ZWROb2RlU2NvcGUgPSBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZS0+dHJlZVNjb3BlKCk7Ci0g
ICAgICAgIGlmIChwcmV2aW91c1RyZWVTY29wZSAhPSAmY3VycmVudFJlbGF0ZWROb2RlU2NvcGUp
IHsKLSAgICAgICAgICAgIC8vIGN1cnJlbnRSZWxhdGVkTm9kZSBpcyBzdGlsbCBvdXRzaWRlIG91
ciBzaGFkb3cgdHJlZS4gTmV3IHRyZWUgc2NvcGUgbWF5IGNvbnRhaW4gY3VycmVudFJlbGF0ZWRO
b2RlCi0gICAgICAgICAgICAvLyBidXQgdGhlcmUgaXMgbm8gbmVlZCB0byByZS10YXJnZXQgaXQu
IE1vdmluZyBpbnRvIGEgc2xvdCAodGhlcmVieSBhIGRlZXBlciBzaGFkb3cgdHJlZSkgZG9lc24n
dCBtYXR0ZXIuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBib29s
IGVudGVyZWRTbG90ID0gbmV3VHJlZVNjb3BlLnBhcmVudFRyZWVTY29wZSgpID09IHByZXZpb3Vz
VHJlZVNjb3BlOwotICAgICAgICBpZiAoZW50ZXJlZFNsb3QpIHsKLSAgICAgICAgICAgIGlmICht
X2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXgpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9hbmNl
c3RvclRyZWVTY29wZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBjb2xsZWN0VHJl
ZVNjb3BlcygpOwotICAgICAgICAgICAgICAgIGJvb2wgcmVsYXRlZE5vZGVJc0luU2xvdCA9IG1f
YW5jZXN0b3JUcmVlU2NvcGVzW21fbG93ZXN0Q29tbW9uQW5jZXN0b3JJbmRleCAtIDFdID09ICZu
ZXdUcmVlU2NvcGU7Ci0gICAgICAgICAgICAgICAgaWYgKHJlbGF0ZWROb2RlSXNJblNsb3QpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9sb3dlc3RDb21tb25BbmNlc3RvckluZGV4LS07Ci0gICAg
ICAgICAgICAgICAgICAgIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlID0gbm9kZUluTG93ZXN0Q29t
bW9uQW5jZXN0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCZuZXdUcmVlU2NvcGUg
PT0gJm1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlLT50cmVlU2NvcGUoKSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1fcmV0YXJn
ZXRlZFJlbGF0ZWROb2RlID09ICZtX3JlbGF0ZWROb2RlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIEFTU0VSVChwcmV2aW91c1RyZWVTY29wZS0+cGFyZW50VHJlZVNjb3BlKCkgPT0g
Jm5ld1RyZWVTY29wZSk7Ci0gICAgICAgICAgICBtX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXgr
KzsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fYW5jZXN0
b3JUcmVlU2NvcGVzLmlzRW1wdHkoKSB8fCBtX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXggPCBt
X2FuY2VzdG9yVHJlZVNjb3Blcy5zaXplKCkpOwotICAgICAgICAgICAgbV9yZXRhcmdldGVkUmVs
YXRlZE5vZGUgPSBkb3duY2FzdDxTaGFkb3dSb290PihjdXJyZW50UmVsYXRlZE5vZGVTY29wZS5y
b290Tm9kZSgpKS5ob3N0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoJm5ld1RyZWVTY29wZSA9PSAm
bV9yZXRhcmdldGVkUmVsYXRlZE5vZGUtPnRyZWVTY29wZSgpKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeShUcmVlU2NvcGUmIGN1cnJlbnRUcmVlU2NvcGUp
Ci0gICAgewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgZm9yIChhdXRvKiByZWxhdGVk
Tm9kZVNjb3BlID0gJm1fcmVsYXRlZE5vZGUudHJlZVNjb3BlKCk7IHJlbGF0ZWROb2RlU2NvcGU7
IHJlbGF0ZWROb2RlU2NvcGUgPSByZWxhdGVkTm9kZVNjb3BlLT5wYXJlbnRUcmVlU2NvcGUoKSkg
ewotICAgICAgICAgICAgZm9yIChhdXRvKiB0YXJnZXRTY29wZSA9ICZjdXJyZW50VHJlZVNjb3Bl
OyB0YXJnZXRTY29wZTsgdGFyZ2V0U2NvcGUgPSB0YXJnZXRTY29wZS0+cGFyZW50VHJlZVNjb3Bl
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0U2NvcGUgPT0gcmVsYXRlZE5vZGVTY29w
ZSkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoJm1fcmV0YXJnZXRlZFJlbGF0ZWROb2Rl
LT50cmVlU2NvcGUoKSA9PSByZWxhdGVkTm9kZVNjb3BlKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBBU1NFUlQoIW1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlKTsKLSNlbHNlCi0gICAgICAgIFVO
VVNFRF9QQVJBTShjdXJyZW50VHJlZVNjb3BlKTsKLSNlbmRpZgotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBOb2RlKiBub2RlSW5Mb3dlc3RDb21tb25BbmNlc3RvcigpCi0gICAgewotICAgICAgICBp
ZiAoIW1fbG93ZXN0Q29tbW9uQW5jZXN0b3JJbmRleCkKLSAgICAgICAgICAgIHJldHVybiAmbV9y
ZWxhdGVkTm9kZTsKLSAgICAgICAgYXV0byYgcm9vdE5vZGUgPSBtX2FuY2VzdG9yVHJlZVNjb3Bl
c1ttX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXggLSAxXS0+cm9vdE5vZGUoKTsKLSAgICAgICAg
cmV0dXJuIGRvd25jYXN0PFNoYWRvd1Jvb3Q+KHJvb3ROb2RlKS5ob3N0KCk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjb2xsZWN0VHJlZVNjb3BlcygpCi0gICAgewotICAgICAgICBBU1NFUlQobV9hbmNl
c3RvclRyZWVTY29wZXMuaXNFbXB0eSgpKTsKLSAgICAgICAgZm9yIChUcmVlU2NvcGUqIGN1cnJl
bnRUcmVlU2NvcGUgPSAmbV9yZWxhdGVkTm9kZS50cmVlU2NvcGUoKTsgY3VycmVudFRyZWVTY29w
ZTsgY3VycmVudFRyZWVTY29wZSA9IGN1cnJlbnRUcmVlU2NvcGUtPnBhcmVudFRyZWVTY29wZSgp
KQotICAgICAgICAgICAgbV9hbmNlc3RvclRyZWVTY29wZXMuYXBwZW5kKGN1cnJlbnRUcmVlU2Nv
cGUpOwotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbV9hbmNlc3Rv
clRyZWVTY29wZXMuaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBOb2RlJiBtX3JlbGF0ZWROb2Rl
OwotICAgIE5vZGUqIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlOwotICAgIFZlY3RvcjxUcmVlU2Nv
cGUqLCA4PiBtX2FuY2VzdG9yVHJlZVNjb3BlczsKLSAgICB1bnNpZ25lZCBtX2xvd2VzdENvbW1v
bkFuY2VzdG9ySW5kZXggeyAwIH07Ci0gICAgYm9vbCBtX2hhc0RpZmZlcmVudFRyZWVSb290IHsg
ZmFsc2UgfTsKLX07Ci0KLXZvaWQgRXZlbnRQYXRoOjpzZXRSZWxhdGVkVGFyZ2V0KE5vZGUmIG9y
aWdpbiwgRXZlbnRUYXJnZXQmIHJlbGF0ZWRUYXJnZXQpCi17Ci0gICAgTm9kZSogcmVsYXRlZE5v
ZGUgPSByZWxhdGVkVGFyZ2V0LnRvTm9kZSgpOwotICAgIGlmICghcmVsYXRlZE5vZGUgfHwgbV9w
YXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVsYXRlZE5vZGVSZXRhcmdl
dGVyIHJldGFyZ2V0ZXIoKnJlbGF0ZWROb2RlLCBkb3duY2FzdDxNb3VzZU9yRm9jdXNFdmVudENv
bnRleHQ+KCptX3BhdGhbMF0pLm5vZGUoKS0+dHJlZVNjb3BlKCkpOwotCi0gICAgYm9vbCBvcmln
aW5Jc1JlbGF0ZWRUYXJnZXQgPSAmb3JpZ2luID09IHJlbGF0ZWROb2RlOwotICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgYWRkIGEgbmV3IGZsYWcgb24gRXZlbnQgaW5zdGVhZC4KLSAgICBib29sIHNo
b3VsZFRyaW1FdmVudFBhdGggPSBtX2V2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vv
dmVyRXZlbnQKLSAgICAgICAgfHwgbV9ldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
bW92ZUV2ZW50Ci0gICAgICAgIHx8IG1fZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZW91dEV2ZW50OwotICAgIE5vZGUmIHJvb3ROb2RlSW5PcmlnaW5UcmVlU2NvcGUgPSBvcmlnaW4u
dHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKLSAgICBUcmVlU2NvcGUqIHByZXZpb3VzVHJlZVNjb3Bl
ID0gbnVsbHB0cjsKLSAgICBzaXplX3Qgb3JpZ2luYWxFdmVudFBhdGhTaXplID0gbV9wYXRoLnNp
emUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGNvbnRleHRJbmRleCA9IDA7IGNvbnRleHRJbmRleCA8
IG9yaWdpbmFsRXZlbnRQYXRoU2l6ZTsgY29udGV4dEluZGV4KyspIHsKLSAgICAgICAgYXV0byYg
Y29udGV4dCA9IGRvd25jYXN0PE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dD4oKm1fcGF0aFtjb250
ZXh0SW5kZXhdKTsKLQotICAgICAgICBUcmVlU2NvcGUmIGN1cnJlbnRUcmVlU2NvcGUgPSBjb250
ZXh0Lm5vZGUoKS0+dHJlZVNjb3BlKCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShwcmV2aW91c1Ry
ZWVTY29wZSAmJiAmY3VycmVudFRyZWVTY29wZSAhPSBwcmV2aW91c1RyZWVTY29wZSkpCi0gICAg
ICAgICAgICByZXRhcmdldGVyLm1vdmVUb05ld1RyZWVTY29wZShwcmV2aW91c1RyZWVTY29wZSwg
Y3VycmVudFRyZWVTY29wZSk7Ci0KLSAgICAgICAgTm9kZSogY3VycmVudFJlbGF0ZWROb2RlID0g
cmV0YXJnZXRlci5jdXJyZW50Tm9kZShjdXJyZW50VHJlZVNjb3BlKTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKHNob3VsZFRyaW1FdmVudFBhdGggJiYgIW9yaWdpbklzUmVsYXRlZFRhcmdldCAmJiBj
b250ZXh0LnRhcmdldCgpID09IGN1cnJlbnRSZWxhdGVkTm9kZSkpIHsKLSAgICAgICAgICAgIG1f
cGF0aC5zaHJpbmsoY29udGV4dEluZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0KLSAgICAgICAgY29udGV4dC5zZXRSZWxhdGVkVGFyZ2V0KGN1cnJlbnRSZWxhdGVkTm9kZSk7
Ci0KLSAgICAgICAgaWYgKFVOTElLRUxZKHNob3VsZFRyaW1FdmVudFBhdGggJiYgb3JpZ2luSXNS
ZWxhdGVkVGFyZ2V0ICYmIGNvbnRleHQubm9kZSgpID09ICZyb290Tm9kZUluT3JpZ2luVHJlZVNj
b3BlKSkgewotICAgICAgICAgICAgbV9wYXRoLnNocmluayhjb250ZXh0SW5kZXggKyAxKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJldmlvdXNUcmVlU2NvcGUg
PSAmY3VycmVudFRyZWVTY29wZTsKLSAgICB9Ci19Ci0KLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQotdm9pZCBFdmVudFBhdGg6OnJldGFyZ2V0VG91Y2goVG91Y2hFdmVudENvbnRleHQ6OlRvdWNo
TGlzdFR5cGUgdG91Y2hMaXN0VHlwZSwgY29uc3QgVG91Y2gmIHRvdWNoKQotewotICAgIEV2ZW50
VGFyZ2V0KiBldmVudFRhcmdldCA9IHRvdWNoLnRhcmdldCgpOwotICAgIGlmICghZXZlbnRUYXJn
ZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIHRhcmdldE5vZGUgPSBldmVudFRhcmdl
dC0+dG9Ob2RlKCk7Ci0gICAgaWYgKCF0YXJnZXROb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBSZWxhdGVkTm9kZVJldGFyZ2V0ZXIgcmV0YXJnZXRlcigqdGFyZ2V0Tm9kZSwgbV9wYXRoWzBd
LT5ub2RlKCktPnRyZWVTY29wZSgpKTsKLSAgICBUcmVlU2NvcGUqIHByZXZpb3VzVHJlZVNjb3Bl
ID0gbnVsbHB0cjsKLSAgICBmb3IgKGF1dG8mIGNvbnRleHQgOiBtX3BhdGgpIHsKLSAgICAgICAg
VHJlZVNjb3BlJiBjdXJyZW50VHJlZVNjb3BlID0gY29udGV4dC0+bm9kZSgpLT50cmVlU2NvcGUo
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHByZXZpb3VzVHJlZVNjb3BlICYmICZjdXJyZW50VHJl
ZVNjb3BlICE9IHByZXZpb3VzVHJlZVNjb3BlKSkKLSAgICAgICAgICAgIHJldGFyZ2V0ZXIubW92
ZVRvTmV3VHJlZVNjb3BlKHByZXZpb3VzVHJlZVNjb3BlLCBjdXJyZW50VHJlZVNjb3BlKTsKLQot
ICAgICAgICBOb2RlKiBjdXJyZW50UmVsYXRlZE5vZGUgPSByZXRhcmdldGVyLmN1cnJlbnROb2Rl
KGN1cnJlbnRUcmVlU2NvcGUpOwotICAgICAgICBkb3duY2FzdDxUb3VjaEV2ZW50Q29udGV4dD4o
KmNvbnRleHQpLnRvdWNoTGlzdCh0b3VjaExpc3RUeXBlKS0+YXBwZW5kKHRvdWNoLmNsb25lV2l0
aE5ld1RhcmdldChjdXJyZW50UmVsYXRlZE5vZGUpKTsKLQotICAgICAgICBwcmV2aW91c1RyZWVT
Y29wZSA9ICZjdXJyZW50VHJlZVNjb3BlOwotICAgIH0KLX0KLQotdm9pZCBFdmVudFBhdGg6OnJl
dGFyZ2V0VG91Y2hMaXN0cyhjb25zdCBUb3VjaEV2ZW50JiB0b3VjaEV2ZW50KQotewotICAgIGlm
ICh0b3VjaEV2ZW50LnRvdWNoZXMoKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRvdWNoRXZlbnQudG91Y2hlcygpLT5sZW5ndGgoKTsgKytpKQotICAgICAgICAgICAgcmV0YXJn
ZXRUb3VjaChUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hlcywgKnRvdWNoRXZlbnQudG91Y2hlcygp
LT5pdGVtKGkpKTsKLSAgICB9Ci0KLSAgICBpZiAodG91Y2hFdmVudC50YXJnZXRUb3VjaGVzKCkp
IHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b3VjaEV2ZW50LnRhcmdldFRvdWNo
ZXMoKS0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgICAgIHJldGFyZ2V0VG91Y2goVG91Y2hFdmVu
dENvbnRleHQ6OlRhcmdldFRvdWNoZXMsICp0b3VjaEV2ZW50LnRhcmdldFRvdWNoZXMoKS0+aXRl
bShpKSk7Ci0gICAgfQotCi0gICAgaWYgKHRvdWNoRXZlbnQuY2hhbmdlZFRvdWNoZXMoKSkgewot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvdWNoRXZlbnQuY2hhbmdlZFRvdWNoZXMo
KS0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgICAgIHJldGFyZ2V0VG91Y2goVG91Y2hFdmVudENv
bnRleHQ6OkNoYW5nZWRUb3VjaGVzLCAqdG91Y2hFdmVudC5jaGFuZ2VkVG91Y2hlcygpLT5pdGVt
KGkpKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotYm9vbCBFdmVudFBhdGg6Omhhc0V2ZW50TGlzdGVu
ZXJzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdAotewotICAgIGZvciAoYXV0
byYgZXZlbnRQYXRoIDogbV9wYXRoKSB7Ci0gICAgICAgIGlmIChldmVudFBhdGgtPm5vZGUoKS0+
aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
UGF0aC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRXZlbnRQYXRoLmgiCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1
ZGUgIkV2ZW50Q29udGV4dC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJI
VE1MU2xvdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUHNldWRvRWxl
bWVudC5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJUb3VjaEV2ZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBib29sIHNob3VsZEV2ZW50
Q3Jvc3NTaGFkb3dCb3VuZGFyeShFdmVudCYgZXZlbnQsIFNoYWRvd1Jvb3QmIHNoYWRvd1Jvb3Qs
IEV2ZW50VGFyZ2V0JiB0YXJnZXQpCit7CisgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IHRhcmdldC50
b05vZGUoKTsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFKFZJREVPKQor
ICAgIC8vIFZpZGVvLW9ubHkgZnVsbCBzY3JlZW4gaXMgYSBtb2RlIHdoZXJlIHdlIHVzZSB0aGUg
c2hhZG93IERPTSBhcyBhbiBpbXBsZW1lbnRhdGlvbgorICAgIC8vIGRldGFpbCB0aGF0IHNob3Vs
ZCBub3QgYmUgZGV0ZWN0YWJsZSBieSB0aGUgd2ViIGNvbnRlbnQuCisgICAgaWYgKHRhcmdldE5v
ZGUpIHsKKyAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB0YXJnZXROb2RlLT5kb2N1bWVu
dCgpLndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKSB7CisgICAgICAgICAgICAvLyBG
SVhNRTogV2UgYXNzdW1lIHRoYXQgaWYgdGhlIGZ1bGwgc2NyZWVuIGVsZW1lbnQgaXMgYSBtZWRp
YSBlbGVtZW50IHRoYXQgaXQncworICAgICAgICAgICAgLy8gdGhlIHZpZGVvLW9ubHkgZnVsbCBz
Y3JlZW4uIEJvdGggaGVyZSBhbmQgZWxzZXdoZXJlLiBCdXQgdGhhdCBpcyBwcm9iYWJseSB3cm9u
Zy4KKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc01lZGlhRWxlbWVudCgpICYmIHNoYWRvd1Jv
b3QuaG9zdCgpID09IGVsZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBXZWJLaXQgbmV2ZXIgYWxsb3dlZCBzZWxl
Y3RzdGFydCBldmVudCB0byBjcm9zcyB0aGUgdGhlIHNoYWRvdyBET00gYm91bmRhcnkuCisgICAg
Ly8gQ2hhbmdpbmcgdGhpcyBicmVha3MgZXhpc3Rpbmcgc2l0ZXMuCisgICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjE5NSBmb3IgZGV0YWlscy4KKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUoKTsKKyAgICBib29s
IHRhcmdldElzSW5TaGFkb3dSb290ID0gdGFyZ2V0Tm9kZSAmJiAmdGFyZ2V0Tm9kZS0+dHJlZVNj
b3BlKCkucm9vdE5vZGUoKSA9PSAmc2hhZG93Um9vdDsKKyAgICByZXR1cm4gIXRhcmdldElzSW5T
aGFkb3dSb290CisgICAgICAgIHx8ICEoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2
ZW50CisgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQKKyAg
ICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50CisgICAgICAgIHx8
IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubG9hZEV2ZW50CisgICAgICAgIHx8IGV2ZW50VHlw
ZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAorICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZl
bnROYW1lcygpLnJlc2l6ZUV2ZW50CisgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkuc2Nyb2xsRXZlbnQKKyAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxl
Y3RFdmVudAorICAgICAgICB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0
RXZlbnQpOworfQorCitzdGF0aWMgTm9kZSogbm9kZU9ySG9zdElmUHNldWRvRWxlbWVudChOb2Rl
KiBub2RlKQoreworICAgIHJldHVybiBpczxQc2V1ZG9FbGVtZW50Pigqbm9kZSkgPyBkb3duY2Fz
dDxQc2V1ZG9FbGVtZW50Pigqbm9kZSkuaG9zdEVsZW1lbnQoKSA6IG5vZGU7Cit9CisKK2NsYXNz
IFJlbGF0ZWROb2RlUmV0YXJnZXRlciB7CitwdWJsaWM6CisgICAgUmVsYXRlZE5vZGVSZXRhcmdl
dGVyKE5vZGUmIHJlbGF0ZWROb2RlLCBUcmVlU2NvcGUmIHRhcmdldFRyZWVTY29wZSk7CisKKyAg
ICBOb2RlKiBjdXJyZW50Tm9kZShUcmVlU2NvcGUmIGN1cnJlbnRUcmVlU2NvcGUpOworICAgIHZv
aWQgbW92ZVRvTmV3VHJlZVNjb3BlKFRyZWVTY29wZSogcHJldmlvdXNUcmVlU2NvcGUsIFRyZWVT
Y29wZSYgbmV3VHJlZVNjb3BlKTsKKworcHJpdmF0ZToKKworICAgIE5vZGUqIG5vZGVJbkxvd2Vz
dENvbW1vbkFuY2VzdG9yKCk7CisgICAgdm9pZCBjb2xsZWN0VHJlZVNjb3BlcygpOworCisjaWYg
QVNTRVJUX0RJU0FCTEVECisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KFRyZWVTY29wZSYpIHsg
fQorI2Vsc2UKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koVHJlZVNjb3BlJiBjdXJyZW50VHJl
ZVNjb3BlKTsKKyNlbmRpZgorCisgICAgTm9kZSYgbV9yZWxhdGVkTm9kZTsKKyAgICBOb2RlKiBt
X3JldGFyZ2V0ZWRSZWxhdGVkTm9kZTsKKyAgICBWZWN0b3I8VHJlZVNjb3BlKiwgOD4gbV9hbmNl
c3RvclRyZWVTY29wZXM7CisgICAgdW5zaWduZWQgbV9sb3dlc3RDb21tb25BbmNlc3RvckluZGV4
IHsgMCB9OworICAgIGJvb2wgbV9oYXNEaWZmZXJlbnRUcmVlUm9vdCB7IGZhbHNlIH07Cit9Owor
CitFdmVudFBhdGg6OkV2ZW50UGF0aChOb2RlJiBvcmlnaW5hbFRhcmdldCwgRXZlbnQmIGV2ZW50
KQorICAgIDogbV9ldmVudChldmVudCkKK3sKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkgfHwgRU5B
QkxFKERFVEFJTFNfRUxFTUVOVCkKKyAgICBWZWN0b3I8RXZlbnRUYXJnZXQqLCAxNj4gdGFyZ2V0
U3RhY2s7CisjZW5kaWYKKworICAgIGJvb2wgaXNNb3VzZU9yRm9jdXNFdmVudCA9IGV2ZW50Lmlz
TW91c2VFdmVudCgpIHx8IGV2ZW50LmlzRm9jdXNFdmVudCgpOworI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCisgICAgYm9vbCBpc1RvdWNoRXZlbnQgPSBldmVudC5pc1RvdWNoRXZlbnQoKTsKKyNl
bmRpZgorICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBudWxscHRyOworCisgICAgTm9kZSogbm9k
ZSA9IG5vZGVPckhvc3RJZlBzZXVkb0VsZW1lbnQoJm9yaWdpbmFsVGFyZ2V0KTsKKyAgICB3aGls
ZSAobm9kZSkgeworICAgICAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgICAgIHRhcmdldCA9IGV2
ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2RlKTsKKyAgICAgICAgQ29udGFpbmVy
Tm9kZSogcGFyZW50OworICAgICAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IHBhcmVudCkgeworICAg
ICAgICAgICAgRXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJnZXQgPSBldmVudFRhcmdldFJlc3BlY3Rp
bmdUYXJnZXRSdWxlcygqbm9kZSk7CisKKyAgICAgICAgICAgIGlmIChpc01vdXNlT3JGb2N1c0V2
ZW50KQorICAgICAgICAgICAgICAgIG1fcGF0aC5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxNb3Vz
ZU9yRm9jdXNFdmVudENvbnRleHQ+KG5vZGUsIGN1cnJlbnRUYXJnZXQsIHRhcmdldCkpOworI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgICAgICAgICBlbHNlIGlmIChpc1RvdWNoRXZlbnQp
CisgICAgICAgICAgICAgICAgbV9wYXRoLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFRvdWNoRXZl
bnRDb250ZXh0Pihub2RlLCBjdXJyZW50VGFyZ2V0LCB0YXJnZXQpKTsKKyNlbmRpZgorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fcGF0aC5hcHBlbmQoc3RkOjptYWtlX3VuaXF1
ZTxFdmVudENvbnRleHQ+KG5vZGUsIGN1cnJlbnRUYXJnZXQsIHRhcmdldCkpOworCisgICAgICAg
ICAgICBpZiAoaXM8U2hhZG93Um9vdD4oKm5vZGUpKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7CisKKyAgICAgICAgICAg
IGlmICghcGFyZW50KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShTSEFE
T1dfRE9NKSB8fCBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQorICAgICAgICAgICAgaWYgKFNoYWRv
d1Jvb3QqIHNoYWRvd1Jvb3RPZlBhcmVudCA9IHBhcmVudC0+c2hhZG93Um9vdCgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIGFzc2lnbmVkU2xvdCA9IHNoYWRvd1Jvb3RPZlBhcmVudC0+
ZmluZEFzc2lnbmVkU2xvdCgqbm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbm9kZSBp
cyBhc3NpZ25lZCB0byBhIHNsb3QuIENvbnRpbnVlIGRpc3BhdGNoaW5nIHRoZSBldmVudCBhdCB0
aGlzIHNsb3QuCisgICAgICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrLmFwcGVuZCh0YXJnZXQp
OworICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBhc3NpZ25lZFNsb3Q7CisgICAgICAgICAg
ICAgICAgICAgIHRhcmdldCA9IGFzc2lnbmVkU2xvdDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIG5vZGUgPSBwYXJlbnQ7CisgICAgICAgIH0K
KworICAgICAgICBTaGFkb3dSb290JiBzaGFkb3dSb290ID0gZG93bmNhc3Q8U2hhZG93Um9vdD4o
Km5vZGUpOworICAgICAgICAvLyBBdCBhIHNoYWRvdyByb290LiBDb250aW51ZSBkaXNwYXRjaGlu
ZyB0aGUgZXZlbnQgYXQgdGhlIHNoYWRvdyBob3N0LgorI2lmIEVOQUJMRShTSEFET1dfRE9NKSB8
fCBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQorICAgICAgICBpZiAoIXRhcmdldFN0YWNrLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgLy8gTW92ZSB0YXJnZXQgYmFjayB0byBhIGRlc2NlbmRhbnQg
b2YgdGhlIHNoYWRvdyBob3N0IGlmIHRoZSBldmVudCBkaWQgbm90IG9yaWdpbmF0ZSBpbiB0aGlz
IHNoYWRvdyB0cmVlIG9yIGl0cyBpbm5lciBzaGFkb3cgdHJlZXMuCisgICAgICAgICAgICB0YXJn
ZXQgPSB0YXJnZXRTdGFjay5sYXN0KCk7CisgICAgICAgICAgICB0YXJnZXRTdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgICAgICAgICBBU1NFUlQoc2hhZG93Um9vdC5ob3N0KCktPmNvbnRhaW5zKHRh
cmdldC0+dG9Ob2RlKCkpKTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHRh
cmdldCA9IG51bGxwdHI7CisKKyAgICAgICAgaWYgKCFzaG91bGRFdmVudENyb3NzU2hhZG93Qm91
bmRhcnkoZXZlbnQsIHNoYWRvd1Jvb3QsIG9yaWdpbmFsVGFyZ2V0KSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbm9kZSA9IHNoYWRvd1Jvb3QuaG9zdCgpOworICAgIH0KK30KKwordm9p
ZCBFdmVudFBhdGg6OnNldFJlbGF0ZWRUYXJnZXQoTm9kZSYgb3JpZ2luLCBFdmVudFRhcmdldCYg
cmVsYXRlZFRhcmdldCkKK3sKKyAgICBOb2RlKiByZWxhdGVkTm9kZSA9IHJlbGF0ZWRUYXJnZXQu
dG9Ob2RlKCk7CisgICAgaWYgKCFyZWxhdGVkTm9kZSB8fCBtX3BhdGguaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBSZWxhdGVkTm9kZVJldGFyZ2V0ZXIgcmV0YXJnZXRlcigqcmVs
YXRlZE5vZGUsIGRvd25jYXN0PE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dD4oKm1fcGF0aFswXSku
bm9kZSgpLT50cmVlU2NvcGUoKSk7CisKKyAgICBib29sIG9yaWdpbklzUmVsYXRlZFRhcmdldCA9
ICZvcmlnaW4gPT0gcmVsYXRlZE5vZGU7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhZGQgYSBu
ZXcgZmxhZyBvbiBFdmVudCBpbnN0ZWFkLgorICAgIGJvb2wgc2hvdWxkVHJpbUV2ZW50UGF0aCA9
IG1fZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudAorICAgICAgICB8
fCBtX2V2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQKKyAgICAgICAg
fHwgbV9ldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQ7CisgICAgTm9k
ZSYgcm9vdE5vZGVJbk9yaWdpblRyZWVTY29wZSA9IG9yaWdpbi50cmVlU2NvcGUoKS5yb290Tm9k
ZSgpOworICAgIFRyZWVTY29wZSogcHJldmlvdXNUcmVlU2NvcGUgPSBudWxscHRyOworICAgIHNp
emVfdCBvcmlnaW5hbEV2ZW50UGF0aFNpemUgPSBtX3BhdGguc2l6ZSgpOworICAgIGZvciAodW5z
aWduZWQgY29udGV4dEluZGV4ID0gMDsgY29udGV4dEluZGV4IDwgb3JpZ2luYWxFdmVudFBhdGhT
aXplOyBjb250ZXh0SW5kZXgrKykgeworICAgICAgICBhdXRvJiBjb250ZXh0ID0gZG93bmNhc3Q8
TW91c2VPckZvY3VzRXZlbnRDb250ZXh0PigqbV9wYXRoW2NvbnRleHRJbmRleF0pOworCisgICAg
ICAgIFRyZWVTY29wZSYgY3VycmVudFRyZWVTY29wZSA9IGNvbnRleHQubm9kZSgpLT50cmVlU2Nv
cGUoKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHByZXZpb3VzVHJlZVNjb3BlICYmICZjdXJyZW50
VHJlZVNjb3BlICE9IHByZXZpb3VzVHJlZVNjb3BlKSkKKyAgICAgICAgICAgIHJldGFyZ2V0ZXIu
bW92ZVRvTmV3VHJlZVNjb3BlKHByZXZpb3VzVHJlZVNjb3BlLCBjdXJyZW50VHJlZVNjb3BlKTsK
KworICAgICAgICBOb2RlKiBjdXJyZW50UmVsYXRlZE5vZGUgPSByZXRhcmdldGVyLmN1cnJlbnRO
b2RlKGN1cnJlbnRUcmVlU2NvcGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2hvdWxkVHJpbUV2
ZW50UGF0aCAmJiAhb3JpZ2luSXNSZWxhdGVkVGFyZ2V0ICYmIGNvbnRleHQudGFyZ2V0KCkgPT0g
Y3VycmVudFJlbGF0ZWROb2RlKSkgeworICAgICAgICAgICAgbV9wYXRoLnNocmluayhjb250ZXh0
SW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjb250ZXh0
LnNldFJlbGF0ZWRUYXJnZXQoY3VycmVudFJlbGF0ZWROb2RlKTsKKworICAgICAgICBpZiAoVU5M
SUtFTFkoc2hvdWxkVHJpbUV2ZW50UGF0aCAmJiBvcmlnaW5Jc1JlbGF0ZWRUYXJnZXQgJiYgY29u
dGV4dC5ub2RlKCkgPT0gJnJvb3ROb2RlSW5PcmlnaW5UcmVlU2NvcGUpKSB7CisgICAgICAgICAg
ICBtX3BhdGguc2hyaW5rKGNvbnRleHRJbmRleCArIDEpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBwcmV2aW91c1RyZWVTY29wZSA9ICZjdXJyZW50VHJlZVNjb3Bl
OworICAgIH0KK30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCit2b2lkIEV2ZW50UGF0aDo6
cmV0YXJnZXRUb3VjaChUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlwZSB0b3VjaExpc3RU
eXBlLCBjb25zdCBUb3VjaCYgdG91Y2gpCit7CisgICAgRXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0
ID0gdG91Y2gudGFyZ2V0KCk7CisgICAgaWYgKCFldmVudFRhcmdldCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IGV2ZW50VGFyZ2V0LT50b05vZGUoKTsKKyAgICBp
ZiAoIXRhcmdldE5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbGF0ZWROb2RlUmV0YXJn
ZXRlciByZXRhcmdldGVyKCp0YXJnZXROb2RlLCBtX3BhdGhbMF0tPm5vZGUoKS0+dHJlZVNjb3Bl
KCkpOworICAgIFRyZWVTY29wZSogcHJldmlvdXNUcmVlU2NvcGUgPSBudWxscHRyOworICAgIGZv
ciAoYXV0byYgY29udGV4dCA6IG1fcGF0aCkgeworICAgICAgICBUcmVlU2NvcGUmIGN1cnJlbnRU
cmVlU2NvcGUgPSBjb250ZXh0LT5ub2RlKCktPnRyZWVTY29wZSgpOworICAgICAgICBpZiAoVU5M
SUtFTFkocHJldmlvdXNUcmVlU2NvcGUgJiYgJmN1cnJlbnRUcmVlU2NvcGUgIT0gcHJldmlvdXNU
cmVlU2NvcGUpKQorICAgICAgICAgICAgcmV0YXJnZXRlci5tb3ZlVG9OZXdUcmVlU2NvcGUocHJl
dmlvdXNUcmVlU2NvcGUsIGN1cnJlbnRUcmVlU2NvcGUpOworCisgICAgICAgIE5vZGUqIGN1cnJl
bnRSZWxhdGVkTm9kZSA9IHJldGFyZ2V0ZXIuY3VycmVudE5vZGUoY3VycmVudFRyZWVTY29wZSk7
CisgICAgICAgIGRvd25jYXN0PFRvdWNoRXZlbnRDb250ZXh0PigqY29udGV4dCkudG91Y2hMaXN0
KHRvdWNoTGlzdFR5cGUpLT5hcHBlbmQodG91Y2guY2xvbmVXaXRoTmV3VGFyZ2V0KGN1cnJlbnRS
ZWxhdGVkTm9kZSkpOworCisgICAgICAgIHByZXZpb3VzVHJlZVNjb3BlID0gJmN1cnJlbnRUcmVl
U2NvcGU7CisgICAgfQorfQorCit2b2lkIEV2ZW50UGF0aDo6cmV0YXJnZXRUb3VjaExpc3RzKGNv
bnN0IFRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCit7CisgICAgaWYgKHRvdWNoRXZlbnQudG91Y2hl
cygpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG91Y2hFdmVudC50b3VjaGVz
KCktPmxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICByZXRhcmdldFRvdWNoKFRvdWNoRXZlbnRD
b250ZXh0OjpUb3VjaGVzLCAqdG91Y2hFdmVudC50b3VjaGVzKCktPml0ZW0oaSkpOworICAgIH0K
KworICAgIGlmICh0b3VjaEV2ZW50LnRhcmdldFRvdWNoZXMoKSkgeworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHRvdWNoRXZlbnQudGFyZ2V0VG91Y2hlcygpLT5sZW5ndGgoKTsgKytp
KQorICAgICAgICAgICAgcmV0YXJnZXRUb3VjaChUb3VjaEV2ZW50Q29udGV4dDo6VGFyZ2V0VG91
Y2hlcywgKnRvdWNoRXZlbnQudGFyZ2V0VG91Y2hlcygpLT5pdGVtKGkpKTsKKyAgICB9CisKKyAg
ICBpZiAodG91Y2hFdmVudC5jaGFuZ2VkVG91Y2hlcygpKSB7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdG91Y2hFdmVudC5jaGFuZ2VkVG91Y2hlcygpLT5sZW5ndGgoKTsgKytpKQor
ICAgICAgICAgICAgcmV0YXJnZXRUb3VjaChUb3VjaEV2ZW50Q29udGV4dDo6Q2hhbmdlZFRvdWNo
ZXMsICp0b3VjaEV2ZW50LmNoYW5nZWRUb3VjaGVzKCktPml0ZW0oaSkpOworICAgIH0KK30KKyNl
bmRpZgorCitib29sIEV2ZW50UGF0aDo6aGFzRXZlbnRMaXN0ZW5lcnMoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBldmVudFBhdGggOiBtX3Bh
dGgpIHsKKyAgICAgICAgaWYgKGV2ZW50UGF0aC0+bm9kZSgpLT5oYXNFdmVudExpc3RlbmVycyhl
dmVudFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitSZWxhdGVkTm9kZVJldGFyZ2V0ZXI6OlJlbGF0ZWROb2RlUmV0YXJnZXRl
cihOb2RlJiByZWxhdGVkTm9kZSwgVHJlZVNjb3BlJiB0YXJnZXRUcmVlU2NvcGUpCisgICAgOiBt
X3JlbGF0ZWROb2RlKHJlbGF0ZWROb2RlKQorICAgICwgbV9yZXRhcmdldGVkUmVsYXRlZE5vZGUo
JnJlbGF0ZWROb2RlKQoreworICAgIFRyZWVTY29wZSogY3VycmVudFRyZWVTY29wZSA9ICZtX3Jl
bGF0ZWROb2RlLnRyZWVTY29wZSgpOworICAgIGlmIChMSUtFTFkoY3VycmVudFRyZWVTY29wZSA9
PSAmdGFyZ2V0VHJlZVNjb3BlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCZjdXJyZW50
VHJlZVNjb3BlLT5kb2N1bWVudFNjb3BlKCkgIT0gJnRhcmdldFRyZWVTY29wZS5kb2N1bWVudFNj
b3BlKCkpIHsKKyAgICAgICAgbV9oYXNEaWZmZXJlbnRUcmVlUm9vdCA9IHRydWU7CisgICAgICAg
IG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAocmVsYXRlZE5vZGUuaW5Eb2N1bWVudCgpICE9IHRhcmdldFRyZWVTY29wZS5y
b290Tm9kZSgpLmluRG9jdW1lbnQoKSkgeworICAgICAgICBtX2hhc0RpZmZlcmVudFRyZWVSb290
ID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlLT5pc0luU2hh
ZG93VHJlZSgpKQorICAgICAgICAgICAgbV9yZXRhcmdldGVkUmVsYXRlZE5vZGUgPSBkb3duY2Fz
dDxTaGFkb3dSb290PihtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZS0+dHJlZVNjb3BlKCkucm9vdE5v
ZGUoKSkuaG9zdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29sbGVjdFRyZWVT
Y29wZXMoKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGlzIHdoaWxlIGNv
bnN0cnVjdGluZyB0aGUgZXZlbnQgcGF0aC4KKyAgICBWZWN0b3I8VHJlZVNjb3BlKiwgOD4gdGFy
Z2V0VHJlZVNjb3BlQW5jZXN0b3JzOworICAgIGZvciAoVHJlZVNjb3BlKiBjdXJyZW50VHJlZVNj
b3BlID0gJnRhcmdldFRyZWVTY29wZTsgY3VycmVudFRyZWVTY29wZTsgY3VycmVudFRyZWVTY29w
ZSA9IGN1cnJlbnRUcmVlU2NvcGUtPnBhcmVudFRyZWVTY29wZSgpKQorICAgICAgICB0YXJnZXRU
cmVlU2NvcGVBbmNlc3RvcnMuYXBwZW5kKGN1cnJlbnRUcmVlU2NvcGUpOworICAgIEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCF0YXJnZXRUcmVlU2NvcGVBbmNlc3RvcnMuaXNFbXB0
eSgpKTsKKworICAgIHVuc2lnbmVkIGkgPSBtX2FuY2VzdG9yVHJlZVNjb3Blcy5zaXplKCk7Cisg
ICAgdW5zaWduZWQgaiA9IHRhcmdldFRyZWVTY29wZUFuY2VzdG9ycy5zaXplKCk7CisgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9hbmNlc3RvclRyZWVTY29wZXMubGFzdCgp
ID09IHRhcmdldFRyZWVTY29wZUFuY2VzdG9ycy5sYXN0KCkpOworICAgIHdoaWxlIChtX2FuY2Vz
dG9yVHJlZVNjb3Blc1tpIC0gMV0gPT0gdGFyZ2V0VHJlZVNjb3BlQW5jZXN0b3JzW2ogLSAxXSkg
eworICAgICAgICBpLS07CisgICAgICAgIGotLTsKKyAgICAgICAgaWYgKCFpIHx8ICFqKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9sb3dlc3RDb21tb25BbmNlc3RvckluZGV4
ID0gaTsKKyAgICBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZSA9IG5vZGVJbkxvd2VzdENvbW1vbkFu
Y2VzdG9yKCk7Cit9CisKK2lubGluZSBOb2RlKiBSZWxhdGVkTm9kZVJldGFyZ2V0ZXI6OmN1cnJl
bnROb2RlKFRyZWVTY29wZSYgY3VycmVudFRyZWVTY29wZSkKK3sKKyAgICBjaGVja0NvbnNpc3Rl
bmN5KGN1cnJlbnRUcmVlU2NvcGUpOworICAgIHJldHVybiBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9k
ZTsKK30KKwordm9pZCBSZWxhdGVkTm9kZVJldGFyZ2V0ZXI6Om1vdmVUb05ld1RyZWVTY29wZShU
cmVlU2NvcGUqIHByZXZpb3VzVHJlZVNjb3BlLCBUcmVlU2NvcGUmIG5ld1RyZWVTY29wZSkKK3sK
KyAgICBpZiAobV9oYXNEaWZmZXJlbnRUcmVlUm9vdCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byYgY3VycmVudFJlbGF0ZWROb2RlU2NvcGUgPSBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZS0+
dHJlZVNjb3BlKCk7CisgICAgaWYgKHByZXZpb3VzVHJlZVNjb3BlICE9ICZjdXJyZW50UmVsYXRl
ZE5vZGVTY29wZSkgeworICAgICAgICAvLyBjdXJyZW50UmVsYXRlZE5vZGUgaXMgc3RpbGwgb3V0
c2lkZSBvdXIgc2hhZG93IHRyZWUuIE5ldyB0cmVlIHNjb3BlIG1heSBjb250YWluIGN1cnJlbnRS
ZWxhdGVkTm9kZQorICAgICAgICAvLyBidXQgdGhlcmUgaXMgbm8gbmVlZCB0byByZS10YXJnZXQg
aXQuIE1vdmluZyBpbnRvIGEgc2xvdCAodGhlcmVieSBhIGRlZXBlciBzaGFkb3cgdHJlZSkgZG9l
c24ndCBtYXR0ZXIuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGVudGVyZWRT
bG90ID0gbmV3VHJlZVNjb3BlLnBhcmVudFRyZWVTY29wZSgpID09IHByZXZpb3VzVHJlZVNjb3Bl
OworICAgIGlmIChlbnRlcmVkU2xvdCkgeworICAgICAgICBpZiAobV9sb3dlc3RDb21tb25BbmNl
c3RvckluZGV4KSB7CisgICAgICAgICAgICBpZiAobV9hbmNlc3RvclRyZWVTY29wZXMuaXNFbXB0
eSgpKQorICAgICAgICAgICAgICAgIGNvbGxlY3RUcmVlU2NvcGVzKCk7CisgICAgICAgICAgICBi
b29sIHJlbGF0ZWROb2RlSXNJblNsb3QgPSBtX2FuY2VzdG9yVHJlZVNjb3Blc1ttX2xvd2VzdENv
bW1vbkFuY2VzdG9ySW5kZXggLSAxXSA9PSAmbmV3VHJlZVNjb3BlOworICAgICAgICAgICAgaWYg
KHJlbGF0ZWROb2RlSXNJblNsb3QpIHsKKyAgICAgICAgICAgICAgICBtX2xvd2VzdENvbW1vbkFu
Y2VzdG9ySW5kZXgtLTsKKyAgICAgICAgICAgICAgICBtX3JldGFyZ2V0ZWRSZWxhdGVkTm9kZSA9
IG5vZGVJbkxvd2VzdENvbW1vbkFuY2VzdG9yKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCZu
ZXdUcmVlU2NvcGUgPT0gJm1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlLT50cmVlU2NvcGUoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUKG1fcmV0YXJn
ZXRlZFJlbGF0ZWROb2RlID09ICZtX3JlbGF0ZWROb2RlKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBBU1NFUlQocHJldmlvdXNUcmVlU2NvcGUtPnBhcmVudFRyZWVTY29wZSgpID09ICZuZXdUcmVl
U2NvcGUpOworICAgICAgICBtX2xvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXgrKzsKKyAgICAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9hbmNlc3RvclRyZWVTY29wZXMuaXNF
bXB0eSgpIHx8IG1fbG93ZXN0Q29tbW9uQW5jZXN0b3JJbmRleCA8IG1fYW5jZXN0b3JUcmVlU2Nv
cGVzLnNpemUoKSk7CisgICAgICAgIG1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlID0gZG93bmNhc3Q8
U2hhZG93Um9vdD4oY3VycmVudFJlbGF0ZWROb2RlU2NvcGUucm9vdE5vZGUoKSkuaG9zdCgpOwor
ICAgICAgICBBU1NFUlQoJm5ld1RyZWVTY29wZSA9PSAmbV9yZXRhcmdldGVkUmVsYXRlZE5vZGUt
PnRyZWVTY29wZSgpKTsKKyAgICB9Cit9CisKK2lubGluZSBOb2RlKiBSZWxhdGVkTm9kZVJldGFy
Z2V0ZXI6Om5vZGVJbkxvd2VzdENvbW1vbkFuY2VzdG9yKCkKK3sKKyAgICBpZiAoIW1fbG93ZXN0
Q29tbW9uQW5jZXN0b3JJbmRleCkKKyAgICAgICAgcmV0dXJuICZtX3JlbGF0ZWROb2RlOworICAg
IGF1dG8mIHJvb3ROb2RlID0gbV9hbmNlc3RvclRyZWVTY29wZXNbbV9sb3dlc3RDb21tb25BbmNl
c3RvckluZGV4IC0gMV0tPnJvb3ROb2RlKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFNoYWRvd1Jv
b3Q+KHJvb3ROb2RlKS5ob3N0KCk7Cit9CisKK3ZvaWQgUmVsYXRlZE5vZGVSZXRhcmdldGVyOjpj
b2xsZWN0VHJlZVNjb3BlcygpCit7CisgICAgQVNTRVJUKG1fYW5jZXN0b3JUcmVlU2NvcGVzLmlz
RW1wdHkoKSk7CisgICAgZm9yIChUcmVlU2NvcGUqIGN1cnJlbnRUcmVlU2NvcGUgPSAmbV9yZWxh
dGVkTm9kZS50cmVlU2NvcGUoKTsgY3VycmVudFRyZWVTY29wZTsgY3VycmVudFRyZWVTY29wZSA9
IGN1cnJlbnRUcmVlU2NvcGUtPnBhcmVudFRyZWVTY29wZSgpKQorICAgICAgICBtX2FuY2VzdG9y
VHJlZVNjb3Blcy5hcHBlbmQoY3VycmVudFRyZWVTY29wZSk7CisgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oIW1fYW5jZXN0b3JUcmVlU2NvcGVzLmlzRW1wdHkoKSk7Cit9CisK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECit2b2lkIFJlbGF0ZWROb2RlUmV0YXJnZXRlcjo6Y2hlY2tD
b25zaXN0ZW5jeShUcmVlU2NvcGUmIGN1cnJlbnRUcmVlU2NvcGUpCit7CisgICAgZm9yIChhdXRv
KiByZWxhdGVkTm9kZVNjb3BlID0gJm1fcmVsYXRlZE5vZGUudHJlZVNjb3BlKCk7IHJlbGF0ZWRO
b2RlU2NvcGU7IHJlbGF0ZWROb2RlU2NvcGUgPSByZWxhdGVkTm9kZVNjb3BlLT5wYXJlbnRUcmVl
U2NvcGUoKSkgeworICAgICAgICBmb3IgKGF1dG8qIHRhcmdldFNjb3BlID0gJmN1cnJlbnRUcmVl
U2NvcGU7IHRhcmdldFNjb3BlOyB0YXJnZXRTY29wZSA9IHRhcmdldFNjb3BlLT5wYXJlbnRUcmVl
U2NvcGUoKSkgeworICAgICAgICAgICAgaWYgKHRhcmdldFNjb3BlID09IHJlbGF0ZWROb2RlU2Nv
cGUpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoJm1fcmV0YXJnZXRlZFJlbGF0ZWROb2RlLT50
cmVlU2NvcGUoKSA9PSByZWxhdGVkTm9kZVNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKCFtX3JldGFyZ2V0
ZWRSZWxhdGVkTm9kZSk7Cit9CisjZW5kaWYKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50UGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGgu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgRXZlbnRQYXRoX2gKKyNkZWZp
bmUgRXZlbnRQYXRoX2gKKworI2luY2x1ZGUgIkV2ZW50Q29udGV4dC5oIgorI2luY2x1ZGUgIlBz
ZXVkb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVXNl
RWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV2ZW50UGF0aCB7CitwdWJsaWM6
CisgICAgRXZlbnRQYXRoKE5vZGUmIG9yaWdpbiwgRXZlbnQmKTsKKworICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5pc0VtcHR5KCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5zaXplKCk7IH0KKyAgICBjb25zdCBFdmVudENvbnRleHQm
IGNvbnRleHRBdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gKm1fcGF0aFtpXTsgfQorICAgIEV2
ZW50Q29udGV4dCYgY29udGV4dEF0KHNpemVfdCBpKSB7IHJldHVybiAqbV9wYXRoW2ldOyB9CisK
KyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHZvaWQgcmV0YXJnZXRUb3VjaExpc3RzKGNv
bnN0IFRvdWNoRXZlbnQmKTsKKyNlbmRpZgorICAgIHZvaWQgc2V0UmVsYXRlZFRhcmdldChOb2Rl
JiBvcmlnaW4sIEV2ZW50VGFyZ2V0Jik7CisKKyAgICBib29sIGhhc0V2ZW50TGlzdGVuZXJzKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdDsKKworICAgIEV2ZW50Q29udGV4dCog
bGFzdENvbnRleHRJZkV4aXN0cygpIHsgcmV0dXJuIG1fcGF0aC5pc0VtcHR5KCkgPyBudWxscHRy
IDogbV9wYXRoLmxhc3QoKS5nZXQoKTsgfQorCisgICAgc3RhdGljIEV2ZW50VGFyZ2V0KiBldmVu
dFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhOb2RlJiByZWZlcmVuY2VOb2RlKQorICAgIHsK
KyAgICAgICAgaWYgKGlzPFBzZXVkb0VsZW1lbnQ+KHJlZmVyZW5jZU5vZGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KHJlZmVyZW5jZU5vZGUpLmhvc3RFbGVt
ZW50KCk7CisKKyAgICAgICAgLy8gRXZlbnRzIHNlbnQgdG8gZWxlbWVudHMgaW5zaWRlIGFuIFNW
RyB1c2UgZWxlbWVudCdzIHNoYWRvdyB0cmVlIGdvIHRvIHRoZSB1c2UgZWxlbWVudC4KKyAgICAg
ICAgaWYgKGlzPFNWR0VsZW1lbnQ+KHJlZmVyZW5jZU5vZGUpKSB7CisgICAgICAgICAgICBpZiAo
YXV0byogdXNlRWxlbWVudCA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlZmVyZW5jZU5vZGUpLmNv
cnJlc3BvbmRpbmdVc2VFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHVzZUVsZW1l
bnQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gJnJlZmVyZW5jZU5vZGU7CisgICAgfQor
Citwcml2YXRlOgorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdm9pZCByZXRhcmdldFRv
dWNoKFRvdWNoRXZlbnRDb250ZXh0OjpUb3VjaExpc3RUeXBlLCBjb25zdCBUb3VjaCYpOworI2Vu
ZGlmCisKKyAgICBFdmVudCYgbV9ldmVudDsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV2
ZW50Q29udGV4dD4sIDMyPiBtX3BhdGg7Cit9OworCit9CisKKyNlbmRpZiAvKiBFdmVudFBhdGhf
aCAqLwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>