<?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>30272</bug_id>
          
          <creation_ts>2009-10-10 01:57:26 -0700</creation_ts>
          <short_desc>Move HistoryController to its own file</short_desc>
          <delta_ts>2009-10-10 02:11:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>29947</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>153851</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-10 01:57:26 -0700</bug_when>
    <thetext>Purely mechanical.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153852</commentid>
    <comment_count>1</comment_count>
      <attachid>40986</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-10 01:59:08 -0700</bug_when>
    <thetext>Created attachment 40986
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153853</commentid>
    <comment_count>2</comment_count>
      <attachid>40986</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-10-10 02:04:14 -0700</bug_when>
    <thetext>Comment on attachment 40986
Patch v1

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153854</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-10 02:11:49 -0700</bug_when>
    <thetext>Committed r49415: &lt;http://trac.webkit.org/changeset/49415&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40986</attachid>
            <date>2009-10-10 01:59:08 -0700</date>
            <delta_ts>2009-10-10 02:04:14 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-30272-20091010015907.patch</filename>
            <type>text/plain</type>
            <size>67822</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTE3NGQ2ZS4uYjNkZDU0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAwOS0xMC0xMCAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1vdmUgSGlzdG9yeUNvbnRyb2xsZXIgdG8gaXRzIG93biBmaWxlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDI3MgorCisgICAg
