<?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>26658</bug_id>
          
          <creation_ts>2009-06-23 13:42:16 -0700</creation_ts>
          <short_desc>Split the Synching portion of LocalStorageArea into its own class</short_desc>
          <delta_ts>2009-06-24 16:56:30 -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>New Bugs</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>25376</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>michaeln</cc>
    
    <cc>playmobil</cc>
    
    <cc>sam</cc>
    
    <cc>yael</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>127674</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-23 13:42:16 -0700</bug_when>
    <thetext>This is a sub-component of &quot;Bug 25376: Refactor localStorage code for use in multi-process browsers&quot; (https://bugs.webkit.org/show_bug.cgi?id=25376).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127675</commentid>
    <comment_count>1</comment_count>
      <attachid>31731</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-23 13:43:36 -0700</bug_when>
    <thetext>Created attachment 31731
patch v1

Split the syncing portions of LocalStorageArea into StorageAreaSync.  This name will make more sense in the next patch (in this set) when LocalStorageArea and SessionStorageArea are merged to become simply StorageArea.  (Thus the synching portion of StorageArea is in StorageAreaSync.)

This looks like a big patch, but really all it&apos;s doing is splitting code and patching split-related things up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127676</commentid>
    <comment_count>2</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-23 13:46:14 -0700</bug_when>
    <thetext>Oops, forgot to add everyone from the other bug to the CC list for this one.

Brady you&apos;re definitely the idea reviewer for this one as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128032</commentid>
    <comment_count>3</comment_count>
      <attachid>31731</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-06-24 16:51:54 -0700</bug_when>
    <thetext>Comment on attachment 31731
patch v1

&gt; Index: WebCore/ChangeLog
...
&gt; +2009-06-23  Jeremy Orlow  &lt;jorlow@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +

nit: please include a bug link.


&gt; +        * storage/StorageAreaSync.cpp: Copied from WebCore/storage/LocalStorageArea.cpp.
&gt; +        (WebCore::StorageAreaSync::create):

nit: it is common practice to delete the list of methods for file copies since
they aren&apos;t that interesting to the reader of the ChangeLog.


Otherwise, R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128038</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-06-24 16:56:30 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/45124</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31731</attachid>
            <date>2009-06-23 13:43:36 -0700</date>
            <delta_ts>2009-06-24 16:51:54 -0700</delta_ts>
            <desc>patch v1</desc>
            <filename>3.20090623.patch</filename>
            <type>text/plain</type>
            <size>62290</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTAwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjEgQEAKKzIwMDktMDYtMjMgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U3BsaXQgdGhlIHN5bmNpbmcgcG9ydGlvbnMgb2YgTG9jYWxTdG9yYWdlQXJlYSBpbnRvIFN0b3Jh
Z2VBcmVhU3luYy4KKyAgICAgICAgVGhpcyBuYW1lIHdpbGwgbWFrZSBtb3JlIHNlbnNlIGluIHRo
ZSBuZXh0IHBhdGNoIChpbiB0aGlzIHNldCkgd2hlbgorICAgICAgICBMb2NhbFN0b3JhZ2VBcmVh
IGFuZCBTZXNzaW9uU3RvcmFnZUFyZWEgYXJlIG1lcmdlZCB0byBiZWNvbWUgc2ltcGx5CisgICAg
ICAgIFN0b3JhZ2VBcmVhLiAgKFRodXMgdGhlIHN5bmNoaW5nIHBvcnRpb24gb2YgU3RvcmFnZUFy
ZWEgaXMgaW4KKyAgICAgICAgU3RvcmFnZUFyZWFTeW5jLikKKworICAgICAgICBUaGlzIGxvb2tz
IGxpa2UgYSBiaWcgcGF0Y2gsIGJ1dCByZWFsbHkgYWxsIGl0J3MgZG9pbmcgaXMgc3BsaXR0aW5n
CisgICAgICAgIGNvZGUgYW5kIHBhdGNoaW5nIHNwbGl0LXJlbGF0ZWQgdGhpbmdzIHVwLgorCisg
ICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3Rv
cmFnZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZUFyZWE6OkxvY2FsU3RvcmFnZUFyZWEp
OgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6c2NoZWR1bGVGaW5hbFN5bmMp
OgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6aXRlbUNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6aXRlbVJlbW92ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6YXJlYUNsZWFyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYWxTdG9yYWdlQXJlYTo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKToKKyAgICAgICAg
KiBzdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaDoKKyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3Rv
cmFnZVRhc2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6TG9jYWxT
dG9yYWdlVGFzayk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVJbXBvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlU3luYyk6CisgICAgICAgICogc3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdl
VGhyZWFkOjpzY2hlZHVsZUltcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VU
aHJlYWQ6OnNjaGVkdWxlU3luYyk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJl
YWQuaDoKKyAgICAgICAgKiBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTZXNzaW9uU3RvcmFnZUFyZWE6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSk6
CisgICAgICAgICogc3RvcmFnZS9TZXNzaW9uU3RvcmFnZUFyZWEuaDoKKyAgICAgICAgKiBzdG9y
YWdlL1N0b3JhZ2VBcmVhLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3Bw
OiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlQXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYVN5bmM6On5TdG9yYWdlQXJlYVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZUFyZWFTeW5jOjpzY2hlZHVsZUZpbmFsU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlQXJlYVN5bmM6OnNjaGVkdWxlSXRlbUZvclN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZUFyZWFTeW5jOjpzY2hlZHVsZUNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VB
cmVhU3luYzo6c3luY1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFT
eW5jOjpwZXJmb3JtSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6
bWFya0ltcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6YmxvY2tV
bnRpbEltcG9ydENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhU3luYzo6
c3luYyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1TeW5jKToK
KyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oOiBDb3BpZWQgZnJvbSBXZWJDb3Jl
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5oLgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVN5
bmNNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6c2No
ZWR1bGVJbXBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5bmNNYW5hZ2VyOjpzY2hl
ZHVsZVN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmg6CisKIDIw
MDktMDYtMjMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA0NTAwMikKKysrIFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIwOTQsNiArMjA5NCw4IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5oIFwK
IAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlTWFwLmggXAorCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwIFwKKwlXZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
U3luY01hbmFnZXIuY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgK
IGVuZGlmICMgRU5EIEVOQUJMRV9ET01fU1RPUkFHRQpJbmRleDogV2ViQ29yZS9XZWJDb3JlU291
cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHJldmlz
aW9uIDQ1MDAyKQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkK
QEAgLTEwMjEsNiArMTAyMSw3IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxl
cyBuZWUKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAogICAgICAgICBzdG9yYWdlL1Nl
c3Npb25TdG9yYWdlLmNwcAogICAgICAgICBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5jcHAK
KyAgICAgICAgc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCiAgICAgICAgIHN0b3JhZ2UvU3Rv
cmFnZVN5bmNNYW5hZ2VyLmNwcAogICAgIDwvc2V0PgogCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDQ1MDAyKQorKysgV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMzAwMDcsNiArMzAwMDcsMTQg
QEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3RvcmFnZVxTdG9yYWdlQXJlYVN5bmMuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlQXJlYVN5bmMuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3Jh
Z2VcU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDUwMDIp
CisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNDI4Nyw2ICs0Mjg3LDggQEAKIAkJQzEwNURBNjQwRjNBQTZCODAwMURENDRGIC8q
IFRleHRFbmNvZGluZ0RldGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0
ZWN0b3IuaCAqLzsgfTsKIAkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5j
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovOyB9Owog
CQlDNTEwMkQ5NTBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTAyRDkzMEZEOUFB
MkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovOyB9OworCQlDNTEwMkVDRjBG
RDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTEwMkVDRDBGRDlFRjhDMDBGQUZGMDQgLyogU3Rv
cmFnZUFyZWFTeW5jLmggKi87IH07CisJCUM1MTAyRUQwMEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9y
YWdlQXJlYVN5bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzUxMDJFQ0UwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5jcHAgKi87
IH07CiAJCUM2RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2
ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0
QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsK
IAkJQzZENzRBRTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFF
MzA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLzsgfTsK
IAkJRDA1Q0VEMjkwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDVDRUQyNzBBNDBC
QjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCAqLzsgfTsKQEAgLTkxMDgsNiAr
OTExMCw4IEBACiAJCUMxMDVEQTYzMEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRl
Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RW5jb2RpbmdEZXRl
Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTEwMkQ5MjBGRDlBQTJEMDBG
QUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0b3JhZ2VTeW5jTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDNTEwMkQ5MzBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VTeW5jTWFuYWdlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MTAyRUNEMEZEOUVGOEMwMEZBRkYwNCAv
KiBTdG9yYWdlQXJlYVN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rv
cmFnZUFyZWFTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MTAyRUNFMEZE
OUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJlYVN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZUFyZWFTeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxp
c3RMZXZlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2RpZnlTZWxlY3Rp
b25MaXN0TGV2ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRTMwOUFB
MjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDVDRUQyNzBBNDBCQjJDMDBDNUFGMzggLyog
Rm9ybWF0QmxvY2tDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtOTY4NCw2ICs5Njg4LDggQEAKIAkJCQk1MUUzRjlEMTBEQTA1RDcxMDAyNTA5MTEgLyogU3Rv
cmFnZS5pZGwgKi8sCiAJCQkJNTFCRTM3REQwREFFRTAwRTAwMTA4NUZDIC8qIFN0b3JhZ2VBcmVh
LmNwcCAqLywKIAkJCQk1MUJFMzdERTBEQUVFMDBFMDAxMDg1RkMgLyogU3RvcmFnZUFyZWEuaCAq
LywKKwkJCQlDNTEwMkVDRDBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmggKi8s
CisJCQkJQzUxMDJFQ0UwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5jcHAgKi8s
CiAJCQkJNTFFMEJBQkEwREE1NTQ3MTAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5jcHAgKi8sCiAJ
CQkJNTFFMEJBQjkwREE1NTQ3MTAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5oICovLAogCQkJCTUx
RTBCQUJEMERBNTU0ODQwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQuaWRsICovLApAQCAtMTY4NTIs
NiArMTY4NTgsNyBAQAogCQkJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxOEY4MzFCODBGRDQ4Qzc4MDBEOEM1NkIgLyog
V29ya2VyTG9hZGVyUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1MTAyRDk0MEZEOUFBMkQw
MEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUM1MTAy
RUNGMEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJlYVN5bmMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4OUNDQzUzMEY0NEU5ODEwMEI1REExMCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFCRjcwMEMwRkU4NkY0OTAwNUU4REVDIC8qIE1lc3Nh
Z2VQb3J0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFCRjcwMTAwRkU4NkY2MTAwNUU4
REVDIC8qIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmggaW4gSGVhZGVycyAqLywKQEAgLTE4
ODYyLDYgKzE4ODY5LDcgQEAKIAkJCQk0MUJGNzAwRjBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZv
cm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5Q0NDNTIwRjQ0
RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUM1MTAyRDk1MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzUxMDJFRDAwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3Jh
Z2VBcmVhU3luYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzIxMkE0MTBGRTgzQTE4MDBFQzM3
MDggLyogSlNIVE1MRGF0YUdyaWRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRjUy
NDYwMEZFQkVFNUQwMDk1QkYyNiAvKiBIVE1MRGF0YUdyaWRFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDNzdDQkFBMEZFQkY2QzkwMDcwODg3QiAvKiBIVE1MRGF0YUdyaWRDb2xFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFn
ZUFyZWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVh
LmNwcAkocmV2aXNpb24gNDUwMDMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJl
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDc5ICszMyw1NCBAQAogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0j
aW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBh
Z2VHcm91cC5oIgotI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlN0b3Jh
Z2VFdmVudC5oIgotI2luY2x1ZGUgIlN1ZGRlblRlcm1pbmF0aW9uLmgiCisjaW5jbHVkZSAiU3Rv
cmFnZUFyZWFTeW5jLmgiCisjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotLy8gSWYgdGhlIExvY2FsU3RvcmFnZUFyZWEgdW5kZXJnb2VzIHJh
cGlkIGNoYW5nZXMsIGRvbid0IHN5bmMgZWFjaCBjaGFuZ2UgdG8gZGlzay4KLS8vIEluc3RlYWQs
IHF1ZXVlIHVwIGEgYmF0Y2ggb2YgaXRlbXMgdG8gc3luYyBhbmQgYWN0dWFsbHkgZG8gdGhlIHN5
bmMgYXQgdGhlIGZvbGxvd2luZyBpbnRlcnZhbC4KLXN0YXRpYyBjb25zdCBkb3VibGUgTG9jYWxT
dG9yYWdlU3luY0ludGVydmFsID0gMS4wOwotCi1Mb2NhbFN0b3JhZ2VBcmVhOjpMb2NhbFN0b3Jh
Z2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5h
Z2VyPiBzeW5jTWFuYWdlcikKLSAgICA6IFN0b3JhZ2VBcmVhKG9yaWdpbikKLSAgICAsIG1fc3lu
Y1RpbWVyKHRoaXMsICZMb2NhbFN0b3JhZ2VBcmVhOjpzeW5jVGltZXJGaXJlZCkKLSAgICAsIG1f
aXRlbXNDbGVhcmVkKGZhbHNlKQotICAgICwgbV9maW5hbFN5bmNTY2hlZHVsZWQoZmFsc2UpCi0g
ICAgLCBtX3N5bmNNYW5hZ2VyKHN5bmNNYW5hZ2VyKQotICAgICwgbV9jbGVhckl0ZW1zV2hpbGVT
eW5jaW5nKGZhbHNlKQotICAgICwgbV9zeW5jU2NoZWR1bGVkKGZhbHNlKQotICAgICwgbV9pbXBv
cnRDb21wbGV0ZShmYWxzZSkKK1Bhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gTG9jYWxTdG9y
YWdlQXJlYTo6Y3JlYXRlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKIHsKLSAgICBpZiAoIW1fc3luY01hbmFnZXIgfHwg
IW1fc3luY01hbmFnZXItPnNjaGVkdWxlSW1wb3J0KHRoaXMpKQotICAgICAgICBtX2ltcG9ydENv
bXBsZXRlID0gdHJ1ZTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZUFyZWEo
b3JpZ2luLCBzeW5jTWFuYWdlcikpOwogfQogCi1Mb2NhbFN0b3JhZ2VBcmVhOjp+TG9jYWxTdG9y
YWdlQXJlYSgpCitMb2NhbFN0b3JhZ2VBcmVhOjpMb2NhbFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikK
KyAgICA6IFN0b3JhZ2VBcmVhKG9yaWdpbikKKyAgICAsIG1fc3RvcmFnZUFyZWFTeW5jKFN0b3Jh
Z2VBcmVhU3luYzo6Y3JlYXRlKHN5bmNNYW5hZ2VyLCB0aGlzKSkKKyAgICAsIG1fc3RvcmFnZVN5
bmNNYW5hZ2VyKHN5bmNNYW5hZ2VyKQogewotICAgIEFTU0VSVCghbV9zeW5jVGltZXIuaXNBY3Rp
dmUoKSk7CiB9CiAKIHZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c2NoZWR1bGVGaW5hbFN5bmMoKQog
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX3N5bmNNYW5hZ2VyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zeW5jVGltZXIuaXNBY3RpdmUoKSkKLSAgICAg
ICAgbV9zeW5jVGltZXIuc3RvcCgpOwotICAgIGVsc2UgewotICAgICAgICAvLyBUaGUgZm9sbG93
aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRvIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uIGlu
IHRoZQotICAgICAgICAvLyBzeW5jVGltZXJGaXJlZCBmdW5jdGlvbi4KLSAgICAgICAgZGlzYWJs
ZVN1ZGRlblRlcm1pbmF0aW9uKCk7Ci0gICAgfQotICAgIHN5bmNUaW1lckZpcmVkKCZtX3N5bmNU
aW1lcik7Ci0gICAgbV9maW5hbFN5bmNTY2hlZHVsZWQgPSB0cnVlOworICAgIG1fc3RvcmFnZUFy
ZWFTeW5jLT5zY2hlZHVsZUZpbmFsU3luYygpOwogfQogCiB2b2lkIExvY2FsU3RvcmFnZUFyZWE6
Oml0ZW1DaGFuZ2VkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCiB7Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLQotICAgIHNjaGVkdWxlSXRlbUZvclN5bmMoa2V5LCBuZXdWYWx1
ZSk7CisgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxlSXRlbUZvclN5bmMoa2V5LCBuZXdW
YWx1ZSk7CiAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUs
IHNvdXJjZUZyYW1lKTsKIH0KIAogdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjppdGVtUmVtb3ZlZChj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgRnJhbWUqIHNvdXJjZUZy
YW1lKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBzY2hlZHVsZUl0ZW1G
b3JTeW5jKGtleSwgU3RyaW5nKCkpOworICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0
ZW1Gb3JTeW5jKGtleSwgU3RyaW5nKCkpOwogICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwg
b2xkVmFsdWUsIFN0cmluZygpLCBzb3VyY2VGcmFtZSk7CiB9CiAKIHZvaWQgTG9jYWxTdG9yYWdl
QXJlYTo6YXJlYUNsZWFyZWQoRnJhbWUqIHNvdXJjZUZyYW1lKQogewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0KLSAgICBzY2hlZHVsZUNsZWFyKCk7CisgICAgbV9zdG9yYWdlQXJlYVN5
bmMtPnNjaGVkdWxlQ2xlYXIoKTsKICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChTdHJpbmcoKSwg
U3RyaW5nKCksIFN0cmluZygpLCBzb3VyY2VGcmFtZSk7CiB9CiAKK3ZvaWQgTG9jYWxTdG9yYWdl
QXJlYTo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QKK3sKKyAgICBtX3N0b3JhZ2VB
cmVhU3luYy0+YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7Cit9CisKIHZvaWQgTG9jYWxTdG9y
YWdlQXJlYTo6ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFt
ZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMTMxLDI0NyArMTA2LDYgQEAg
dm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdgogICAgICAgICBmcmFtZXNb
aV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJj
ZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VGcmFtZS0+ZG9tV2luZG93
KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPmxvY2FsU3RvcmFnZSgpKSk7CiB9CiAKLXZvaWQg
TG9jYWxTdG9yYWdlQXJlYTo6c2NoZWR1bGVJdGVtRm9yU3luYyhjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAg
IEFTU0VSVCghbV9maW5hbFN5bmNTY2hlZHVsZWQpOwotCi0gICAgbV9jaGFuZ2VkSXRlbXMuc2V0
KGtleSwgdmFsdWUpOwotICAgIGlmICghbV9zeW5jVGltZXIuaXNBY3RpdmUoKSkgewotICAgICAg
ICBtX3N5bmNUaW1lci5zdGFydE9uZVNob3QoTG9jYWxTdG9yYWdlU3luY0ludGVydmFsKTsKLQot
ICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRvIGVuYWJs
ZVN1ZGRlblRlcm1pbmF0aW9uIGluIHRoZQotICAgICAgICAvLyBzeW5jVGltZXJGaXJlZCBmdW5j
dGlvbi4KLSAgICAgICAgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7Ci0gICAgfQotfQotCi12
b2lkIExvY2FsU3RvcmFnZUFyZWE6OnNjaGVkdWxlQ2xlYXIoKQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2ZpbmFsU3luY1NjaGVkdWxlZCk7Ci0KLSAgICBt
X2NoYW5nZWRJdGVtcy5jbGVhcigpOwotICAgIG1faXRlbXNDbGVhcmVkID0gdHJ1ZTsKLSAgICBp
ZiAoIW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgbV9zeW5jVGltZXIuc3RhcnRP
bmVTaG90KExvY2FsU3RvcmFnZVN5bmNJbnRlcnZhbCk7Ci0KLSAgICAgICAgLy8gVGhlIGZvbGxv
d2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbiBp
biB0aGUKLSAgICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCi0gICAgICAgIGRpc2Fi
bGVTdWRkZW5UZXJtaW5hdGlvbigpOwotICAgIH0KLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VBcmVh
OjpzeW5jVGltZXJGaXJlZChUaW1lcjxMb2NhbFN0b3JhZ2VBcmVhPiopCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fc3luY01hbmFnZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBpdCA9IG1fY2hhbmdl
ZEl0ZW1zLmJlZ2luKCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGVu
ZCA9IG1fY2hhbmdlZEl0ZW1zLmVuZCgpOwotICAgIAotICAgIHsKLSAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fc3luY0xvY2spOwotCi0gICAgICAgIGlmIChtX2l0ZW1zQ2xlYXJlZCkgewot
ICAgICAgICAgICAgbV9pdGVtc1BlbmRpbmdTeW5jLmNsZWFyKCk7Ci0gICAgICAgICAgICBtX2Ns
ZWFySXRlbXNXaGlsZVN5bmNpbmcgPSB0cnVlOwotICAgICAgICAgICAgbV9pdGVtc0NsZWFyZWQg
PSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5bmMuc2V0KGl0LT5maXJzdC5jb3B5KCksIGl0LT5z
ZWNvbmQuY29weSgpKTsKLQotICAgICAgICBpZiAoIW1fc3luY1NjaGVkdWxlZCkgewotICAgICAg
ICAgICAgbV9zeW5jU2NoZWR1bGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgLy8gVGhlIGZvbGxv
d2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbiBp
biB0aGUKLSAgICAgICAgICAgIC8vIHBlcmZvcm1TeW5jIGZ1bmN0aW9uLgotICAgICAgICAgICAg
ZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7Ci0KLSAgICAgICAgICAgIG1fc3luY01hbmFnZXIt
PnNjaGVkdWxlU3luYyh0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBmb2xs
b3dpbmcgaXMgYmFsYW5jZWQgYnkgdGhlIGNhbGxzIHRvIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlv
biBpbiB0aGUKLSAgICAvLyBzY2hlZHVsZUl0ZW1Gb3JTeW5jLCBzY2hlZHVsZUNsZWFyLCBhbmQg
c2NoZWR1bGVGaW5hbFN5bmMgZnVuY3Rpb25zLgotICAgIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9u
KCk7Ci0KLSAgICBtX2NoYW5nZWRJdGVtcy5jbGVhcigpOwotfQotCi12b2lkIExvY2FsU3RvcmFn
ZUFyZWE6OnBlcmZvcm1JbXBvcnQoKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwot
ICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7Ci0gICAgaWYgKCFtX3N5bmNNYW5hZ2Vy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1fc3lu
Y01hbmFnZXItPmZ1bGxEYXRhYmFzZUZpbGVuYW1lKHNlY3VyaXR5T3JpZ2luKCkpOwotCi0gICAg
aWYgKGRhdGFiYXNlRmlsZW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmls
ZW5hbWUgZm9yIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgaXMgZW1wdHkgLSBjYW5ub3Qgb3BlbiBm
b3IgcGVyc2lzdGVudCBzdG9yYWdlIik7Ci0gICAgICAgIG1hcmtJbXBvcnRlZCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4oZGF0YWJhc2VGaWxl
bmFtZSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZSBmaWxl
ICVzIGZvciBsb2NhbCBzdG9yYWdlIiwgZGF0YWJhc2VGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsK
LSAgICAgICAgbWFya0ltcG9ydGVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT
IEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIFRF
WFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKSkgewotICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBjcmVhdGUgdGFibGUgSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7Ci0gICAg
ICAgIG1hcmtJbXBvcnRlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFNR
TGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIGtleSwgdmFsdWUgRlJPTSBJ
dGVtVGFibGUiKTsKLSAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNlbGVjdCBpdGVtcyBmcm9tIEl0ZW1UYWJsZSBm
b3IgbG9jYWwgc3RvcmFnZSIpOwotICAgICAgICBtYXJrSW1wb3J0ZWQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBpdGVtTWFwOwot
Ci0gICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKLSAgICB3aGlsZSAocmVzdWx0ID09IFNR
TFJlc3VsdFJvdykgewotICAgICAgICBpdGVtTWFwLnNldChxdWVyeS5nZXRDb2x1bW5UZXh0KDAp
LCBxdWVyeS5nZXRDb2x1bW5UZXh0KDEpKTsKLSAgICAgICAgcmVzdWx0ID0gcXVlcnkuc3RlcCgp
OwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICBM
T0dfRVJST1IoIkVycm9yIHJlYWRpbmcgaXRlbXMgZnJvbSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0
b3JhZ2UiKTsKLSAgICAgICAgbWFya0ltcG9ydGVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsKLSAgICAKLSAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBpdGVtTWFwLmJlZ2luKCk7Ci0gICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGVuZCA9IGl0ZW1NYXAuZW5kKCk7Ci0g
ICAgCi0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaW1wb3J0SXRlbShpdC0+
Zmlyc3QsIGl0LT5zZWNvbmQpOwotICAgIAotICAgIG1faW1wb3J0Q29tcGxldGUgPSB0cnVlOwot
ICAgIG1faW1wb3J0Q29uZGl0aW9uLnNpZ25hbCgpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZUFy
ZWE6Om1hcmtJbXBvcnRlZCgpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsKLSAgICBtX2ltcG9ydENvbXBsZXRl
ID0gdHJ1ZTsKLSAgICBtX2ltcG9ydENvbmRpdGlvbi5zaWduYWwoKTsKLX0KLQotLy8gRklYTUU6
IEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCBhbGxvdyB1c2Ugb2YgbG9jYWxTdG9yYWdlIHdoaWxl
IGl0J3MgaW1wb3J0aW5nICh3aGVuIHNhZmUgdG8gZG8gc28pLgotLy8gQmxvY2tpbmcgZXZlcnl0
aGluZyB1bnRpbCB0aGUgaW1wb3J0IGlzIGNvbXBsZXRlIGlzIGJ5IGZhciB0aGUgc2ltcGxlc3Qg
YW5kIHNhZmVzdCB0aGluZyB0byBkbywgYnV0Ci0vLyB0aGVyZSBpcyBjZXJ0YWlubHkgcm9vbSBm
b3Igc2FmZSBvcHRpbWl6YXRpb246IEtleS9sZW5ndGggd2lsbCBuZXZlciBiZSBhYmxlIHRvIG1h
a2UgdXNlIG9mIHN1Y2ggYW4KLS8vIG9wdGltaXphdGlvbiAoc2luY2UgdGhlIG9yZGVyIG9mIGl0
ZXJhdGlvbiBjYW4gY2hhbmdlIGFzIGl0ZW1zIGFyZSBiZWluZyBhZGRlZCkuIEdldCBjYW4gcmV0
dXJuIGFueQotLy8gaXRlbSBjdXJyZW50bHkgaW4gdGhlIG1hcC4gR2V0L3JlbW92ZSBjYW4gd29y
ayB3aGV0aGVyIG9yIG5vdCBpdCdzIGluIHRoZSBtYXAsIGJ1dCB3ZSdsbCBuZWVkIGEgbGlzdAot
Ly8gb2YgaXRlbXMgdGhlIGltcG9ydCBzaG91bGQgbm90IG92ZXJ3cml0ZS4gQ2xlYXIgY2FuIGFs
c28gd29yaywgYnV0IGl0J2xsIG5lZWQgdG8ga2lsbCB0aGUgaW1wb3J0Ci0vLyBqb2IgZmlyc3Qu
Ci12b2lkIExvY2FsU3RvcmFnZUFyZWE6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIEZhc3QgcGF0aCB0byBh
dm9pZCBsb2NraW5nLgotICAgIGlmIChtX2ltcG9ydENvbXBsZXRlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsKLSAgICB3aGlsZSAoIW1f
aW1wb3J0Q29tcGxldGUpCi0gICAgICAgIG1faW1wb3J0Q29uZGl0aW9uLndhaXQobV9pbXBvcnRM
b2NrKTsKLSAgICBBU1NFUlQobV9pbXBvcnRDb21wbGV0ZSk7Ci19Ci0KLXZvaWQgTG9jYWxTdG9y
YWdlQXJlYTo6c3luYyhib29sIGNsZWFySXRlbXMsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+JiBpdGVtcykKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICgh
bV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIGNs
ZWFyIGZsYWcgaXMgc2V0LCB0aGVuIHdlIGNsZWFyIGFsbCBpdGVtcyBvdXQgYmVmb3JlIHdlIHdy
aXRlIGFueSBuZXcgb25lcyBpbi4KLSAgICBpZiAoY2xlYXJJdGVtcykgewotICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgY2xlYXIobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSIpOwot
ICAgICAgICBpZiAoY2xlYXIucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGNsZWFyIHN0YXRlbWVudCAtIGNhbm5vdCB3
cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGludCByZXN1bHQgPSBjbGVhci5zdGVwKCk7Ci0g
ICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gY2xlYXIgYWxsIGl0ZW1zIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFi
YXNlIC0gJWkiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8g
SXRlbVRhYmxlIFZBTFVFUyAoPywgPykiKTsKLSAgICBpZiAoaW5zZXJ0LnByZXBhcmUoKSAhPSBT
UUxSZXN1bHRPaykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGluc2Vy
dCBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU1FMaXRlU3RhdGVtZW50IHJlbW92ZShtX2Rh
dGFiYXNlLCAiREVMRVRFIEZST00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Iik7Ci0gICAgaWYgKHJl
bW92ZS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gcHJlcGFyZSBkZWxldGUgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0
b3JhZ2UgZGF0YWJhc2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpdGVtcy5lbmQoKTsKLQotICAg
IGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXRlbXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIC8vIEJhc2VkIG9uIHRoZSBudWxs
LW5lc3Mgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgZGVjaWRlIHdoZXRoZXIgdGhpcyBpcyBhbiBp
bnNlcnQgb3IgYSBkZWxldGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCYgcXVlcnkgPSBpdC0+
c2Vjb25kLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OyAgICAgICAgCi0KLSAgICAgICAgcXVl
cnkuYmluZFRleHQoMSwgaXQtPmZpcnN0KTsKLQotICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIGFy
Z3VtZW50IGlzIG5vbi1udWxsLCB3ZSdyZSBkb2luZyBhbiBpbnNlcnQsIHNvIGJpbmQgaXQgYXMg
dGhlIHZhbHVlLiAKLSAgICAgICAgaWYgKCFpdC0+c2Vjb25kLmlzTnVsbCgpKQotICAgICAgICAg
ICAgcXVlcnkuYmluZFRleHQoMiwgaXQtPnNlY29uZCk7Ci0KLSAgICAgICAgaW50IHJlc3VsdCA9
IHF1ZXJ5LnN0ZXAoKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7Ci0g
ICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgaXRlbSBpbiB0aGUgbG9jYWwg
c3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcXVlcnkucmVzZXQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTG9jYWxT
dG9yYWdlQXJlYTo6cGVyZm9ybVN5bmMoKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgYm9vbCBjbGVhckl0ZW1zOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGl0
ZW1zOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3luY0xvY2spOwotCi0g
ICAgICAgIEFTU0VSVChtX3N5bmNTY2hlZHVsZWQpOwotCi0gICAgICAgIGNsZWFySXRlbXMgPSBt
X2NsZWFySXRlbXNXaGlsZVN5bmNpbmc7Ci0gICAgICAgIG1faXRlbXNQZW5kaW5nU3luYy5zd2Fw
KGl0ZW1zKTsKLQotICAgICAgICBtX2NsZWFySXRlbXNXaGlsZVN5bmNpbmcgPSBmYWxzZTsKLSAg
ICAgICAgbV9zeW5jU2NoZWR1bGVkID0gZmFsc2U7Ci0gICAgfQotCi0gICAgc3luYyhjbGVhckl0
ZW1zLCBpdGVtcyk7Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBj
YWxsIHRvIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbiBpbiB0aGUKLSAgICAvLyBzeW5jVGltZXJG
aXJlZCBmdW5jdGlvbi4KLSAgICBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmgJKHJldmlzaW9uIDQ1MDAzKQorKysgV2ViQ29y
ZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjIgKzI4
LDE2IEBACiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKLSNpbmNsdWRlICJTUUxpdGVEYXRh
YmFzZS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCi0jaW5jbHVkZSAiU3RyaW5nSGFzaC5o
IgotI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAorICAg
IGNsYXNzIFN0b3JhZ2VBcmVhU3luYzsKICAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7CiAg
ICAgCiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlQXJlYSA6IHB1YmxpYyBTdG9yYWdlQXJlYSB7CiAg
ICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5Mb2NhbFN0b3JhZ2VBcmVhKCk7Ci0KLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gY3JlYXRlKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikg
eyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZUFyZWEob3JpZ2luLCBzeW5jTWFuYWdl
cikpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGNyZWF0
ZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4g
c3luY01hbmFnZXIpOwogCiAgICAgICAgIHZvaWQgc2NoZWR1bGVGaW5hbFN5bmMoKTsKIApAQCAt
NTMsNDIgKzQ3LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lk
IGl0ZW1DaGFuZ2VkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgaXRlbVJlbW92ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xk
VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhcmVhQ2xl
YXJlZChGcmFtZSogc291cmNlRnJhbWUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYmxvY2tVbnRp
bEltcG9ydENvbXBsZXRlKCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBzY2hlZHVsZUl0ZW1Gb3JT
eW5jKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICAgICAgdm9p
ZCBzY2hlZHVsZUNsZWFyKCk7CiAgICAgICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3
VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CiAKLSAgICAgICAgVGltZXI8TG9jYWxTdG9yYWdl
QXJlYT4gbV9zeW5jVGltZXI7ICAgICAgICAKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gbV9jaGFuZ2VkSXRlbXM7Ci0gICAgICAgIGJvb2wgbV9pdGVtc0NsZWFyZWQ7Ci0gICAgICAg
IAotICAgICAgICBib29sIG1fZmluYWxTeW5jU2NoZWR1bGVkOwotCi0gICAgICAgIFJlZlB0cjxT
dG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7Ci0KLSAgICAgICAgLy8gVGhlIGRhdGFi
YXNlIGhhbmRsZSB3aWxsIG9ubHkgZXZlciBiZSBvcGVuZWQgYW5kIHVzZWQgb24gdGhlIGJhY2tn
cm91bmQgdGhyZWFkLgotICAgICAgICBTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOwotCi0gICAg
Ly8gVGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBzdWJqZWN0IHRvIHRocmVhZCBzeW5jaHJvbml6
YXRpb24gaXNzdWVzLgotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gQ2FsbGVkIGZyb20gdGhlIGJh
Y2tncm91bmQgdGhyZWFkCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtSW1wb3J0KCk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtU3luYygpOwotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgdm9pZCBzeW5jVGltZXJGaXJlZChUaW1lcjxMb2NhbFN0b3JhZ2VBcmVhPiopOwotICAgICAg
ICB2b2lkIHN5bmMoYm9vbCBjbGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYgaXRlbXMpOwotCi0gICAgICAgIE11dGV4IG1fc3luY0xvY2s7Ci0gICAgICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IG1faXRlbXNQZW5kaW5nU3luYzsKLSAgICAgICAgYm9vbCBtX2NsZWFy
SXRlbXNXaGlsZVN5bmNpbmc7Ci0gICAgICAgIGJvb2wgbV9zeW5jU2NoZWR1bGVkOwotCi0gICAg
ICAgIG11dGFibGUgTXV0ZXggbV9pbXBvcnRMb2NrOwotICAgICAgICBtdXRhYmxlIFRocmVhZENv
bmRpdGlvbiBtX2ltcG9ydENvbmRpdGlvbjsKLSAgICAgICAgbXV0YWJsZSBib29sIG1faW1wb3J0
Q29tcGxldGU7Ci0gICAgICAgIHZvaWQgbWFya0ltcG9ydGVkKCk7Ci0gICAgICAgIHZvaWQgYmxv
Y2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3Q7CisgICAgICAgIFJlZlB0cjxTdG9yYWdlQXJl
YVN5bmM+IG1fc3RvcmFnZUFyZWFTeW5jOworICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5h
Z2VyPiBtX3N0b3JhZ2VTeW5jTWFuYWdlcjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCShyZXZpc2lvbiA0NTAw
MikKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksMTIgKzI5LDEyIEBACiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogCiAjaW5jbHVk
ZSAiTG9jYWxTdG9yYWdlLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgogI2luY2x1
ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRh
c2soVHlwZSB0eXBlLCBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCitMb2NhbFN0
b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlwZSwgUGFzc1JlZlB0cjxTdG9yYWdl
QXJlYVN5bmM+IGFyZWEpCiAgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fYXJlYShhcmVhKQog
ewpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oCShyZXZpc2lvbiA0NTAwMikKKysr
IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDI1ICszNCwyNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBMb2NhbFN0
b3JhZ2VBcmVhOworICAgIGNsYXNzIFN0b3JhZ2VBcmVhU3luYzsKICAgICBjbGFzcyBMb2NhbFN0
b3JhZ2VUaHJlYWQ7CiAKKyAgICAvLyBGSVhNRTogUmVuYW1lIHRoaXMgY2xhc3MgdG8gU3RvcmFn
ZVRhc2sKICAgICBjbGFzcyBMb2NhbFN0b3JhZ2VUYXNrIDogcHVibGljIFRocmVhZFNhZmVTaGFy
ZWQ8TG9jYWxTdG9yYWdlVGFzaz4gewogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBUeXBlIHsg
QXJlYUltcG9ydCwgQXJlYVN5bmMsIFRlcm1pbmF0ZVRocmVhZCB9OwogCi0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZUltcG9ydChQYXNzUmVmUHRyPExv
Y2FsU3RvcmFnZUFyZWE+IGFyZWEpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VU
YXNrKEFyZWFJbXBvcnQsIGFyZWEpKTsgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2VUYXNrPiBjcmVhdGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJl
YSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYVN5bmMsIGFyZWEp
KTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVJ
bXBvcnQoUGFzc1JlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IGFyZWEpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBMb2NhbFN0b3JhZ2VUYXNrKEFyZWFJbXBvcnQsIGFyZWEpKTsgfQorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVTeW5jKFBhc3NSZWZQdHI8U3Rv
cmFnZUFyZWFTeW5jPiBhcmVhKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlVGFz
ayhBcmVhU3luYywgYXJlYSkpOyB9CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3Rv
cmFnZVRhc2s+IGNyZWF0ZVRlcm1pbmF0ZShQYXNzUmVmUHRyPExvY2FsU3RvcmFnZVRocmVhZD4g
dGhyZWFkKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlVGFzayhUZXJtaW5hdGVU
aHJlYWQsIHRocmVhZCkpOyB9CiAKICAgICAgICAgdm9pZCBwZXJmb3JtVGFzaygpOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlLCBQYXNzUmVmUHRyPExvY2Fs
U3RvcmFnZUFyZWE+KTsKKyAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlLCBQYXNzUmVmUHRy
PFN0b3JhZ2VBcmVhU3luYz4pOwogICAgICAgICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUsIFBhc3NS
ZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPik7CiAKICAgICAgICAgVHlwZSBtX3R5cGU7Ci0gICAg
ICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBtX2FyZWE7CisgICAgICAgIFJlZlB0cjxTdG9y
YWdlQXJlYVN5bmM+IG1fYXJlYTsKICAgICAgICAgUmVmUHRyPExvY2FsU3RvcmFnZVRocmVhZD4g
bV90aHJlYWQ7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRo
cmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVh
ZC5jcHAJKHJldmlzaW9uIDQ1MDAyKQorKysgV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRo
cmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAKICNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCiAKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJMb2NhbFN0
b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGFzay5oIgorI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhU3luYy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTg3LDEzICs4Nywx
MyBAQCB2b2lkKiBMb2NhbFN0b3JhZ2VUaHJlYWQ6OmxvY2FsU3RvcmFnZVRoCiAgICAgcmV0dXJu
IDA7CiB9CiAKLXZvaWQgTG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZUltcG9ydChQYXNzUmVm
UHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCit2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2No
ZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IGFyZWEpCiB7CiAgICAgQVNT
RVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOwogICAgIG1fcXVldWUuYXBwZW5k
KExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZUltcG9ydChhcmVhKSk7CiB9CiAKLXZvaWQgTG9jYWxT
dG9yYWdlVGhyZWFkOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBh
cmVhKQordm9pZCBMb2NhbFN0b3JhZ2VUaHJlYWQ6OnNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhU3luYz4gYXJlYSkKIHsKICAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYg
bV90aHJlYWRJRCk7CiAgICAgbV9xdWV1ZS5hcHBlbmQoTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRl
U3luYyhhcmVhKSk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5oCShyZXZp
c2lvbiA0NTAwMikKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsMTcgKzM1LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
ICAgIGNsYXNzIExvY2FsU3RvcmFnZUFyZWE7CisgICAgY2xhc3MgU3RvcmFnZUFyZWFTeW5jOwog
ICAgIGNsYXNzIExvY2FsU3RvcmFnZVRhc2s7CiAKKyAgICAvLyBGSVhNRTogUmVuYW1lIHRoaXMg
Y2xhc3MgdG8gU3RvcmFnZVRocmVhZAogICAgIGNsYXNzIExvY2FsU3RvcmFnZVRocmVhZCA6IHB1
YmxpYyBUaHJlYWRTYWZlU2hhcmVkPExvY2FsU3RvcmFnZVRocmVhZD4gewogICAgIHB1YmxpYzoK
ICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiBjcmVhdGUoKTsK
IAogICAgICAgICBib29sIHN0YXJ0KCk7CiAKLSAgICAgICAgdm9pZCBzY2hlZHVsZUltcG9ydChQ
YXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKLSAgICAgICAgdm9pZCBzY2hlZHVsZVN5bmMo
UGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPik7CisgICAgICAgIHZvaWQgc2NoZWR1bGVJbXBv
cnQoUGFzc1JlZlB0cjxTdG9yYWdlQXJlYVN5bmM+KTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZVN5
bmMoUGFzc1JlZlB0cjxTdG9yYWdlQXJlYVN5bmM+KTsKIAogICAgICAgICAvLyBDYWxsZWQgZnJv
bSB0aGUgbWFpbiB0aHJlYWQgdG8gc3luY2hyb25vdXNseSBzaHV0IGRvd24gdGhpcyB0aHJlYWQK
ICAgICAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9u
U3RvcmFnZUFyZWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3Rv
cmFnZUFyZWEuY3BwCShyZXZpc2lvbiA0NTAwMikKKysrIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9u
U3RvcmFnZUFyZWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSwxMCBAQCB2b2lkIFNl
c3Npb25TdG9yYWdlQXJlYTo6YXJlYUNsZWFyZWQoRnJhCiAgICAgZGlzcGF0Y2hTdG9yYWdlRXZl
bnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgc291cmNlRnJhbWUpOwogfQogCit2b2lk
IFNlc3Npb25TdG9yYWdlQXJlYTo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QKK3sK
K30KKwogdm9pZCBTZXNzaW9uU3RvcmFnZUFyZWE6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1Zh
bHVlLCBGcmFtZSogc291cmNlRnJhbWUpCiB7CiAgICAgLy8gRm9yIFNlc3Npb25TdG9yYWdlIGV2
ZW50cywgZWFjaCBmcmFtZSBpbiB0aGUgcGFnZSdzIGZyYW1ldHJlZSB3aXRoIHRoZSBzYW1lIG9y
aWdpbiBhcyB0aGlzIFN0b3JhZ2VBcmVhIG5lZWRzIHRvIGJlIG5vdGlmaWVkIG9mIHRoZSBjaGFu
Z2UKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZUFyZWEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmgJKHJldmlzaW9uIDQ1MDAy
KQorKysgV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw4ICszOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlc3Npb25TdG9yYWdlQXJlYT4gY3JlYXRlKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIFBhZ2UqIHBhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXNzaW9u
U3RvcmFnZUFyZWEob3JpZ2luLCBwYWdlKSk7IH0KICAgICAgICAgUGFzc1JlZlB0cjxTZXNzaW9u
U3RvcmFnZUFyZWE+IGNvcHkoU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgIFBhZ2UqIHBhZ2UoKSB7IHJldHVybiBtX3BhZ2U7IH0KIAogICAgIHByaXZh
dGU6CiAgICAgICAgIFNlc3Npb25TdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFBhZ2UqKTsK
QEAgLTQ4LDYgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZv
aWQgaXRlbUNoYW5nZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUs
IGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBpdGVtUmVtb3ZlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBv
bGRWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGFyZWFD
bGVhcmVkKEZyYW1lKiBzb3VyY2VGcmFtZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBibG9ja1Vu
dGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGRpc3BhdGNoU3RvcmFn
ZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBT
dHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpOwogICAgICAgICAKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlQXJlYS5oCShyZXZpc2lvbiA0NTAwMikKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlQXJlYS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBTdG9yYWdlTWFwOwogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNv
ZGU7CiAKLSAgICBjbGFzcyBTdG9yYWdlQXJlYSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0b3JhZ2VB
cmVhPiB7CisgICAgY2xhc3MgU3RvcmFnZUFyZWEgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxT
dG9yYWdlQXJlYT4gewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+U3RvcmFnZUFyZWEo
KTsKICAgICAgICAgCkBAIC01NiwyMCArNTYsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0OwogCisgICAgICAg
IC8vIENvdWxkIGJlIGNhbGxlZCBmcm9tIGEgYmFja2dyb3VuZCB0aHJlYWQuCisgICAgICAgIHZv
aWQgaW1wb3J0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAg
ICAgICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIHsgcmV0dXJuIG1fc2VjdXJp
dHlPcmlnaW4uZ2V0KCk7IH0KIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgU3RvcmFnZUFyZWEo
U2VjdXJpdHlPcmlnaW4qKTsKICAgICAgICAgU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBT
dG9yYWdlQXJlYSopOwotICAgICAgICAgICAgICAgIAotICAgICAgICAvLyBUaGlzIGlzIG1lYW50
IHRvIGJlIGNhbGxlZCBmcm9tIGEgYmFja2dyb3VuZCB0aHJlYWQgZm9yIExvY2FsU3RvcmFnZUFy
ZWEncyBiYWNrZ3JvdW5kIHRocmVhZCBpbXBvcnQgcHJvY2VkdXJlLgotICAgICAgICB2b2lkIGlt
cG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCB2b2lkIGl0ZW1DaGFuZ2VkKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFt
ZSogc291cmNlRnJhbWUpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGl0ZW1SZW1vdmVkKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBGcmFtZSogc291cmNlRnJh
bWUpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGFyZWFDbGVhcmVkKEZyYW1lKiBzb3VyY2VG
cmFtZSkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRl
KCkgY29uc3QgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29tcGxl
dGUoKSBjb25zdCA9IDA7CiAKICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3Vy
aXR5T3JpZ2luOwogICAgICAgICBSZWZQdHI8U3RvcmFnZU1hcD4gbV9zdG9yYWdlTWFwOwpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAJKHJldmlzaW9uIDQ1MDAzKQkoZnJvbSBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5jcHA6NDUwMDMpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgorCisjaWYg
RU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRP
TVdpbmRvdy5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgiCisjaW5j
bHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0
YXRlbWVudC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VFdmVudC5oIgorI2luY2x1ZGUgIlN1ZGRlblRl
cm1pbmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gSWYgdGhlIExvY2FsU3Rv
cmFnZUFyZWEgdW5kZXJnb2VzIHJhcGlkIGNoYW5nZXMsIGRvbid0IHN5bmMgZWFjaCBjaGFuZ2Ug
dG8gZGlzay4KKy8vIEluc3RlYWQsIHF1ZXVlIHVwIGEgYmF0Y2ggb2YgaXRlbXMgdG8gc3luYyBh
bmQgYWN0dWFsbHkgZG8gdGhlIHN5bmMgYXQgdGhlIGZvbGxvd2luZyBpbnRlcnZhbC4KK3N0YXRp
YyBjb25zdCBkb3VibGUgTG9jYWxTdG9yYWdlU3luY0ludGVydmFsID0gMS4wOworCitMb2NhbFN0
b3JhZ2VBcmVhOjpMb2NhbFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NS
ZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKKyAgICA6IFN0b3JhZ2VBcmVh
KG9yaWdpbikKKyAgICAsIG1fc3luY1RpbWVyKHRoaXMsICZMb2NhbFN0b3JhZ2VBcmVhOjpzeW5j
VGltZXJGaXJlZCkKKyAgICAsIG1faXRlbXNDbGVhcmVkKGZhbHNlKQorICAgICwgbV9maW5hbFN5
bmNTY2hlZHVsZWQoZmFsc2UpCisgICAgLCBtX3N5bmNNYW5hZ2VyKHN5bmNNYW5hZ2VyKQorICAg
ICwgbV9jbGVhckl0ZW1zV2hpbGVTeW5jaW5nKGZhbHNlKQorICAgICwgbV9zeW5jU2NoZWR1bGVk
KGZhbHNlKQorICAgICwgbV9pbXBvcnRDb21wbGV0ZShmYWxzZSkKK3sKKyAgICBpZiAoIW1fc3lu
Y01hbmFnZXIgfHwgIW1fc3luY01hbmFnZXItPnNjaGVkdWxlSW1wb3J0KHRoaXMpKQorICAgICAg
ICBtX2ltcG9ydENvbXBsZXRlID0gdHJ1ZTsKK30KKworTG9jYWxTdG9yYWdlQXJlYTo6fkxvY2Fs
U3RvcmFnZUFyZWEoKQoreworICAgIEFTU0VSVCghbV9zeW5jVGltZXIuaXNBY3RpdmUoKSk7Cit9
CisKK3ZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c2NoZWR1bGVGaW5hbFN5bmMoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX3N5bmNNYW5hZ2VyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9zeW5jVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9zeW5j
VGltZXIuc3RvcCgpOworICAgIGVsc2UgeworICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJh
bGFuY2VkIGJ5IHRoZSBjYWxsIHRvIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uIGluIHRoZQorICAg
ICAgICAvLyBzeW5jVGltZXJGaXJlZCBmdW5jdGlvbi4KKyAgICAgICAgZGlzYWJsZVN1ZGRlblRl
cm1pbmF0aW9uKCk7CisgICAgfQorICAgIHN5bmNUaW1lckZpcmVkKCZtX3N5bmNUaW1lcik7Cisg
ICAgbV9maW5hbFN5bmNTY2hlZHVsZWQgPSB0cnVlOworfQorCit2b2lkIExvY2FsU3RvcmFnZUFy
ZWE6Oml0ZW1DaGFuZ2VkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVl
LCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHNjaGVkdWxlSXRlbUZvclN5bmMoa2V5LCBuZXdW
YWx1ZSk7CisgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUs
IHNvdXJjZUZyYW1lKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjppdGVtUmVtb3ZlZChj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgRnJhbWUqIHNvdXJjZUZy
YW1lKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBzY2hlZHVsZUl0ZW1G
b3JTeW5jKGtleSwgU3RyaW5nKCkpOworICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xk
VmFsdWUsIFN0cmluZygpLCBzb3VyY2VGcmFtZSk7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlQXJl
YTo6YXJlYUNsZWFyZWQoRnJhbWUqIHNvdXJjZUZyYW1lKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisKKyAgICBzY2hlZHVsZUNsZWFyKCk7CisgICAgZGlzcGF0Y2hTdG9yYWdlRXZl
bnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgc291cmNlRnJhbWUpOworfQorCit2b2lk
IExvY2FsU3RvcmFnZUFyZWE6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSog
c291cmNlRnJhbWUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIFBhZ2Uq
IHBhZ2UgPSBzb3VyY2VGcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gTmVlZCB0byBjb3B5IGFsbCByZWxldmFudCBmcmFtZXMgZnJvbSBldmVy
eSBwYWdlIHRvIGEgdmVjdG9yLCBzaW5jZSBzZW5kaW5nIHRoZSBldmVudCB0byBvbmUgZnJhbWUg
bWlnaHQgbXV0YXRlIHRoZSBmcmFtZSB0cmVlCisgICAgLy8gb2YgYW55IGdpdmVuIHBhZ2UgaW4g
dGhlIGdyb3VwLCBvciBtdXRhdGUgdGhlIHBhZ2UgZ3JvdXAgaXRzZWxmCisgICAgVmVjdG9yPFJl
ZlB0cjxGcmFtZT4gPiBmcmFtZXM7CisgICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzID0g
cGFnZS0+Z3JvdXAoKS5wYWdlcygpOworICAgIAorICAgIEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBwYWdlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IHBhZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICgqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChmcmFtZS0+
ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4oKSkpCisg
ICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhbWVzLnNpemUoKTsgKytpKQorICAgICAg
ICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQoU3RvcmFnZUV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFs
dWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2VGcmFtZS0+
ZG9tV2luZG93KCksIGZyYW1lc1tpXS0+ZG9tV2luZG93KCktPmxvY2FsU3RvcmFnZSgpKSk7Cit9
CisKK3ZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c2NoZWR1bGVJdGVtRm9yU3luYyhjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIEFTU0VSVCghbV9maW5hbFN5bmNTY2hlZHVsZWQpOworCisgICAgbV9jaGFuZ2Vk
SXRlbXMuc2V0KGtleSwgdmFsdWUpOworICAgIGlmICghbV9zeW5jVGltZXIuaXNBY3RpdmUoKSkg
eworICAgICAgICBtX3N5bmNUaW1lci5zdGFydE9uZVNob3QoTG9jYWxTdG9yYWdlU3luY0ludGVy
dmFsKTsKKworICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxs
IHRvIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uIGluIHRoZQorICAgICAgICAvLyBzeW5jVGltZXJG
aXJlZCBmdW5jdGlvbi4KKyAgICAgICAgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CisgICAg
fQorfQorCit2b2lkIExvY2FsU3RvcmFnZUFyZWE6OnNjaGVkdWxlQ2xlYXIoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2ZpbmFsU3luY1NjaGVkdWxlZCk7
CisKKyAgICBtX2NoYW5nZWRJdGVtcy5jbGVhcigpOworICAgIG1faXRlbXNDbGVhcmVkID0gdHJ1
ZTsKKyAgICBpZiAoIW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV9zeW5jVGlt
ZXIuc3RhcnRPbmVTaG90KExvY2FsU3RvcmFnZVN5bmNJbnRlcnZhbCk7CisKKyAgICAgICAgLy8g
VGhlIGZvbGxvd2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJt
aW5hdGlvbiBpbiB0aGUKKyAgICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCisgICAg
ICAgIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOworICAgIH0KK30KKwordm9pZCBMb2NhbFN0
b3JhZ2VBcmVhOjpzeW5jVGltZXJGaXJlZChUaW1lcjxMb2NhbFN0b3JhZ2VBcmVhPiopCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fc3luY01hbmFnZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBpdCA9
IG1fY2hhbmdlZEl0ZW1zLmJlZ2luKCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0
ZXJhdG9yIGVuZCA9IG1fY2hhbmdlZEl0ZW1zLmVuZCgpOworICAgIAorICAgIHsKKyAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3luY0xvY2spOworCisgICAgICAgIGlmIChtX2l0ZW1zQ2xl
YXJlZCkgeworICAgICAgICAgICAgbV9pdGVtc1BlbmRpbmdTeW5jLmNsZWFyKCk7CisgICAgICAg
ICAgICBtX2NsZWFySXRlbXNXaGlsZVN5bmNpbmcgPSB0cnVlOworICAgICAgICAgICAgbV9pdGVt
c0NsZWFyZWQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5bmMuc2V0KGl0LT5maXJzdC5jb3B5
KCksIGl0LT5zZWNvbmQuY29weSgpKTsKKworICAgICAgICBpZiAoIW1fc3luY1NjaGVkdWxlZCkg
eworICAgICAgICAgICAgbV9zeW5jU2NoZWR1bGVkID0gdHJ1ZTsKKworICAgICAgICAgICAgLy8g
VGhlIGZvbGxvd2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJt
aW5hdGlvbiBpbiB0aGUKKyAgICAgICAgICAgIC8vIHBlcmZvcm1TeW5jIGZ1bmN0aW9uLgorICAg
ICAgICAgICAgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CisKKyAgICAgICAgICAgIG1fc3lu
Y01hbmFnZXItPnNjaGVkdWxlU3luYyh0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IFRoZSBmb2xsb3dpbmcgaXMgYmFsYW5jZWQgYnkgdGhlIGNhbGxzIHRvIGRpc2FibGVTdWRkZW5U
ZXJtaW5hdGlvbiBpbiB0aGUKKyAgICAvLyBzY2hlZHVsZUl0ZW1Gb3JTeW5jLCBzY2hlZHVsZUNs
ZWFyLCBhbmQgc2NoZWR1bGVGaW5hbFN5bmMgZnVuY3Rpb25zLgorICAgIGVuYWJsZVN1ZGRlblRl
cm1pbmF0aW9uKCk7CisKKyAgICBtX2NoYW5nZWRJdGVtcy5jbGVhcigpOworfQorCit2b2lkIExv
Y2FsU3RvcmFnZUFyZWE6OnBlcmZvcm1JbXBvcnQoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOworICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7CisgICAgaWYgKCFtX3N5
bmNNYW5hZ2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFt
ZSA9IG1fc3luY01hbmFnZXItPmZ1bGxEYXRhYmFzZUZpbGVuYW1lKHNlY3VyaXR5T3JpZ2luKCkp
OworCisgICAgaWYgKGRhdGFiYXNlRmlsZW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIExPR19F
UlJPUigiRmlsZW5hbWUgZm9yIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgaXMgZW1wdHkgLSBjYW5u
b3Qgb3BlbiBmb3IgcGVyc2lzdGVudCBzdG9yYWdlIik7CisgICAgICAgIG1hcmtJbXBvcnRlZCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4oZGF0
YWJhc2VGaWxlbmFtZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBkYXRh
YmFzZSBmaWxlICVzIGZvciBsb2NhbCBzdG9yYWdlIiwgZGF0YWJhc2VGaWxlbmFtZS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgbWFya0ltcG9ydGVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBO
T1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0Us
IHZhbHVlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKSkgeworICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGFibGUgSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdl
Iik7CisgICAgICAgIG1hcmtJbXBvcnRlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIGtleSwgdmFs
dWUgRlJPTSBJdGVtVGFibGUiKTsKKyAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3Vs
dE9rKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNlbGVjdCBpdGVtcyBmcm9tIEl0
ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOworICAgICAgICBtYXJrSW1wb3J0ZWQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBp
dGVtTWFwOworCisgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICB3aGlsZSAocmVz
dWx0ID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICBpdGVtTWFwLnNldChxdWVyeS5nZXRDb2x1
bW5UZXh0KDApLCBxdWVyeS5nZXRDb2x1bW5UZXh0KDEpKTsKKyAgICAgICAgcmVzdWx0ID0gcXVl
cnkuc3RlcCgpOworICAgIH0KKworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewor
ICAgICAgICBMT0dfRVJST1IoIkVycm9yIHJlYWRpbmcgaXRlbXMgZnJvbSBJdGVtVGFibGUgZm9y
IGxvY2FsIHN0b3JhZ2UiKTsKKyAgICAgICAgbWFya0ltcG9ydGVkKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsKKyAgICAK
KyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBpdGVtTWFwLmJlZ2lu
KCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGVuZCA9IGl0ZW1NYXAu
ZW5kKCk7CisgICAgCisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaW1wb3J0
SXRlbShpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgIAorICAgIG1faW1wb3J0Q29tcGxldGUg
PSB0cnVlOworICAgIG1faW1wb3J0Q29uZGl0aW9uLnNpZ25hbCgpOworfQorCit2b2lkIExvY2Fs
U3RvcmFnZUFyZWE6Om1hcmtJbXBvcnRlZCgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsKKyAgICBtX2ltcG9y
dENvbXBsZXRlID0gdHJ1ZTsKKyAgICBtX2ltcG9ydENvbmRpdGlvbi5zaWduYWwoKTsKK30KKwor
Ly8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCBhbGxvdyB1c2Ugb2YgbG9jYWxTdG9y
YWdlIHdoaWxlIGl0J3MgaW1wb3J0aW5nICh3aGVuIHNhZmUgdG8gZG8gc28pLgorLy8gQmxvY2tp
bmcgZXZlcnl0aGluZyB1bnRpbCB0aGUgaW1wb3J0IGlzIGNvbXBsZXRlIGlzIGJ5IGZhciB0aGUg
c2ltcGxlc3QgYW5kIHNhZmVzdCB0aGluZyB0byBkbywgYnV0CisvLyB0aGVyZSBpcyBjZXJ0YWlu
bHkgcm9vbSBmb3Igc2FmZSBvcHRpbWl6YXRpb246IEtleS9sZW5ndGggd2lsbCBuZXZlciBiZSBh
YmxlIHRvIG1ha2UgdXNlIG9mIHN1Y2ggYW4KKy8vIG9wdGltaXphdGlvbiAoc2luY2UgdGhlIG9y
ZGVyIG9mIGl0ZXJhdGlvbiBjYW4gY2hhbmdlIGFzIGl0ZW1zIGFyZSBiZWluZyBhZGRlZCkuIEdl
dCBjYW4gcmV0dXJuIGFueQorLy8gaXRlbSBjdXJyZW50bHkgaW4gdGhlIG1hcC4gR2V0L3JlbW92
ZSBjYW4gd29yayB3aGV0aGVyIG9yIG5vdCBpdCdzIGluIHRoZSBtYXAsIGJ1dCB3ZSdsbCBuZWVk
IGEgbGlzdAorLy8gb2YgaXRlbXMgdGhlIGltcG9ydCBzaG91bGQgbm90IG92ZXJ3cml0ZS4gQ2xl
YXIgY2FuIGFsc28gd29yaywgYnV0IGl0J2xsIG5lZWQgdG8ga2lsbCB0aGUgaW1wb3J0CisvLyBq
b2IgZmlyc3QuCit2b2lkIExvY2FsU3RvcmFnZUFyZWE6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0
ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEZhc3Qg
cGF0aCB0byBhdm9pZCBsb2NraW5nLgorICAgIGlmIChtX2ltcG9ydENvbXBsZXRlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsKKyAgICB3
aGlsZSAoIW1faW1wb3J0Q29tcGxldGUpCisgICAgICAgIG1faW1wb3J0Q29uZGl0aW9uLndhaXQo
bV9pbXBvcnRMb2NrKTsKKyAgICBBU1NFUlQobV9pbXBvcnRDb21wbGV0ZSk7Cit9CisKK3ZvaWQg
TG9jYWxTdG9yYWdlQXJlYTo6c3luYyhib29sIGNsZWFySXRlbXMsIGNvbnN0IEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+JiBpdGVtcykKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKwor
ICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
SWYgdGhlIGNsZWFyIGZsYWcgaXMgc2V0LCB0aGVuIHdlIGNsZWFyIGFsbCBpdGVtcyBvdXQgYmVm
b3JlIHdlIHdyaXRlIGFueSBuZXcgb25lcyBpbi4KKyAgICBpZiAoY2xlYXJJdGVtcykgeworICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXIobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIEl0ZW1U
YWJsZSIpOworICAgICAgICBpZiAoY2xlYXIucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7Cisg
ICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGNsZWFyIHN0YXRlbWVudCAt
IGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCByZXN1bHQgPSBjbGVhci5z
dGVwKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY2xlYXIgYWxsIGl0ZW1zIGluIHRoZSBsb2NhbCBzdG9y
YWdlIGRhdGFiYXNlIC0gJWkiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IGluc2VydChtX2RhdGFiYXNlLCAiSU5T
RVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPykiKTsKKyAgICBpZiAoaW5zZXJ0LnByZXBh
cmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVw
YXJlIGluc2VydCBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRh
YmFzZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IHJl
bW92ZShtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gSXRlbVRhYmxlIFdIRVJFIGtleT0/Iik7Cisg
ICAgaWYgKHJlbW92ZS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBkZWxldGUgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRv
IGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpdGVtcy5lbmQo
KTsKKworICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gaXRlbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIC8vIEJhc2VkIG9u
IHRoZSBudWxsLW5lc3Mgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgZGVjaWRlIHdoZXRoZXIgdGhp
cyBpcyBhbiBpbnNlcnQgb3IgYSBkZWxldGUuCisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCYgcXVl
cnkgPSBpdC0+c2Vjb25kLmlzTnVsbCgpID8gcmVtb3ZlIDogaW5zZXJ0OyAgICAgICAgCisKKyAg
ICAgICAgcXVlcnkuYmluZFRleHQoMSwgaXQtPmZpcnN0KTsKKworICAgICAgICAvLyBJZiB0aGUg
c2Vjb25kIGFyZ3VtZW50IGlzIG5vbi1udWxsLCB3ZSdyZSBkb2luZyBhbiBpbnNlcnQsIHNvIGJp
bmQgaXQgYXMgdGhlIHZhbHVlLiAKKyAgICAgICAgaWYgKCFpdC0+c2Vjb25kLmlzTnVsbCgpKQor
ICAgICAgICAgICAgcXVlcnkuYmluZFRleHQoMiwgaXQtPnNlY29uZCk7CisKKyAgICAgICAgaW50
IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRE
b25lKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB1cGRhdGUgaXRlbSBpbiB0
aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgcXVlcnkucmVzZXQoKTsKKyAgICB9Cit9CisKK3Zv
aWQgTG9jYWxTdG9yYWdlQXJlYTo6cGVyZm9ybVN5bmMoKQoreworICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOworCisgICAgYm9vbCBjbGVhckl0ZW1zOworICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IGl0ZW1zOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3luY0xv
Y2spOworCisgICAgICAgIEFTU0VSVChtX3N5bmNTY2hlZHVsZWQpOworCisgICAgICAgIGNsZWFy
SXRlbXMgPSBtX2NsZWFySXRlbXNXaGlsZVN5bmNpbmc7CisgICAgICAgIG1faXRlbXNQZW5kaW5n
U3luYy5zd2FwKGl0ZW1zKTsKKworICAgICAgICBtX2NsZWFySXRlbXNXaGlsZVN5bmNpbmcgPSBm
YWxzZTsKKyAgICAgICAgbV9zeW5jU2NoZWR1bGVkID0gZmFsc2U7CisgICAgfQorCisgICAgc3lu
YyhjbGVhckl0ZW1zLCBpdGVtcyk7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhbGFuY2Vk
IGJ5IHRoZSBjYWxsIHRvIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbiBpbiB0aGUKKyAgICAvLyBz
eW5jVGltZXJGaXJlZCBmdW5jdGlvbi4KKyAgICBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JB
R0UpCisKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCShyZXZpc2lvbiA0NTAw
MikKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw1MyArMjQsNTYgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgogCiAj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQogCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUg
IkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgiCi0j
aW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlNRTGl0
ZVN0YXRlbWVudC5oIgotI2luY2x1ZGUgIlN0b3JhZ2VFdmVudC5oIgorI2luY2x1ZGUgIlN0b3Jh
Z2VBcmVhLmgiCiAjaW5jbHVkZSAiU3VkZGVuVGVybWluYXRpb24uaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0vLyBJZiB0aGUgTG9jYWxTdG9yYWdlQXJlYSB1bmRlcmdvZXMgcmFwaWQgY2hh
bmdlcywgZG9uJ3Qgc3luYyBlYWNoIGNoYW5nZSB0byBkaXNrLgorLy8gSWYgdGhlIFN0b3JhZ2VB
cmVhIHVuZGVyZ29lcyByYXBpZCBjaGFuZ2VzLCBkb24ndCBzeW5jIGVhY2ggY2hhbmdlIHRvIGRp
c2suCiAvLyBJbnN0ZWFkLCBxdWV1ZSB1cCBhIGJhdGNoIG9mIGl0ZW1zIHRvIHN5bmMgYW5kIGFj
dHVhbGx5IGRvIHRoZSBzeW5jIGF0IHRoZSBmb2xsb3dpbmcgaW50ZXJ2YWwuCi1zdGF0aWMgY29u
c3QgZG91YmxlIExvY2FsU3RvcmFnZVN5bmNJbnRlcnZhbCA9IDEuMDsKK3N0YXRpYyBjb25zdCBk
b3VibGUgU3RvcmFnZVN5bmNJbnRlcnZhbCA9IDEuMDsKIAotTG9jYWxTdG9yYWdlQXJlYTo6TG9j
YWxTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VT
eW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCi0gICAgOiBTdG9yYWdlQXJlYShvcmlnaW4pCi0gICAg
LCBtX3N5bmNUaW1lcih0aGlzLCAmTG9jYWxTdG9yYWdlQXJlYTo6c3luY1RpbWVyRmlyZWQpCitQ
YXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gU3RvcmFnZUFyZWFTeW5jOjpjcmVhdGUoUGFzc1Jl
ZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN0b3JhZ2VTeW5jTWFuYWdlciwgUGFzc1JlZlB0cjxT
dG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9y
YWdlQXJlYVN5bmMoc3RvcmFnZVN5bmNNYW5hZ2VyLCBzdG9yYWdlQXJlYSkpOworfQorCitTdG9y
YWdlQXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdl
cj4gc3RvcmFnZVN5bmNNYW5hZ2VyLCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJl
YSkKKyAgICA6IG1fc3luY1RpbWVyKHRoaXMsICZTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZp
cmVkKQogICAgICwgbV9pdGVtc0NsZWFyZWQoZmFsc2UpCiAgICAgLCBtX2ZpbmFsU3luY1NjaGVk
dWxlZChmYWxzZSkKLSAgICAsIG1fc3luY01hbmFnZXIoc3luY01hbmFnZXIpCisgICAgLCBtX3N0
b3JhZ2VBcmVhKHN0b3JhZ2VBcmVhKQorICAgICwgbV9zeW5jTWFuYWdlcihzdG9yYWdlU3luY01h
bmFnZXIpCiAgICAgLCBtX2NsZWFySXRlbXNXaGlsZVN5bmNpbmcoZmFsc2UpCiAgICAgLCBtX3N5
bmNTY2hlZHVsZWQoZmFsc2UpCiAgICAgLCBtX2ltcG9ydENvbXBsZXRlKGZhbHNlKQogeworICAg
IEFTU0VSVChtX3N0b3JhZ2VBcmVhKTsKICAgICBpZiAoIW1fc3luY01hbmFnZXIgfHwgIW1fc3lu
Y01hbmFnZXItPnNjaGVkdWxlSW1wb3J0KHRoaXMpKQogICAgICAgICBtX2ltcG9ydENvbXBsZXRl
ID0gdHJ1ZTsKIH0KIAotTG9jYWxTdG9yYWdlQXJlYTo6fkxvY2FsU3RvcmFnZUFyZWEoKQorI2lm
bmRlZiBOREVCVUcKK1N0b3JhZ2VBcmVhU3luYzo6flN0b3JhZ2VBcmVhU3luYygpCiB7CiAgICAg
QVNTRVJUKCFtX3N5bmNUaW1lci5pc0FjdGl2ZSgpKTsKIH0KKyNlbmRpZgogCi12b2lkIExvY2Fs
U3RvcmFnZUFyZWE6OnNjaGVkdWxlRmluYWxTeW5jKCkKK3ZvaWQgU3RvcmFnZUFyZWFTeW5jOjpz
Y2hlZHVsZUZpbmFsU3luYygpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBp
ZiAoIW1fc3luY01hbmFnZXIpCiAgICAgICAgIHJldHVybjsKLQorICAgIAogICAgIGlmIChtX3N5
bmNUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3N5bmNUaW1lci5zdG9wKCk7CiAgICAgZWxz
ZSB7CkBAIC03OCw2NyArODEsMjAgQEAgdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpzY2hlZHVsZUZp
bmFsU3luYwogICAgICAgICAvLyBzeW5jVGltZXJGaXJlZCBmdW5jdGlvbi4KICAgICAgICAgZGlz
YWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CiAgICAgfQorICAgIC8vIEZJWE1FOiBUaGlzIGlzIHN5
bmNocm9ub3VzLiAgV2Ugc2hvdWxkIGRvIGl0IG9uIHRoZSBiYWNrZ3JvdW5kIHByb2Nlc3MsIGJ1
dAorICAgIC8vIHdlIHNob3VsZCBkbyBpdCBzYWZlbHkuCiAgICAgc3luY1RpbWVyRmlyZWQoJm1f
c3luY1RpbWVyKTsKICAgICBtX2ZpbmFsU3luY1NjaGVkdWxlZCA9IHRydWU7CiB9CiAKLXZvaWQg
TG9jYWxTdG9yYWdlQXJlYTo6aXRlbUNoYW5nZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFt
ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc2NoZWR1bGVJdGVtRm9y
U3luYyhrZXksIG5ld1ZhbHVlKTsKLSAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZh
bHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZUFyZWE6
Oml0ZW1SZW1vdmVkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBG
cmFtZSogc291cmNlRnJhbWUpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAg
IHNjaGVkdWxlSXRlbUZvclN5bmMoa2V5LCBTdHJpbmcoKSk7Ci0gICAgZGlzcGF0Y2hTdG9yYWdl
RXZlbnQoa2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCksIHNvdXJjZUZyYW1lKTsKLX0KLQotdm9pZCBM
b2NhbFN0b3JhZ2VBcmVhOjphcmVhQ2xlYXJlZChGcmFtZSogc291cmNlRnJhbWUpCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIHNjaGVkdWxlQ2xlYXIoKTsKLSAgICBkaXNw
YXRjaFN0b3JhZ2VFdmVudChTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCBzb3VyY2VGcmFt
ZSk7Ci19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3
VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgUGFnZSogcGFnZSA9IHNvdXJjZUZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBOZWVkIHRvIGNvcHkgYWxsIHJlbGV2YW50IGZy
YW1lcyBmcm9tIGV2ZXJ5IHBhZ2UgdG8gYSB2ZWN0b3IsIHNpbmNlIHNlbmRpbmcgdGhlIGV2ZW50
IHRvIG9uZSBmcmFtZSBtaWdodCBtdXRhdGUgdGhlIGZyYW1lIHRyZWUKLSAgICAvLyBvZiBhbnkg
Z2l2ZW4gcGFnZSBpbiB0aGUgZ3JvdXAsIG9yIG11dGF0ZSB0aGUgcGFnZSBncm91cCBpdHNlbGYK
LSAgICBWZWN0b3I8UmVmUHRyPEZyYW1lPiA+IGZyYW1lczsKLSAgICBjb25zdCBIYXNoU2V0PFBh
Z2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2VzKCk7Ci0gICAgCi0gICAgSGFzaFNldDxQ
YWdlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhZ2VzLmVuZCgpOwotICAgIGZvciAoSGFzaFNl
dDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFnZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gKCppdCktPm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAg
ICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0
eU9yaWdpbigpKSkKLSAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVu
dChTdG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9s
ZFZhbHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50VVJJKCks
IHNvdXJjZUZyYW1lLT5kb21XaW5kb3coKSwgZnJhbWVzW2ldLT5kb21XaW5kb3coKS0+bG9jYWxT
dG9yYWdlKCkpKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpzY2hlZHVsZUl0ZW1Gb3JT
eW5jKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBTdG9yYWdl
QXJlYVN5bmM6OnNjaGVkdWxlSXRlbUZvclN5bmMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgdmFsdWUpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQo
IW1fZmluYWxTeW5jU2NoZWR1bGVkKTsKIAogICAgIG1fY2hhbmdlZEl0ZW1zLnNldChrZXksIHZh
bHVlKTsKICAgICBpZiAoIW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgbV9zeW5j
VGltZXIuc3RhcnRPbmVTaG90KExvY2FsU3RvcmFnZVN5bmNJbnRlcnZhbCk7CisgICAgICAgIG1f
c3luY1RpbWVyLnN0YXJ0T25lU2hvdChTdG9yYWdlU3luY0ludGVydmFsKTsKIAogICAgICAgICAv
LyBUaGUgZm9sbG93aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRvIGVuYWJsZVN1ZGRlblRl
cm1pbmF0aW9uIGluIHRoZQogICAgICAgICAvLyBzeW5jVGltZXJGaXJlZCBmdW5jdGlvbi4KQEAg
LTE0Niw3ICsxMDIsNyBAQCB2b2lkIExvY2FsU3RvcmFnZUFyZWE6OnNjaGVkdWxlSXRlbUZvclN5
CiAgICAgfQogfQogCi12b2lkIExvY2FsU3RvcmFnZUFyZWE6OnNjaGVkdWxlQ2xlYXIoKQordm9p
ZCBTdG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlQ2xlYXIoKQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2ZpbmFsU3luY1NjaGVkdWxlZCk7CkBAIC0xNTQsNyAr
MTEwLDcgQEAgdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpzY2hlZHVsZUNsZWFyKCkKICAgICBtX2No
YW5nZWRJdGVtcy5jbGVhcigpOwogICAgIG1faXRlbXNDbGVhcmVkID0gdHJ1ZTsKICAgICBpZiAo
IW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgbV9zeW5jVGltZXIuc3RhcnRPbmVT
aG90KExvY2FsU3RvcmFnZVN5bmNJbnRlcnZhbCk7CisgICAgICAgIG1fc3luY1RpbWVyLnN0YXJ0
T25lU2hvdChTdG9yYWdlU3luY0ludGVydmFsKTsKIAogICAgICAgICAvLyBUaGUgZm9sbG93aW5n
IGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRvIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uIGluIHRo
ZQogICAgICAgICAvLyBzeW5jVGltZXJGaXJlZCBmdW5jdGlvbi4KQEAgLTE2Miw3ICsxMTgsNyBA
QCB2b2lkIExvY2FsU3RvcmFnZUFyZWE6OnNjaGVkdWxlQ2xlYXIoKQogICAgIH0KIH0KIAotdm9p
ZCBMb2NhbFN0b3JhZ2VBcmVhOjpzeW5jVGltZXJGaXJlZChUaW1lcjxMb2NhbFN0b3JhZ2VBcmVh
PiopCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c3luY1RpbWVyRmlyZWQoVGltZXI8U3RvcmFnZUFy
ZWFTeW5jPiopCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoIW1fc3lu
Y01hbmFnZXIpCkBAIC0yMDEsMTQgKzE1NywxNCBAQCB2b2lkIExvY2FsU3RvcmFnZUFyZWE6OnN5
bmNUaW1lckZpcmVkKFRpCiAgICAgbV9jaGFuZ2VkSXRlbXMuY2xlYXIoKTsKIH0KIAotdm9pZCBM
b2NhbFN0b3JhZ2VBcmVhOjpwZXJmb3JtSW1wb3J0KCkKK3ZvaWQgU3RvcmFnZUFyZWFTeW5jOjpw
ZXJmb3JtSW1wb3J0KCkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBBU1NF
UlQoIW1fZGF0YWJhc2UuaXNPcGVuKCkpOwogICAgIGlmICghbV9zeW5jTWFuYWdlcikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2Vy
LT5mdWxsRGF0YWJhc2VGaWxlbmFtZShzZWN1cml0eU9yaWdpbigpKTsKKyAgICBTdHJpbmcgZGF0
YWJhc2VGaWxlbmFtZSA9IG1fc3luY01hbmFnZXItPmZ1bGxEYXRhYmFzZUZpbGVuYW1lKG1fc3Rv
cmFnZUFyZWEtPnNlY3VyaXR5T3JpZ2luKCkpOwogCiAgICAgaWYgKGRhdGFiYXNlRmlsZW5hbWUu
aXNFbXB0eSgpKSB7CiAgICAgICAgIExPR19FUlJPUigiRmlsZW5hbWUgZm9yIGxvY2FsIHN0b3Jh
Z2UgZGF0YWJhc2UgaXMgZW1wdHkgLSBjYW5ub3Qgb3BlbiBmb3IgcGVyc2lzdGVudCBzdG9yYWdl
Iik7CkBAIC0yNTUsMjkgKzIxMSwzMyBAQCB2b2lkIExvY2FsU3RvcmFnZUFyZWE6OnBlcmZvcm1J
bXBvcnQoKQogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBpdGVt
TWFwLmVuZCgpOwogICAgIAogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlt
cG9ydEl0ZW0oaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgbV9zdG9yYWdlQXJlYS0+
aW1wb3J0SXRlbShpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOwogICAgIAorICAgIC8vIEJyZWFrIHRo
ZSAocmVmIGNvdW50KSBjeWNsZS4KKyAgICBtX3N0b3JhZ2VBcmVhID0gMDsKICAgICBtX2ltcG9y
dENvbXBsZXRlID0gdHJ1ZTsKICAgICBtX2ltcG9ydENvbmRpdGlvbi5zaWduYWwoKTsKIH0KIAot
dm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjptYXJrSW1wb3J0ZWQoKQordm9pZCBTdG9yYWdlQXJlYVN5
bmM6Om1hcmtJbXBvcnRlZCgpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKICAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsKKyAgICAvLyBCcmVhayB0aGUgKHJl
ZiBjb3VudCkgY3ljbGUuCisgICAgbV9zdG9yYWdlQXJlYSA9IDA7CiAgICAgbV9pbXBvcnRDb21w
bGV0ZSA9IHRydWU7CiAgICAgbV9pbXBvcnRDb25kaXRpb24uc2lnbmFsKCk7CiB9CiAKLS8vIEZJ
WE1FOiBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgYWxsb3cgdXNlIG9mIGxvY2FsU3RvcmFnZSB3
aGlsZSBpdCdzIGltcG9ydGluZyAod2hlbiBzYWZlIHRvIGRvIHNvKS4KKy8vIEZJWE1FOiBJbiB0
aGUgZnV0dXJlLCB3ZSBzaG91bGQgYWxsb3cgdXNlIG9mIFN0b3JhZ2VBcmVhcyB3aGlsZSBpdCdz
IGltcG9ydGluZyAod2hlbiBzYWZlIHRvIGRvIHNvKS4KIC8vIEJsb2NraW5nIGV2ZXJ5dGhpbmcg
dW50aWwgdGhlIGltcG9ydCBpcyBjb21wbGV0ZSBpcyBieSBmYXIgdGhlIHNpbXBsZXN0IGFuZCBz
YWZlc3QgdGhpbmcgdG8gZG8sIGJ1dAogLy8gdGhlcmUgaXMgY2VydGFpbmx5IHJvb20gZm9yIHNh
ZmUgb3B0aW1pemF0aW9uOiBLZXkvbGVuZ3RoIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBtYWtlIHVz
ZSBvZiBzdWNoIGFuCiAvLyBvcHRpbWl6YXRpb24gKHNpbmNlIHRoZSBvcmRlciBvZiBpdGVyYXRp
b24gY2FuIGNoYW5nZSBhcyBpdGVtcyBhcmUgYmVpbmcgYWRkZWQpLiBHZXQgY2FuIHJldHVybiBh
bnkKIC8vIGl0ZW0gY3VycmVudGx5IGluIHRoZSBtYXAuIEdldC9yZW1vdmUgY2FuIHdvcmsgd2hl
dGhlciBvciBub3QgaXQncyBpbiB0aGUgbWFwLCBidXQgd2UnbGwgbmVlZCBhIGxpc3QKIC8vIG9m
IGl0ZW1zIHRoZSBpbXBvcnQgc2hvdWxkIG5vdCBvdmVyd3JpdGUuIENsZWFyIGNhbiBhbHNvIHdv
cmssIGJ1dCBpdCdsbCBuZWVkIHRvIGtpbGwgdGhlIGltcG9ydAogLy8gam9iIGZpcnN0Lgotdm9p
ZCBMb2NhbFN0b3JhZ2VBcmVhOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdAordm9p
ZCBTdG9yYWdlQXJlYVN5bmM6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtMjg5LDkgKzI0OSwxMCBAQCB2b2lkIExv
Y2FsU3RvcmFnZUFyZWE6OmJsb2NrVW50aWxJbXBvcnRDCiAgICAgd2hpbGUgKCFtX2ltcG9ydENv
bXBsZXRlKQogICAgICAgICBtX2ltcG9ydENvbmRpdGlvbi53YWl0KG1faW1wb3J0TG9jayk7CiAg
ICAgQVNTRVJUKG1faW1wb3J0Q29tcGxldGUpOworICAgIEFTU0VSVCghbV9zdG9yYWdlQXJlYSk7
CiB9CiAKLXZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c3luYyhib29sIGNsZWFySXRlbXMsIGNvbnN0
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBpdGVtcykKK3ZvaWQgU3RvcmFnZUFyZWFTeW5jOjpz
eW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1z
KQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCkBAIC0zNDcsNyArMzA4LDcgQEAg
dm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpzeW5jKGJvb2wgY2xlYXJJdAogICAgIH0KIH0KIAotdm9p
ZCBMb2NhbFN0b3JhZ2VBcmVhOjpwZXJmb3JtU3luYygpCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6
cGVyZm9ybVN5bmMoKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oCShyZXZpc2lvbiA0NTAwMykJKGZyb20gV2ViQ29yZS9z
dG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaDo0NTAwMykKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlQXJlYVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTG9jYWxT
dG9yYWdlQXJlYV9oCisjZGVmaW5lIExvY2FsU3RvcmFnZUFyZWFfaAorCisjaWYgRU5BQkxFKERP
TV9TVE9SQUdFKQorCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJTdG9y
YWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJTdG9yYWdlU3lu
Y01hbmFnZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFn
ZXI7CisgICAgCisgICAgY2xhc3MgTG9jYWxTdG9yYWdlQXJlYSA6IHB1YmxpYyBTdG9yYWdlQXJl
YSB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5Mb2NhbFN0b3JhZ2VBcmVhKCk7CisK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gY3JlYXRlKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFu
YWdlcikgeyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZUFyZWEob3JpZ2luLCBzeW5j
TWFuYWdlcikpOyB9CisKKyAgICAgICAgdm9pZCBzY2hlZHVsZUZpbmFsU3luYygpOworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgTG9jYWxTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFBhc3NS
ZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcik7CisKKyAgICAgICAgdmlydHVh
bCB2b2lkIGl0ZW1DaGFuZ2VkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZh
bHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgaXRlbVJlbW92ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgb2xkVmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBh
cmVhQ2xlYXJlZChGcmFtZSogc291cmNlRnJhbWUpOworCisgICAgICAgIHZvaWQgc2NoZWR1bGVJ
dGVtRm9yU3luYyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAg
ICAgIHZvaWQgc2NoZWR1bGVDbGVhcigpOworICAgICAgICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2
ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJp
bmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpOworCisgICAgICAgIFRpbWVyPExvY2Fs
U3RvcmFnZUFyZWE+IG1fc3luY1RpbWVyOyAgICAgICAgCisgICAgICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IG1fY2hhbmdlZEl0ZW1zOworICAgICAgICBib29sIG1faXRlbXNDbGVhcmVkOwor
ICAgICAgICAKKyAgICAgICAgYm9vbCBtX2ZpbmFsU3luY1NjaGVkdWxlZDsKKworICAgICAgICBS
ZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N5bmNNYW5hZ2VyOworCisgICAgICAgIC8vIFRo
ZSBkYXRhYmFzZSBoYW5kbGUgd2lsbCBvbmx5IGV2ZXIgYmUgb3BlbmVkIGFuZCB1c2VkIG9uIHRo
ZSBiYWNrZ3JvdW5kIHRocmVhZC4KKyAgICAgICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsK
KworICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgc3ViamVjdCB0byB0aHJlYWQgc3lu
Y2hyb25pemF0aW9uIGlzc3Vlcy4KKyAgICBwdWJsaWM6CisgICAgICAgIC8vIENhbGxlZCBmcm9t
IHRoZSBiYWNrZ3JvdW5kIHRocmVhZAorICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybUltcG9y
dCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVN5bmMoKTsKKworICAgIHByaXZhdGU6
CisgICAgICAgIHZvaWQgc3luY1RpbWVyRmlyZWQoVGltZXI8TG9jYWxTdG9yYWdlQXJlYT4qKTsK
KyAgICAgICAgdm9pZCBzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29uc3QgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4mIGl0ZW1zKTsKKworICAgICAgICBNdXRleCBtX3N5bmNMb2NrOworICAgICAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2l0ZW1zUGVuZGluZ1N5bmM7CisgICAgICAgIGJvb2wg
bV9jbGVhckl0ZW1zV2hpbGVTeW5jaW5nOworICAgICAgICBib29sIG1fc3luY1NjaGVkdWxlZDsK
KworICAgICAgICBtdXRhYmxlIE11dGV4IG1faW1wb3J0TG9jazsKKyAgICAgICAgbXV0YWJsZSBU
aHJlYWRDb25kaXRpb24gbV9pbXBvcnRDb25kaXRpb247CisgICAgICAgIG11dGFibGUgYm9vbCBt
X2ltcG9ydENvbXBsZXRlOworICAgICAgICB2b2lkIG1hcmtJbXBvcnRlZCgpOworICAgICAgICB2
b2lkIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0OworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKKworI2VuZGlm
IC8vIExvY2FsU3RvcmFnZUFyZWFfaApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVh
U3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaAko
cmV2aXNpb24gNDUwMDIpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDQ3ICsyMyw0OSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAot
I2lmbmRlZiBMb2NhbFN0b3JhZ2VBcmVhX2gKLSNkZWZpbmUgTG9jYWxTdG9yYWdlQXJlYV9oCisj
aWZuZGVmIFN0b3JhZ2VBcmVhU3luY19oCisjZGVmaW5lIFN0b3JhZ2VBcmVhU3luY19oCiAKICNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgotI2lu
Y2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUg
IlN0b3JhZ2VTeW5jTWFuYWdlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCisgICAgY2xhc3MgU3Rv
cmFnZUFyZWE7ICAgIAogICAgIGNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKICAgICAKLSAgICBj
bGFzcyBMb2NhbFN0b3JhZ2VBcmVhIDogcHVibGljIFN0b3JhZ2VBcmVhIHsKKyAgICBjbGFzcyBT
dG9yYWdlQXJlYVN5bmMgOiBwdWJsaWMgUmVmQ291bnRlZDxTdG9yYWdlQXJlYVN5bmM+IHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkxvY2FsU3RvcmFnZUFyZWEoKTsKLQotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBjcmVhdGUoU2VjdXJpdHlPcmln
aW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlQXJlYShvcmlnaW4sIHN5bmNNYW5hZ2Vy
KSk7IH0KKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIH5TdG9yYWdlQXJlYVN5bmMoKTsKKyNlbmRp
ZgogCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gY3JlYXRlKFBh
c3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzdG9yYWdlU3luY01hbmFnZXIsIFBhc3NSZWZQ
dHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKTsKKyAgICAgICAgCiAgICAgICAgIHZvaWQgc2No
ZWR1bGVGaW5hbFN5bmMoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIExvY2FsU3RvcmFnZUFy
ZWEoU2VjdXJpdHlPcmlnaW4qLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01h
bmFnZXIpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBpdGVtQ2hhbmdlZChjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJh
bWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGl0ZW1SZW1vdmVkKGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgYXJlYUNsZWFyZWQoRnJhbWUqIHNvdXJjZUZyYW1lKTsK
KyAgICAgICAgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdDsKIAogICAgICAg
ICB2b2lkIHNjaGVkdWxlSXRlbUZvclN5bmMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOwogICAgICAgICB2b2lkIHNjaGVkdWxlQ2xlYXIoKTsKKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgU3RvcmFnZUFyZWFTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNN
YW5hZ2VyPiBzdG9yYWdlU3luY01hbmFnZXIsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3Jh
Z2VBcmVhKTsKKworICAgICAgICAKICAgICAgICAgdm9pZCBkaXNwYXRjaFN0b3JhZ2VFdmVudChj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBu
ZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKIAotICAgICAgICBUaW1lcjxMb2NhbFN0b3Jh
Z2VBcmVhPiBtX3N5bmNUaW1lcjsgICAgICAgIAorICAgICAgICBUaW1lcjxTdG9yYWdlQXJlYVN5
bmM+IG1fc3luY1RpbWVyOyAgICAgICAgCiAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
IG1fY2hhbmdlZEl0ZW1zOwogICAgICAgICBib29sIG1faXRlbXNDbGVhcmVkOwogICAgICAgICAK
ICAgICAgICAgYm9vbCBtX2ZpbmFsU3luY1NjaGVkdWxlZDsKIAorICAgICAgICBSZWZQdHI8U3Rv
cmFnZUFyZWE+IG1fc3RvcmFnZUFyZWE7CiAgICAgICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFn
ZXI+IG1fc3luY01hbmFnZXI7CiAKICAgICAgICAgLy8gVGhlIGRhdGFiYXNlIGhhbmRsZSB3aWxs
IG9ubHkgZXZlciBiZSBvcGVuZWQgYW5kIHVzZWQgb24gdGhlIGJhY2tncm91bmQgdGhyZWFkLgpA
QCAtNzIsMTEgKzc0LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBUaGUgZm9sbG93
aW5nIG1lbWJlcnMgYXJlIHN1YmplY3QgdG8gdGhyZWFkIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMu
CiAgICAgcHVibGljOgogICAgICAgICAvLyBDYWxsZWQgZnJvbSB0aGUgYmFja2dyb3VuZCB0aHJl
YWQKLSAgICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1JbXBvcnQoKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHBlcmZvcm1TeW5jKCk7CisgICAgICAgIHZvaWQgcGVyZm9ybUltcG9ydCgpOworICAg
ICAgICB2b2lkIHBlcmZvcm1TeW5jKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHN5
bmNUaW1lckZpcmVkKFRpbWVyPExvY2FsU3RvcmFnZUFyZWE+Kik7CisgICAgICAgIHZvaWQgc3lu
Y1RpbWVyRmlyZWQoVGltZXI8U3RvcmFnZUFyZWFTeW5jPiopOwogICAgICAgICB2b2lkIHN5bmMo
Ym9vbCBjbGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMpOwog
CiAgICAgICAgIE11dGV4IG1fc3luY0xvY2s7CkBAIC04OCwxMSArOTAsMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBtdXRhYmxlIFRocmVhZENvbmRpdGlvbiBtX2ltcG9ydENvbmRp
dGlvbjsKICAgICAgICAgbXV0YWJsZSBib29sIG1faW1wb3J0Q29tcGxldGU7CiAgICAgICAgIHZv
aWQgbWFya0ltcG9ydGVkKCk7Ci0gICAgICAgIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRl
KCkgY29uc3Q7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKERPTV9TVE9SQUdFKQogCi0jZW5kaWYgLy8gTG9jYWxTdG9yYWdlQXJlYV9oCisjZW5k
aWYgLy8gU3RvcmFnZUFyZWFTeW5jX2gKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3lu
Y01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01h
bmFnZXIuY3BwCShyZXZpc2lvbiA0NTAwMikKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3lu
Y01hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAi
RnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgot
I2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03
NCw3ICs3NCw3IEBAIHZvaWQgU3RvcmFnZVN5bmNNYW5hZ2VyOjpjbG9zZSgpCiAgICAgfQogfQog
Ci1ib29sIFN0b3JhZ2VTeW5jTWFuYWdlcjo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2VBcmVhPiBhcmVhKQorYm9vbCBTdG9yYWdlU3luY01hbmFnZXI6OnNjaGVkdWxlSW1w
b3J0KFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBhcmVhKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAKQEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBTdG9yYWdlU3luY01hbmFnZXI6
OnNjaGVkdWxlSW1wb3J0KAogICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAotdm9pZCBTdG9yYWdl
U3luY01hbmFnZXI6OnNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFy
ZWEpCit2b2lkIFN0b3JhZ2VTeW5jTWFuYWdlcjo6c2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8U3Rv
cmFnZUFyZWFTeW5jPiBhcmVhKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgJKHJldmlzaW9uIDQ1MDAyKQorKysg
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIkxv
Y2FsU3RvcmFnZVRhc2suaCIKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUaHJlYWQuaCIKKyNpbmNs
dWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKIAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApA
QCAtNDAsOCArNDEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IGNyZWF0ZShjb25zdCBTdHJp
bmcmIHBhdGgpOwogCi0gICAgICAgIGJvb2wgc2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2VBcmVhPik7Ci0gICAgICAgIHZvaWQgc2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9j
YWxTdG9yYWdlQXJlYT4pOworICAgICAgICBib29sIHNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8
U3RvcmFnZUFyZWFTeW5jPik7CisgICAgICAgIHZvaWQgc2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8
U3RvcmFnZUFyZWFTeW5jPik7CiAKICAgICAgICAgdm9pZCBjbG9zZSgpOwogCg==
</data>
<flag name="review"
          id="16325"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>