ICAgIFB1cmVseSBtZWNoYW5pY2FsLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAg
ICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBXZWJDb3JlU291cmNlcy5ia2w6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvSGlz
dG9yeUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRy
b2xsZXIuaDogQWRkZWQuCisKIDIwMDktMTAtMDkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA1MTM1
ZWI0Li45M2MyYzMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEyMzIsNiArMTIzMiw4IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaCBcCiAJV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXJDbGllbnQuaCBcCiAJV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5o
IFwKKwlXZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAgXAorCVdlYkNvcmUvbG9h
ZGVyL0hpc3RvcnlDb250cm9sbGVyLmggXAogCVdlYkNvcmUvbG9hZGVyL0ltYWdlRG9jdW1lbnQu
Y3BwIFwKIAlXZWJDb3JlL2xvYWRlci9JbWFnZURvY3VtZW50LmggXAogCVdlYkNvcmUvbG9hZGVy
L0ltYWdlTG9hZGVyLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDUyNzE4ZDkuLmE2MjYxOWIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNjE2LDYg
KzE2MTYsOCBAQAogICAgICAgICAgICAgJ2xvYWRlci9GcmFtZUxvYWRlci5oJywKICAgICAgICAg
ICAgICdsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0Zy
YW1lTG9hZGVyVHlwZXMuaCcsCisgICAgICAgICAgICAnbG9hZGVyL0hpc3RvcnlDb250cm9sbGVy
LmNwcCcsCisgICAgICAgICAgICAnbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmgnLAogICAgICAg
ICAgICAgJ2xvYWRlci9JbWFnZURvY3VtZW50LmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL0lt
YWdlRG9jdW1lbnQuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0ltYWdlTG9hZGVyLmNwcCcsCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAwZDJkODk4Li5mMzRmYTUzIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTE3NDE3LDYgKzE3NDE3LDE0
IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGxvYWRlclxIaXN0b3J5Q29udHJvbGxlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcSGlzdG9yeUNvbnRyb2xsZXIuaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxv
YWRlclxJbWFnZURvY3VtZW50LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGNjYjc1YmQuLmZjN2E5YjYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzU4LDYgKzIz
NTgsOCBAQAogCQk5NzA1OTk3QTEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2hlY2tlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcwNTk5NzYxMDdE
OTc1MjAwQTUwQTdDIC8qIFBvbGljeUNoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5NzlGNDNEMzEwNzVFNDRBMDAwMEY4M0IgLyogUmVk
aXJlY3RTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTc5RjQzRDExMDc1RTQ0QTAwMDBGODNCIC8qIFJlZGlyZWN0U2NoZWR1bGVyLmNw
cCAqLzsgfTsKIAkJOTc5RjQzRDQxMDc1RTQ0QTAwMDBGODNCIC8qIFJlZGlyZWN0U2NoZWR1bGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzlGNDNE
MjEwNzVFNDRBMDAwMEY4M0IgLyogUmVkaXJlY3RTY2hlZHVsZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5N0RDRTIwMTEwODA3Qzc1MDA1N0Qz
OTQgLyogSGlzdG9yeUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTdEQ0UxRkYxMDgwN0M3NTAwNTdEMzk0IC8qIEhpc3RvcnlDb250
cm9sbGVyLmNwcCAqLzsgfTsKKwkJOTdEQ0UyMDIxMDgwN0M3NTAwNTdEMzk0IC8qIEhpc3RvcnlD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5N0RDRTIwMDEwODA3Qzc1MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xsZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5N0RENEQ4NjBGREY0
RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5N0RENEQ4NDBGREY0RDZEMDBFQ0Y5QTQgLyogWFNTQXVkaXRv
ci5jcHAgKi87IH07CiAJCTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0RENEQ4NTBG
REY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oICovOyB9OwogCQk5N0VGN0RGRTEwN0U1NUI3
MDBEN0M0OUMgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdFRjdERkQxMDdFNTVCNzAwRDdDNDlDIC8qIFNj
cmlwdENvbnRyb2xsZXJCYXNlLmNwcCAqLzsgfTsKQEAgLTc1NjAsNiArNzU2Miw4IEBACiAJCTk3
MDU5OTc2MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVja2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBvbGljeUNoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTc5RjQzRDExMDc1RTQ0QTAwMDBGODNCIC8qIFJlZGlyZWN0U2NoZWR1bGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZGlyZWN0U2NoZWR1bGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc5RjQzRDIxMDc1RTQ0QTAwMDBG
ODNCIC8qIFJlZGlyZWN0U2NoZWR1bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlZGlyZWN0U2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3
RENFMUZGMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIaXN0b3J5Q29udHJvbGxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3RENFMjAwMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0
b3J5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIaXN0b3J5
Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0RENEQ4NDBGREY0
RDZEMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBYU1NBdWRpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTdERDREODUwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gWFNTQXVkaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5N0VGN0RGRDEwN0U1NUI3MDBEN0M0OUMgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q29udHJvbGxlckJh
c2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ2MDAsNiArMTQ2MDQsOCBA
QAogCQkJCTUxRTRBREIzMEM0MkI0Q0YwMDQyQkM1NSAvKiBGVFBEaXJlY3RvcnlEb2N1bWVudC5o
ICovLAogCQkJCTUxQzgxQjg3MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIu
Y3BwICovLAogCQkJCTUxQzgxQjg4MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJz
ZXIuaCAqLywKKwkJCQk5N0RDRTFGRjEwODA3Qzc1MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xs
ZXIuY3BwICovLAorCQkJCTk3RENFMjAwMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJv
bGxlci5oICovLAogCQkJCTFBODIwRDhGMEExM0VCQTYwMEFGODQzQyAvKiBJbWFnZURvY3VtZW50
LmNwcCAqLywKIAkJCQkxQTgyMEQ5MDBBMTNFQkE2MDBBRjg0M0MgLyogSW1hZ2VEb2N1bWVudC5o
ICovLAogCQkJCTA4OTU4MjUzMEU4NTdBN0UwMEY4MkM4MyAvKiBJbWFnZUxvYWRlci5jcHAgKi8s
CkBAIC0xODAwNCw2ICsxODAxMCw3IEBACiAJCQkJOTNGMTk5RUQwODI0NUU1OTAwMUU5QUJDIC8q
IFhTTFRQcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJF
QTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3REQ0RDg3MEZE
RjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk5N0RDRTIw
MjEwODA3Qzc1MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpA
QCAtMjAxMzEsNiArMjAxMzgsNyBAQAogCQkJCTkzRjE5QjA1MDgyNDVFNTkwMDFFOUFCQyAvKiBY
U0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJFNTEyRDBDRjZD
NTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3
REQ0RDg2MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTk3RENFMjAxMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsIGIvV2Vi
Q29yZS9XZWJDb3JlU291cmNlcy5ia2wKaW5kZXggYzllMTA0ZS4uNDg1MTc4NCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKKysrIGIvV2ViQ29yZS9XZWJDb3JlU291cmNl
cy5ia2wKQEAgLTcyMCw2ICs3MjAsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2Yg
ZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIGxvYWRlci9GcmFtZUxvYWRl
ci5jcHAKICAgICAgICAgbG9hZGVyL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAogICAgICAgICBs
b2FkZXIvRlRQRGlyZWN0b3J5UGFyc2VyLmNwcAorICAgICAgICBsb2FkZXIvSGlzdG9yeUNvbnRy
b2xsZXIuY3BwCiAgICAgICAgIGxvYWRlci9JbWFnZURvY3VtZW50LmNwcAogICAgICAgICBsb2Fk
ZXIvSW1hZ2VMb2FkZXIuY3BwCiAgICAgICAgIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3Bw
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggMzY5MDlkNC4uNTk5MjhlNCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcApAQCAtMTYzLDE1ICsxNjMsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuUmVm
ZXJUb1BhcmVudEZyYW1lRW5jb2RpbmcoY29uc3QgRnJhbWUqIGZyYW1lLCBjb25zdCBGcmFtZQog
ICAgIHJldHVybiBwYXJlbnRGcmFtZSAmJiBwYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKS0+Y2FuQWNjZXNzKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigp
KTsKIH0KIAotSGlzdG9yeUNvbnRyb2xsZXI6Okhpc3RvcnlDb250cm9sbGVyKEZyYW1lKiBmcmFt
ZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUpCi17Ci19Ci0KLUhpc3RvcnlDb250cm9sbGVyOjp+SGlz
dG9yeUNvbnRyb2xsZXIoKQotewotfQotCiBGcmFtZUxvYWRlcjo6RnJhbWVMb2FkZXIoRnJhbWUq
IGZyYW1lLCBGcmFtZUxvYWRlckNsaWVudCogY2xpZW50KQogICAgIDogbV9mcmFtZShmcmFtZSkK
ICAgICAsIG1fY2xpZW50KGNsaWVudCkKQEAgLTEwMjMsMzQgKzEwMTQsNiBAQCB2b2lkIEZyYW1l
TG9hZGVyOjpjb21taXRJY29uVVJMVG9JY29uRGF0YWJhc2UoY29uc3QgS1VSTCYgaWNvbikKICAg
ICBpY29uRGF0YWJhc2UoKS0+c2V0SWNvblVSTEZvclBhZ2VVUkwoaWNvbi5zdHJpbmcoKSwgb3Jp
Z2luYWxSZXF1ZXN0VVJMKCkuc3RyaW5nKCkpOwogfQogCi12b2lkIEhpc3RvcnlDb250cm9sbGVy
OjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSgpCi17Ci0gICAgRG9jdW1lbnQqIGRvYyA9IG1fZnJhbWUt
PmRvY3VtZW50KCk7Ci0gICAgICAgIAotICAgIEhpc3RvcnlJdGVtKiBpdGVtVG9SZXN0b3JlID0g
MDsKLSAgICAKLSAgICBzd2l0Y2ggKG1fZnJhbWUtPmxvYWRlcigpLT5sb2FkVHlwZSgpKSB7Ci0g
ICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZVJlbG9hZDoKLSAgICAgICAgY2FzZSBGcmFtZUxvYWRU
eXBlUmVsb2FkRnJvbU9yaWdpbjoKLSAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlU2FtZToKLSAg
ICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlUmVwbGFjZToKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEZyYW1lTG9hZFR5cGVCYWNrOgotICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGVC
YWNrV01MRGVja05vdEFjY2Vzc2libGU6Ci0gICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZUZvcndh
cmQ6Ci0gICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZUluZGV4ZWRCYWNrRm9yd2FyZDoKLSAgICAg
ICAgY2FzZSBGcmFtZUxvYWRUeXBlUmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0Ogot
ICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGVTdGFuZGFyZDoKLSAgICAgICAgICAgIGl0ZW1Ub1Jl
c3RvcmUgPSBtX2N1cnJlbnRJdGVtLmdldCgpOyAKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFpdGVt
VG9SZXN0b3JlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0coTG9hZGluZywgIldlYkNvcmVM
b2FkaW5nICVzOiByZXN0b3JpbmcgZm9ybSBzdGF0ZSBmcm9tICVwIiwgbV9mcmFtZS0+dHJlZSgp
LT5uYW1lKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXRlbVRvUmVzdG9yZSk7Ci0gICAgZG9j
LT5zZXRTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cyhpdGVtVG9SZXN0b3JlLT5kb2N1bWVudFN0YXRl
KCkpOwotfQotCiB2b2lkIEZyYW1lTG9hZGVyOjpnb3RvQW5jaG9yKCkKIHsKICAgICAvLyBJZiBv
dXIgVVJMIGhhcyBubyByZWYsIHRoZW4gd2UgaGF2ZSBubyBwbGFjZSB3ZSBuZWVkIHRvIGp1bXAg
dG8uCkBAIC0xMjEyLDE2ICsxMTc1LDYgQEAgS1VSTCBGcmFtZUxvYWRlcjo6Y29tcGxldGVVUkwo
Y29uc3QgU3RyaW5nJiB1cmwpCiAgICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKHVybCk7CiB9CiAKLXZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnNldEN1cnJlbnRJdGVt
KEhpc3RvcnlJdGVtKiBpdGVtKQotewotICAgIG1fY3VycmVudEl0ZW0gPSBpdGVtOwotfQotCi12
b2lkIEhpc3RvcnlDb250cm9sbGVyOjpzZXRQcm92aXNpb25hbEl0ZW0oSGlzdG9yeUl0ZW0qIGl0
ZW0pCi17Ci0gICAgbV9wcm92aXNpb25hbEl0ZW0gPSBpdGVtOwotfQotCiB2b2lkIEZyYW1lTG9h
ZGVyOjpsb2FkVVJMSW50b0NoaWxkRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IHJlZmVyZXIsIEZyYW1lKiBjaGlsZEZyYW1lKQogewogICAgIEFTU0VSVChjaGlsZEZyYW1lKTsK
QEAgLTMwNDksMTMgKzMwMDIsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpkaWRGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXQoKQogICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZEZpcnN0VmlzdWFsbHlO
b25FbXB0eUxheW91dCgpOwogfQogCi12b2lkIEhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JG
cmFtZUxvYWRDb21wbGV0ZWQoKQotewotICAgIC8vIEV2ZW4gaWYgYWxyZWFkeSBjb21wbGV0ZSwg
d2UgbWlnaHQgaGF2ZSBzZXQgYSBwcmV2aW91cyBpdGVtIG9uIGEgZnJhbWUgdGhhdAotICAgIC8v
IGRpZG4ndCBkbyBhbnkgZGF0YSBsb2FkaW5nIG9uIHRoZSBwYXN0IHRyYW5zYWN0aW9uLiBNYWtl
IHN1cmUgdG8gY2xlYXIgdGhlc2Ugb3V0LgotICAgIG1fcHJldmlvdXNJdGVtID0gMDsKLX0KLQog
dm9pZCBGcmFtZUxvYWRlcjo6ZnJhbWVMb2FkQ29tcGxldGVkKCkKIHsKICAgICAvLyBOb3RlOiBD
YW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLgpAQCAtMzY5NCwxMSArMzY0MCw2IEBAIGJvb2wg
RnJhbWVMb2FkZXI6OnNob3VsZEludGVycnVwdExvYWRGb3JYRnJhbWVPcHRpb25zKGNvbnN0IFN0
cmluZyYgY29udGVudCwgY29uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEhpc3RvcnlD
b250cm9sbGVyOjp1cGRhdGVCYWNrRm9yd2FyZExpc3RGb3JGcmFnbWVudFNjcm9sbCgpCi17Ci0g
ICAgdXBkYXRlQmFja0ZvcndhcmRMaXN0Q2xpcHBlZEF0VGFyZ2V0KGZhbHNlKTsKLX0KLQogYm9v
bCBGcmFtZUxvYWRlcjo6bG9hZFByb3Zpc2lvbmFsSXRlbUZyb21DYWNoZWRQYWdlKCkKIHsKICAg
ICBSZWZQdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IHBhZ2VDYWNoZSgpLT5nZXQoaGlzdG9y
eSgpLT5wcm92aXNpb25hbEl0ZW0oKSk7CkBAIC0zNzUwLDYzICszNjkxLDYgQEAgYm9vbCBGcmFt
ZUxvYWRlcjo6c2hvdWxkVHJlYXRVUkxBc1NhbWVBc0N1cnJlbnQoY29uc3QgS1VSTCYgdXJsKSBj
b25zdAogICAgIHJldHVybiB1cmwgPT0gaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpLT51cmwoKSB8
fCB1cmwgPT0gaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpLT5vcmlnaW5hbFVSTCgpOwogfQogCi1Q
YXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBIaXN0b3J5Q29udHJvbGxlcjo6Y3JlYXRlSXRlbShib29s
IHVzZU9yaWdpbmFsKQotewotICAgIERvY3VtZW50TG9hZGVyKiBkb2NMb2FkZXIgPSBtX2ZyYW1l
LT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKLSAgICAKLSAgICBLVVJMIHVucmVhY2hhYmxl
VVJMID0gZG9jTG9hZGVyID8gZG9jTG9hZGVyLT51bnJlYWNoYWJsZVVSTCgpIDogS1VSTCgpOwot
ICAgIAotICAgIEtVUkwgdXJsOwotICAgIEtVUkwgb3JpZ2luYWxVUkw7Ci0KLSAgICBpZiAoIXVu
cmVhY2hhYmxlVVJMLmlzRW1wdHkoKSkgewotICAgICAgICB1cmwgPSB1bnJlYWNoYWJsZVVSTDsK
LSAgICAgICAgb3JpZ2luYWxVUkwgPSB1bnJlYWNoYWJsZVVSTDsKLSAgICB9IGVsc2UgewotICAg
ICAgICBvcmlnaW5hbFVSTCA9IGRvY0xvYWRlciA/IGRvY0xvYWRlci0+b3JpZ2luYWxVUkwoKSA6
IEtVUkwoKTsKLSAgICAgICAgaWYgKHVzZU9yaWdpbmFsKQotICAgICAgICAgICAgdXJsID0gb3Jp
Z2luYWxVUkw7Ci0gICAgICAgIGVsc2UgaWYgKGRvY0xvYWRlcikKLSAgICAgICAgICAgIHVybCA9
IGRvY0xvYWRlci0+cmVxdWVzdFVSTCgpOwotICAgIH0KLQotICAgIExPRyhIaXN0b3J5LCAiV2Vi
Q29yZUhpc3Rvcnk6IENyZWF0aW5nIGl0ZW0gZm9yICVzIiwgdXJsLnN0cmluZygpLmFzY2lpKCku
ZGF0YSgpKTsKLSAgICAKLSAgICAvLyBGcmFtZXMgdGhhdCBoYXZlIG5ldmVyIHN1Y2Nlc3NmdWxs
eSBsb2FkZWQgYW55IGNvbnRlbnQKLSAgICAvLyBtYXkgaGF2ZSBubyBVUkwgYXQgYWxsLiBDdXJy
ZW50bHkgb3VyIGhpc3RvcnkgY29kZSBjYW4ndAotICAgIC8vIGRlYWwgd2l0aCBzdWNoIHRoaW5n
cywgc28gd2UgbmlwIHRoYXQgaW4gdGhlIGJ1ZCBoZXJlLgotICAgIC8vIExhdGVyIHdlIG1heSB3
YW50IHRvIGxlYXJuIHRvIGxpdmUgd2l0aCBuaWwgZm9yIFVSTC4KLSAgICAvLyBTZWUgYnVnIDMz
NjgyMzYgYW5kIHJlbGF0ZWQgYnVncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICBpZiAodXJs
LmlzRW1wdHkoKSkgCi0gICAgICAgIHVybCA9IGJsYW5rVVJMKCk7Ci0gICAgaWYgKG9yaWdpbmFs
VVJMLmlzRW1wdHkoKSkKLSAgICAgICAgb3JpZ2luYWxVUkwgPSBibGFua1VSTCgpOwotICAgIAot
ICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7Ci0gICAg
U3RyaW5nIHBhcmVudCA9IHBhcmVudEZyYW1lID8gcGFyZW50RnJhbWUtPnRyZWUoKS0+bmFtZSgp
IDogIiI7Ci0gICAgU3RyaW5nIHRpdGxlID0gZG9jTG9hZGVyID8gZG9jTG9hZGVyLT50aXRsZSgp
IDogIiI7Ci0KLSAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBIaXN0b3J5SXRlbTo6Y3Jl
YXRlKHVybCwgbV9mcmFtZS0+dHJlZSgpLT5uYW1lKCksIHBhcmVudCwgdGl0bGUpOwotICAgIGl0
ZW0tPnNldE9yaWdpbmFsVVJMU3RyaW5nKG9yaWdpbmFsVVJMLnN0cmluZygpKTsKLQotICAgIGlm
ICghdW5yZWFjaGFibGVVUkwuaXNFbXB0eSgpIHx8ICFkb2NMb2FkZXIgfHwgZG9jTG9hZGVyLT5y
ZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPj0gNDAwKQotICAgICAgICBpdGVtLT5zZXRMYXN0
VmlzaXRXYXNGYWlsdXJlKHRydWUpOwotCi0gICAgLy8gU2F2ZSBmb3JtIHN0YXRlIGlmIHRoaXMg
aXMgYSBQT1NUCi0gICAgaWYgKGRvY0xvYWRlcikgewotICAgICAgICBpZiAodXNlT3JpZ2luYWwp
Ci0gICAgICAgICAgICBpdGVtLT5zZXRGb3JtSW5mb0Zyb21SZXF1ZXN0KGRvY0xvYWRlci0+b3Jp
Z2luYWxSZXF1ZXN0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpdGVtLT5zZXRGb3Jt
SW5mb0Zyb21SZXF1ZXN0KGRvY0xvYWRlci0+cmVxdWVzdCgpKTsKLSAgICB9Ci0gICAgCi0gICAg
Ly8gU2V0IHRoZSBpdGVtIGZvciB3aGljaCB3ZSB3aWxsIHNhdmUgZG9jdW1lbnQgc3RhdGUKLSAg
ICBtX3ByZXZpb3VzSXRlbSA9IG1fY3VycmVudEl0ZW07Ci0gICAgbV9jdXJyZW50SXRlbSA9IGl0
ZW07Ci0gICAgCi0gICAgcmV0dXJuIGl0ZW0ucmVsZWFzZSgpOwotfQotICAgIAogdm9pZCBGcmFt
ZUxvYWRlcjo6Y2hlY2tEaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkKIHsKICAgICBQYWdlKiBw
YWdlID0gbV9mcmFtZS0+cGFnZSgpOwpAQCAtMzgxOSw1NiArMzcwMyw2IEBAIHZvaWQgRnJhbWVM
b2FkZXI6OmNoZWNrRGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpCiAgICAgfQogfQogCi12b2lk
IEhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVCYWNrRm9yd2FyZExpc3RDbGlwcGVkQXRUYXJnZXQo
Ym9vbCBkb0NsaXApCi17Ci0gICAgLy8gSW4gdGhlIGNhc2Ugb2Ygc2F2aW5nIHN0YXRlIGFib3V0
IGEgcGFnZSB3aXRoIGZyYW1lcywgd2Ugc3RvcmUgYSB0cmVlIG9mIGl0ZW1zIHRoYXQgbWlycm9y
cyB0aGUgZnJhbWUgdHJlZS4gIAotICAgIC8vIFRoZSBpdGVtIHRoYXQgd2FzIHRoZSB0YXJnZXQg
b2YgdGhlIHVzZXIncyBuYXZpZ2F0aW9uIGlzIGRlc2lnbmF0ZWQgYXMgdGhlICJ0YXJnZXRJdGVt
Ii4gIAotICAgIC8vIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBkb0NsaXA9dHJ1
ZSB3ZSdyZSBhYmxlIHRvIGNyZWF0ZSB0aGUgd2hvbGUgdHJlZSBleGNlcHQgZm9yIHRoZSB0YXJn
ZXQncyBjaGlsZHJlbiwgCi0gICAgLy8gd2hpY2ggd2lsbCBiZSBsb2FkZWQgaW4gdGhlIGZ1dHVy
ZS4gVGhhdCBwYXJ0IG9mIHRoZSB0cmVlIHdpbGwgYmUgZmlsbGVkIG91dCBhcyB0aGUgY2hpbGQg
bG9hZHMgYXJlIGNvbW1pdHRlZC4KLQotICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7
Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9mcmFtZS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEZyYW1lKiBtYWluRnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKTsK
LSAgICBBU1NFUlQobWFpbkZyYW1lKTsKLSAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBt
YWluRnJhbWUtPmxvYWRlcigpOwotCi0gICAgZnJhbWVMb2FkZXItPmNoZWNrRGlkUGVyZm9ybUZp
cnN0TmF2aWdhdGlvbigpOwotCi0gICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gZnJhbWVM
b2FkZXItPmhpc3RvcnkoKS0+Y3JlYXRlSXRlbVRyZWUobV9mcmFtZSwgZG9DbGlwKTsKLSAgICBM
T0coQmFja0ZvcndhcmQsICJXZWJDb3JlQmFja0ZvcndhcmQgLSBBZGRpbmcgYmFja2ZvcndhcmQg
aXRlbSAlcCBmb3IgZnJhbWUgJXMiLCBpdGVtLmdldCgpLCBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9j
dW1lbnRMb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgIHBhZ2Ut
PmJhY2tGb3J3YXJkTGlzdCgpLT5hZGRJdGVtKGl0ZW0pOwotfQotCi1QYXNzUmVmUHRyPEhpc3Rv
cnlJdGVtPiBIaXN0b3J5Q29udHJvbGxlcjo6Y3JlYXRlSXRlbVRyZWUoRnJhbWUqIHRhcmdldEZy
YW1lLCBib29sIGNsaXBBdFRhcmdldCkKLXsKLSAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGJmSXRl
bSA9IGNyZWF0ZUl0ZW0obV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSA/IHRydWUgOiBmYWxzZSk7
Ci0gICAgaWYgKG1fcHJldmlvdXNJdGVtKQotICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRW
aWV3U3RhdGVUb0l0ZW0obV9wcmV2aW91c0l0ZW0uZ2V0KCkpOwotICAgIGlmICghKGNsaXBBdFRh
cmdldCAmJiBtX2ZyYW1lID09IHRhcmdldEZyYW1lKSkgewotICAgICAgICAvLyBzYXZlIGZyYW1l
IHN0YXRlIGZvciBpdGVtcyB0aGF0IGFyZW4ndCBsb2FkaW5nIChraHRtbCBkb2Vzbid0IHNhdmUg
dGhvc2UpCi0gICAgICAgIHNhdmVEb2N1bWVudFN0YXRlKCk7Ci0gICAgICAgIGZvciAoRnJhbWUq
IGNoaWxkID0gbV9mcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgIEZyYW1lTG9hZGVyKiBj
aGlsZExvYWRlciA9IGNoaWxkLT5sb2FkZXIoKTsKLSAgICAgICAgICAgIGJvb2wgaGFzQ2hpbGRM
b2FkZWQgPSBjaGlsZExvYWRlci0+ZnJhbWVIYXNMb2FkZWQoKTsKLQotICAgICAgICAgICAgLy8g
SWYgdGhlIGNoaWxkIGlzIGEgZnJhbWUgY29ycmVzcG9uZGluZyB0byBhbiA8b2JqZWN0PiBlbGVt
ZW50IHRoYXQgbmV2ZXIgbG9hZGVkLAotICAgICAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBj
cmVhdGUgYSBoaXN0b3J5IGl0ZW0sIGJlY2F1c2UgdGhhdCBjYXVzZXMgZmFsbGJhY2sgY29udGVu
dAotICAgICAgICAgICAgLy8gdG8gYmUgaWdub3JlZCBvbiByZWxvYWQuCi0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmICghKCFoYXNDaGlsZExvYWRlZCAmJiBjaGlsZExvYWRlci0+aXNIb3N0
ZWRCeU9iamVjdEVsZW1lbnQoKSkpCi0gICAgICAgICAgICAgICAgYmZJdGVtLT5hZGRDaGlsZEl0
ZW0oY2hpbGRMb2FkZXItPmhpc3RvcnkoKS0+Y3JlYXRlSXRlbVRyZWUodGFyZ2V0RnJhbWUsIGNs
aXBBdFRhcmdldCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX2ZyYW1lID09IHRhcmdl
dEZyYW1lKQotICAgICAgICBiZkl0ZW0tPnNldElzVGFyZ2V0SXRlbSh0cnVlKTsKLSAgICByZXR1
cm4gYmZJdGVtOwotfQotCiBGcmFtZSogRnJhbWVMb2FkZXI6OmZpbmRGcmFtZUZvck5hdmlnYXRp
b24oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fZnJh
bWUtPnRyZWUoKS0+ZmluZChuYW1lKTsKQEAgLTM4NzcsMTAxICszNzExLDYgQEAgRnJhbWUqIEZy
YW1lTG9hZGVyOjpmaW5kRnJhbWVGb3JOYXZpZ2F0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSkKICAgICByZXR1cm4gZnJhbWU7CiB9CiAKLXZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnNhdmVT
Y3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKLXsKLSAg
ICBpZiAoIWl0ZW0gfHwgIW1fZnJhbWUtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICBpdGVtLT5zZXRTY3JvbGxQb2ludChtX2ZyYW1lLT52aWV3KCktPnNjcm9sbFBvc2l0
aW9uKCkpOwotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBncmVhdCB0byB3b3JrIG91dCBhIHdh
eSB0byBwdXQgdGhpcyBjb2RlIGluIFdlYkNvcmUgaW5zdGVhZCBvZiBjYWxsaW5nIHRocm91Z2gg
dG8gdGhlIGNsaWVudC4KLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnNhdmVWaWV3
U3RhdGVUb0l0ZW0oaXRlbSk7Ci19Ci0KLS8qCi0gVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiBi
ZXR3ZWVuIHRoZSBsYXlvdXQgYW5kIGxvYWQgY29tcGxldGlvbiB0aGF0IGFmZmVjdHMgcmVzdG9y
aW5nIHRoZSBzY3JvbGwgcG9zaXRpb24uCi0gV2UgdHJ5IHRvIHJlc3RvcmUgdGhlIHNjcm9sbCBw
b3NpdGlvbiBhdCBib3RoIHRoZSBmaXJzdCBsYXlvdXQgYW5kIHVwb24gbG9hZCBjb21wbGV0aW9u
LgotIAotIDEpIElmIGZpcnN0IGxheW91dCBoYXBwZW5zIGJlZm9yZSB0aGUgbG9hZCBjb21wbGV0
ZXMsIHdlIHdhbnQgdG8gcmVzdG9yZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRoZW4gc28gdGhhdCB0
aGUKLSBmaXJzdCB0aW1lIHdlIGRyYXcgdGhlIHBhZ2UgaXMgYWxyZWFkeSBzY3JvbGxlZCB0byB0
aGUgcmlnaHQgcGxhY2UsIGluc3RlYWQgb2Ygc3RhcnRpbmcgYXQgdGhlIHRvcCBhbmQgbGF0ZXIK
LSBqdW1waW5nIGRvd24uICBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBvbGQgc2Nyb2xsIHBvc2l0
aW9uIGlzIHBhc3QgdGhlIHBhcnQgb2YgdGhlIGRvYyBsYWlkIG91dCBzbyBmYXIsIGluCi0gd2hp
Y2ggY2FzZSB0aGUgcmVzdG9yZSBzaWxlbnQgZmFpbHMgYW5kIHdlIHdpbGwgZml4IGl0IGluIHdo
ZW4gd2UgdHJ5IHRvIHJlc3RvcmUgb24gZG9jIGNvbXBsZXRpb24uCi0gMikgSWYgdGhlIGxheW91
dCBoYXBwZW5zIGFmdGVyIHRoZSBsb2FkIGNvbXBsZXRlcywgdGhlIGF0dGVtcHQgdG8gcmVzdG9y
ZSBhdCBsb2FkIGNvbXBsZXRpb24gdGltZSBzaWxlbnRseQotIGZhaWxzLiAgV2UgdGhlbiBzdWNj
ZXNzZnVsbHkgcmVzdG9yZSBpdCB3aGVuIHRoZSBsYXlvdXQgaGFwcGVucy4KLSovCi12b2lkIEhp
c3RvcnlDb250cm9sbGVyOjpyZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKQotewot
ICAgIGlmICghbV9mcmFtZS0+bG9hZGVyKCktPmNvbW1pdHRlZEZpcnN0UmVhbERvY3VtZW50TG9h
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9jdXJyZW50SXRlbSk7Ci0gICAg
Ci0gICAgLy8gRklYTUU6IEFzIHRoZSBBU1NFUlQgYXR0ZXN0cywgaXQgc2VlbXMgd2Ugc2hvdWxk
IGFsd2F5cyBoYXZlIGEgY3VycmVudEl0ZW0gaGVyZS4KLSAgICAvLyBPbmUgY291bnRlcmV4YW1w
bGUgaXMgPHJkYXI6Ly9wcm9ibGVtLzQ5MTcyOTA+Ci0gICAgLy8gRm9yIG5vdywgdG8gY292ZXIg
dGhpcyBpc3N1ZSBpbiByZWxlYXNlIGJ1aWxkcywgdGhlcmUgaXMgbm8gdGVjaG5pY2FsIGhhcm0g
dG8gcmV0dXJuaW5nCi0gICAgLy8gZWFybHkgYW5kIGZyb20gYSB1c2VyIHN0YW5kcG9pbnQgLSBh
cyBpbiB0aGUgYWJvdmUgcmFkYXIgLSB0aGUgcHJldmlvdXMgcGFnZSBsb2FkIGZhaWxlZCAKLSAg
ICAvLyBzbyB0aGVyZSAqaXMqIG5vIHNjcm9sbCBvciB2aWV3IHN0YXRlIHRvIHJlc3RvcmUhCi0g
ICAgaWYgKCFtX2N1cnJlbnRJdGVtKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gRklY
TUU6IEl0IHdvdWxkIGJlIGdyZWF0IHRvIHdvcmsgb3V0IGEgd2F5IHRvIHB1dCB0aGlzIGNvZGUg
aW4gV2ViQ29yZSBpbnN0ZWFkIG9mIGNhbGxpbmcKLSAgICAvLyB0aHJvdWdoIHRvIHRoZSBjbGll
bnQuIEl0J3MgY3VycmVudGx5IHVzZWQgb25seSBmb3IgdGhlIFBERiB2aWV3IG9uIE1hYy4KLSAg
ICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnJlc3RvcmVWaWV3U3RhdGUoKTsKLSAgICAK
LSAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKQotICAgICAgICBpZiAo
IXZpZXctPndhc1Njcm9sbGVkQnlVc2VyKCkpCi0gICAgICAgICAgICB2aWV3LT5zZXRTY3JvbGxQ
b3NpdGlvbihtX2N1cnJlbnRJdGVtLT5zY3JvbGxQb2ludCgpKTsKLX0KLQotdm9pZCBIaXN0b3J5
Q29udHJvbGxlcjo6aW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2FjaGVkUGFnZSgpCi17Ci0gICAgLy8g
V2hlbiB3ZSBhcmUgcHJlLWNvbW1pdCwgdGhlIGN1cnJlbnRJdGVtIGlzIHdoZXJlIHRoZSBwYWdl
Q2FjaGUgZGF0YSByZXNpZGVzICAgIAotICAgIENhY2hlZFBhZ2UqIGNhY2hlZFBhZ2UgPSBwYWdl
Q2FjaGUoKS0+Z2V0KGN1cnJlbnRJdGVtKCkpOwotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSBn
cm90ZXNxdWUgaGFjayB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzQwNTkwNTk+IENyYXNoIGluIFJl
bmRlckZsb3c6OmRldGFjaAotICAgIC8vIFNvbWVob3cgdGhlIFBhZ2VTdGF0ZSBvYmplY3QgaXMg
bm90IHByb3Blcmx5IHVwZGF0ZWQsIGFuZCBpcyBob2xkaW5nIG9udG8gYSBzdGFsZSBkb2N1bWVu
dC4KLSAgICAvLyBCb3RoIFhjb2RlIGFuZCBGaWxlTWFrZXIgc2VlIHRoaXMgY3Jhc2gsIFNhZmFy
aSBkb2VzIG5vdC4KLSAgICAKLSAgICBBU1NFUlQoIWNhY2hlZFBhZ2UgfHwgY2FjaGVkUGFnZS0+
ZG9jdW1lbnQoKSA9PSBtX2ZyYW1lLT5kb2N1bWVudCgpKTsKLSAgICBpZiAoY2FjaGVkUGFnZSAm
JiBjYWNoZWRQYWdlLT5kb2N1bWVudCgpID09IG1fZnJhbWUtPmRvY3VtZW50KCkpIHsKLSAgICAg
ICAgY2FjaGVkUGFnZS0+ZG9jdW1lbnQoKS0+c2V0SW5QYWdlQ2FjaGUoZmFsc2UpOwotICAgICAg
ICBjYWNoZWRQYWdlLT5jbGVhcigpOwotICAgIH0KLSAgICAKLSAgICBpZiAoY2FjaGVkUGFnZSkK
LSAgICAgICAgcGFnZUNhY2hlKCktPnJlbW92ZShjdXJyZW50SXRlbSgpKTsKLX0KLQotdm9pZCBI
aXN0b3J5Q29udHJvbGxlcjo6c2F2ZURvY3VtZW50U3RhdGUoKQotewotICAgIC8vIEZJWE1FOiBS
ZWFkaW5nIHRoaXMgYml0IG9mIEZyYW1lTG9hZGVyIHN0YXRlIGhlcmUgaXMgdW5mb3J0dW5hdGUu
ICBJIG5lZWQgdG8gc3R1ZHkKLSAgICAvLyB0aGlzIG1vcmUgdG8gc2VlIGlmIHdlIGNhbiByZW1v
dmUgdGhpcyBkZXBlbmRlbmN5LgotICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+Y3JlYXRpbmdJ
bml0aWFsRW1wdHlEb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGb3IgYSBz
dGFuZGFyZCBwYWdlIGxvYWQsIHdlIHdpbGwgaGF2ZSBhIHByZXZpb3VzIGl0ZW0gc2V0LCB3aGlj
aCB3aWxsIGJlIHVzZWQgdG8KLSAgICAvLyBzdG9yZSB0aGUgZm9ybSBzdGF0ZS4gIEhvd2V2ZXIs
IGluIHNvbWUgY2FzZXMgd2Ugd2lsbCBoYXZlIG5vIHByZXZpb3VzIGl0ZW0sIGFuZAotICAgIC8v
IHRoZSBjdXJyZW50IGl0ZW0gaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIHNhdmUgdGhlIHN0YXRlLiAg
T25lIGV4YW1wbGUgaXMgd2hlbiB3ZQotICAgIC8vIGRldGFjaCBhIGJ1bmNoIG9mIGZyYW1lcyBi
ZWNhdXNlIHdlIGFyZSBuYXZpZ2F0aW5nIGZyb20gYSBzaXRlIHdpdGggZnJhbWVzIHRvCi0gICAg
Ly8gYW5vdGhlciBzaXRlLiAgQW5vdGhlciBpcyB3aGVuIHNhdmluZyB0aGUgZnJhbWUgc3RhdGUg
b2YgYSBmcmFtZSB0aGF0IGlzIG5vdCB0aGUKLSAgICAvLyB0YXJnZXQgb2YgdGhlIGN1cnJlbnQg
bmF2aWdhdGlvbiAoaWYgd2UgZXZlbiBkZWNpZGUgdG8gc2F2ZSB3aXRoIHRoYXQgZ3JhbnVsYXJp
dHkpLgotCi0gICAgLy8gQmVjYXVzZSBvZiBwcmV2aW91c0l0ZW0ncyAibWFza2luZyIgb2YgY3Vy
cmVudEl0ZW0gZm9yIHRoaXMgcHVycG9zZSwgaXQncyBpbXBvcnRhbnQKLSAgICAvLyB0aGF0IHBy
ZXZpb3VzSXRlbSBiZSBjbGVhcmVkIGF0IHRoZSBlbmQgb2YgYSBwYWdlIHRyYW5zaXRpb24uICBX
ZSBsZXZlcmFnZSB0aGUKLSAgICAvLyBjaGVja0xvYWRDb21wbGV0ZSByZWN1cnNpb24gdG8gYWNo
aWV2ZSB0aGlzIGdvYWwuCi0KLSAgICBIaXN0b3J5SXRlbSogaXRlbSA9IG1fcHJldmlvdXNJdGVt
ID8gbV9wcmV2aW91c0l0ZW0uZ2V0KCkgOiBtX2N1cnJlbnRJdGVtLmdldCgpOwotICAgIGlmICgh
aXRlbSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKTsKLSAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgIAotICAgIGlmIChpdGVt
LT5pc0N1cnJlbnREb2N1bWVudChkb2N1bWVudCkpIHsKLSAgICAgICAgTE9HKExvYWRpbmcsICJX
ZWJDb3JlTG9hZGluZyAlczogc2F2aW5nIGZvcm0gc3RhdGUgdG8gJXAiLCBtX2ZyYW1lLT50cmVl
KCktPm5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdGVtKTsKLSAgICAgICAgaXRlbS0+
c2V0RG9jdW1lbnRTdGF0ZShkb2N1bWVudC0+Zm9ybUVsZW1lbnRzU3RhdGUoKSk7Ci0gICAgfQot
fQotCiAvLyBMb2FkcyBjb250ZW50IGludG8gdGhpcyBmcmFtZSwgYXMgc3BlY2lmaWVkIGJ5IGhp
c3RvcnkgaXRlbQogLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJlYWxseSBiZSBzcGxp
dCBpbnRvIGEgY291cGxlIHBpZWNlcywgc29tZSBvZgogLy8gd2hpY2ggc2hvdWxkIGJlIG1ldGhv
ZHMgb2YgSGlzdG9yeUNvbnRyb2xsZXIgYW5kIHNvbWUgb2Ygd2hpY2ggc2hvdWxkIGJlCkBAIC00
MTIyLDMxNSArMzg2MSw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVt
KiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlKQogICAgIH0KIH0KIAotLy8gV2FsayB0aGUg
ZnJhbWUgdHJlZSBhbmQgZW5zdXJlIHRoYXQgdGhlIFVSTHMgbWF0Y2ggdGhlIFVSTHMgaW4gdGhl
IGl0ZW0uCi1ib29sIEhpc3RvcnlDb250cm9sbGVyOjp1cmxzTWF0Y2hJdGVtKEhpc3RvcnlJdGVt
KiBpdGVtKSBjb25zdAotewotICAgIGNvbnN0IEtVUkwmIGN1cnJlbnRVUkwgPSBtX2ZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCk7Ci0gICAgaWYgKCFlcXVhbElnbm9yaW5n
RnJhZ21lbnRJZGVudGlmaWVyKGN1cnJlbnRVUkwsIGl0ZW0tPnVybCgpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgY29uc3QgSGlzdG9yeUl0ZW1WZWN0b3ImIGNoaWxkSXRlbXMgPSBp
dGVtLT5jaGlsZHJlbigpOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IGNoaWxkSXRlbXMuc2l6ZSgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRnJh
bWUqIGNoaWxkRnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPmNoaWxkKGNoaWxkSXRlbXNbaV0tPnRh
cmdldCgpKTsKLSAgICAgICAgaWYgKGNoaWxkRnJhbWUgJiYgIWNoaWxkRnJhbWUtPmxvYWRlcigp
LT5oaXN0b3J5KCktPnVybHNNYXRjaEl0ZW0oY2hpbGRJdGVtc1tpXS5nZXQoKSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIE1h
aW4gZnVubmVsIGZvciBuYXZpZ2F0aW5nIHRvIGEgcHJldmlvdXMgbG9jYXRpb24gKGJhY2svZm9y
d2FyZCwgbm9uLXNlYXJjaCBzbmFwLWJhY2spCi0vLyBUaGlzIGluY2x1ZGVzIHJlY3Vyc2lvbiB0
byBoYW5kbGUgbG9hZGluZyBpbnRvIGZyYW1lc2V0cyBwcm9wZXJseQotdm9pZCBIaXN0b3J5Q29u
dHJvbGxlcjo6Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUg
dHlwZSkKLXsKLSAgICBBU1NFUlQoIW1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpOwotICAgIAot
ICAgIC8vIHNob3VsZEdvVG9IaXN0b3J5SXRlbSBpcyBhIHByaXZhdGUgZGVsZWdhdGUgbWV0aG9k
LiBUaGlzIGlzIG5lZWRlZCB0byBmaXg6Ci0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM5NTEyODM+
IGNhbiB2aWV3IHBhZ2VzIGZyb20gdGhlIGJhY2svZm9yd2FyZCBjYWNoZSB0aGF0IHNob3VsZCBi
ZSBkaXNhbGxvd2VkIGJ5IFBhcmVudGFsIENvbnRyb2xzCi0gICAgLy8gVWx0aW1hdGVseSwgaGlz
dG9yeSBpdGVtIG5hdmlnYXRpb25zIHNob3VsZCBnbyB0aHJvdWdoIHRoZSBwb2xpY3kgZGVsZWdh
dGUuIFRoYXQncyBjb3ZlcmVkIGluOgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8zOTc5NTM5PiBi
YWNrL2ZvcndhcmQgY2FjaGUgbmF2aWdhdGlvbnMgc2hvdWxkIGNvbnN1bHQgcG9saWN5IGRlbGVn
YXRlCi0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+c2hv
dWxkR29Ub0hpc3RvcnlJdGVtKHRhcmdldEl0ZW0pKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBTZXQgdGhlIEJGIGN1cnNvciBiZWZvcmUgY29tbWl0LCB3aGljaCBsZXRzIHRoZSB1c2VyIHF1
aWNrbHkgY2xpY2sgYmFjay9mb3J3YXJkIGFnYWluLgotICAgIC8vIC0gcGx1cywgaXQgb25seSBt
YWtlcyBzZW5zZSBmb3IgdGhlIHRvcCBsZXZlbCBvZiB0aGUgb3BlcmF0aW9uIHRocm91Z2ggdGhl
IGZyYW1ldHJlZSwKLSAgICAvLyBhcyBvcHBvc2VkIHRvIGhhcHBlbmluZyBmb3Igc29tZS9vbmUg
b2YgdGhlIHBhZ2UgY29tbWl0cyB0aGF0IG1pZ2h0IGhhcHBlbiBzb29uCi0gICAgQmFja0Zvcndh
cmRMaXN0KiBiZkxpc3QgPSBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKTsKLSAgICBIaXN0b3J5SXRl
bSogY3VycmVudEl0ZW0gPSBiZkxpc3QtPmN1cnJlbnRJdGVtKCk7ICAgIAotICAgIGJmTGlzdC0+
Z29Ub0l0ZW0odGFyZ2V0SXRlbSk7Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+
c2V0dGluZ3MoKTsKLSAgICBwYWdlLT5zZXRHbG9iYWxIaXN0b3J5SXRlbSgoIXNldHRpbmdzIHx8
IHNldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkpID8gMCA6IHRhcmdldEl0ZW0pOwot
ICAgIHJlY3Vyc2l2ZUdvVG9JdGVtKHRhcmdldEl0ZW0sIGN1cnJlbnRJdGVtLCB0eXBlKTsKLX0K
LQotLy8gVGhlIGdlbmVyYWwgaWRlYSBoZXJlIGlzIHRvIHRyYXZlcnNlIHRoZSBmcmFtZSB0cmVl
IGFuZCB0aGUgaXRlbSB0cmVlIGluIHBhcmFsbGVsLAotLy8gdHJhY2tpbmcgd2hldGhlciBlYWNo
IGZyYW1lIGFscmVhZHkgaGFzIHRoZSBjb250ZW50IHRoZSBpdGVtIHJlcXVlc3RzLiAgSWYgdGhl
cmUgaXMKLS8vIGEgbWF0Y2ggKGJ5IFVSTCksIHdlIGp1c3QgcmVzdG9yZSBzY3JvbGwgcG9zaXRp
b24gYW5kIHJlY3Vyc2UuICBPdGhlcndpc2Ugd2UgbXVzdAotLy8gcmVsb2FkIHRoYXQgZnJhbWUs
IGFuZCBhbGwgaXRzIGtpZHMuCi12b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVHb1Rv
SXRlbShIaXN0b3J5SXRlbSogaXRlbSwgSGlzdG9yeUl0ZW0qIGZyb21JdGVtLCBGcmFtZUxvYWRU
eXBlIHR5cGUpCi17Ci0gICAgQVNTRVJUKGl0ZW0pOwotICAgIEFTU0VSVChmcm9tSXRlbSk7Ci0K
LSAgICBLVVJMIGl0ZW1VUkwgPSBpdGVtLT51cmwoKTsKLSAgICBLVVJMIGN1cnJlbnRVUkw7Ci0g
ICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKQotICAgICAgICBjdXJy
ZW50VVJMID0gbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpOwotCi0g
ICAgLy8gQWx3YXlzIHJlbG9hZCB0aGUgdGFyZ2V0IGZyYW1lIG9mIHRoZSBpdGVtIHdlJ3JlIGdv
aW5nIHRvLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2Ugd2lsbAotICAgIC8vIGRvIC1zb21lLSBsb2Fk
IGZvciB0aGUgdHJhbnNpdGlvbiwgd2hpY2ggbWVhbnMgYSBwcm9wZXIgbm90aWZpY2F0aW9uIHdp
bGwgYmUgcG9zdGVkCi0gICAgLy8gdG8gdGhlIGFwcC4KLSAgICAvLyBUaGUgZXhhY3QgVVJMIGhh
cyB0byBtYXRjaCwgaW5jbHVkaW5nIGZyYWdtZW50LiAgV2Ugd2FudCB0byBnbyB0aHJvdWdoIHRo
ZSBfbG9hZAotICAgIC8vIG1ldGhvZCwgZXZlbiBpZiB0byBkbyBhIHdpdGhpbi1wYWdlIG5hdmln
YXRpb24uCi0gICAgLy8gVGhlIGN1cnJlbnQgZnJhbWUgdHJlZSBhbmQgdGhlIGZyYW1lIHRyZWUg
c25hcHNob3QgaW4gdGhlIGl0ZW0gaGF2ZSB0byBtYXRjaC4KLSAgICBpZiAoIWl0ZW0tPmlzVGFy
Z2V0SXRlbSgpICYmCi0gICAgICAgIGl0ZW1VUkwgPT0gY3VycmVudFVSTCAmJgotICAgICAgICAo
KG1fZnJhbWUtPnRyZWUoKS0+bmFtZSgpLmlzRW1wdHkoKSAmJiBpdGVtLT50YXJnZXQoKS5pc0Vt
cHR5KCkpIHx8IG1fZnJhbWUtPnRyZWUoKS0+bmFtZSgpID09IGl0ZW0tPnRhcmdldCgpKSAmJgot
ICAgICAgICBjaGlsZEZyYW1lc01hdGNoSXRlbShpdGVtKSkKLSAgICB7Ci0gICAgICAgIC8vIFRo
aXMgY29udGVudCBpcyBnb29kLCBzbyBsZWF2ZSBpdCBhbG9uZSBhbmQgbG9vayBmb3IgY2hpbGRy
ZW4gdGhhdCBuZWVkIHJlbG9hZGluZwotICAgICAgICAvLyBTYXZlIGZvcm0gc3RhdGUgKHdvcmtz
IGZyb20gY3VycmVudEl0ZW0sIHNpbmNlIHByZXZJdGVtIGlzIG5pbCkKLSAgICAgICAgQVNTRVJU
KCFtX3ByZXZpb3VzSXRlbSk7Ci0gICAgICAgIHNhdmVEb2N1bWVudFN0YXRlKCk7Ci0gICAgICAg
IHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShtX2N1cnJlbnRJdGVtLmdldCgp
KTsKLQotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKQotICAg
ICAgICAgICAgdmlldy0+c2V0V2FzU2Nyb2xsZWRCeVVzZXIoZmFsc2UpOwotCi0gICAgICAgIG1f
Y3VycmVudEl0ZW0gPSBpdGVtOwotICAgICAgICAgICAgICAgIAotICAgICAgICAvLyBSZXN0b3Jl
IGZvcm0gc3RhdGUgKHdvcmtzIGZyb20gY3VycmVudEl0ZW0pCi0gICAgICAgIHJlc3RvcmVEb2N1
bWVudFN0YXRlKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBSZXN0b3JlIHRoZSBzY3JvbGwgcG9z
aXRpb24gKHdlIGNob29zZSB0byBkbyB0aGlzIHJhdGhlciB0aGFuIGdvaW5nIGJhY2sgdG8gdGhl
IGFuY2hvciBwb2ludCkKLSAgICAgICAgcmVzdG9yZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRl
KCk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBIaXN0b3J5SXRlbVZlY3RvciYgY2hpbGRJdGVt
cyA9IGl0ZW0tPmNoaWxkcmVuKCk7Ci0gICAgICAgIAotICAgICAgICBpbnQgc2l6ZSA9IGNoaWxk
SXRlbXMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICAgICAgU3RyaW5nIGNoaWxkRnJhbWVOYW1lID0gY2hpbGRJdGVtc1tpXS0+dGFyZ2V0
KCk7Ci0gICAgICAgICAgICBIaXN0b3J5SXRlbSogZnJvbUNoaWxkSXRlbSA9IGZyb21JdGVtLT5j
aGlsZEl0ZW1XaXRoVGFyZ2V0KGNoaWxkRnJhbWVOYW1lKTsKLSAgICAgICAgICAgIEFTU0VSVChm
cm9tQ2hpbGRJdGVtIHx8IGZyb21JdGVtLT5pc1RhcmdldEl0ZW0oKSk7Ci0gICAgICAgICAgICBG
cmFtZSogY2hpbGRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+Y2hpbGQoY2hpbGRGcmFtZU5hbWUp
OwotICAgICAgICAgICAgQVNTRVJUKGNoaWxkRnJhbWUpOwotICAgICAgICAgICAgY2hpbGRGcmFt
ZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+cmVjdXJzaXZlR29Ub0l0ZW0oY2hpbGRJdGVtc1tpXS5n
ZXQoKSwgZnJvbUNoaWxkSXRlbSwgdHlwZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZEl0ZW0oaXRlbSwgdHlwZSk7Ci0gICAgfQotfQot
Ci0vLyBoZWxwZXIgbWV0aG9kIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzdWJmcmFtZXMg
ZGVzY3JpYmVkIGJ5IHRoZSBpdGVtJ3Mgc3ViaXRlbXMKLS8vIG1hdGNoIG91ciBvd24gY3VycmVu
dCBmcmFtZXNldAotYm9vbCBIaXN0b3J5Q29udHJvbGxlcjo6Y2hpbGRGcmFtZXNNYXRjaEl0ZW0o
SGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0Ci17Ci0gICAgY29uc3QgSGlzdG9yeUl0ZW1WZWN0b3Im
IGNoaWxkSXRlbXMgPSBpdGVtLT5jaGlsZHJlbigpOwotICAgIGlmIChjaGlsZEl0ZW1zLnNpemUo
KSAhPSBtX2ZyYW1lLT50cmVlKCktPmNoaWxkQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIHVuc2lnbmVkIHNpemUgPSBjaGlsZEl0ZW1zLnNpemUoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9mcmFtZS0+
dHJlZSgpLT5jaGlsZChjaGlsZEl0ZW1zW2ldLT50YXJnZXQoKSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIC8vIEZvdW5kIG1hdGNoZXMgZm9yIGFsbCBpdGVt
IHRhcmdldHMKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGhlcmUgYXJlIDMgdGhpbmdzIHlv
dSBtaWdodCB0aGluayBvZiBhcyAiaGlzdG9yeSIsIGFsbCBvZiB3aGljaCBhcmUgaGFuZGxlZCBi
eSB0aGVzZSBmdW5jdGlvbnMuCi0vLwotLy8gICAgIDEpIEJhY2svZm9yd2FyZDogVGhlIG1fY3Vy
cmVudEl0ZW0gaXMgcGFydCBvZiB0aGlzIG1lY2hhbmlzbS4KLS8vICAgICAyKSBHbG9iYWwgaGlz
dG9yeTogSGFuZGxlZCBieSB0aGUgY2xpZW50LgotLy8gICAgIDMpIFZpc2l0ZWQgbGlua3M6IEhh
bmRsZWQgYnkgdGhlIFBhZ2VHcm91cC4KLQotdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRl
Rm9yU3RhbmRhcmRMb2FkKCkKLXsKLSAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBV
cGRhdGluZyBIaXN0b3J5IGZvciBTdGFuZGFyZCBMb2FkIGluIGZyYW1lICVzIiwgbV9mcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgp
KTsKLQotICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpOwot
Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKLSAgICBib29s
IG5lZWRQcml2YWN5ID0gIXNldHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFi
bGVkKCk7Ci0gICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IGZyYW1lTG9hZGVyLT5kb2N1bWVu
dExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7Ci0KLSAgICBpZiAoIWZyYW1lTG9hZGVyLT5kb2N1
bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGlyZWN0KCkpIHsKLSAgICAgICAgaWYgKCFoaXN0b3J5
VVJMLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgdXBkYXRlQmFja0ZvcndhcmRMaXN0Q2xpcHBl
ZEF0VGFyZ2V0KHRydWUpOwotICAgICAgICAgICAgaWYgKCFuZWVkUHJpdmFjeSkgewotICAgICAg
ICAgICAgICAgIGZyYW1lTG9hZGVyLT5jbGllbnQoKS0+dXBkYXRlR2xvYmFsSGlzdG9yeSgpOwot
ICAgICAgICAgICAgICAgIGZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5zZXREaWRDcmVh
dGVHbG9iYWxIaXN0b3J5RW50cnkodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYW1lTG9h
ZGVyLT5kb2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICAgICAgZnJhbWVMb2FkZXItPmNsaWVudCgpLT51cGRhdGVHbG9iYWxIaXN0b3J5
UmVkaXJlY3RMaW5rcygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgcGFnZS0+c2V0R2xvYmFsSGlz
dG9yeUl0ZW0obmVlZFByaXZhY3kgPyAwIDogcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmN1cnJl
bnRJdGVtKCkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChmcmFtZUxvYWRlci0+ZG9jdW1l
bnRMb2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkgJiYgbV9jdXJyZW50SXRlbSkg
ewotICAgICAgICBtX2N1cnJlbnRJdGVtLT5zZXRVUkwoZnJhbWVMb2FkZXItPmRvY3VtZW50TG9h
ZGVyKCktPnVybCgpKTsKLSAgICAgICAgbV9jdXJyZW50SXRlbS0+c2V0Rm9ybUluZm9Gcm9tUmVx
dWVzdChmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpKTsKLSAgICB9Ci0K
LSAgICBpZiAoIWhpc3RvcnlVUkwuaXNFbXB0eSgpICYmICFuZWVkUHJpdmFjeSkgewotICAgICAg
ICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmdy
b3VwKCkuYWRkVmlzaXRlZExpbmsoaGlzdG9yeVVSTCk7Ci0KLSAgICAgICAgaWYgKCFmcmFtZUxv
YWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+ZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KCkgJiYg
ZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgp
ICYmICFmcmFtZUxvYWRlci0+dXJsKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgZnJhbWVMb2Fk
ZXItPmNsaWVudCgpLT51cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpOwotICAgIH0K
LX0KLQotdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yQ2xpZW50UmVkaXJlY3QoKQot
ewotI2lmICFMT0dfRElTQUJMRUQKLSAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCkpCi0gICAgICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5n
IEhpc3RvcnkgZm9yIGNsaWVudCByZWRpcmVjdCBpbiBmcmFtZSAlcyIsIG1fZnJhbWUtPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkpOwotI2VuZGlmCi0K
LSAgICAvLyBDbGVhciBvdXQgZm9ybSBkYXRhIHNvIHdlIGRvbid0IHRyeSB0byByZXN0b3JlIGl0
IGludG8gdGhlIGluY29taW5nIHBhZ2UuICBNdXN0IGhhcHBlbiBhZnRlcgotICAgIC8vIHdlYmNv
cmUgaGFzIGNsb3NlZCB0aGUgVVJMIGFuZCBzYXZlZCBhd2F5IHRoZSBmb3JtIHN0YXRlLgotICAg
IGlmIChtX2N1cnJlbnRJdGVtKSB7Ci0gICAgICAgIG1fY3VycmVudEl0ZW0tPmNsZWFyRG9jdW1l
bnRTdGF0ZSgpOwotICAgICAgICBtX2N1cnJlbnRJdGVtLT5jbGVhclNjcm9sbFBvaW50KCk7Ci0g
ICAgfQotCi0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKLSAg
ICBib29sIG5lZWRQcml2YWN5ID0gIXNldHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3Np
bmdFbmFibGVkKCk7Ci0gICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IG1fZnJhbWUtPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7Ci0KLSAgICBpZiAoIWhpc3Rv
cnlVUkwuaXNFbXB0eSgpICYmICFuZWVkUHJpdmFjeSkgewotICAgICAgICBpZiAoUGFnZSogcGFn
ZSA9IG1fZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmdyb3VwKCkuYWRkVmlzaXRl
ZExpbmsoaGlzdG9yeVVSTCk7Ci0gICAgfQotfQotCi12b2lkIEhpc3RvcnlDb250cm9sbGVyOjp1
cGRhdGVGb3JCYWNrRm9yd2FyZE5hdmlnYXRpb24oKQotewotI2lmICFMT0dfRElTQUJMRUQKLSAg
ICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpCi0gICAgICAgIExPRyhI
aXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIGJhY2svZm9yd2Fy
ZCBuYXZpZ2F0aW9uIGluIGZyYW1lICVzIiwgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9h
ZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLQotICAgIC8vIE11c3QgZ3Jh
YiB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24gYmVmb3JlIGRpc3R1cmJpbmcgaXQKLSAgICBz
YXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0obV9wcmV2aW91c0l0ZW0uZ2V0KCkp
OwotfQotCi12b2lkIEhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JSZWxvYWQoKQotewotI2lm
ICFMT0dfRElTQUJMRUQKLSAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVy
KCkpCi0gICAgICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3Rv
cnkgZm9yIHJlbG9hZCBpbiBmcmFtZSAlcyIsIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExv
YWRlcigpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkpOwotI2VuZGlmCi0KLSAgICBpZiAobV9jdXJy
ZW50SXRlbSkgewotICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKG1fY3VycmVudEl0ZW0uZ2V0
KCkpOwotICAgIAotICAgICAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPmxvYWRUeXBlKCkgPT0g
RnJhbWVMb2FkVHlwZVJlbG9hZCB8fCBtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZFR5cGUoKSA9PSBG
cmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbikKLSAgICAgICAgICAgIHNhdmVTY3JvbGxQb3Np
dGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShtX2N1cnJlbnRJdGVtLmdldCgpKTsKLSAgICAKLSAgICAg
ICAgLy8gU29tZXRpbWVzIGxvYWRpbmcgYSBwYWdlIGFnYWluIGxlYWRzIHRvIGEgZGlmZmVyZW50
IHJlc3VsdCBiZWNhdXNlIG9mIGNvb2tpZXMuIEJ1Z3ppbGxhIDQwNzIKLSAgICAgICAgaWYgKG1f
ZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIG1fY3VycmVudEl0ZW0tPnNldFVSTChtX2ZyYW1lLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdFVSTCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgSGlz
dG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvclJlZGlyZWN0V2l0aExvY2tlZEJhY2tGb3J3YXJkTGlz
dCgpCi17Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9j
dW1lbnRMb2FkZXIoKSkKLSAgICAgICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBk
YXRpbmcgSGlzdG9yeSBmb3IgcmVkaXJlY3QgbG9hZCBpbiBmcmFtZSAlcyIsIG1fZnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkpOwotI2VuZGlm
Ci0gICAgCi0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKLSAg
ICBib29sIG5lZWRQcml2YWN5ID0gIXNldHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3Np
bmdFbmFibGVkKCk7Ci0gICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IG1fZnJhbWUtPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7Ci0KLSAgICBpZiAobV9mcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzQ2xpZW50UmVkaXJlY3QoKSkgewotICAg
ICAgICBpZiAoIW1fY3VycmVudEl0ZW0gJiYgIW1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsK
LSAgICAgICAgICAgIGlmICghaGlzdG9yeVVSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAg
ICB1cGRhdGVCYWNrRm9yd2FyZExpc3RDbGlwcGVkQXRUYXJnZXQodHJ1ZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFuZWVkUHJpdmFjeSkgewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5s
b2FkZXIoKS0+Y2xpZW50KCktPnVwZGF0ZUdsb2JhbEhpc3RvcnkoKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnNldERpZENyZWF0ZUds
b2JhbEhpc3RvcnlFbnRyeSh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+dXBk
YXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHBhZ2UtPnNldEdsb2JhbEhpc3RvcnlJdGVtKG5lZWRQcml2YWN5ID8gMCA6IHBh
Z2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5jdXJyZW50SXRlbSgpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBpZiAobV9jdXJyZW50SXRlbSkgewotICAgICAgICAgICAgbV9jdXJy
ZW50SXRlbS0+c2V0VVJMKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51cmwo
KSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRJdGVtLT5zZXRGb3JtSW5mb0Zyb21SZXF1ZXN0KG1f
ZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCkpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZS0+dHJl
ZSgpLT5wYXJlbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudEZyYW1lICYmIHBhcmVudEZyYW1lLT5s
b2FkZXIoKS0+aGlzdG9yeSgpLT5tX2N1cnJlbnRJdGVtKQotICAgICAgICAgICAgcGFyZW50RnJh
bWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPm1fY3VycmVudEl0ZW0tPnNldENoaWxkSXRlbShjcmVh
dGVJdGVtKHRydWUpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWhpc3RvcnlVUkwuaXNFbXB0eSgpICYm
ICFuZWVkUHJpdmFjeSkgewotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2Uo
KSkKLSAgICAgICAgICAgIHBhZ2UtPmdyb3VwKCkuYWRkVmlzaXRlZExpbmsoaGlzdG9yeVVSTCk7
Ci0KLSAgICAgICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+ZGlk
Q3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KCkgJiYgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpICYmICFtX2ZyYW1lLT5sb2FkZXIo
KS0+dXJsKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVu
dCgpLT51cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpOwotICAgIH0KLX0KLQotdm9p
ZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yQ29tbWl0KCkKLXsKLSAgICBGcmFtZUxvYWRl
ciogZnJhbWVMb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKTsKLSNpZiAhTE9HX0RJU0FCTEVECi0g
ICAgaWYgKGZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpKQotICAgICAgICBMT0coSGlzdG9y
eSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZvciBjb21taXQgaW4gZnJhbWUg
JXMiLCBmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0YSgp
KTsKLSNlbmRpZgotICAgIEZyYW1lTG9hZFR5cGUgdHlwZSA9IGZyYW1lTG9hZGVyLT5sb2FkVHlw
ZSgpOwotICAgIGlmIChpc0JhY2tGb3J3YXJkTG9hZFR5cGUodHlwZSkgfHwKLSAgICAgICAgKCh0
eXBlID09IEZyYW1lTG9hZFR5cGVSZWxvYWQgfHwgdHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2Fk
RnJvbU9yaWdpbikgJiYgIWZyYW1lTG9hZGVyLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkt
PnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKSkgewotICAgICAgICAvLyBPbmNlIGNvbW1pdHRl
ZCwgd2Ugd2FudCB0byB1c2UgY3VycmVudCBpdGVtIGZvciBzYXZpbmcgRG9jU3RhdGUsIGFuZAot
ICAgICAgICAvLyB0aGUgcHJvdmlzaW9uYWwgaXRlbSBmb3IgcmVzdG9yaW5nIHN0YXRlLgotICAg
ICAgICAvLyBOb3RlIHByZXZpb3VzSXRlbSBtdXN0IGJlIHNldCBiZWZvcmUgd2UgY2xvc2UgdGhl
IFVSTCwgd2hpY2ggd2lsbAotICAgICAgICAvLyBoYXBwZW4gd2hlbiB0aGUgZGF0YSBzb3VyY2Ug
aXMgbWFkZSBub24tcHJvdmlzaW9uYWwgYmVsb3cKLSAgICAgICAgbV9wcmV2aW91c0l0ZW0gPSBt
X2N1cnJlbnRJdGVtOwotICAgICAgICBBU1NFUlQobV9wcm92aXNpb25hbEl0ZW0pOwotICAgICAg
ICBtX2N1cnJlbnRJdGVtID0gbV9wcm92aXNpb25hbEl0ZW07Ci0gICAgICAgIG1fcHJvdmlzaW9u
YWxJdGVtID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZv
ckFuY2hvclNjcm9sbCgpCi17Ci0gICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT51cmwoKS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJh
bWUtPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBwYWdlID0gbV9m
cmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGFn
ZS0+Z3JvdXAoKS5hZGRWaXNpdGVkTGluayhtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCkpOwotfQot
Ci0vLyBXYWxrIHRoZSBmcmFtZSB0cmVlLCB0ZWxsaW5nIGFsbCBmcmFtZXMgdG8gc2F2ZSB0aGVp
ciBmb3JtIHN0YXRlIGludG8gdGhlaXIgY3VycmVudAotLy8gaGlzdG9yeSBpdGVtLgotdm9pZCBI
aXN0b3J5Q29udHJvbGxlcjo6c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGUoKQotewotICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+
dHJhdmVyc2VOZXh0KG1fZnJhbWUpKSB7Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+aGlzdG9y
eSgpLT5zYXZlRG9jdW1lbnRTdGF0ZSgpOwotICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmhpc3Rv
cnkoKS0+c2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKGZyYW1lLT5sb2FkZXIo
KS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpKTsKLSAgICB9Ci19Ci0KIHZvaWQgRnJhbWVMb2Fk
ZXI6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJl
c291cmNlRXJyb3ImIGVycm9yKQogewogICAgIG1fY2xpZW50LT5zZXRNYWluRG9jdW1lbnRFcnJv
cihsb2FkZXIsIGVycm9yKTsKQEAgLTQ1NjgsMTIgKzM5OTgsNiBAQCBQYXNzUmVmUHRyPFdpZGdl
dD4gRnJhbWVMb2FkZXI6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgSFRNTAogICAgIHJldHVybiB3aWRnZXQ7CiB9CiAKLXZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6
OnNldEN1cnJlbnRJdGVtVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKLXsKLSAgICBpZiAobV9j
dXJyZW50SXRlbSkKLSAgICAgICAgbV9jdXJyZW50SXRlbS0+c2V0VGl0bGUodGl0bGUpOwotfQot
CiB2b2lkIEZyYW1lTG9hZGVyOjpkaWRDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciogbG9hZGVy
KQogewogICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VUaXRsZShsb2FkZXIpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaCBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmgKaW5kZXggNDY2NmEwZC4uMjIzOGI3NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuaAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCkBAIC0zMiw2ICsz
Miw3IEBACiAKICNpbmNsdWRlICJDYWNoZVBvbGljeS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVy
VHlwZXMuaCIKKyNpbmNsdWRlICJIaXN0b3J5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBvbGlj
eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiUG9saWN5Q2hlY2tlci5oIgogI2luY2x1ZGUgIlJlZGly
ZWN0U2NoZWR1bGVyLmgiCkBAIC03OSw1NiArODAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBib29sIGlzQmFja0ZvcndhcmRMb2FkVHlwZShGcmFtZUxvYWRUeXBlKTsKIAotICAgIGNs
YXNzIEhpc3RvcnlDb250cm9sbGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIEhpc3RvcnlDb250cm9sbGVyKEZyYW1lKik7Ci0gICAgICAgIH5IaXN0b3J5Q29u
dHJvbGxlcigpOwotCi0gICAgICAgIHZvaWQgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRl
VG9JdGVtKEhpc3RvcnlJdGVtKik7Ci0gICAgICAgIHZvaWQgcmVzdG9yZVNjcm9sbFBvc2l0aW9u
QW5kVmlld1N0YXRlKCk7Ci0KLSAgICAgICAgdm9pZCB1cGRhdGVCYWNrRm9yd2FyZExpc3RGb3JG
cmFnbWVudFNjcm9sbCgpOwotCi0gICAgICAgIHZvaWQgc2F2ZURvY3VtZW50U3RhdGUoKTsKLSAg
ICAgICAgdm9pZCBzYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpOwotICAgICAgICB2b2lkIHJl
c3RvcmVEb2N1bWVudFN0YXRlKCk7Ci0KLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlQ3VycmVudEl0
ZW1DYWNoZWRQYWdlKCk7Ci0KLSAgICAgICAgdm9pZCBnb1RvSXRlbShIaXN0b3J5SXRlbSosIEZy
YW1lTG9hZFR5cGUpOwotICAgICAgICBib29sIHVybHNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qKSBj
b25zdDsKLQotICAgICAgICB2b2lkIHVwZGF0ZUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbigpOwot
ICAgICAgICB2b2lkIHVwZGF0ZUZvclJlbG9hZCgpOwotICAgICAgICB2b2lkIHVwZGF0ZUZvclN0
YW5kYXJkTG9hZCgpOwotICAgICAgICB2b2lkIHVwZGF0ZUZvclJlZGlyZWN0V2l0aExvY2tlZEJh
Y2tGb3J3YXJkTGlzdCgpOwotICAgICAgICB2b2lkIHVwZGF0ZUZvckNsaWVudFJlZGlyZWN0KCk7
Ci0gICAgICAgIHZvaWQgdXBkYXRlRm9yQ29tbWl0KCk7Ci0gICAgICAgIHZvaWQgdXBkYXRlRm9y
QW5jaG9yU2Nyb2xsKCk7Ci0gICAgICAgIHZvaWQgdXBkYXRlRm9yRnJhbWVMb2FkQ29tcGxldGVk
KCk7Ci0KLSAgICAgICAgSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtKCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50SXRlbS5nZXQoKTsgfQotICAgICAgICB2b2lkIHNldEN1cnJlbnRJdGVtKEhpc3Rv
cnlJdGVtKik7Ci0gICAgICAgIHZvaWQgc2V0Q3VycmVudEl0ZW1UaXRsZShjb25zdCBTdHJpbmcm
KTsKLQotICAgICAgICBIaXN0b3J5SXRlbSogcHJvdmlzaW9uYWxJdGVtKCkgY29uc3QgeyByZXR1
cm4gbV9wcm92aXNpb25hbEl0ZW0uZ2V0KCk7IH0KLSAgICAgICAgdm9pZCBzZXRQcm92aXNpb25h
bEl0ZW0oSGlzdG9yeUl0ZW0qKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFBhc3NSZWZQdHI8
SGlzdG9yeUl0ZW0+IGNyZWF0ZUl0ZW0oYm9vbCB1c2VPcmlnaW5hbCk7Ci0gICAgICAgIFBhc3NS
ZWZQdHI8SGlzdG9yeUl0ZW0+IGNyZWF0ZUl0ZW1UcmVlKEZyYW1lKiB0YXJnZXRGcmFtZSwgYm9v
bCBjbGlwQXRUYXJnZXQpOwotCi0gICAgICAgIHZvaWQgcmVjdXJzaXZlR29Ub0l0ZW0oSGlzdG9y
eUl0ZW0qLCBIaXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUpOwotICAgICAgICBib29sIGNoaWxk
RnJhbWVzTWF0Y2hJdGVtKEhpc3RvcnlJdGVtKikgY29uc3Q7Ci0gICAgICAgIHZvaWQgdXBkYXRl
QmFja0ZvcndhcmRMaXN0Q2xpcHBlZEF0VGFyZ2V0KGJvb2wgZG9DbGlwKTsKLQotICAgICAgICBG
cmFtZSogbV9mcmFtZTsKLQotICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IG1fY3VycmVudEl0
ZW07Ci0gICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gbV9wcmV2aW91c0l0ZW07Ci0gICAgICAg
IFJlZlB0cjxIaXN0b3J5SXRlbT4gbV9wcm92aXNpb25hbEl0ZW07Ci0gICAgfTsKLQogICAgIGNs
YXNzIEZyYW1lTG9hZGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIEZyYW1lTG9hZGVyKEZyYW1lKiwgRnJhbWVMb2FkZXJDbGllbnQqKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0hp
c3RvcnlDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
OWJlZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xs
ZXIuY3BwCkBAIC0wLDAgKzEsNjI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJIaXN0b3J5Q29udG9sbGVyLmgiCisKKyNpbmNsdWRlICJDYWNoZWRQ
YWdlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
KyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJIaXN0b3J5SXRlbS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlQ2FjaGUu
aCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0hpc3RvcnlDb250cm9sbGVyOjpIaXN0b3J5Q29udHJvbGxlcihG
cmFtZSogZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQoreworfQorCitIaXN0b3J5Q29udHJv
bGxlcjo6fkhpc3RvcnlDb250cm9sbGVyKCkKK3sKK30KKwordm9pZCBIaXN0b3J5Q29udHJvbGxl
cjo6c2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVt
KQoreworICAgIGlmICghaXRlbSB8fCAhbV9mcmFtZS0+dmlldygpKQorICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGl0ZW0tPnNldFNjcm9sbFBvaW50KG1fZnJhbWUtPnZpZXcoKS0+c2Ny
b2xsUG9zaXRpb24oKSk7CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGdyZWF0IHRvIHdvcmsg
b3V0IGEgd2F5IHRvIHB1dCB0aGlzIGNvZGUgaW4gV2ViQ29yZSBpbnN0ZWFkIG9mIGNhbGxpbmcg
dGhyb3VnaCB0byB0aGUgY2xpZW50LgorICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
c2F2ZVZpZXdTdGF0ZVRvSXRlbShpdGVtKTsKK30KKworLyoKKyBUaGVyZSBpcyBhIHJhY2UgY29u
ZGl0aW9uIGJldHdlZW4gdGhlIGxheW91dCBhbmQgbG9hZCBjb21wbGV0aW9uIHRoYXQgYWZmZWN0
cyByZXN0b3JpbmcgdGhlIHNjcm9sbCBwb3NpdGlvbi4KKyBXZSB0cnkgdG8gcmVzdG9yZSB0aGUg
c2Nyb2xsIHBvc2l0aW9uIGF0IGJvdGggdGhlIGZpcnN0IGxheW91dCBhbmQgdXBvbiBsb2FkIGNv
bXBsZXRpb24uCisgCisgMSkgSWYgZmlyc3QgbGF5b3V0IGhhcHBlbnMgYmVmb3JlIHRoZSBsb2Fk
IGNvbXBsZXRlcywgd2Ugd2FudCB0byByZXN0b3JlIHRoZSBzY3JvbGwgcG9zaXRpb24gdGhlbiBz
byB0aGF0IHRoZQorIGZpcnN0IHRpbWUgd2UgZHJhdyB0aGUgcGFnZSBpcyBhbHJlYWR5IHNjcm9s
bGVkIHRvIHRoZSByaWdodCBwbGFjZSwgaW5zdGVhZCBvZiBzdGFydGluZyBhdCB0aGUgdG9wIGFu
ZCBsYXRlcgorIGp1bXBpbmcgZG93bi4gIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIG9sZCBzY3Jv
bGwgcG9zaXRpb24gaXMgcGFzdCB0aGUgcGFydCBvZiB0aGUgZG9jIGxhaWQgb3V0IHNvIGZhciwg
aW4KKyB3aGljaCBjYXNlIHRoZSByZXN0b3JlIHNpbGVudCBmYWlscyBhbmQgd2Ugd2lsbCBmaXgg
aXQgaW4gd2hlbiB3ZSB0cnkgdG8gcmVzdG9yZSBvbiBkb2MgY29tcGxldGlvbi4KKyAyKSBJZiB0
aGUgbGF5b3V0IGhhcHBlbnMgYWZ0ZXIgdGhlIGxvYWQgY29tcGxldGVzLCB0aGUgYXR0ZW1wdCB0
byByZXN0b3JlIGF0IGxvYWQgY29tcGxldGlvbiB0aW1lIHNpbGVudGx5CisgZmFpbHMuICBXZSB0
aGVuIHN1Y2Nlc3NmdWxseSByZXN0b3JlIGl0IHdoZW4gdGhlIGxheW91dCBoYXBwZW5zLgorKi8K
K3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0
ZSgpCit7CisgICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+Y29tbWl0dGVkRmlyc3RSZWFsRG9j
dW1lbnRMb2FkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2N1cnJlbnRJdGVt
KTsKKyAgICAKKyAgICAvLyBGSVhNRTogQXMgdGhlIEFTU0VSVCBhdHRlc3RzLCBpdCBzZWVtcyB3
ZSBzaG91bGQgYWx3YXlzIGhhdmUgYSBjdXJyZW50SXRlbSBoZXJlLgorICAgIC8vIE9uZSBjb3Vu
dGVyZXhhbXBsZSBpcyA8cmRhcjovL3Byb2JsZW0vNDkxNzI5MD4KKyAgICAvLyBGb3Igbm93LCB0
byBjb3ZlciB0aGlzIGlzc3VlIGluIHJlbGVhc2UgYnVpbGRzLCB0aGVyZSBpcyBubyB0ZWNobmlj
YWwgaGFybSB0byByZXR1cm5pbmcKKyAgICAvLyBlYXJseSBhbmQgZnJvbSBhIHVzZXIgc3RhbmRw
b2ludCAtIGFzIGluIHRoZSBhYm92ZSByYWRhciAtIHRoZSBwcmV2aW91cyBwYWdlIGxvYWQgZmFp
bGVkIAorICAgIC8vIHNvIHRoZXJlICppcyogbm8gc2Nyb2xsIG9yIHZpZXcgc3RhdGUgdG8gcmVz
dG9yZSEKKyAgICBpZiAoIW1fY3VycmVudEl0ZW0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICAvLyBGSVhNRTogSXQgd291bGQgYmUgZ3JlYXQgdG8gd29yayBvdXQgYSB3YXkgdG8gcHV0IHRo
aXMgY29kZSBpbiBXZWJDb3JlIGluc3RlYWQgb2YgY2FsbGluZworICAgIC8vIHRocm91Z2ggdG8g
dGhlIGNsaWVudC4gSXQncyBjdXJyZW50bHkgdXNlZCBvbmx5IGZvciB0aGUgUERGIHZpZXcgb24g
TWFjLgorICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+cmVzdG9yZVZpZXdTdGF0ZSgp
OworICAgIAorICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpCisgICAg
ICAgIGlmICghdmlldy0+d2FzU2Nyb2xsZWRCeVVzZXIoKSkKKyAgICAgICAgICAgIHZpZXctPnNl
dFNjcm9sbFBvc2l0aW9uKG1fY3VycmVudEl0ZW0tPnNjcm9sbFBvaW50KCkpOworfQorCit2b2lk
IEhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVCYWNrRm9yd2FyZExpc3RGb3JGcmFnbWVudFNjcm9s
bCgpCit7CisgICAgdXBkYXRlQmFja0ZvcndhcmRMaXN0Q2xpcHBlZEF0VGFyZ2V0KGZhbHNlKTsK
K30KKwordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6c2F2ZURvY3VtZW50U3RhdGUoKQoreworICAg
IC8vIEZJWE1FOiBSZWFkaW5nIHRoaXMgYml0IG9mIEZyYW1lTG9hZGVyIHN0YXRlIGhlcmUgaXMg
dW5mb3J0dW5hdGUuICBJIG5lZWQgdG8gc3R1ZHkKKyAgICAvLyB0aGlzIG1vcmUgdG8gc2VlIGlm
IHdlIGNhbiByZW1vdmUgdGhpcyBkZXBlbmRlbmN5LgorICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIo
KS0+Y3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBGb3IgYSBzdGFuZGFyZCBwYWdlIGxvYWQsIHdlIHdpbGwgaGF2ZSBhIHByZXZpb3VzIGl0
ZW0gc2V0LCB3aGljaCB3aWxsIGJlIHVzZWQgdG8KKyAgICAvLyBzdG9yZSB0aGUgZm9ybSBzdGF0
ZS4gIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMgd2Ugd2lsbCBoYXZlIG5vIHByZXZpb3VzIGl0ZW0s
IGFuZAorICAgIC8vIHRoZSBjdXJyZW50IGl0ZW0gaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIHNhdmUg
dGhlIHN0YXRlLiAgT25lIGV4YW1wbGUgaXMgd2hlbiB3ZQorICAgIC8vIGRldGFjaCBhIGJ1bmNo
IG9mIGZyYW1lcyBiZWNhdXNlIHdlIGFyZSBuYXZpZ2F0aW5nIGZyb20gYSBzaXRlIHdpdGggZnJh
bWVzIHRvCisgICAgLy8gYW5vdGhlciBzaXRlLiAgQW5vdGhlciBpcyB3aGVuIHNhdmluZyB0aGUg
ZnJhbWUgc3RhdGUgb2YgYSBmcmFtZSB0aGF0IGlzIG5vdCB0aGUKKyAgICAvLyB0YXJnZXQgb2Yg
dGhlIGN1cnJlbnQgbmF2aWdhdGlvbiAoaWYgd2UgZXZlbiBkZWNpZGUgdG8gc2F2ZSB3aXRoIHRo
YXQgZ3JhbnVsYXJpdHkpLgorCisgICAgLy8gQmVjYXVzZSBvZiBwcmV2aW91c0l0ZW0ncyAibWFz
a2luZyIgb2YgY3VycmVudEl0ZW0gZm9yIHRoaXMgcHVycG9zZSwgaXQncyBpbXBvcnRhbnQKKyAg
ICAvLyB0aGF0IHByZXZpb3VzSXRlbSBiZSBjbGVhcmVkIGF0IHRoZSBlbmQgb2YgYSBwYWdlIHRy
YW5zaXRpb24uICBXZSBsZXZlcmFnZSB0aGUKKyAgICAvLyBjaGVja0xvYWRDb21wbGV0ZSByZWN1
cnNpb24gdG8gYWNoaWV2ZSB0aGlzIGdvYWwuCisKKyAgICBIaXN0b3J5SXRlbSogaXRlbSA9IG1f
cHJldmlvdXNJdGVtID8gbV9wcmV2aW91c0l0ZW0uZ2V0KCkgOiBtX2N1cnJlbnRJdGVtLmdldCgp
OworICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBBU1NFUlQoZG9jdW1lbnQpOworICAgIAor
ICAgIGlmIChpdGVtLT5pc0N1cnJlbnREb2N1bWVudChkb2N1bWVudCkpIHsKKyAgICAgICAgTE9H
KExvYWRpbmcsICJXZWJDb3JlTG9hZGluZyAlczogc2F2aW5nIGZvcm0gc3RhdGUgdG8gJXAiLCBt
X2ZyYW1lLT50cmVlKCktPm5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdGVtKTsKKyAg
ICAgICAgaXRlbS0+c2V0RG9jdW1lbnRTdGF0ZShkb2N1bWVudC0+Zm9ybUVsZW1lbnRzU3RhdGUo
KSk7CisgICAgfQorfQorCisvLyBXYWxrIHRoZSBmcmFtZSB0cmVlLCB0ZWxsaW5nIGFsbCBmcmFt
ZXMgdG8gc2F2ZSB0aGVpciBmb3JtIHN0YXRlIGludG8gdGhlaXIgY3VycmVudAorLy8gaGlzdG9y
eSBpdGVtLgordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3Rh
dGUoKQoreworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1fZnJhbWUpKSB7CisgICAgICAgIGZyYW1lLT5s
b2FkZXIoKS0+aGlzdG9yeSgpLT5zYXZlRG9jdW1lbnRTdGF0ZSgpOworICAgICAgICBmcmFtZS0+
bG9hZGVyKCktPmhpc3RvcnkoKS0+c2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVt
KGZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpKTsKKyAgICB9Cit9CisK
K3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVEb2N1bWVudFN0YXRlKCkKK3sKKyAgICBE
b2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgCisgICAgSGlzdG9y
eUl0ZW0qIGl0ZW1Ub1Jlc3RvcmUgPSAwOworICAgIAorICAgIHN3aXRjaCAobV9mcmFtZS0+bG9h
ZGVyKCktPmxvYWRUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlUmVsb2FkOgor
ICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGVSZWxvYWRGcm9tT3JpZ2luOgorICAgICAgICBjYXNl
IEZyYW1lTG9hZFR5cGVTYW1lOgorICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGVSZXBsYWNlOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZUJhY2s6CisgICAg
ICAgIGNhc2UgRnJhbWVMb2FkVHlwZUJhY2tXTUxEZWNrTm90QWNjZXNzaWJsZToKKyAgICAgICAg
Y2FzZSBGcmFtZUxvYWRUeXBlRm9yd2FyZDoKKyAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlSW5k
ZXhlZEJhY2tGb3J3YXJkOgorICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGVSZWRpcmVjdFdpdGhM
b2NrZWRCYWNrRm9yd2FyZExpc3Q6CisgICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZVN0YW5kYXJk
OgorICAgICAgICAgICAgaXRlbVRvUmVzdG9yZSA9IG1fY3VycmVudEl0ZW0uZ2V0KCk7IAorICAg
IH0KKyAgICAKKyAgICBpZiAoIWl0ZW1Ub1Jlc3RvcmUpCisgICAgICAgIHJldHVybjsKKworICAg
IExPRyhMb2FkaW5nLCAiV2ViQ29yZUxvYWRpbmcgJXM6IHJlc3RvcmluZyBmb3JtIHN0YXRlIGZy
b20gJXAiLCBtX2ZyYW1lLT50cmVlKCktPm5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBp
dGVtVG9SZXN0b3JlKTsKKyAgICBkb2MtPnNldFN0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKGl0ZW1U
b1Jlc3RvcmUtPmRvY3VtZW50U3RhdGUoKSk7Cit9CisKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6
OmludmFsaWRhdGVDdXJyZW50SXRlbUNhY2hlZFBhZ2UoKQoreworICAgIC8vIFdoZW4gd2UgYXJl
IHByZS1jb21taXQsIHRoZSBjdXJyZW50SXRlbSBpcyB3aGVyZSB0aGUgcGFnZUNhY2hlIGRhdGEg
cmVzaWRlcyAgICAKKyAgICBDYWNoZWRQYWdlKiBjYWNoZWRQYWdlID0gcGFnZUNhY2hlKCktPmdl
dChjdXJyZW50SXRlbSgpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgZ3JvdGVzcXVlIGhh
Y2sgdG8gZml4IDxyZGFyOi8vcHJvYmxlbS80MDU5MDU5PiBDcmFzaCBpbiBSZW5kZXJGbG93Ojpk
ZXRhY2gKKyAgICAvLyBTb21laG93IHRoZSBQYWdlU3RhdGUgb2JqZWN0IGlzIG5vdCBwcm9wZXJs
eSB1cGRhdGVkLCBhbmQgaXMgaG9sZGluZyBvbnRvIGEgc3RhbGUgZG9jdW1lbnQuCisgICAgLy8g
Qm90aCBYY29kZSBhbmQgRmlsZU1ha2VyIHNlZSB0aGlzIGNyYXNoLCBTYWZhcmkgZG9lcyBub3Qu
CisgICAgCisgICAgQVNTRVJUKCFjYWNoZWRQYWdlIHx8IGNhY2hlZFBhZ2UtPmRvY3VtZW50KCkg
PT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgaWYgKGNhY2hlZFBhZ2UgJiYgY2FjaGVkUGFn
ZS0+ZG9jdW1lbnQoKSA9PSBtX2ZyYW1lLT5kb2N1bWVudCgpKSB7CisgICAgICAgIGNhY2hlZFBh
Z2UtPmRvY3VtZW50KCktPnNldEluUGFnZUNhY2hlKGZhbHNlKTsKKyAgICAgICAgY2FjaGVkUGFn
ZS0+Y2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgaWYgKGNhY2hlZFBhZ2UpCisgICAgICAgIHBh
Z2VDYWNoZSgpLT5yZW1vdmUoY3VycmVudEl0ZW0oKSk7Cit9CisKKy8vIE1haW4gZnVubmVsIGZv
ciBuYXZpZ2F0aW5nIHRvIGEgcHJldmlvdXMgbG9jYXRpb24gKGJhY2svZm9yd2FyZCwgbm9uLXNl
YXJjaCBzbmFwLWJhY2spCisvLyBUaGlzIGluY2x1ZGVzIHJlY3Vyc2lvbiB0byBoYW5kbGUgbG9h
ZGluZyBpbnRvIGZyYW1lc2V0cyBwcm9wZXJseQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6Z29U
b0l0ZW0oSGlzdG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKK3sKKyAg
ICBBU1NFUlQoIW1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpOworICAgIAorICAgIC8vIHNob3Vs
ZEdvVG9IaXN0b3J5SXRlbSBpcyBhIHByaXZhdGUgZGVsZWdhdGUgbWV0aG9kLiBUaGlzIGlzIG5l
ZWRlZCB0byBmaXg6CisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM5NTEyODM+IGNhbiB2aWV3IHBh
Z2VzIGZyb20gdGhlIGJhY2svZm9yd2FyZCBjYWNoZSB0aGF0IHNob3VsZCBiZSBkaXNhbGxvd2Vk
IGJ5IFBhcmVudGFsIENvbnRyb2xzCisgICAgLy8gVWx0aW1hdGVseSwgaGlzdG9yeSBpdGVtIG5h
dmlnYXRpb25zIHNob3VsZCBnbyB0aHJvdWdoIHRoZSBwb2xpY3kgZGVsZWdhdGUuIFRoYXQncyBj
b3ZlcmVkIGluOgorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8zOTc5NTM5PiBiYWNrL2ZvcndhcmQg
Y2FjaGUgbmF2aWdhdGlvbnMgc2hvdWxkIGNvbnN1bHQgcG9saWN5IGRlbGVnYXRlCisgICAgUGFn
ZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIW1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+c2hvdWxkR29Ub0hpc3Rv
cnlJdGVtKHRhcmdldEl0ZW0pKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTZXQgdGhlIEJG
IGN1cnNvciBiZWZvcmUgY29tbWl0LCB3aGljaCBsZXRzIHRoZSB1c2VyIHF1aWNrbHkgY2xpY2sg
YmFjay9mb3J3YXJkIGFnYWluLgorICAgIC8vIC0gcGx1cywgaXQgb25seSBtYWtlcyBzZW5zZSBm
b3IgdGhlIHRvcCBsZXZlbCBvZiB0aGUgb3BlcmF0aW9uIHRocm91Z2ggdGhlIGZyYW1ldHJlZSwK
KyAgICAvLyBhcyBvcHBvc2VkIHRvIGhhcHBlbmluZyBmb3Igc29tZS9vbmUgb2YgdGhlIHBhZ2Ug
Y29tbWl0cyB0aGF0IG1pZ2h0IGhhcHBlbiBzb29uCisgICAgQmFja0ZvcndhcmRMaXN0KiBiZkxp
c3QgPSBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKTsKKyAgICBIaXN0b3J5SXRlbSogY3VycmVudEl0
ZW0gPSBiZkxpc3QtPmN1cnJlbnRJdGVtKCk7ICAgIAorICAgIGJmTGlzdC0+Z29Ub0l0ZW0odGFy
Z2V0SXRlbSk7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsK
KyAgICBwYWdlLT5zZXRHbG9iYWxIaXN0b3J5SXRlbSgoIXNldHRpbmdzIHx8IHNldHRpbmdzLT5w
cml2YXRlQnJvd3NpbmdFbmFibGVkKCkpID8gMCA6IHRhcmdldEl0ZW0pOworICAgIHJlY3Vyc2l2
ZUdvVG9JdGVtKHRhcmdldEl0ZW0sIGN1cnJlbnRJdGVtLCB0eXBlKTsKK30KKworLy8gV2FsayB0
aGUgZnJhbWUgdHJlZSBhbmQgZW5zdXJlIHRoYXQgdGhlIFVSTHMgbWF0Y2ggdGhlIFVSTHMgaW4g
dGhlIGl0ZW0uCitib29sIEhpc3RvcnlDb250cm9sbGVyOjp1cmxzTWF0Y2hJdGVtKEhpc3RvcnlJ
dGVtKiBpdGVtKSBjb25zdAoreworICAgIGNvbnN0IEtVUkwmIGN1cnJlbnRVUkwgPSBtX2ZyYW1l
LT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCk7CisgICAgaWYgKCFlcXVhbElnbm9y
aW5nRnJhZ21lbnRJZGVudGlmaWVyKGN1cnJlbnRVUkwsIGl0ZW0tPnVybCgpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgSGlzdG9yeUl0ZW1WZWN0b3ImIGNoaWxkSXRlbXMg
PSBpdGVtLT5jaGlsZHJlbigpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IGNoaWxkSXRlbXMuc2l6
ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAg
RnJhbWUqIGNoaWxkRnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPmNoaWxkKGNoaWxkSXRlbXNbaV0t
PnRhcmdldCgpKTsKKyAgICAgICAgaWYgKGNoaWxkRnJhbWUgJiYgIWNoaWxkRnJhbWUtPmxvYWRl
cigpLT5oaXN0b3J5KCktPnVybHNNYXRjaEl0ZW0oY2hpbGRJdGVtc1tpXS5nZXQoKSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbigpCit7
CisjaWYgIUxPR19ESVNBQkxFRAorICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRM
b2FkZXIoKSkKKyAgICAgICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcg
SGlzdG9yeSBmb3IgYmFjay9mb3J3YXJkIG5hdmlnYXRpb24gaW4gZnJhbWUgJXMiLCBtX2ZyYW1l
LT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKKyNl
bmRpZgorCisgICAgLy8gTXVzdCBncmFiIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBiZWZv
cmUgZGlzdHVyYmluZyBpdAorICAgIHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRl
bShtX3ByZXZpb3VzSXRlbS5nZXQoKSk7Cit9CisKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVw
ZGF0ZUZvclJlbG9hZCgpCit7CisjaWYgIUxPR19ESVNBQkxFRAorICAgIGlmIChtX2ZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkKKyAgICAgICAgTE9HKEhpc3RvcnksICJXZWJDb3Jl
SGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgcmVsb2FkIGluIGZyYW1lICVzIiwgbV9mcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7Cisj
ZW5kaWYKKworICAgIGlmIChtX2N1cnJlbnRJdGVtKSB7CisgICAgICAgIHBhZ2VDYWNoZSgpLT5y
ZW1vdmUobV9jdXJyZW50SXRlbS5nZXQoKSk7CisgICAgCisgICAgICAgIGlmIChtX2ZyYW1lLT5s
b2FkZXIoKS0+bG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkIHx8IG1fZnJhbWUtPmxv
YWRlcigpLT5sb2FkVHlwZSgpID09IEZyYW1lTG9hZFR5cGVSZWxvYWRGcm9tT3JpZ2luKQorICAg
ICAgICAgICAgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKG1fY3VycmVudEl0
ZW0uZ2V0KCkpOworICAgIAorICAgICAgICAvLyBTb21ldGltZXMgbG9hZGluZyBhIHBhZ2UgYWdh
aW4gbGVhZHMgdG8gYSBkaWZmZXJlbnQgcmVzdWx0IGJlY2F1c2Ugb2YgY29va2llcy4gQnVnemls
bGEgNDA3MgorICAgICAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkt
PnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9jdXJyZW50SXRlbS0+
c2V0VVJMKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0VVJMKCkp
OworICAgIH0KK30KKworLy8gVGhlcmUgYXJlIDMgdGhpbmdzIHlvdSBtaWdodCB0aGluayBvZiBh
cyAiaGlzdG9yeSIsIGFsbCBvZiB3aGljaCBhcmUgaGFuZGxlZCBieSB0aGVzZSBmdW5jdGlvbnMu
CisvLworLy8gICAgIDEpIEJhY2svZm9yd2FyZDogVGhlIG1fY3VycmVudEl0ZW0gaXMgcGFydCBv
ZiB0aGlzIG1lY2hhbmlzbS4KKy8vICAgICAyKSBHbG9iYWwgaGlzdG9yeTogSGFuZGxlZCBieSB0
aGUgY2xpZW50LgorLy8gICAgIDMpIFZpc2l0ZWQgbGlua3M6IEhhbmRsZWQgYnkgdGhlIFBhZ2VH
cm91cC4KKwordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yU3RhbmRhcmRMb2FkKCkK
K3sKKyAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZv
ciBTdGFuZGFyZCBMb2FkIGluIGZyYW1lICVzIiwgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIEZyYW1lTG9h
ZGVyKiBmcmFtZUxvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpOworCisgICAgU2V0dGluZ3MqIHNl
dHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBib29sIG5lZWRQcml2YWN5ID0gIXNl
dHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7CisgICAgY29uc3Qg
S1VSTCYgaGlzdG9yeVVSTCA9IGZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT51cmxGb3JI
aXN0b3J5KCk7CisKKyAgICBpZiAoIWZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5pc0Ns
aWVudFJlZGlyZWN0KCkpIHsKKyAgICAgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgdXBkYXRlQmFja0ZvcndhcmRMaXN0Q2xpcHBlZEF0VGFyZ2V0KHRydWUpOwor
ICAgICAgICAgICAgaWYgKCFuZWVkUHJpdmFjeSkgeworICAgICAgICAgICAgICAgIGZyYW1lTG9h
ZGVyLT5jbGllbnQoKS0+dXBkYXRlR2xvYmFsSGlzdG9yeSgpOworICAgICAgICAgICAgICAgIGZy
YW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5zZXREaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50
cnkodHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRl
cigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgZnJh
bWVMb2FkZXItPmNsaWVudCgpLT51cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdl
KCkpCisgICAgICAgICAgICAgICAgcGFnZS0+c2V0R2xvYmFsSGlzdG9yeUl0ZW0obmVlZFByaXZh
Y3kgPyAwIDogcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmN1cnJlbnRJdGVtKCkpOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFj
aGFibGVVUkwoKS5pc0VtcHR5KCkgJiYgbV9jdXJyZW50SXRlbSkgeworICAgICAgICBtX2N1cnJl
bnRJdGVtLT5zZXRVUkwoZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVybCgpKTsKKyAg
ICAgICAgbV9jdXJyZW50SXRlbS0+c2V0Rm9ybUluZm9Gcm9tUmVxdWVzdChmcmFtZUxvYWRlci0+
ZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpKTsKKyAgICB9CisKKyAgICBpZiAoIWhpc3RvcnlV
UkwuaXNFbXB0eSgpICYmICFuZWVkUHJpdmFjeSkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9
IG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPmdyb3VwKCkuYWRkVmlzaXRlZExp
bmsoaGlzdG9yeVVSTCk7CisKKyAgICAgICAgaWYgKCFmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+ZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KCkgJiYgZnJhbWVMb2FkZXItPmRvY3Vt
ZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpICYmICFmcmFtZUxvYWRlci0+
dXJsKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgZnJhbWVMb2FkZXItPmNsaWVudCgpLT51cGRh
dGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpOworICAgIH0KK30KKwordm9pZCBIaXN0b3J5
Q29udHJvbGxlcjo6dXBkYXRlRm9yUmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0KCkK
K3sKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpKQorICAgICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGlu
ZyBIaXN0b3J5IGZvciByZWRpcmVjdCBsb2FkIGluIGZyYW1lICVzIiwgbV9mcmFtZS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAg
ICAKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIGJv
b2wgbmVlZFByaXZhY3kgPSAhc2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0Vu
YWJsZWQoKTsKKyAgICBjb25zdCBLVVJMJiBoaXN0b3J5VVJMID0gbV9mcmFtZS0+bG9hZGVyKCkt
PmRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKTsKKworICAgIGlmIChtX2ZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNDbGllbnRSZWRpcmVjdCgpKSB7CisgICAgICAg
IGlmICghbV9jdXJyZW50SXRlbSAmJiAhbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkgeworICAg
ICAgICAgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHVw
ZGF0ZUJhY2tGb3J3YXJkTGlzdENsaXBwZWRBdFRhcmdldCh0cnVlKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW5lZWRQcml2YWN5KSB7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPmxvYWRl
cigpLT5jbGllbnQoKS0+dXBkYXRlR2xvYmFsSGlzdG9yeSgpOworICAgICAgICAgICAgICAgICAg
ICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+c2V0RGlkQ3JlYXRlR2xvYmFs
SGlzdG9yeUVudHJ5KHRydWUpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT51cGRhdGVH
bG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcGFnZS0+c2V0R2xvYmFsSGlzdG9yeUl0ZW0obmVlZFByaXZhY3kgPyAwIDogcGFnZS0+
YmFja0ZvcndhcmRMaXN0KCktPmN1cnJlbnRJdGVtKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmIChtX2N1cnJlbnRJdGVtKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRJ
dGVtLT5zZXRVUkwobV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpKTsK
KyAgICAgICAgICAgIG1fY3VycmVudEl0ZW0tPnNldEZvcm1JbmZvRnJvbVJlcXVlc3QobV9mcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBGcmFtZSogcGFyZW50RnJhbWUgPSBtX2ZyYW1lLT50cmVlKCkt
PnBhcmVudCgpOworICAgICAgICBpZiAocGFyZW50RnJhbWUgJiYgcGFyZW50RnJhbWUtPmxvYWRl
cigpLT5oaXN0b3J5KCktPm1fY3VycmVudEl0ZW0pCisgICAgICAgICAgICBwYXJlbnRGcmFtZS0+
bG9hZGVyKCktPmhpc3RvcnkoKS0+bV9jdXJyZW50SXRlbS0+c2V0Q2hpbGRJdGVtKGNyZWF0ZUl0
ZW0odHJ1ZSkpOworICAgIH0KKworICAgIGlmICghaGlzdG9yeVVSTC5pc0VtcHR5KCkgJiYgIW5l
ZWRQcml2YWN5KSB7CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQor
ICAgICAgICAgICAgcGFnZS0+Z3JvdXAoKS5hZGRWaXNpdGVkTGluayhoaXN0b3J5VVJMKTsKKwor
ICAgICAgICBpZiAoIW1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5kaWRDcmVh
dGVHbG9iYWxIaXN0b3J5RW50cnkoKSAmJiBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkgJiYgIW1fZnJhbWUtPmxvYWRlcigpLT51
cmwoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkt
PnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCk7CisgICAgfQorfQorCit2b2lkIEhp
c3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JDbGllbnRSZWRpcmVjdCgpCit7CisjaWYgIUxPR19E
SVNBQkxFRAorICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkKKyAg
ICAgICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3Ig
Y2xpZW50IHJlZGlyZWN0IGluIGZyYW1lICVzIiwgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKworICAgIC8vIENsZWFy
IG91dCBmb3JtIGRhdGEgc28gd2UgZG9uJ3QgdHJ5IHRvIHJlc3RvcmUgaXQgaW50byB0aGUgaW5j
b21pbmcgcGFnZS4gIE11c3QgaGFwcGVuIGFmdGVyCisgICAgLy8gd2ViY29yZSBoYXMgY2xvc2Vk
IHRoZSBVUkwgYW5kIHNhdmVkIGF3YXkgdGhlIGZvcm0gc3RhdGUuCisgICAgaWYgKG1fY3VycmVu
dEl0ZW0pIHsKKyAgICAgICAgbV9jdXJyZW50SXRlbS0+Y2xlYXJEb2N1bWVudFN0YXRlKCk7Cisg
ICAgICAgIG1fY3VycmVudEl0ZW0tPmNsZWFyU2Nyb2xsUG9pbnQoKTsKKyAgICB9CisKKyAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIGJvb2wgbmVlZFBy
aXZhY3kgPSAhc2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsK
KyAgICBjb25zdCBLVVJMJiBoaXN0b3J5VVJMID0gbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKTsKKworICAgIGlmICghaGlzdG9yeVVSTC5pc0VtcHR5
KCkgJiYgIW5lZWRQcml2YWN5KSB7CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+
cGFnZSgpKQorICAgICAgICAgICAgcGFnZS0+Z3JvdXAoKS5hZGRWaXNpdGVkTGluayhoaXN0b3J5
VVJMKTsKKyAgICB9Cit9CisKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckNvbW1p
dCgpCit7CisgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7
CisjaWYgIUxPR19ESVNBQkxFRAorICAgIGlmIChmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIo
KSkKKyAgICAgICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9y
eSBmb3IgY29tbWl0IGluIGZyYW1lICVzIiwgZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCkt
PnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICBGcmFtZUxvYWRUeXBlIHR5cGUg
PSBmcmFtZUxvYWRlci0+bG9hZFR5cGUoKTsKKyAgICBpZiAoaXNCYWNrRm9yd2FyZExvYWRUeXBl
KHR5cGUpIHx8CisgICAgICAgICgodHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkIHx8IHR5cGUg
PT0gRnJhbWVMb2FkVHlwZVJlbG9hZEZyb21PcmlnaW4pICYmICFmcmFtZUxvYWRlci0+cHJvdmlz
aW9uYWxEb2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSkpIHsKKyAg
ICAgICAgLy8gT25jZSBjb21taXR0ZWQsIHdlIHdhbnQgdG8gdXNlIGN1cnJlbnQgaXRlbSBmb3Ig
c2F2aW5nIERvY1N0YXRlLCBhbmQKKyAgICAgICAgLy8gdGhlIHByb3Zpc2lvbmFsIGl0ZW0gZm9y
IHJlc3RvcmluZyBzdGF0ZS4KKyAgICAgICAgLy8gTm90ZSBwcmV2aW91c0l0ZW0gbXVzdCBiZSBz
ZXQgYmVmb3JlIHdlIGNsb3NlIHRoZSBVUkwsIHdoaWNoIHdpbGwKKyAgICAgICAgLy8gaGFwcGVu
IHdoZW4gdGhlIGRhdGEgc291cmNlIGlzIG1hZGUgbm9uLXByb3Zpc2lvbmFsIGJlbG93CisgICAg
ICAgIG1fcHJldmlvdXNJdGVtID0gbV9jdXJyZW50SXRlbTsKKyAgICAgICAgQVNTRVJUKG1fcHJv
dmlzaW9uYWxJdGVtKTsKKyAgICAgICAgbV9jdXJyZW50SXRlbSA9IG1fcHJvdmlzaW9uYWxJdGVt
OworICAgICAgICBtX3Byb3Zpc2lvbmFsSXRlbSA9IDA7CisgICAgfQorfQorCit2b2lkIEhpc3Rv
cnlDb250cm9sbGVyOjp1cGRhdGVGb3JBbmNob3JTY3JvbGwoKQoreworICAgIGlmIChtX2ZyYW1l
LT5sb2FkZXIoKS0+dXJsKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3Mg
fHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIHBhZ2UtPmdyb3VwKCkuYWRkVmlzaXRlZExpbmsobV9mcmFtZS0+
bG9hZGVyKCktPnVybCgpKTsKK30KKwordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9y
RnJhbWVMb2FkQ29tcGxldGVkKCkKK3sKKyAgICAvLyBFdmVuIGlmIGFscmVhZHkgY29tcGxldGUs
IHdlIG1pZ2h0IGhhdmUgc2V0IGEgcHJldmlvdXMgaXRlbSBvbiBhIGZyYW1lIHRoYXQKKyAgICAv
LyBkaWRuJ3QgZG8gYW55IGRhdGEgbG9hZGluZyBvbiB0aGUgcGFzdCB0cmFuc2FjdGlvbi4gTWFr
ZSBzdXJlIHRvIGNsZWFyIHRoZXNlIG91dC4KKyAgICBtX3ByZXZpb3VzSXRlbSA9IDA7Cit9CisK
K3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnNldEN1cnJlbnRJdGVtKEhpc3RvcnlJdGVtKiBpdGVt
KQoreworICAgIG1fY3VycmVudEl0ZW0gPSBpdGVtOworfQorCit2b2lkIEhpc3RvcnlDb250cm9s
bGVyOjpzZXRDdXJyZW50SXRlbVRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAgaWYg
KG1fY3VycmVudEl0ZW0pCisgICAgICAgIG1fY3VycmVudEl0ZW0tPnNldFRpdGxlKHRpdGxlKTsK
K30KKwordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6c2V0UHJvdmlzaW9uYWxJdGVtKEhpc3RvcnlJ
dGVtKiBpdGVtKQoreworICAgIG1fcHJvdmlzaW9uYWxJdGVtID0gaXRlbTsKK30KKworUGFzc1Jl
ZlB0cjxIaXN0b3J5SXRlbT4gSGlzdG9yeUNvbnRyb2xsZXI6OmNyZWF0ZUl0ZW0oYm9vbCB1c2VP
cmlnaW5hbCkKK3sKKyAgICBEb2N1bWVudExvYWRlciogZG9jTG9hZGVyID0gbV9mcmFtZS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CisgICAgCisgICAgS1VSTCB1bnJlYWNoYWJsZVVSTCA9
IGRvY0xvYWRlciA/IGRvY0xvYWRlci0+dW5yZWFjaGFibGVVUkwoKSA6IEtVUkwoKTsKKyAgICAK
KyAgICBLVVJMIHVybDsKKyAgICBLVVJMIG9yaWdpbmFsVVJMOworCisgICAgaWYgKCF1bnJlYWNo
YWJsZVVSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgdXJsID0gdW5yZWFjaGFibGVVUkw7CisgICAg
ICAgIG9yaWdpbmFsVVJMID0gdW5yZWFjaGFibGVVUkw7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
b3JpZ2luYWxVUkwgPSBkb2NMb2FkZXIgPyBkb2NMb2FkZXItPm9yaWdpbmFsVVJMKCkgOiBLVVJM
KCk7CisgICAgICAgIGlmICh1c2VPcmlnaW5hbCkKKyAgICAgICAgICAgIHVybCA9IG9yaWdpbmFs
VVJMOworICAgICAgICBlbHNlIGlmIChkb2NMb2FkZXIpCisgICAgICAgICAgICB1cmwgPSBkb2NM
b2FkZXItPnJlcXVlc3RVUkwoKTsKKyAgICB9CisKKyAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVI
aXN0b3J5OiBDcmVhdGluZyBpdGVtIGZvciAlcyIsIHVybC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgCisgICAgLy8gRnJhbWVzIHRoYXQgaGF2ZSBuZXZlciBzdWNjZXNzZnVsbHkgbG9h
ZGVkIGFueSBjb250ZW50CisgICAgLy8gbWF5IGhhdmUgbm8gVVJMIGF0IGFsbC4gQ3VycmVudGx5
IG91ciBoaXN0b3J5IGNvZGUgY2FuJ3QKKyAgICAvLyBkZWFsIHdpdGggc3VjaCB0aGluZ3MsIHNv
IHdlIG5pcCB0aGF0IGluIHRoZSBidWQgaGVyZS4KKyAgICAvLyBMYXRlciB3ZSBtYXkgd2FudCB0
byBsZWFybiB0byBsaXZlIHdpdGggbmlsIGZvciBVUkwuCisgICAgLy8gU2VlIGJ1ZyAzMzY4MjM2
IGFuZCByZWxhdGVkIGJ1Z3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgaWYgKHVybC5pc0Vt
cHR5KCkpIAorICAgICAgICB1cmwgPSBibGFua1VSTCgpOworICAgIGlmIChvcmlnaW5hbFVSTC5p
c0VtcHR5KCkpCisgICAgICAgIG9yaWdpbmFsVVJMID0gYmxhbmtVUkwoKTsKKyAgICAKKyAgICBG
cmFtZSogcGFyZW50RnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpOworICAgIFN0cmlu
ZyBwYXJlbnQgPSBwYXJlbnRGcmFtZSA/IHBhcmVudEZyYW1lLT50cmVlKCktPm5hbWUoKSA6ICIi
OworICAgIFN0cmluZyB0aXRsZSA9IGRvY0xvYWRlciA/IGRvY0xvYWRlci0+dGl0bGUoKSA6ICIi
OworCisgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gSGlzdG9yeUl0ZW06OmNyZWF0ZSh1
cmwsIG1fZnJhbWUtPnRyZWUoKS0+bmFtZSgpLCBwYXJlbnQsIHRpdGxlKTsKKyAgICBpdGVtLT5z
ZXRPcmlnaW5hbFVSTFN0cmluZyhvcmlnaW5hbFVSTC5zdHJpbmcoKSk7CisKKyAgICBpZiAoIXVu
cmVhY2hhYmxlVVJMLmlzRW1wdHkoKSB8fCAhZG9jTG9hZGVyIHx8IGRvY0xvYWRlci0+cmVzcG9u
c2UoKS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkKKyAgICAgICAgaXRlbS0+c2V0TGFzdFZpc2l0
V2FzRmFpbHVyZSh0cnVlKTsKKworICAgIC8vIFNhdmUgZm9ybSBzdGF0ZSBpZiB0aGlzIGlzIGEg
UE9TVAorICAgIGlmIChkb2NMb2FkZXIpIHsKKyAgICAgICAgaWYgKHVzZU9yaWdpbmFsKQorICAg
ICAgICAgICAgaXRlbS0+c2V0Rm9ybUluZm9Gcm9tUmVxdWVzdChkb2NMb2FkZXItPm9yaWdpbmFs
UmVxdWVzdCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRlbS0+c2V0Rm9ybUluZm9G
cm9tUmVxdWVzdChkb2NMb2FkZXItPnJlcXVlc3QoKSk7CisgICAgfQorICAgIAorICAgIC8vIFNl
dCB0aGUgaXRlbSBmb3Igd2hpY2ggd2Ugd2lsbCBzYXZlIGRvY3VtZW50IHN0YXRlCisgICAgbV9w
cmV2aW91c0l0ZW0gPSBtX2N1cnJlbnRJdGVtOworICAgIG1fY3VycmVudEl0ZW0gPSBpdGVtOwor
ICAgIAorICAgIHJldHVybiBpdGVtLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxIaXN0b3J5
SXRlbT4gSGlzdG9yeUNvbnRyb2xsZXI6OmNyZWF0ZUl0ZW1UcmVlKEZyYW1lKiB0YXJnZXRGcmFt
ZSwgYm9vbCBjbGlwQXRUYXJnZXQpCit7CisgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBiZkl0ZW0g
PSBjcmVhdGVJdGVtKG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkgPyB0cnVlIDogZmFsc2UpOwor
ICAgIGlmIChtX3ByZXZpb3VzSXRlbSkKKyAgICAgICAgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmll
d1N0YXRlVG9JdGVtKG1fcHJldmlvdXNJdGVtLmdldCgpKTsKKyAgICBpZiAoIShjbGlwQXRUYXJn
ZXQgJiYgbV9mcmFtZSA9PSB0YXJnZXRGcmFtZSkpIHsKKyAgICAgICAgLy8gc2F2ZSBmcmFtZSBz
dGF0ZSBmb3IgaXRlbXMgdGhhdCBhcmVuJ3QgbG9hZGluZyAoa2h0bWwgZG9lc24ndCBzYXZlIHRo
b3NlKQorICAgICAgICBzYXZlRG9jdW1lbnRTdGF0ZSgpOworICAgICAgICBmb3IgKEZyYW1lKiBj
aGlsZCA9IG1fZnJhbWUtPnRyZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+dHJlZSgpLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBGcmFtZUxvYWRlciogY2hp
bGRMb2FkZXIgPSBjaGlsZC0+bG9hZGVyKCk7CisgICAgICAgICAgICBib29sIGhhc0NoaWxkTG9h
ZGVkID0gY2hpbGRMb2FkZXItPmZyYW1lSGFzTG9hZGVkKCk7CisKKyAgICAgICAgICAgIC8vIElm
IHRoZSBjaGlsZCBpcyBhIGZyYW1lIGNvcnJlc3BvbmRpbmcgdG8gYW4gPG9iamVjdD4gZWxlbWVu
dCB0aGF0IG5ldmVyIGxvYWRlZCwKKyAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gY3Jl
YXRlIGEgaGlzdG9yeSBpdGVtLCBiZWNhdXNlIHRoYXQgY2F1c2VzIGZhbGxiYWNrIGNvbnRlbnQK
KyAgICAgICAgICAgIC8vIHRvIGJlIGlnbm9yZWQgb24gcmVsb2FkLgorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoISghaGFzQ2hpbGRMb2FkZWQgJiYgY2hpbGRMb2FkZXItPmlzSG9zdGVk
QnlPYmplY3RFbGVtZW50KCkpKQorICAgICAgICAgICAgICAgIGJmSXRlbS0+YWRkQ2hpbGRJdGVt
KGNoaWxkTG9hZGVyLT5oaXN0b3J5KCktPmNyZWF0ZUl0ZW1UcmVlKHRhcmdldEZyYW1lLCBjbGlw
QXRUYXJnZXQpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9mcmFtZSA9PSB0YXJnZXRG
cmFtZSkKKyAgICAgICAgYmZJdGVtLT5zZXRJc1RhcmdldEl0ZW0odHJ1ZSk7CisgICAgcmV0dXJu
IGJmSXRlbTsKK30KKworLy8gVGhlIGdlbmVyYWwgaWRlYSBoZXJlIGlzIHRvIHRyYXZlcnNlIHRo
ZSBmcmFtZSB0cmVlIGFuZCB0aGUgaXRlbSB0cmVlIGluIHBhcmFsbGVsLAorLy8gdHJhY2tpbmcg
d2hldGhlciBlYWNoIGZyYW1lIGFscmVhZHkgaGFzIHRoZSBjb250ZW50IHRoZSBpdGVtIHJlcXVl
c3RzLiAgSWYgdGhlcmUgaXMKKy8vIGEgbWF0Y2ggKGJ5IFVSTCksIHdlIGp1c3QgcmVzdG9yZSBz
Y3JvbGwgcG9zaXRpb24gYW5kIHJlY3Vyc2UuICBPdGhlcndpc2Ugd2UgbXVzdAorLy8gcmVsb2Fk
IHRoYXQgZnJhbWUsIGFuZCBhbGwgaXRzIGtpZHMuCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpy
ZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgSGlzdG9yeUl0ZW0qIGZyb21JdGVt
LCBGcmFtZUxvYWRUeXBlIHR5cGUpCit7CisgICAgQVNTRVJUKGl0ZW0pOworICAgIEFTU0VSVChm
cm9tSXRlbSk7CisKKyAgICBLVVJMIGl0ZW1VUkwgPSBpdGVtLT51cmwoKTsKKyAgICBLVVJMIGN1
cnJlbnRVUkw7CisgICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKQor
ICAgICAgICBjdXJyZW50VVJMID0gbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkt
PnVybCgpOworCisgICAgLy8gQWx3YXlzIHJlbG9hZCB0aGUgdGFyZ2V0IGZyYW1lIG9mIHRoZSBp
dGVtIHdlJ3JlIGdvaW5nIHRvLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2Ugd2lsbAorICAgIC8vIGRv
IC1zb21lLSBsb2FkIGZvciB0aGUgdHJhbnNpdGlvbiwgd2hpY2ggbWVhbnMgYSBwcm9wZXIgbm90
aWZpY2F0aW9uIHdpbGwgYmUgcG9zdGVkCisgICAgLy8gdG8gdGhlIGFwcC4KKyAgICAvLyBUaGUg
ZXhhY3QgVVJMIGhhcyB0byBtYXRjaCwgaW5jbHVkaW5nIGZyYWdtZW50LiAgV2Ugd2FudCB0byBn
byB0aHJvdWdoIHRoZSBfbG9hZAorICAgIC8vIG1ldGhvZCwgZXZlbiBpZiB0byBkbyBhIHdpdGhp
bi1wYWdlIG5hdmlnYXRpb24uCisgICAgLy8gVGhlIGN1cnJlbnQgZnJhbWUgdHJlZSBhbmQgdGhl
IGZyYW1lIHRyZWUgc25hcHNob3QgaW4gdGhlIGl0ZW0gaGF2ZSB0byBtYXRjaC4KKyAgICBpZiAo
IWl0ZW0tPmlzVGFyZ2V0SXRlbSgpICYmCisgICAgICAgIGl0ZW1VUkwgPT0gY3VycmVudFVSTCAm
JgorICAgICAgICAoKG1fZnJhbWUtPnRyZWUoKS0+bmFtZSgpLmlzRW1wdHkoKSAmJiBpdGVtLT50
YXJnZXQoKS5pc0VtcHR5KCkpIHx8IG1fZnJhbWUtPnRyZWUoKS0+bmFtZSgpID09IGl0ZW0tPnRh
cmdldCgpKSAmJgorICAgICAgICBjaGlsZEZyYW1lc01hdGNoSXRlbShpdGVtKSkKKyAgICB7Cisg
ICAgICAgIC8vIFRoaXMgY29udGVudCBpcyBnb29kLCBzbyBsZWF2ZSBpdCBhbG9uZSBhbmQgbG9v
ayBmb3IgY2hpbGRyZW4gdGhhdCBuZWVkIHJlbG9hZGluZworICAgICAgICAvLyBTYXZlIGZvcm0g
c3RhdGUgKHdvcmtzIGZyb20gY3VycmVudEl0ZW0sIHNpbmNlIHByZXZJdGVtIGlzIG5pbCkKKyAg
ICAgICAgQVNTRVJUKCFtX3ByZXZpb3VzSXRlbSk7CisgICAgICAgIHNhdmVEb2N1bWVudFN0YXRl
KCk7CisgICAgICAgIHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShtX2N1cnJl
bnRJdGVtLmdldCgpKTsKKworICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+
dmlldygpKQorICAgICAgICAgICAgdmlldy0+c2V0V2FzU2Nyb2xsZWRCeVVzZXIoZmFsc2UpOwor
CisgICAgICAgIG1fY3VycmVudEl0ZW0gPSBpdGVtOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAvLyBSZXN0b3JlIGZvcm0gc3RhdGUgKHdvcmtzIGZyb20gY3VycmVudEl0ZW0pCisgICAgICAg
IHJlc3RvcmVEb2N1bWVudFN0YXRlKCk7CisgICAgICAgIAorICAgICAgICAvLyBSZXN0b3JlIHRo
ZSBzY3JvbGwgcG9zaXRpb24gKHdlIGNob29zZSB0byBkbyB0aGlzIHJhdGhlciB0aGFuIGdvaW5n
IGJhY2sgdG8gdGhlIGFuY2hvciBwb2ludCkKKyAgICAgICAgcmVzdG9yZVNjcm9sbFBvc2l0aW9u
QW5kVmlld1N0YXRlKCk7CisgICAgICAgIAorICAgICAgICBjb25zdCBIaXN0b3J5SXRlbVZlY3Rv
ciYgY2hpbGRJdGVtcyA9IGl0ZW0tPmNoaWxkcmVuKCk7CisgICAgICAgIAorICAgICAgICBpbnQg
c2l6ZSA9IGNoaWxkSXRlbXMuc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIGNoaWxkRnJhbWVOYW1lID0gY2hpbGRJdGVt
c1tpXS0+dGFyZ2V0KCk7CisgICAgICAgICAgICBIaXN0b3J5SXRlbSogZnJvbUNoaWxkSXRlbSA9
IGZyb21JdGVtLT5jaGlsZEl0ZW1XaXRoVGFyZ2V0KGNoaWxkRnJhbWVOYW1lKTsKKyAgICAgICAg
ICAgIEFTU0VSVChmcm9tQ2hpbGRJdGVtIHx8IGZyb21JdGVtLT5pc1RhcmdldEl0ZW0oKSk7Cisg
ICAgICAgICAgICBGcmFtZSogY2hpbGRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+Y2hpbGQoY2hp
bGRGcmFtZU5hbWUpOworICAgICAgICAgICAgQVNTRVJUKGNoaWxkRnJhbWUpOworICAgICAgICAg
ICAgY2hpbGRGcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+cmVjdXJzaXZlR29Ub0l0ZW0oY2hp
bGRJdGVtc1tpXS5nZXQoKSwgZnJvbUNoaWxkSXRlbSwgdHlwZSk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZEl0ZW0oaXRlbSwgdHlwZSk7
CisgICAgfQorfQorCisvLyBoZWxwZXIgbWV0aG9kIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRo
ZSBzdWJmcmFtZXMgZGVzY3JpYmVkIGJ5IHRoZSBpdGVtJ3Mgc3ViaXRlbXMKKy8vIG1hdGNoIG91
ciBvd24gY3VycmVudCBmcmFtZXNldAorYm9vbCBIaXN0b3J5Q29udHJvbGxlcjo6Y2hpbGRGcmFt
ZXNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0Cit7CisgICAgY29uc3QgSGlzdG9y
eUl0ZW1WZWN0b3ImIGNoaWxkSXRlbXMgPSBpdGVtLT5jaGlsZHJlbigpOworICAgIGlmIChjaGls
ZEl0ZW1zLnNpemUoKSAhPSBtX2ZyYW1lLT50cmVlKCktPmNoaWxkQ291bnQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIHVuc2lnbmVkIHNpemUgPSBjaGlsZEl0ZW1zLnNpemUo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlm
ICghbV9mcmFtZS0+dHJlZSgpLT5jaGlsZChjaGlsZEl0ZW1zW2ldLT50YXJnZXQoKSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIEZvdW5kIG1hdGNoZXMg
Zm9yIGFsbCBpdGVtIHRhcmdldHMKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBIaXN0b3J5
Q29udHJvbGxlcjo6dXBkYXRlQmFja0ZvcndhcmRMaXN0Q2xpcHBlZEF0VGFyZ2V0KGJvb2wgZG9D
bGlwKQoreworICAgIC8vIEluIHRoZSBjYXNlIG9mIHNhdmluZyBzdGF0ZSBhYm91dCBhIHBhZ2Ug
d2l0aCBmcmFtZXMsIHdlIHN0b3JlIGEgdHJlZSBvZiBpdGVtcyB0aGF0IG1pcnJvcnMgdGhlIGZy
YW1lIHRyZWUuICAKKyAgICAvLyBUaGUgaXRlbSB0aGF0IHdhcyB0aGUgdGFyZ2V0IG9mIHRoZSB1
c2VyJ3MgbmF2aWdhdGlvbiBpcyBkZXNpZ25hdGVkIGFzIHRoZSAidGFyZ2V0SXRlbSIuICAKKyAg
ICAvLyBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggZG9DbGlwPXRydWUgd2UncmUg
YWJsZSB0byBjcmVhdGUgdGhlIHdob2xlIHRyZWUgZXhjZXB0IGZvciB0aGUgdGFyZ2V0J3MgY2hp
bGRyZW4sIAorICAgIC8vIHdoaWNoIHdpbGwgYmUgbG9hZGVkIGluIHRoZSBmdXR1cmUuIFRoYXQg
cGFydCBvZiB0aGUgdHJlZSB3aWxsIGJlIGZpbGxlZCBvdXQgYXMgdGhlIGNoaWxkIGxvYWRzIGFy
ZSBjb21taXR0ZWQuCisKKyAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlm
ICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5k
b2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBGcmFtZSogbWFpbkZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7CisgICAgQVNT
RVJUKG1haW5GcmFtZSk7CisgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gbWFpbkZyYW1l
LT5sb2FkZXIoKTsKKworICAgIGZyYW1lTG9hZGVyLT5jaGVja0RpZFBlcmZvcm1GaXJzdE5hdmln
YXRpb24oKTsKKworICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IGZyYW1lTG9hZGVyLT5o
aXN0b3J5KCktPmNyZWF0ZUl0ZW1UcmVlKG1fZnJhbWUsIGRvQ2xpcCk7CisgICAgTE9HKEJhY2tG
b3J3YXJkLCAiV2ViQ29yZUJhY2tGb3J3YXJkIC0gQWRkaW5nIGJhY2tmb3J3YXJkIGl0ZW0gJXAg
Zm9yIGZyYW1lICVzIiwgaXRlbS5nZXQoKSwgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9h
ZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBwYWdlLT5iYWNrRm9y
d2FyZExpc3QoKS0+YWRkSXRlbShpdGVtKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaCBiL1dlYkNvcmUv
bG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYzE2MTUxNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlD
b250cm9sbGVyLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEhpc3RvcnlDb250cm9s
bGVyX2gKKyNkZWZpbmUgSGlzdG9yeUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJUeXBlcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBIaXN0b3J5SXRlbTsKKworICAgIGNs
YXNzIEhpc3RvcnlDb250cm9sbGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEhpc3RvcnlDb250cm9sbGVyKEZyYW1lKik7CisgICAgICAgIH5IaXN0b3J5Q29u
dHJvbGxlcigpOworCisgICAgICAgIHZvaWQgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRl
VG9JdGVtKEhpc3RvcnlJdGVtKik7CisgICAgICAgIHZvaWQgcmVzdG9yZVNjcm9sbFBvc2l0aW9u
QW5kVmlld1N0YXRlKCk7CisKKyAgICAgICAgdm9pZCB1cGRhdGVCYWNrRm9yd2FyZExpc3RGb3JG
cmFnbWVudFNjcm9sbCgpOworCisgICAgICAgIHZvaWQgc2F2ZURvY3VtZW50U3RhdGUoKTsKKyAg
ICAgICAgdm9pZCBzYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpOworICAgICAgICB2b2lkIHJl
c3RvcmVEb2N1bWVudFN0YXRlKCk7CisKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlQ3VycmVudEl0
ZW1DYWNoZWRQYWdlKCk7CisKKyAgICAgICAgdm9pZCBnb1RvSXRlbShIaXN0b3J5SXRlbSosIEZy
YW1lTG9hZFR5cGUpOworICAgICAgICBib29sIHVybHNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qKSBj
b25zdDsKKworICAgICAgICB2b2lkIHVwZGF0ZUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbigpOwor
ICAgICAgICB2b2lkIHVwZGF0ZUZvclJlbG9hZCgpOworICAgICAgICB2b2lkIHVwZGF0ZUZvclN0
YW5kYXJkTG9hZCgpOworICAgICAgICB2b2lkIHVwZGF0ZUZvclJlZGlyZWN0V2l0aExvY2tlZEJh
Y2tGb3J3YXJkTGlzdCgpOworICAgICAgICB2b2lkIHVwZGF0ZUZvckNsaWVudFJlZGlyZWN0KCk7
CisgICAgICAgIHZvaWQgdXBkYXRlRm9yQ29tbWl0KCk7CisgICAgICAgIHZvaWQgdXBkYXRlRm9y
QW5jaG9yU2Nyb2xsKCk7CisgICAgICAgIHZvaWQgdXBkYXRlRm9yRnJhbWVMb2FkQ29tcGxldGVk
KCk7CisKKyAgICAgICAgSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtKCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50SXRlbS5nZXQoKTsgfQorICAgICAgICB2b2lkIHNldEN1cnJlbnRJdGVtKEhpc3Rv
cnlJdGVtKik7CisgICAgICAgIHZvaWQgc2V0Q3VycmVudEl0ZW1UaXRsZShjb25zdCBTdHJpbmcm
KTsKKworICAgICAgICBIaXN0b3J5SXRlbSogcHJvdmlzaW9uYWxJdGVtKCkgY29uc3QgeyByZXR1
cm4gbV9wcm92aXNpb25hbEl0ZW0uZ2V0KCk7IH0KKyAgICAgICAgdm9pZCBzZXRQcm92aXNpb25h
bEl0ZW0oSGlzdG9yeUl0ZW0qKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFBhc3NSZWZQdHI8
SGlzdG9yeUl0ZW0+IGNyZWF0ZUl0ZW0oYm9vbCB1c2VPcmlnaW5hbCk7CisgICAgICAgIFBhc3NS
ZWZQdHI8SGlzdG9yeUl0ZW0+IGNyZWF0ZUl0ZW1UcmVlKEZyYW1lKiB0YXJnZXRGcmFtZSwgYm9v
bCBjbGlwQXRUYXJnZXQpOworCisgICAgICAgIHZvaWQgcmVjdXJzaXZlR29Ub0l0ZW0oSGlzdG9y
eUl0ZW0qLCBIaXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUpOworICAgICAgICBib29sIGNoaWxk
RnJhbWVzTWF0Y2hJdGVtKEhpc3RvcnlJdGVtKikgY29uc3Q7CisgICAgICAgIHZvaWQgdXBkYXRl
QmFja0ZvcndhcmRMaXN0Q2xpcHBlZEF0VGFyZ2V0KGJvb2wgZG9DbGlwKTsKKworICAgICAgICBG
cmFtZSogbV9mcmFtZTsKKworICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IG1fY3VycmVudEl0
ZW07CisgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gbV9wcmV2aW91c0l0ZW07CisgICAgICAg
IFJlZlB0cjxIaXN0b3J5SXRlbT4gbV9wcm92aXNpb25hbEl0ZW07CisgICAgfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSGlzdG9yeUNvbnRyb2xsZXJfaA==
</data>
<flag name="review"
          id="22288"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>