<?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>96663</bug_id>
          
          <creation_ts>2012-09-13 09:58:04 -0700</creation_ts>
          <short_desc>IndexedDB: Remove &quot;current transaction&quot; concept from backing store</short_desc>
          <delta_ts>2012-09-19 16:27:06 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>alecflett</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dgrogan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>719608</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-13 09:58:04 -0700</bug_when>
    <thetext>IndexedDB: Remove &quot;current transaction&quot; concept from backing store</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719610</commentid>
    <comment_count>1</comment_count>
      <attachid>163895</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-13 10:01:01 -0700</bug_when>
    <thetext>Created attachment 163895
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719614</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-13 10:03:22 -0700</bug_when>
    <thetext>This seems like a good initial step.

As a follow-up, should we flip the API around so that most of the methods are on an IDBBackingStore::Transaction() (that has an internal IDBBackingStore pointer) rather than on IDBBackingStore itself? Or do that in this patch as well? (I vote for follow-up)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719619</commentid>
    <comment_count>3</comment_count>
      <attachid>163895</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-13 10:07:17 -0700</bug_when>
    <thetext>Comment on attachment 163895
Patch

Attachment 163895 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13833837</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719636</commentid>
    <comment_count>4</comment_count>
      <attachid>163900</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-13 10:20:16 -0700</bug_when>
    <thetext>Created attachment 163900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721291</commentid>
    <comment_count>5</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-09-14 18:06:14 -0700</bug_when>
    <thetext>Why is Transaction&amp; passed around instead of Transaction*?  The WK style guide calls for out parameters to be passed by reference but that doesn&apos;t seem to be what&apos;s happening.

Other than that, LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721989</commentid>
    <comment_count>6</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-17 09:21:35 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Why is Transaction&amp; passed around instead of Transaction*?  The WK style guide calls for out parameters to be passed by reference but that doesn&apos;t seem to be what&apos;s happening.

Bleah, that&apos;s just my personal style showing through. Must... conform... !</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722022</commentid>
    <comment_count>7</comment_count>
      <attachid>164411</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-17 10:16:25 -0700</bug_when>
    <thetext>Created attachment 164411
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722023</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-17 10:17:19 -0700</bug_when>
    <thetext>References -&gt; Pointers

Using an overloaded casting operator is still a bit weird. Better suggestions appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722341</commentid>
    <comment_count>9</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-09-17 15:55:01 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Using an overloaded casting operator is still a bit weird. Better suggestions appreciated.

It does seem a little weird to pass an IDB object to leveldb.  I guess the obvious alternative is to add getLevelDBTransaction() to IDBTransactionBackendImpl. I&apos;d say the wordiness of that outweighs any downsides of overloading the casting operator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722354</commentid>
    <comment_count>10</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-17 16:06:18 -0700</bug_when>
    <thetext>I made a similar comment this morning :) I wonder if it would alleviate the need for prpTransaction-fu that you&apos;re doing in some places too, since you&apos;re not dereferencing through an &apos;=&apos; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722360</commentid>
    <comment_count>11</comment_count>
      <attachid>164471</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-17 16:12:07 -0700</bug_when>
    <thetext>Created attachment 164471
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722361</commentid>
    <comment_count>12</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-17 16:13:24 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Using an overloaded casting operator is still a bit weird. Better suggestions appreciated.
&gt; 
&gt; It does seem a little weird to pass an IDB object to leveldb.  I guess the obvious alternative is to add getLevelDBTransaction() to IDBTransactionBackendImpl. I&apos;d say the wordiness of that outweighs any downsides of overloading the casting operator.

Agreed, updated.

(In reply to comment #10)
&gt; I made a similar comment this morning :) I wonder if it would alleviate the need for prpTransaction-fu that you&apos;re doing in some places too, since you&apos;re not dereferencing through an &apos;=&apos; ?

That too.

Also addressed the FIXME. We want to keep IDBBackingStore::begin() and create the LevelDBTransaction there, as that&apos;s the point we&apos;d theoretically create the snapshot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722880</commentid>
    <comment_count>13</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-18 10:19:03 -0700</bug_when>
    <thetext>alec, david - one more look before I send this off to tony?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722938</commentid>
    <comment_count>14</comment_count>
      <attachid>164471</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-18 11:39:52 -0700</bug_when>
    <thetext>Comment on attachment 164471
Patch


LGTM, with one nit - ironic because this is reason #92 I hate the ChangeLogs :)

View in context: https://bugs.webkit.org/attachment.cgi?id=164471&amp;action=review

&gt; Source/WebCore/ChangeLog:89
&gt; +        (WebCore::IDBTransactionBackendImpl::operator IDBBackingStore::Transaction&amp;):

You don&apos;t have &apos;operator&apos; in the patch anymore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722941</commentid>
    <comment_count>15</comment_count>
      <attachid>164594</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-18 11:42:28 -0700</bug_when>
    <thetext>Created attachment 164594
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722966</commentid>
    <comment_count>16</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-18 12:05:20 -0700</bug_when>
    <thetext>tony@ - another one, not urgent - r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723766</commentid>
    <comment_count>17</comment_count>
      <attachid>164594</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 13:28:59 -0700</bug_when>
    <thetext>Comment on attachment 164594
Patch

Rejecting attachment 164594 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
/Modules/indexeddb/IDBLevelDBBackingStore.h
patching file Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp
patching file Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h
patching file Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.h
patching file Source/WebKit/chromium/tests/IDBFakeBackingStore.h

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Tony Chang&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/13902651</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723907</commentid>
    <comment_count>18</comment_count>
      <attachid>164793</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-19 16:03:24 -0700</bug_when>
    <thetext>Created attachment 164793
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723941</commentid>
    <comment_count>19</comment_count>
      <attachid>164793</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 16:27:02 -0700</bug_when>
    <thetext>Comment on attachment 164793
Patch for landing

Clearing flags on attachment: 164793

Committed r129066: &lt;http://trac.webkit.org/changeset/129066&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723942</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-19 16:27:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163895</attachid>
            <date>2012-09-13 10:01:01 -0700</date>
            <delta_ts>2012-09-13 10:20:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96663-20120913100034.patch</filename>
            <type>text/plain</type>
            <size>104113</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjU2YTA4Nzg4ZTc3ZWU5
M2Y3MTlhZmFhODI5NzdkN2ZhNDA4ZTVmMi4uN2ViY2U4YjMwOGY0MTQ0ZWEyZmZmZDc3N2NhZGU2
YzRkZDU3NWY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDEyLTA5LTEzICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBSZW1v
dmUgImN1cnJlbnQgdHJhbnNhY3Rpb24iIGNvbmNlcHQgZnJvbSBiYWNraW5nIHN0b3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjY2MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluZGV4ZWREQiBzaG91
bGQgYWxsb3cgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIHRvIHJ1biBpbiBwYXJhbGxlbCB3aXRoaW4g
YW5kCisgICAgICAgIGFjcm9zcyBkYXRhYmFzZXMgd2l0aGluIGFuIG9yaWdpbi4gQXMgYW4gaW5p
dGlhbCBzdGVwIHRvIGVuYWJsaW5nIHRoaXMsIHRoZQorICAgICAgICBiYWNraW5nIHN0b3JlIHNo
b3VsZCBub3QgaG9sZCBhICJjdXJyZW50IHRyYW5zYWN0aW9uIiAtIGluc3RlYWQsIG9wZXJhdGlv
bnMKKyAgICAgICAgc2hvdWxkIGJlIGRvbmUgcmVsYXRpdmUgdG8gYSB0cmFuc2FjdGlvbiBtYW5h
Z2VkIGJ5IHRoZSBkYXRhYmFzZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBubyBmdW5jdGlv
bmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3Rv
cmUuaDoKKyAgICAgICAgKElEQkJhY2tpbmdTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlSW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lv
bkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNl
dEludFZlcnNpb25JbnRlcm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRLZXlJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5k
ZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJREJJbmRleEJhY2tlbmRJbXBsKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRh
dGVJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVs
REJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2Jq
ZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0
b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVs
REJCYWNraW5nU3RvcmU6OmZvckVhY2hPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXhEYXRhRm9y
UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmZpbmRL
ZXlJbkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Omdl
dFByaW1hcnlLZXlWaWFJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
bjo6VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb246OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJvbGxiYWNrKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJMZXZl
bERCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb24pOgorICAgICAgICAoVHJhbnNhY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OmxldmVsREJUcmFuc2FjdGlvbkZyb20pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6bWFrZUluZGV4V3JpdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleEludGVy
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0
ZUluZGV4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6b3BlbkN1cnNvckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJhdGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpvcGVyYXRvciBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJik6CisK
IDIwMTItMDktMTIgIEFsZXhhbmRyZSBFbGlhcyAgPGFlbGlhc0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW2Nocm9taXVtXSBGbGlwIFkgYW5kIHN3aXp6bGUgaW5zaWRlIGNvbXBvc2l0ZUFuZFJl
YWRiYWNrIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IGYwNjBlNzJlZjRjNmZkNDcyNTRlYzdmMTU1
ODgwOTAzOTVhNjU5ZGUuLmFhMGUyNjEzNDcxOTlmZWRhNDY0MWVjMWJlYzczZjAxOTYzM2VjODMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5oCkBAIC00NCwxOCArNDQsMjAgQEAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGNsYXNz
IElEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkJhY2tpbmdTdG9yZT4gewog
cHVibGljOgorICAgIGNsYXNzIFRyYW5zYWN0aW9uOworCiAgICAgdmlydHVhbCB+SURCQmFja2lu
Z1N0b3JlKCkge307CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8
U3RyaW5nPiYgZm91bmROYW1lcykgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFN0cmluZ1ZlcnNpb24s
IGludDY0X3QmIGZvdW5kSW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBzdHJpbmdWZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3Qm
IHJvd0lkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lv
bihpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJz
aW9uKFRyYW5zYWN0aW9uJiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKSA9IDA7
CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoVHJhbnNhY3Rpb24m
LCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7CiAKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0
X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxJREJLZXlQ
YXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFn
cykgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0lu
Y3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKFRyYW5z
YWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3Rv
cmVJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShUcmFuc2FjdGlv
biYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CiAKICAg
ICBjbGFzcyBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxP
YmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHsKICAgICBwdWJsaWM6CkBAIC02NCwyOCArNjYs
MjggQEAgcHVibGljOgogICAgIH07CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKSA9IDA7CiAK
LSAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JikgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVj
dFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9v
bCBjaGVja0N1cnJlbnQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RT
dG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5JiwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIp
ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChUcmFuc2FjdGlv
biYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKFRyYW5zYWN0
aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciop
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShUcmFuc2FjdGlvbiYsIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllciopID0gMDsKKyAgICB2aXJ0dWFsIGludDY0X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcihUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlcihUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShUcmFuc2FjdGlvbiYsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBPYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikgPSAwOwogCiAg
ICAgY2xhc3MgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayB7CiAgICAgcHVibGljOgogICAgICAg
ICAgdmlydHVhbCBib29sIGNhbGxiYWNrKGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciosIGNvbnN0IFN0cmluZyYgdmFsdWUpID0gMDsKICAgICAgICAgIHZpcnR1YWwgfk9iamVjdFN0
b3JlUmVjb3JkQ2FsbGJhY2soKSB7fTsKICAgICB9OwotICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNo
T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKSA9IDA7CisgICAgdmlydHVhbCBib29sIGZv
ckVhY2hPYmplY3RTdG9yZVJlY29yZChUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJikgPSAwOwog
CiAgICAgdmlydHVhbCB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+
JiBmb3VuZE5hbWVzLCBWZWN0b3I8SURCS2V5UGF0aD4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxi
b29sPiYgZm91bmRVbmlxdWVGbGFncywgVmVjdG9yPGJvb2w+JiBmb3VuZE11bHRpRW50cnlGbGFn
cykgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQ
YXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRl
eERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAw
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgo
aW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtl
eSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChUcmFuc2FjdGlvbiYsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IElEQktleVBhdGgmLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50
NjRfdCYgaW5kZXhJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChUcmFuc2Fj
dGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKFRy
YW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQo
VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KFRy
YW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBrZXlF
eGlzdHNJbkluZGV4KFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVm
UHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkgPSAwOwogCiAgICAgY2xhc3MgQ3Vyc29yIDog
cHVibGljIFJlZkNvdW50ZWQ8Q3Vyc29yPiB7CiAgICAgcHVibGljOgpAQCAtMTA1LDEwICsxMDcs
MTAgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5DdXJzb3IoKSB7IH07CiAgICAgfTsKIAot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2Uq
LCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJz
b3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikg
PSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJh
bmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoVHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJz
b3I6OkRpcmVjdGlvbikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5P
YmplY3RTdG9yZUtleUN1cnNvcihUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0
aW9uKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vy
c29yKFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVj
dGlvbikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNv
cihUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rp
b24pID0gMDsKIAogICAgIGNsYXNzIFRyYW5zYWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8VHJh
bnNhY3Rpb24+IHsKICAgICBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IDgxMTBj
MjRjMTNiM2M0NjNlZTM3YjIwZDRjZmZhNzEyNDI0NGI2MzkuLmY5YTRmOWVhNWEyOTI3Y2MyNDU1
NzU4Y2Y2Y2JlZDJhZjRhYmE4ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0xODUsMTEg
KzE4NSwxMiBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0UwogICAgIHJldHVybiBvYmplY3RTdG9y
ZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2Jq
ZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9i
amVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gcHJwVHJhbnNhY3Rpb24pCiB7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CiAgICAgaW50NjRfdCBvYmplY3RT
dG9yZUlkOwogCi0gICAgaWYgKCFkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVj
dFN0b3JlKGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZS0+bmFtZSgpLCBvYmplY3RTdG9yZS0+
a2V5UGF0aCgpLCBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpLCBvYmplY3RTdG9yZUlkKSkg
eworICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSgq
dHJhbnNhY3Rpb24sIGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZS0+bmFtZSgpLCBvYmplY3RT
dG9yZS0+a2V5UGF0aCgpLCBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpLCBvYmplY3RTdG9y
ZUlkKSkgewogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTIyMSw5ICsyMjIsMTAgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpk
ZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW8KICAgICBt
X29iamVjdFN0b3Jlcy5yZW1vdmUobmFtZSk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKLSAgICBkYXRhYmFzZS0+bV9i
YWNraW5nU3RvcmUtPmRlbGV0ZU9iamVjdFN0b3JlKGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9y
ZS0+aWQoKSk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uID0gcHJwVHJhbnNhY3Rpb247CisgICAgZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5kZWxl
dGVPYmplY3RTdG9yZSgqdHJhbnNhY3Rpb24sIGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZS0+
aWQoKSk7CiAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCkBA
IC0yNzgsNyArMjgwLDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9u
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWYKICAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAg
ICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFzZS0+aWQoKTsKICAgICBkYXRhYmFzZS0+bV92
ZXJzaW9uID0gdmVyc2lvbjsKLSAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+dXBk
YXRlSURCRGF0YWJhc2VNZXRhRGF0YShkYXRhYmFzZUlkLCBkYXRhYmFzZS0+bV92ZXJzaW9uKSkg
eworICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT51cGRhdGVJREJEYXRhYmFzZU1l
dGFEYXRhKCp0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgZGF0YWJhc2UtPm1fdmVyc2lvbikpIHsK
ICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3Rh
YmxlIHN0b3JhZ2UuIikpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMjg2LDEzICsyODgsMTQgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpzZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWYKICAg
ICBjYWxsYmFja3MtPm9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4odHJhbnNhY3Rpb24pKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpzZXRJbnRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3QgdmVyc2lvbiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpzZXRJbnRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3QgdmVyc2lvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKKyAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAgICBpbnQ2
NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFzZS0+aWQoKTsKICAgICBpbnQ2NF90IG9sZFZlcnNpb24g
PSBkYXRhYmFzZS0+bV9pbnRWZXJzaW9uOwogICAgIEFTU0VSVCh2ZXJzaW9uID4gb2xkVmVyc2lv
bik7CiAgICAgZGF0YWJhc2UtPm1faW50VmVyc2lvbiA9IHZlcnNpb247Ci0gICAgaWYgKCFkYXRh
YmFzZS0+bV9iYWNraW5nU3RvcmUtPnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihkYXRhYmFz
ZUlkLCBkYXRhYmFzZS0+bV9pbnRWZXJzaW9uKSkgeworICAgIGlmICghZGF0YWJhc2UtPm1fYmFj
a2luZ1N0b3JlLT51cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oKnRyYW5zYWN0aW9uLCBkYXRh
YmFzZUlkLCBkYXRhYmFzZS0+bV9pbnRWZXJzaW9uKSkgewogICAgICAgICBjYWxsYmFja3MtPm9u
RXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktO
T1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CiAgICAg
ICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmgKaW5kZXggN2YzMWNiMDRlYTRlZGJmY2Q2NzIxN2MxOWM4Y2E3YTJjOTczYmUxMS4uOGNjZjAx
OGViODM5NDc3MTRiOTgxZDJjMmYzZTZmMGRjYmE4YjBkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApA
QCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU9iamVjdFN0
b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGRl
bGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0
YXRpYyB2b2lkIHNldFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4pOwotICAgIHN0YXRpYyB2b2lkIHNldEludFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgaW50NjRf
dCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisgICAgc3RhdGljIHZvaWQgc2V0SW50VmVyc2lvbklu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+LCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAKICAgICAvLyBUaGVzZSBhcmUg
dXNlZCBhcyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGFib3J0IHRhc2tzLgogICAgIHN0YXRpYyB2
b2lkIHJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCmluZGV4IDM4Y2ZjZWM5N2ZiMjcwMTNkYjcx
MDRkZjc3NjIwYWIwZDYyNjA1ZjMuLjRhMjVhNDhlYmU2ZWE2M2M1OTU0NjY3Nzc4OTNmNmUwZWY1
NzlhMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4QmFja2VuZEltcGwuY3BwCkBAIC03NCwxOSArNzQsMjAgQEAgSURCSW5kZXhNZXRh
ZGF0YSBJREJJbmRleEJhY2tlbmRJbXBsOjptZXRhZGF0YSgpIGNvbnN0CiAgICAgcmV0dXJuIElE
QkluZGV4TWV0YWRhdGEobV9uYW1lLCBtX2tleVBhdGgsIG1fdW5pcXVlLCBtX211bHRpRW50cnkp
OwogfQogCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRl
eCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IHVudHlwZWRE
aXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlw
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1w
bDo6b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5n
ZSwgdW5zaWduZWQgc2hvcnQgdW50eXBlZERpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0
aW9uKQogewogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcklu
dGVybmFsIik7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uID0gcHJwVHJhbnNhY3Rpb247CiAgICAgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9u
ID0gc3RhdGljX2Nhc3Q8SURCQ3Vyc29yOjpEaXJlY3Rpb24+KHVudHlwZWREaXJlY3Rpb24pOwog
CiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7
CiAKICAgICBzd2l0Y2ggKGN1cnNvclR5cGUpIHsKICAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yOgotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBp
bmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcihpbmRleC0+ZGF0YWJhc2VJ
ZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5n
ZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgt
PmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3IoKnRyYW5zYWN0aW9uLCBpbmRleC0+
ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5p
ZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEN1cnNvcjoKLSAgICAgICAgYmFja2luZ1N0
b3JlQ3Vyc29yID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhDdXJzb3IoaW5kZXgt
PmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+
aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNv
ciA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4Q3Vyc29yKCp0cmFuc2FjdGlvbiwg
aW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBp
bmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJzb3I6CiAgICAg
Y2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZToKQEAgLTEy
NywxMiArMTI4LDEzIEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbktleUN1cnNvcihQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgdW5zCiAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIAotdm9pZCBJ
REJJbmRleEJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQg
SURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24pCiB7CiAgICAg
SURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsIik7CisgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rp
b247CiAgICAgdWludDMyX3QgY291bnQgPSAwOwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9w
ZW5JbmRleEtleUN1cnNvcihpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9y
ZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhU
KTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNv
ciA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKCp0cmFuc2FjdGlv
biwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgp
LCBpbmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CiAgICAgaWYgKCFi
YWNraW5nU3RvcmVDdXJzb3IpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpudW1iZXJWYWx1ZShjb3VudCkpOwogICAgICAgICByZXR1cm47CkBA
IC0xNDUsMjQgKzE0NywyNiBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSQogICAgIGNhbGxiYWNr
cy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsK
IH0KIAotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudChQYXNzUmVmUHRyPElEQktleVJh
bmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2
b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50Iik7Ci0gICAgaWYgKCFJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uKS0+c2NoZWR1bGVUYXNrKAot
ICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZjb3VudEludGVybmFsLCB0aGlzLCByYW5n
ZSwgY2FsbGJhY2tzKSkpCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRy
YW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0
cik7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAorICAgICAgICAgICAgY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZjb3VudEludGVybmFsLCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzLCB0
cmFuc2FjdGlvbikpKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FD
VElPTl9JTkFDVElWRV9FUlI7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0SW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tl
bmRJbXBsOjpnZXRJbnRlcm5hbCIpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwogCiAgICAgUmVmUHRyPElEQktleT4g
a2V5OwogCiAgICAgaWYgKGtleVJhbmdlLT5pc09ubHlLZXkoKSkKICAgICAgICAga2V5ID0ga2V5
UmFuZ2UtPmxvd2VyKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5v
cGVuSW5kZXhDdXJzb3IoaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVC
YWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwga2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVY
VCk7CisgICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3Jl
Q3Vyc29yID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhDdXJzb3IoKnRyYW5zYWN0
aW9uLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlk
KCksIGluZGV4LT5pZCgpLCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKIAogICAg
ICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKQEAgLTE3
Miw5ICsxNzYsOSBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZAogICAgICAgICBiYWNraW5nU3Rv
cmVDdXJzb3ItPmNsb3NlKCk7CiAgICAgfQogCi0gICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtl
eSA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KGluZGV4LT5k
YXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlk
KCksICprZXkpOworICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBpbmRleC0+YmFja2lu
Z1N0b3JlKCktPmdldFByaW1hcnlLZXlWaWFJbmRleCgqdHJhbnNhY3Rpb24sIGluZGV4LT5kYXRh
YmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCks
ICprZXkpOwogCi0gICAgU3RyaW5nIHZhbHVlID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRP
YmplY3RTdG9yZVJlY29yZChpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9y
ZUJhY2tlbmQtPmlkKCksICpwcmltYXJ5S2V5KTsKKyAgICBTdHJpbmcgdmFsdWUgPSBpbmRleC0+
YmFja2luZ1N0b3JlKCktPmdldE9iamVjdFN0b3JlUmVjb3JkKCp0cmFuc2FjdGlvbiwgaW5kZXgt
PmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCAqcHJpbWFy
eUtleSk7CiAKICAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAgY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKQEAgLTE4
OCwxOSArMTkyLDIwIEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kCiAgICAgY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh2YWx1ZSkpOwog
fQogCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEtleUludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5k
ZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRLZXlJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFj
a2VuZEltcGw6OmdldEludGVybmFsIik7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CiAKICAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9Ci0gICAgICAgICAgICBpbmRl
eC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcihpbmRleC0+ZGF0YWJhc2VJZCgp
LCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCBrZXlSYW5n
ZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICAgICAgICAgIGluZGV4LT5iYWNraW5nU3Rv
cmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKCp0cmFuc2FjdGlvbiwgaW5kZXgtPmRhdGFiYXNlSWQo
KSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwga2V5UmFu
Z2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CiAKICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNv
cikgewogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxJREJLZXkqPigw
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCS2V5PiBrZXlSZXN1
bHQgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlWaWFJbmRleChpbmRleC0+
ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5p
ZCgpLCAqYmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKSk7CisgICAgUmVmUHRyPElEQktleT4ga2V5
UmVzdWx0ID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgoKnRy
YW5zYWN0aW9uLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tl
bmQtPmlkKCksIGluZGV4LT5pZCgpLCAqYmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKSk7CiAgICAg
aWYgKCFrZXlSZXN1bHQpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nh
c3Q8SURCS2V5Kj4oMCkpOwogICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7CkBA
IC0yMTEsMjUgKzIxNiwyNiBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEtleUludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZQogfQogCiAKLXZvaWQg
SURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
SURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmdldCIpOwogICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IHRoaXM7CiAgICAgUmVmUHRyPElEQktleVJhbmdl
PiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBpZiAoIUlEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OmZyb20odHJhbnNhY3Rpb24pLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxs
YmFja1Rhc2soJmdldEludGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpKQorICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOworICAgIGlmICghdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmdldEludGVybmFsLCBpbmRl
eCwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lkIElE
QkluZGV4QmFja2VuZEltcGw6OmdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlS
YW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lk
IElEQkluZGV4QmFja2VuZEltcGw6OmdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBL
ZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRLZXkiKTsKICAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0aGlzOwogICAgIFJlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBLZXlSYW5nZTsKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgaWYgKCFJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uKS0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZnZXRLZXlJbnRlcm5hbCwgaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFj
a3MpKSkKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24g
PSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKKyAgICBp
ZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFj
a1Rhc2soJmdldEtleUludGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNh
Y3Rpb24pKSkKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05f
SU5BQ1RJVkVfRVJSOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgKaW5kZXggZTExNzQ1NzlkNjE3M2FjZTU4NDA3
ZGMyYmY1MzM5ZjJiZjM5YjQwYy4uMTczYzMyZDA4ZmYxNDMzYjk5OTBlNTA1MjI1MGNjODljYTZk
YThiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4QmFja2VuZEltcGwuaApAQCAtNzksOSArNzksOSBAQCBwcml2YXRlOgogICAgIElEQklu
ZGV4QmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBi
b29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKIAogICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJz
b3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVj
dGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKLSAg
ICBzdGF0aWMgdm9pZCBjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgc3Rh
dGljIHZvaWQgZ2V0S2V5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4pOworICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOworICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRL
ZXlJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAKICAgICBzdGF0
aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmlu
ZGV4IDkzMGUyMGIzYjgzNWRkYWVkNTM3ZTdlMTkwYjE0NTEyZWFlNDcyNmEuLjY1ZjkxNTg1MjRl
MDNmMTE1ZDk5NDJmNTA4ZDAwMmZkZTY1N2UxZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCkBA
IC0zMzYsMjIgKzMzNiwyMCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlE
QkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdAogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNl
SW50VmVyc2lvbihpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pCitib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCBp
bnRWZXJzaW9uKQogewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgLy8g
RklYTUU6IENoYW5nZSB0aGlzIHRvIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAwIG9uY2Ugd2UgdGhy
b3cgVHlwZUVycm9yIGZvcgogICAgIC8vIGJhZCB2ZXJzaW9ucy4KICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKGludFZlcnNpb24gPj0gMCwgImludFZlcnNpb24gd2FzICVsbGQiLCBzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KGludFZlcnNpb24pKTsKLSAgICBpZiAoIXB1dFZhckludChtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRh
YmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVyc2lvbiksIGludFZlcnNpb24pKQorICAgIGlmICgh
cHV0VmFySW50KFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9u
KSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5
OjpVc2VySW50VmVyc2lvbiksIGludFZlcnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRh
dGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lv
bikKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0
YShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJ
ZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQogewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2Fj
dGlvbik7Ci0gICAgaWYgKCFwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIERh
dGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNl
clZlcnNpb24pLCB2ZXJzaW9uKSkKKyAgICBpZiAoIXB1dFN0cmluZyhUcmFuc2FjdGlvbjo6bGV2
ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbiksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVu
Y29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC01MTksMTEgKzUx
NywxMSBAQCBzdGF0aWMgaW50NjRfdCBnZXROZXdPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YQogICAgIHJldHVybiBvYmplY3RTdG9yZUlk
OwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGlu
dDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBr
ZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJ
ZCkKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9J
bmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKIHsKICAgICBJREJfVFJB
Q0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlIik7Ci0gICAgQVNT
RVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBn
ZXROZXdPYmplY3RTdG9yZUlkKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlk
KTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0
aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBpbnQ2NF90IG9i
amVjdFN0b3JlSWQgPSBnZXROZXdPYmplY3RTdG9yZUlkKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0
YWJhc2VJZCk7CiAgICAgaWYgKG9iamVjdFN0b3JlSWQgPCAwKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTUzNyw1NSArNTM1LDU1IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmCiAgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0
U3RvcmVNZXRhRGF0YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CiAgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IG5hbWVzS2V5ID0gT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG5hbWUpOwogCi0gICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7CisgICAgYm9vbCBvayA9IHB1dFN0cmluZyhsZXZl
bERCVHJhbnNhY3Rpb24sIG5hbWVLZXksIG5hbWUpOwogICAgIGlmICghb2spIHsKICAgICAgICAg
TE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJREJLZXlQYXRoKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBrZXlQYXRoS2V5LCBrZXlQYXRoKTsKKyAgICBvayA9IHB1dElEQktleVBhdGgo
bGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlQYXRoS2V5LCBrZXlQYXRoKTsKICAgICBpZiAoIW9rKSB7
CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5z
YWN0aW9uLmdldCgpLCBhdXRvSW5jcmVtZW50S2V5LCBhdXRvSW5jcmVtZW50KTsKKyAgICBvayA9
IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIGF1dG9JbmNyZW1lbnRLZXksIGF1dG9JbmNyZW1l
bnQpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVk
IERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBw
dXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGV2aWN0YWJsZUtleSwgZmFsc2UpOwor
ICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7
CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIg
ZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dElu
dChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbGFzdFZlcnNpb25LZXksIDEpOworICAgIG9r
ID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXksIDEpOwogICAgIGlm
ICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9jdXJy
ZW50VHJhbnNhY3Rpb24uZ2V0KCksIG1heEluZGV4SWRLZXksIE1pbmltdW1JbmRleElkKTsKKyAg
ICBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIE1pbmltdW1J
bmRleElkKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5k
ZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9r
ID0gcHV0Qm9vbChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgaGFzS2V5UGF0aEtleSwgIWtl
eVBhdGguaXNOdWxsKCkpOworICAgIG9rID0gcHV0Qm9vbChsZXZlbERCVHJhbnNhY3Rpb24sIGhh
c0tleVBhdGhLZXksICFrZXlQYXRoLmlzTnVsbCgpKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAg
IExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5LCBLZXlHZW5lcmF0b3JJbml0aWFsTnVt
YmVyKTsKKyAgICBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIGtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXJLZXksIEtleUdlbmVyYXRvckluaXRpYWxOdW1iZXIpOwogICAgIGlmICghb2sp
IHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIG5hbWVzS2V5LCBvYmplY3RTdG9yZUlkKTsKKyAgICBvayA9IHB1dElu
dChsZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVzS2V5LCBvYmplY3RTdG9yZUlkKTsKICAgICBpZiAo
IW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTk2LDM1ICs1OTQsMzYgQEAgYm9vbCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3Rv
cmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUiKTsKLSAgICBBU1NFUlQobV9jdXJy
ZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0
aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwog
CiAgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZTsKLSAgICBnZXRTdHJpbmcobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpOYW1lKSwgb2JqZWN0U3Rv
cmVOYW1lKTsKKyAgICBnZXRTdHJpbmcobGV2ZWxEQlRyYW5zYWN0aW9uLCBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVN
ZXRhRGF0YUtleTo6TmFtZSksIG9iamVjdFN0b3JlTmFtZSk7CiAKLSAgICBpZiAoIWRlbGV0ZVJh
bmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpCisgICAgaWYgKCFk
ZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkKICAgICAgICAgcmV0
dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgogCi0gICAgbV9jdXJyZW50VHJhbnNhY3Rpb24t
PnJlbW92ZShPYmplY3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVOYW1lKSk7CisgICAgbGV2ZWxEQlRyYW5zYWN0aW9uLT5yZW1vdmUoT2JqZWN0U3RvcmVOYW1l
c0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlTmFtZSkpOwogCi0gICAgaWYgKCFk
ZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgSW5kZXhGcmVlTGlzdEtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBJbmRleEZyZWVMaXN0S2V5Ojpl
bmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKQorICAgIGlmICghZGVsZXRl
UmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZU1heEtleShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpCiAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJl
cG9ydCBlcnJvci4KLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
MCwgMCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkKSkpCisgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIEluZGV4
TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKSwgSW5k
ZXhNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkK
ICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgogCi0gICAgY2xlYXJPYmpl
Y3RTdG9yZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKKyAgICBjbGVhck9iamVjdFN0b3Jl
KHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKIH0KIAotU3RyaW5nIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSkKK1N0cmluZyBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5KQogewogICAgIElEQl9UUkFDRSgiSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQiKTsKKyAgICBMZXZlbERC
VHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJh
bnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZl
bGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwga2V5KTsKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgIEFTU0VSVChtX2N1cnJl
bnRUcmFuc2FjdGlvbik7Ci0gICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Z2V0KGxldmVs
ZGJLZXksIGRhdGEpKQorICAgIGlmICghbGV2ZWxEQlRyYW5zYWN0aW9uLT5nZXQobGV2ZWxkYktl
eSwgZGF0YSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGludDY0X3QgdmVyc2lv
bjsKQEAgLTY3NiwyMyArNjc1LDIzIEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1i
ZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhCiAgICAgcmV0
dXJuIHZlcnNpb247CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0
U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleSYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OnB1dE9iamVjdFN0b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3JkIik7CiAgICAgQVNTRVJUKGtleS5pc1ZhbGlk
KCkpOwotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgaW50NjRfdCB2ZXJz
aW9uID0gZ2V0TmV3VmVyc2lvbk51bWJlcihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERC
VHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2Fj
dGlvbik7CisgICAgaW50NjRfdCB2ZXJzaW9uID0gZ2V0TmV3VmVyc2lvbk51bWJlcihsZXZlbERC
VHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwogICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBvYmplY3RTdG9yZWRhdGFLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwogCiAgICAgVmVjdG9yPGNoYXI+IHY7CiAg
ICAgdi5hcHBlbmQoZW5jb2RlVmFySW50KHZlcnNpb24pKTsKICAgICB2LmFwcGVuZChlbmNvZGVT
dHJpbmcodmFsdWUpKTsKIAotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChvYmpl
Y3RTdG9yZWRhdGFLZXksIHYpKQorICAgIGlmICghbGV2ZWxEQlRyYW5zYWN0aW9uLT5wdXQob2Jq
ZWN0U3RvcmVkYXRhS2V5LCB2KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rp
b24tPnB1dChleGlzdHNFbnRyeUtleSwgZW5jb2RlSW50KHZlcnNpb24pKSkKKyAgICBpZiAoIWxl
dmVsREJUcmFuc2FjdGlvbi0+cHV0KGV4aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllciog
bGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxMZXZlbERCUmVjb3JkSWRlbnRp
Zmllcio+KHJlY29yZElkZW50aWZpZXIpOwpAQCAtNzAxLDE0ICs3MDAsMTQgQEAgYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2IKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKQordm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0
b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUiKTsKLSAgICBBU1NFUlQobV9jdXJy
ZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0
aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwog
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCAwKS5lbmNvZGUoKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtl
eSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkICsgMSwgMCkuZW5jb2RlKCk7
CiAKLSAgICBkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXks
IHN0b3BLZXkpOworICAgIGRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwgc3RhcnRLZXks
IHN0b3BLZXkpOwogfQogCiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbnZhbGlkUmVj
b3JkSWRlbnRpZmllcigpCkBAIC03MTYsMzAgKzcxNSwzMCBAQCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBJREJMZXZlbERCQmFja2luZ1N0
b3JlOgogICAgIHJldHVybiBMZXZlbERCUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKCk7CiB9CiAK
LXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKK3ZvaWQgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIp
CiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RT
dG9yZVJlY29yZCIpOwotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2
ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxE
QlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgY29uc3QgTGV2ZWxEQlJlY29yZElk
ZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2
ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKIAogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBvYmplY3RTdG9yZURhdGFLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJp
bWFyeUtleSgpKTsKLSAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKG9iamVjdFN0b3Jl
RGF0YUtleSk7CisgICAgbGV2ZWxEQlRyYW5zYWN0aW9uLT5yZW1vdmUob2JqZWN0U3RvcmVEYXRh
S2V5KTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0Vu
dHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElk
ZW50aWZpZXItPnByaW1hcnlLZXkoKSk7Ci0gICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92
ZShleGlzdHNFbnRyeUtleSk7CisgICAgbGV2ZWxEQlRyYW5zYWN0aW9uLT5yZW1vdmUoZXhpc3Rz
RW50cnlLZXkpOwogfQogCiAKLWludDY0X3QgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCkKK2ludDY0X3QgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9y
Q3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7Ci0gICAgQVNTRVJU
KG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJU
cmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0
aW9uKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
S2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OktleUdlbmVyYXRvckN1cnJlbnROdW1iZXIp
OwogCiAgICAgaW50NjRfdCBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyID0gLTE7CiAgICAgVmVj
dG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAobV9jdXJyZW50VHJhbnNhY3Rpb24tPmdldChrZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5LCBkYXRhKSkKKyAgICBpZiAobGV2ZWxEQlRyYW5zYWN0
aW9uLT5nZXQoa2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgZGF0YSkpCiAgICAgICAgIGtl
eUdlbmVyYXRvckN1cnJlbnROdW1iZXIgPSBkZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVu
ZCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gUHJldmlvdXNseSwgdGhlIGtleSBnZW5lcmF0
b3Igc3RhdGUgd2FzIG5vdCBzdG9yZWQgZXhwbGljaXRseSBidXQgZGVyaXZlZCBmcm9tIHRoZQpA
QCAtNzQ4LDcgKzc0Nyw3IEBAIGludDY0X3QgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsCiAgICAgICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIG1pbklEQktleSgpKTsKICAgICAgICAgY29uc3QgVmVjdG9y
PGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7CiAKLSAgICAgICAgT3duUHRyPExldmVsREJJdGVy
YXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICAg
ICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBsZXZlbERCVHJhbnNhY3Rpb24tPmNyZWF0
ZUl0ZXJhdG9yKCk7CiAgICAgICAgIGludDY0X3QgbWF4TnVtZXJpY0tleSA9IDA7CiAKICAgICAg
ICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMo
aXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKQEAgLTc3MiwxOCArNzcxLDE4
IEBAIGludDY0X3QgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsCiAgICAgcmV0dXJuIGtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXI7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVL
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpCitib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJl
cihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNo
ZWNrQ3VycmVudCkKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExl
dmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVs
REJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgaWYgKGNoZWNrQ3VycmVudCkg
ewotICAgICAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXIgPSBnZXRLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOworICAgICAgICBpbnQ2NF90IGN1cnJl
bnROdW1iZXIgPSBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLCBkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKICAgICAgICAgaWYgKG5ld051bWJlciA8PSBjdXJyZW50
TnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgY29uc3QgVmVj
dG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7Ci0gICAgYm9vbCBvayA9IHB1dElu
dChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktl
eSwgbmV3TnVtYmVyKTsKKyAgICBib29sIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwg
a2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgbmV3TnVtYmVyKTsKICAgICBpZiAoIW9rKSB7
CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNzkxLDE0ICs3OTAsMTQgQEAgYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBk
YXRhYmEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
KiBmb3VuZFJlY29yZElkZW50aWZpZXIpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6Omtl
eUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXkmIGtleSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50
aWZpZXIpCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlz
dHNJbk9iamVjdFN0b3JlIik7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAg
ICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjps
ZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gbGV2ZWxkYktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGtleSk7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAoIW1f
Y3VycmVudFRyYW5zYWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCisgICAgaWYgKCFsZXZl
bERCVHJhbnNhY3Rpb24tPmdldChsZXZlbGRiS2V5LCBkYXRhKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaW50NjRfdCB2ZXJzaW9uOwpAQCAtODExLDEzICs4MTAsMTMgQEAgYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYgY2FsbGJh
Y2spCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZvckVhY2hPYmplY3RTdG9yZVJlY29y
ZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2sm
IGNhbGxiYWNrKQogewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2
ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxE
QlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0
YXJ0S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgbWluSURCS2V5KCkpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2Jq
ZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4SURC
S2V5KCkpOwogCi0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFu
c2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBp
dCA9IGxldmVsREJUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBmb3IgKGl0LT5z
ZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0
b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewogICAgICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtl
eSgpLmJlZ2luKCk7CiAgICAgICAgIGNvbnN0IGNoYXIqIGxpbWl0ID0gaXQtPmtleSgpLmVuZCgp
OwpAQCAtOTM1LDExICs5MzQsMTEgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZl
bERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQKICAgICByZXR1
cm4gaW5kZXhJZDsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRl
eChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBib29sIGlz
TXVsdGlFbnRyeSwgaW50NjRfdCYgaW5kZXhJZCkKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNN
dWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRleElkKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNh
Y3Rpb24pOwotICAgIGluZGV4SWQgPSBnZXROZXdJbmRleElkKG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rp
b24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25G
cm9tKHRyYW5zYWN0aW9uKTsKKyAgICBpbmRleElkID0gZ2V0TmV3SW5kZXhJZChsZXZlbERCVHJh
bnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwogICAgIGlmIChpbmRleElkIDwg
MCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC05NDgsMjUgKzk0NywyNSBAQCBib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZQogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5ID0gSW5k
ZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQs
IEluZGV4TWV0YURhdGFLZXk6OktleVBhdGgpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtdWx0
aUVudHJ5S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIEluZGV4TWV0YURhdGFLZXk6Ok11bHRpRW50cnkpOwogCi0gICAgYm9v
bCBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZUtleSwgbmFt
ZSk7CisgICAgYm9vbCBvayA9IHB1dFN0cmluZyhsZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVLZXks
IG5hbWUpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRl
eGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sg
PSBwdXRCb29sKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCB1bmlxdWVLZXksIGlzVW5pcXVl
KTsKKyAgICBvayA9IHB1dEJvb2wobGV2ZWxEQlRyYW5zYWN0aW9uLCB1bmlxdWVLZXksIGlzVW5p
cXVlKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhl
ZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0g
cHV0SURCS2V5UGF0aChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5UGF0aEtleSwga2V5
UGF0aCk7CisgICAgb2sgPSBwdXRJREJLZXlQYXRoKGxldmVsREJUcmFuc2FjdGlvbiwga2V5UGF0
aEtleSwga2V5UGF0aCk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkludGVy
bmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBvayA9IHB1dEJvb2wobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG11bHRpRW50cnlL
ZXksIGlzTXVsdGlFbnRyeSk7CisgICAgb2sgPSBwdXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwg
bXVsdGlFbnRyeUtleSwgaXNNdWx0aUVudHJ5KTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExP
R19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtOTc1LDE1ICs5NzQsMTUgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpj
cmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmUKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRl
eChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkKQordm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKIHsKICAgICBJREJfVFJBQ0UoIklE
QkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4Iik7Ci0gICAgQVNTRVJUKG1fY3VycmVu
dFRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlv
biA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAog
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleE1ldGFEYXRhU3RhcnQgPSBJbmRleE1ldGFEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMCk7CiAgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IGluZGV4TWV0YURhdGFFbmQgPSBJbmRleE1ldGFEYXRhS2V5Ojpl
bmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CiAKLSAgICBp
ZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBpbmRleE1ldGFEYXRh
U3RhcnQsIGluZGV4TWV0YURhdGFFbmQpKSB7CisgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERC
VHJhbnNhY3Rpb24sIGluZGV4TWV0YURhdGFTdGFydCwgaW5kZXhNZXRhRGF0YUVuZCkpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtOTkxLDI3ICs5OTAsMjcgQEAgdm9pZCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmUKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhU3RhcnQgPSBJbmRleERhdGFLZXk6
OmVuY29kZU1pbktleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhRW5kID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNYXhL
ZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CiAKLSAgICBpZiAoIWRlbGV0
ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBpbmRleERhdGFTdGFydCwgaW5kZXhE
YXRhRW5kKSkgeworICAgIGlmICghZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBpbmRl
eERhdGFTdGFydCwgaW5kZXhEYXRhRW5kKSkgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFs
IEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKLWJvb2wg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSYga2V5LCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50
aWZpZXIpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29y
ZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JiBrZXksIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRp
ZmllcikKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4
RGF0YUZvclJlY29yZCIpOwogICAgIEFTU0VSVChrZXkuaXNWYWxpZCgpKTsKICAgICBBU1NFUlQo
aW5kZXhJZCA+PSBNaW5pbXVtSW5kZXhJZCk7CiAgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50
aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxE
QlJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKIAotICAgIEFTU0VSVChtX2N1
cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNh
Y3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7
CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4RGF0YUtleSA9IEluZGV4RGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGVuY29kZUlEQktleShrZXkp
LCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKIAogICAgIFZlY3Rvcjxj
aGFyPiBkYXRhOwogICAgIGRhdGEuYXBwZW5kKGVuY29kZVZhckludChsZXZlbERCUmVjb3JkSWRl
bnRpZmllci0+dmVyc2lvbigpKSk7CiAgICAgZGF0YS5hcHBlbmQobGV2ZWxEQlJlY29yZElkZW50
aWZpZXItPnByaW1hcnlLZXkoKSk7CiAKLSAgICByZXR1cm4gbV9jdXJyZW50VHJhbnNhY3Rpb24t
PnB1dChpbmRleERhdGFLZXksIGRhdGEpOworICAgIHJldHVybiBsZXZlbERCVHJhbnNhY3Rpb24t
PnB1dChpbmRleERhdGFLZXksIGRhdGEpOwogfQogCiBzdGF0aWMgYm9vbCBmaW5kR3JlYXRlc3RL
ZXlMZXNzVGhhbk9yRXF1YWwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3Qg
VmVjdG9yPGNoYXI+JiB0YXJnZXQsIFZlY3RvcjxjaGFyPiYgZm91bmRLZXkpCkBAIC0xMDQyLDcg
KzEwNDEsNyBAQCBzdGF0aWMgYm9vbCBmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwoTGV2
ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChp
bnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90LCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqKQorYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNv
cmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QsIGludDY0X3QsIGludDY0
X3QsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopCiB7CiAgICAgLy8gRklYTUU6
IFRoaXMgaXNuJ3QgbmVlZGVkIHNpbmNlIHdlIGludmFsaWRhdGUgaW5kZXggZGF0YSB2aWEgdGhl
IHZlcnNpb24gbnVtYmVyIG1lY2hhbmlzbS4KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwNTksMTMg
KzEwNTgsMTQgQEAgc3RhdGljIGJvb2wgdmVyc2lvbkV4aXN0cyhMZXZlbERCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGkKICAgICByZXR1cm4gZGVjb2RlSW50
KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSkgPT0gdmVyc2lvbjsKIH0KIAotYm9vbCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgVmVj
dG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KQorYm9vbCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpmaW5kS2V5SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVk
UHJpbWFyeUtleSkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmZp
bmRLZXlJbkluZGV4Iik7CiAgICAgQVNTRVJUKGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuaXNFbXB0
eSgpKTsKIAorICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJh
bnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5KTsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJh
dG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93
blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbGV2ZWxEQlRyYW5zYWN0aW9uLT5jcmVhdGVJdGVy
YXRvcigpOwogICAgIGl0LT5zZWVrKGxldmVsZGJLZXkpOwogCiAgICAgZm9yICg7OykgewpAQCAt
MTA4MCw5ICsxMDgwLDkgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5J
bmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3QKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgZm91bmRFbmNvZGVkUHJpbWFyeUtleS5hcHBlbmQocCwgaXQt
PnZhbHVlKCkuZW5kKCkgLSBwKTsKIAotICAgICAgICBpZiAoIXZlcnNpb25FeGlzdHMobV9jdXJy
ZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24s
IGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKSB7CisgICAgICAgIGlmICghdmVyc2lvbkV4aXN0cyhs
ZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGZv
dW5kRW5jb2RlZFByaW1hcnlLZXkpKSB7CiAgICAgICAgICAgICAvLyBEZWxldGUgc3RhbGUgaW5k
ZXggZGF0YSBlbnRyeSBhbmQgY29udGludWUuCi0gICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2Fj
dGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSk7CisgICAgICAgICAgICBsZXZlbERCVHJhbnNhY3Rpb24t
PnJlbW92ZShpdC0+a2V5KCkpOwogICAgICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0xMDkxLDEzICsxMDkxLDEyIEBAIGJvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0CiAgICAgfQogfQogCi1QYXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQor
UGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlW
aWFJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5JiBrZXkpCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rp
b24pOwogCiAgICAgVmVjdG9yPGNoYXI+IGZvdW5kRW5jb2RlZFByaW1hcnlLZXk7Ci0gICAgaWYg
KGZpbmRLZXlJbkluZGV4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwg
Zm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKKyAgICBpZiAoZmluZEtleUluSW5kZXgodHJhbnNh
Y3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgZm91bmRFbmNv
ZGVkUHJpbWFyeUtleSkpIHsKICAgICAgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleTsKICAg
ICAgICAgZGVjb2RlSURCS2V5KGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgZm91bmRF
bmNvZGVkUHJpbWFyeUtleS5lbmQoKSwgcHJpbWFyeUtleSk7CiAgICAgICAgIHJldHVybiBwcmlt
YXJ5S2V5LnJlbGVhc2UoKTsKQEAgLTExMDYsMTMgKzExMDUsMTIgQEAgUGFzc1JlZlB0cjxJREJL
ZXk+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90
IGRhdGFiYXMKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjprZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJL
ZXk+JiBmb3VuZFByaW1hcnlLZXkpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4
aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkp
CiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbklu
ZGV4Iik7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKIAogICAgIFZlY3Rvcjxj
aGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5OwotICAgIGlmICghZmluZEtleUluSW5kZXgoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgaW5kZXhLZXksIGZvdW5kRW5jb2RlZFBy
aW1hcnlLZXkpKQorICAgIGlmICghZmluZEtleUluSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGluZGV4S2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5
S2V5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgZGVjb2RlSURCS2V5KGZvdW5kRW5j
b2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleS5lbmQoKSwgZm91
bmRQcmltYXJ5S2V5KTsKQEAgLTE2ODksNTYgKzE2ODcsNTYgQEAgYm9vbCBpbmRleEN1cnNvck9w
dGlvbnMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQKIAogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJz
b3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50
VHJhbnNhY3Rpb24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9u
ID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAg
IEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKLSAgICBpZiAoIW9iamVjdFN0b3JlQ3Vyc29y
T3B0aW9ucyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCisgICAgaWYgKCFvYmplY3RT
dG9yZUN1cnNvck9wdGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3Rv
cmVDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9w
dGlvbnMpOworICAgIFJlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVj
dFN0b3JlQ3Vyc29ySW1wbDo6Y3JlYXRlKGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9u
cyk7CiAgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIAog
ICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlD
dXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Bl
bk9iamVjdFN0b3JlS2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAg
ICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlD
dXJzb3IiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJU
cmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFu
c2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9u
czsKLSAgICBpZiAoIW9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhtX2N1cnJlbnRUcmFuc2FjdGlv
bi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vy
c29yT3B0aW9ucykpCisgICAgaWYgKCFvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMobGV2ZWxEQlRy
YW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0aW9uLCBj
dXJzb3JPcHRpb25zKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPE9iamVjdFN0b3Jl
S2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUo
bV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOworICAgIFJlZlB0cjxP
YmplY3RTdG9yZUtleUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1w
bDo6Y3JlYXRlKGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7CiAgICAgaWYgKCFj
dXJzb3ItPmZpcnN0U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBjdXJz
b3IucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5k
ZXhLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9u
KQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5
Q3Vyc29yIik7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERC
VHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJh
bnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlv
bnM7Ci0gICAgaWYgKCFpbmRleEN1cnNvck9wdGlvbnMobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0
KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBkaXJlY3Rpb24s
IGN1cnNvck9wdGlvbnMpKQorICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25zKGxldmVsREJUcmFu
c2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmFuZ2UsIGRpcmVj
dGlvbiwgY3Vyc29yT3B0aW9ucykpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxJbmRl
eEtleUN1cnNvckltcGw+IGN1cnNvciA9IEluZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3Vy
cmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zKTsKKyAgICBSZWZQdHI8SW5kZXhL
ZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEtleUN1cnNvckltcGw6OmNyZWF0ZShsZXZlbERC
VHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpOwogICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWso
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKIH0K
IAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6b3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFu
Z2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklE
QkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvciIpOwotICAgIEFTU0VSVChtX2N1
cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNh
Y3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7
CiAgICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwotICAgIGlmICghaW5kZXhDdXJzb3JP
cHRpb25zKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKKyAgICBpZiAo
IWluZGV4Q3Vyc29yT3B0aW9ucyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRl
eEN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0
aW9ucyk7CisgICAgUmVmUHRyPEluZGV4Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhDdXJzb3JJ
bXBsOjpjcmVhdGUobGV2ZWxEQlRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKTsKICAgICBpZiAo
IWN1cnNvci0+Zmlyc3RTZWVrKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xNzU3LDMwICsx
NzU1LDMwIEBAIFBhc3NSZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0CiAKIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbihJREJMZXZlbERCQmFja2luZ1N0b3JlKiBiYWNr
aW5nU3RvcmUpCiAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgLCBtX3Ry
YW5zYWN0aW9uKExldmVsREJUcmFuc2FjdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLT5tX2Ri
LmdldCgpKSkKIHsKIH0KIAogdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
bjo6YmVnaW4oKQogewotICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5z
YWN0aW9uKTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24gPSBMZXZl
bERCVHJhbnNhY3Rpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS0+bV9kYi5nZXQoKSk7CisgICAg
Ly8gRklYTUU6IERvIHdlIG5lZWQgdGhpcyBBUEksIG9yIGp1c3QgY3JlYXRlIHRoZSB0cmFuc2Fj
dGlvbiBpbiB0aGUgY29uc3RydWN0b3I/CiB9CiAKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb246OmNvbW1pdCgpCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0Iik7Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0
b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgYm9vbCByZXN1bHQgPSBtX2JhY2tpbmdT
dG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24tPmNvbW1pdCgpOwotICAgIG1fYmFja2luZ1N0b3Jl
LT5tX2N1cnJlbnRUcmFuc2FjdGlvbi5jbGVhcigpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9u
KTsKKyAgICBib29sIHJlc3VsdCA9IG1fdHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIG1fdHJh
bnNhY3Rpb24uY2xlYXIoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpyb2xsYmFjaygpCiB7CiAgICAgSURCX1RSQUNF
KCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2siKTsKLSAgICBB
U1NFUlQobV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBtX2JhY2tp
bmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7Ci0gICAgbV9iYWNraW5n
U3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgQVNTRVJUKG1fdHJhbnNh
Y3Rpb24pOworICAgIG1fdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisgICAgbV90cmFuc2FjdGlv
bi5jbGVhcigpOwogfQogCiBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmJhY2tpbmdTdG9y
ZUV4aXN0cyhTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYgcGF0aEJhc2VBcmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKaW5kZXggNzMzOTIyNjkw
MTMxNTI1MGYzNWE4OGZhMjUyNWJkZTJmYzc4YjMxOS4uZDM0NWI5NGMwNTM1ZjZlMjNmYTFhYTE4
YWViM2FiNDliZGYxZGU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaApAQCAtNDcsMzYgKzQ3LDM2IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5n
PiYgZm91bmROYW1lcyk7CiAgICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEo
Y29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJ
bnRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCk7Ci0gICAgdmlydHVhbCBib29s
IHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2
ZXJzaW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKGlu
dDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbik7CisgICAgdmlydHVhbCBib29sIHVwZGF0
ZUlEQkRhdGFiYXNlTWV0YURhdGEoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYsIGludDY0
X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgdmlydHVhbCBib29sIHVwZGF0
ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiwgaW50
NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRPYmpl
Y3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBW
ZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPElEQktleVBhdGg+JiBmb3VuZEtleVBh
dGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKTsKLSAgICB2aXJ0dWFs
IGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFz
c2lnbmVkT2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFs
IGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYsIGlu
dDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwg
Ym9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOworICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IGNyZWF0ZUludmFs
aWRSZWNvcmRJZGVudGlmaWVyKCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0U3RvcmVS
ZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYpOwotICAgIHZpcnR1YWwgYm9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCB2
b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAg
IHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJv
b2wgY2hlY2tDdXJyZW50KTsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9y
ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
JiwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpOwor
ICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFN0b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3Rv
cmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVS
ZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
KTsKKyAgICB2aXJ0dWFsIGludDY0X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNr
Q3VycmVudCk7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZv
dW5kUmVjb3JkSWRlbnRpZmllcik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9iamVjdFN0
b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmpl
Y3RTdG9yZVJlY29yZENhbGxiYWNrJik7CisgICAgdmlydHVhbCBib29sIGZvckVhY2hPYmplY3RT
dG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5n
PiYgZm91bmROYW1lcywgVmVjdG9yPElEQktleVBhdGg+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8
Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3MsIFZlY3Rvcjxib29sPiYgZm91bmRNdWx0aUVudHJ5Rmxh
Z3MpOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQpOwot
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5k
ZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwot
ICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhL
ZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpOwotCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6
RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3Rv
cmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElE
QkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVu
SW5kZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7
CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRp
RW50cnksIGludDY0X3QmIGluZGV4SWQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CisgICAgdmlydHVhbCBib29sIHB1dElu
ZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVh
bCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsKKyAgICB2aXJ0dWFsIGJvb2wga2V5
RXhpc3RzSW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSk7CisKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpE
aXJlY3Rpb24pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNv
cihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJ
REJDdXJzb3I6OkRpcmVjdGlvbik7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNhY3Rp
b24+IGNyZWF0ZVRyYW5zYWN0aW9uKCk7CiAKQEAgLTg2LDEzICs4NiwxMiBAQCBwcm90ZWN0ZWQ6
CiAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIElE
QkZhY3RvcnlCYWNrZW5kSW1wbCosIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPik7CiAKIHBy
aXZhdGU6Ci0gICAgYm9vbCBmaW5kS2V5SW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8
Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpOworICAgIGJvb2wgZmluZEtleUluSW5kZXgo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIFZlY3Rvcjxj
aGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSk7CiAKICAgICBTdHJpbmcgbV9pZGVudGlmaWVy
OwogICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEltcGw+IG1fZmFjdG9yeTsKICAgICBPd25Q
dHI8TGV2ZWxEQkRhdGFiYXNlPiBtX2RiOwogICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4g
bV9jb21wYXJhdG9yOwotICAgIFJlZlB0cjxMZXZlbERCVHJhbnNhY3Rpb24+IG1fY3VycmVudFRy
YW5zYWN0aW9uOwogCiAgICAgY2xhc3MgVHJhbnNhY3Rpb24gOiBwdWJsaWMgSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiB7CiAgICAgcHVibGljOgpAQCAtMTAxLDkgKzEwMCwxNyBAQCBwcml2
YXRlOgogICAgICAgICB2aXJ0dWFsIGJvb2wgY29tbWl0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCByb2xsYmFjaygpOwogCisgICAgICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5z
YWN0aW9uKCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQoKTsgfQorCisgICAgICAgIHN0YXRp
YyBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbkZyb20oSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiY+KHRy
YW5zYWN0aW9uKS5sZXZlbERCVHJhbnNhY3Rpb24oKTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0
ZToKICAgICAgICAgVHJhbnNhY3Rpb24oSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSopOwogICAgICAg
ICBJREJMZXZlbERCQmFja2luZ1N0b3JlKiBtX2JhY2tpbmdTdG9yZTsKKyAgICAgICAgUmVmUHRy
PExldmVsREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKICAgICB9OwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCAyZmE1YzA4NGM3ZDU2NTM0ODYxZGMxZjg1NzU3ZTI3
MTgxNDU3N2Y0Li45ZTg0OWZhZTdjYTNlMmM2NzEwZWUxM2U0NTNmNmZhNGZlZDEyNWViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtODYsMTggKzg2LDE5IEBAIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJh
bmdlLCBQYXNzUmVmCiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2Fs
bGJhY2tzOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlv
biA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwogICAg
IGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwsIG9iamVjdFN0
b3JlLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSkpCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rh
c2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsLCBvYmplY3RTdG9yZSwg
a2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHBycFRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwiKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAgICBSZWZQdHI8SURC
S2V5PiBrZXk7CiAgICAgaWYgKGtleVJhbmdlLT5pc09ubHlLZXkoKSkKICAgICAgICAga2V5ID0g
a2V5UmFuZ2UtPmxvd2VyKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdT
dG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3Iob2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwg
b2JqZWN0U3RvcmUtPmlkKCksIGtleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOworICAg
ICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9
IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKCp0cmFu
c2FjdGlvbiwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGtl
eVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogICAgICAgICBpZiAoIWJhY2tpbmdTdG9y
ZUN1cnNvcikgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEw
Niw3ICsxMDcsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgICAgICBiYWNraW5nU3Rv
cmVDdXJzb3ItPmNsb3NlKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHdpcmVEYXRhID0gb2JqZWN0
U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJlY29yZChvYmplY3RTdG9yZS0+
ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSk7CisgICAgU3RyaW5nIHdpcmVE
YXRhID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJlY29yZCgq
dHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgp
LCAqa2V5KTsKICAgICBpZiAod2lyZURhdGEuaXNOdWxsKCkpIHsKICAgICAgICAgY2FsbGJhY2tz
LT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTU0LDEyICsxNTUsMTIgQEAgcHVibGljOgogICAgICAgICAsIG1f
aW5kZXhLZXlzKGluZGV4S2V5cykKICAgICB7IH0KIAotICAgIGJvb2wgdmVyaWZ5SW5kZXhLZXlz
KElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLAorICAgIGJvb2wgdmVyaWZ5SW5kZXhLZXlz
KElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDAsIFN0cmluZyogZXJy
b3JNZXNzYWdlID0gMCkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9p
bmRleEtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghYWRkaW5nS2V5QWxsb3dl
ZChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsCisgICAg
ICAgICAgICBpZiAoIWFkZGluZ0tleUFsbG93ZWQoYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwg
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAobV9pbmRleEtleXMpW2ldLmdldCgpLCBwcmltYXJ5S2V5KSkgewogICAg
ICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpCiAgICAgICAgICAgICAgICAgICAgICplcnJv
ck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5kZXggJyVz
JzogYXQgbGVhc3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNzIHJlcXVp
cmVtZW50cy4iLApAQCAtMTcwLDEyICsxNzEsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICBib29sIHdyaXRlSW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdT
dG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyLCBJREJC
YWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgY29uc3QKKyAgICBib29sIHdyaXRlSW5kZXhL
ZXlzKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBy
ZWNvcmRJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIGNvbnN0CiAgICAgewogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhLZXlzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZS5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmVjb3JkSWRlbnRpZmllcikpCisgICAgICAg
ICAgICBpZiAoIWJhY2tpbmdTdG9yZS5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rp
b24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJlY29yZElkZW50aWZpZXIp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghYmFja2lu
Z1N0b3JlLnB1dEluZGV4RGF0YUZvclJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCAqKG1faW5kZXhLZXlzKVtpXS5nZXQoKSwgcmVjb3JkSWRlbnRpZmllcikpCisgICAg
ICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZS5wdXRJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rp
b24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICoobV9pbmRleEtleXMpW2ld
LmdldCgpLCByZWNvcmRJZGVudGlmaWVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xODUsNyArMTg2LDcgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogCi0gICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdT
dG9yZSYgYmFja2luZ1N0b3JlLAorICAgIGJvb2wgYWRkaW5nS2V5QWxsb3dlZChJREJCYWNraW5n
U3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSkg
Y29uc3QKICAgICB7CkBAIC0xOTMsNyArMTk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgICAgIFJlZlB0cjxJREJLZXk+IGZvdW5kUHJpbWFyeUtleTsKLSAg
ICAgICAgYm9vbCBmb3VuZCA9IGJhY2tpbmdTdG9yZS5rZXlFeGlzdHNJbkluZGV4KGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICppbmRleEtleSwgZm91bmRQcmltYXJ5S2V5KTsK
KyAgICAgICAgYm9vbCBmb3VuZCA9IGJhY2tpbmdTdG9yZS5rZXlFeGlzdHNJbkluZGV4KHRyYW5z
YWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqaW5kZXhLZXksIGZv
dW5kUHJpbWFyeUtleSk7CiAgICAgICAgIGlmICghZm91bmQpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgaWYgKHByaW1hcnlLZXkgJiYgZm91bmRQcmltYXJ5S2V5LT5pc0VxdWFs
KHByaW1hcnlLZXkpKQpAQCAtMjA2LDcgKzIwNyw3IEBAIHByaXZhdGU6CiB9OwogfQogCi1zdGF0
aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgYm9vbCBrZXlXYXNHZW5lcmF0
ZWQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4mIGluZGV4S2V5cywgVmVjdG9yPE93
blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9yTWVzc2FnZSkK
K3N0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0
U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRl
ZCwgY29uc3QgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3du
UHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlKQog
ewogICAgIEFTU0VSVChpbmRleE5hbWVzLnNpemUoKSA9PSBpbmRleEtleXMuc2l6ZSgpKTsKIApA
QCAtMjMwLDYgKzIzMSw3IEBAIHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8CiAKICAgICAgICAgT3du
UHRyPEluZGV4V3JpdGVyPiBpbmRleFdyaXRlcihhZG9wdFB0cihuZXcgSW5kZXhXcml0ZXIoaW5k
ZXgtPm1ldGFkYXRhKCksIGtleXMpKSk7CiAgICAgICAgIGlmICghaW5kZXhXcml0ZXItPnZlcmlm
eUluZGV4S2V5cygqb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRyYW5zYWN0aW9uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5pZCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgtPmlkKCks
IHByaW1hcnlLZXkuZ2V0KCksIGVycm9yTWVzc2FnZSkpIHsKQEAgLTI0MiwyMSArMjQ0LDIyIEBA
IHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCog
b2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBw
cnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVj
dG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhL
ZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0cikKIHsKICAgICBJREJfVFJB
Q0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyIpOwogICAgIFJlZlB0
cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5OworICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGNv
dWxkIGJlIGFzeW5jaHJvbm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQncyB3b3J0
aCB0aGUgZXh0cmEgY29tcGxleGl0eS4KICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIgPSBiYWNraW5nU3RvcmUo
KS0+Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9y
ZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKGRhdGFiYXNlSWQoKSwgaWQoKSwgKnByaW1hcnlL
ZXksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7CisgICAgaWYgKCFiYWNraW5nU3RvcmUoKS0+
a2V5RXhpc3RzSW5PYmplY3RTdG9yZSgqdHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQoKSwgaWQoKSwg
KnByaW1hcnlLZXksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7CiAgICAgICAgIHRyYW5zYWN0
aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgVmVjdG9yPE93blB0
cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsK
LSAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModGhpcywgcHJpbWFyeUtleSwgZmFsc2UsIGluZGV4
TmFtZXMsIGluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKKyAgICBp
ZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHRoaXMsIHByaW1hcnlLZXksIGZhbHNl
LCBpbmRleE5hbWVzLCBpbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJvck1lc3NhZ2UpKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRlYWwgd2l0aCBlcnJvck1lc3NhZ2UgaGVyZS4g
bWFrZUluZGV4V3JpdGVycyBvbmx5IGZhaWxzIG9uIHVuaXF1ZW5lc3MgY29uc3RyYWludCBlcnJv
cnMuCiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CkBAIC0y
NjYsNiArMjY5LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtl
eXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGMKICAgICAgICAgSW5kZXhXcml0
ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwogICAgICAgICBpZiAoIWlu
ZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYmFja2luZ1N0b3JlKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0cmFuc2FjdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2VJZCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4ZXMuZ2V0KGluZGV4V3JpdGVyLT5pbmRl
eE5hbWUoKSktPmlkKCkpKSB7CkBAIC0yOTgsOSArMzAyLDEwIEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosCiAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCi12
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQ
dHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbiwgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFtZXMsIFBhc3NP
d25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCit2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBL
ZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbiwgUGFz
c093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFtZXMsIFBhc3NPd25QdHI8VmVjdG9y
PEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCIpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwogICAgIEFTU0VSVCh0
cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwogICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7CiAgICAgUmVmUHRy
PElEQktleT4ga2V5ID0gcHJwS2V5OwpAQCAtMzExLDcgKzMxNiw3IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8CiAgICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKIAogICAgIGlmIChw
dXRNb2RlICE9IEN1cnNvclVwZGF0ZSAmJiBhdXRvSW5jcmVtZW50ICYmICFrZXkpIHsKLSAgICAg
ICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IG9iamVjdFN0b3JlLT5nZW5lcmF0ZUtleSgp
OworICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdlbmVy
YXRlS2V5KHRyYW5zYWN0aW9uKTsKICAgICAgICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKICAg
ICAgICAgaWYgKCFhdXRvSW5jS2V5LT5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIGNhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OkRBVEFfRVJSLCAiTWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOwpAQCAt
MzIzLDIxICszMjgsMjEgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICBBU1NFUlQoa2V5
ICYmIGtleS0+aXNWYWxpZCgpKTsKIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllciA9IG9iamVjdFN0b3JlLT5i
YWNraW5nU3RvcmUoKS0+Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKLSAgICBpZiAo
cHV0TW9kZSA9PSBBZGRPbmx5ICYmIG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+a2V5RXhp
c3RzSW5PYmplY3RTdG9yZShvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+
aWQoKSwgKmtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkpIHsKKyAgICBpZiAocHV0TW9kZSA9
PSBBZGRPbmx5ICYmIG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmpl
Y3RTdG9yZSgqdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0
b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewogICAgICAgICBjYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpDT05TVFJBSU5UX0VSUiwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0
b3JlLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFZlY3RvcjxPd25QdHI8SW5k
ZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOwogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAg
aWYgKCFtYWtlSW5kZXhXcml0ZXJzKG9iamVjdFN0b3JlLmdldCgpLCBrZXksIGtleVdhc0dlbmVy
YXRlZCwgKmluZGV4TmFtZXMsICppbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJvck1lc3Nh
Z2UpKSB7CisgICAgaWYgKCFtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9y
ZS5nZXQoKSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsICppbmRleE5hbWVzLCAqaW5kZXhLZXlzLCAm
aW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJB
SU5UX0VSUiwgZXJyb3JNZXNzYWdlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAv
LyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiAgQWZ0ZXIgdGhpcyBw
b2ludCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCiAKLSAgICBp
ZiAoIW9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0T2JqZWN0U3RvcmVSZWNvcmQob2Jq
ZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksICprZXksIHZhbHVlLT50
b1dpcmVTdHJpbmcoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkpIHsKKyAgICBpZiAoIW9iamVj
dFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0T2JqZWN0U3RvcmVSZWNvcmQoKnRyYW5zYWN0aW9u
LCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgdmFs
dWUtPnRvV2lyZVN0cmluZygpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewogICAgICAgICBj
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFn
ZS4iKSk7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CkBA
IC0zNDcsNiArMzUyLDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgSW5kZXhX
cml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwogICAgICAgICBpZiAo
IWluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb2JqZWN0U3RvcmUtPmJhY2tp
bmdTdG9yZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdHJh
bnNhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVj
dFN0b3JlLT5kYXRhYmFzZUlkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9iamVjdFN0b3JlLT5tX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmdldChpbmRleFdyaXRlci0+aW5kZXhO
YW1lKCkpLT5pZCgpKSkgewpAQCAtMzU4LDMyICszNjQsMzQgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjwKICAgICB9CiAKICAgICBpZiAoYXV0b0luY3JlbWVudCAmJiBwdXRNb2RlICE9IEN1cnNv
clVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpCi0gICAgICAgIG9i
amVjdFN0b3JlLT51cGRhdGVLZXlHZW5lcmF0b3Ioa2V5LmdldCgpLCAha2V5V2FzR2VuZXJhdGVk
KTsKKyAgICAgICAgb2JqZWN0U3RvcmUtPnVwZGF0ZUtleUdlbmVyYXRvcih0cmFuc2FjdGlvbiwg
a2V5LmdldCgpLCAha2V5V2FzR2VuZXJhdGVkKTsKIAogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNz
KGtleS5yZWxlYXNlKCkpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRl
bGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJw
S2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlIik7
CiAKLSAgICBBU1NFUlQoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlv
biktPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKKyAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1v
ZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKIAogICAgIFJlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CiAgICAgUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKIAotICAgIGlmICghSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbiktPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNy
ZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJu
YWwsIG9iamVjdFN0b3JlLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSkpCisgICAgaWYgKCF0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVUYXNrKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGtleVJh
bmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIAotdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsIik7CiAgICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyOworICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5z
YWN0aW9uOwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3Rv
cmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1
cnNvcihvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwga2V5UmFu
Z2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCkt
Pm9wZW5PYmplY3RTdG9yZUN1cnNvcigqdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLT5kYXRhYmFz
ZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhU
KTsKICAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAKICAgICAgICAgZG8gewpAQCAtMzkz
LDExICs0MDEsMTEgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlAKICAgICAgICAgICAgICAgICBp
ZiAoIWl0LT5zZWNvbmQtPmhhc1ZhbGlkSWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7IC8vIFRoZSBpbmRleCBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMgbm90IGV4
aXN0IGluIHRoZSBkYXRhYmFzZSB5ZXQuCiAKLSAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3Mg
PSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChv
YmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQtPnNlY29uZC0+
aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBzdWNj
ZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleERhdGFGb3JSZWNv
cmQoKnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+
aWQoKSwgaXQtPnNlY29uZC0+aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVPYmplY3RT
dG9yZVJlY29yZChvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwg
cmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CisgICAgICAgICAgICBvYmplY3RTdG9yZS0+YmFja2lu
Z1N0b3JlKCktPmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKCp0cmFuc2FjdGlvbiwgb2JqZWN0U3Rv
cmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0
KCkpOwogCiAgICAgICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5j
dGlvbigwKSk7CiAKQEAgLTQwNywyMyArNDE1LDI1IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmlu
ZWRWYWx1ZSgpKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcihQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENh
bGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjbGVhciIpOwogCi0gICAgQVNTRVJUKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OmZyb20odHJhbnNhY3Rpb24pLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7
CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CisgICAgQVNTRVJU
KHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7CiAKICAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwog
ICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKIAotICAg
IGlmICghSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbiktPnNjaGVk
dWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGNhbGxiYWNrcykpKQorICAg
IGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbCwgb2JqZWN0
U3RvcmUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNsZWFySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNsZWFySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4g
cHJwVHJhbnNhY3Rpb24pCiB7Ci0gICAgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5jbGVh
ck9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgp
KTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBw
cnBUcmFuc2FjdGlvbjsKKyAgICBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmNsZWFyT2Jq
ZWN0U3RvcmUoKnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RT
dG9yZS0+aWQoKSk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKIH0KIApAQCAtNDQ5LDEwICs0NTksMTEgQEAgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmNyZWF0ZUluZGV4KGNvbnMKICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQogCi12b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24pCiB7CisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CiAgICAg
aW50NjRfdCBpZDsKLSAgICBpZiAoIW9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRl
SW5kZXgob2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4
LT5uYW1lKCksIGluZGV4LT5rZXlQYXRoKCksIGluZGV4LT51bmlxdWUoKSwgaW5kZXgtPm11bHRp
RW50cnkoKSwgaWQpKSB7CisgICAgaWYgKCFvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmNy
ZWF0ZUluZGV4KCp0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0
U3RvcmUtPmlkKCksIGluZGV4LT5uYW1lKCksIGluZGV4LT5rZXlQYXRoKCksIGluZGV4LT51bmlx
dWUoKSwgaW5kZXgtPm11bHRpRW50cnkoKSwgaWQpKSB7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5h
Ym9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDkwLDkgKzUwMSwxMCBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFt
ZSwgSURCVHJhbnNhY3Rpb25CYQogICAgIG1faW5kZXhlcy5yZW1vdmUobmFtZSk7CiB9CiAKLXZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKLSAgICBvYmplY3RTdG9y
ZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4KG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCks
IG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+aWQoKSk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CisgICAgb2JqZWN0
U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleCgqdHJhbnNhY3Rpb24sIG9iamVjdFN0
b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+aWQoKSk7CiAgICAg
dHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCkBAIC01MDksMTEgKzUy
MSwxMiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4gcHJwUmFuZ2UsIElEQgogICAgIH0KIH0KIAotdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJl
Y3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCIpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwogCi0gICAgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9y
ZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihvYmplY3RTdG9yZS0+ZGF0
YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7Cisg
ICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBv
YmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcigqdHJhbnNh
Y3Rpb24sIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCByYW5n
ZS5nZXQoKSwgZGlyZWN0aW9uKTsKICAgICAvLyBUaGUgZnJvbnRlbmQgaGFzIGJlZ3VuIGluZGV4
aW5nLCBzbyB0aGlzIHBhdXNlcyB0aGUgdHJhbnNhY3Rpb24KICAgICAvLyB1bnRpbCB0aGUgaW5k
ZXhpbmcgaXMgY29tcGxldGUuIFRoaXMgY2FuJ3QgaGFwcGVuIGFueSBlYXJsaWVyCiAgICAgLy8g
YmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHN3aXRjaCB0byBlYXJseSBtb2RlIGluIGNhc2UgbXVs
dGlwbGUKQEAgLTUyOSwxOSArNTQyLDIxIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzCiAgICAg
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtleSgpLCBjdXJzb3ItPnByaW1h
cnlLZXkoKSwgY3Vyc29yLT52YWx1ZSgpKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRy
YW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50Iik7Ci0gICAgaWYgKCFJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uKS0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAg
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVy
bmFsLCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzKSkpCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJv
bSh0cmFuc2FjdGlvblB0cik7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAor
ICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
Ojpjb3VudEludGVybmFsLCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQog
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9F
UlI7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9uKQogewogICAgIElEQl9U
UkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCIpOworICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0
aW9uOwogICAgIHVpbnQzMl90IGNvdW50ID0gMDsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
OjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUo
KS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9i
amVjdFN0b3JlLT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0
b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKCp0cmFuc2FjdGlv
biwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIHJhbmdlLmdl
dCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAg
ICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVy
VmFsdWUoY291bnQpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTg2LDIwICs2MDEsMjQgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHQKICAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnNldChpbmRl
eFB0ci0+bmFtZSgpLCBpbmRleFB0cik7CiB9CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpnZW5lcmF0ZUtleSgpCitQYXNzUmVmUHRyPElEQktleT4gSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKKyAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKKwogICAgIGNv
bnN0IGludDY0X3QgbWF4R2VuZXJhdG9yVmFsdWUgPSA5MDA3MTk5MjU0NzQwOTkyTEw7IC8vIE1h
eGltdW0gaW50ZWdlciBzdG9yYWJsZSBhcyBFQ01BU2NyaXB0IG51bWJlci4KLSAgICBpbnQ2NF90
IGN1cnJlbnROdW1iZXIgPSBiYWNraW5nU3RvcmUoKS0+Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51
bWJlcihkYXRhYmFzZUlkKCksIGlkKCkpOworICAgIGludDY0X3QgY3VycmVudE51bWJlciA9IGJh
Y2tpbmdTdG9yZSgpLT5nZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKCp0cmFuc2FjdGlvbiwg
ZGF0YWJhc2VJZCgpLCBpZCgpKTsKICAgICBpZiAoY3VycmVudE51bWJlciA8IDAgfHwgY3VycmVu
dE51bWJlciA+IG1heEdlbmVyYXRvclZhbHVlKQogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVh
dGVJbnZhbGlkKCk7CiAKICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIoY3VycmVudE51
bWJlcik7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2Vu
ZXJhdG9yKGNvbnN0IElEQktleSoga2V5LCBib29sIGNoZWNrQ3VycmVudCkKK3ZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24sIGNvbnN0IElEQktleSoga2V5LCBi
b29sIGNoZWNrQ3VycmVudCkKIHsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKKwogICAgIEFTU0VSVChrZXkgJiYga2V5
LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKTsKLSAgICBiYWNraW5nU3RvcmUoKS0+bWF5
YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGRhdGFiYXNlSWQoKSwgaWQoKSwgc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oZmxvb3Ioa2V5LT5udW1iZXIoKSkpICsgMSwgY2hlY2tDdXJyZW50
KTsKKyAgICBiYWNraW5nU3RvcmUoKS0+bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVt
YmVyKCp0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2FzdDxpbnQ2NF90
PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOwogfQogCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuaAppbmRleCAyODExY2ExYmFkNzZiNjE4OTJkZjI0MmE5ZTg2Yjk2OTdm
ZDIyNTBhLi5iZDk1YmJlYmUyZjdlMmEyYmQyOTMxMjBiZmY4MTI3ZTBjYmIyZmU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC0xMDAsMTggKzEwMCwxOCBAQCBwcml2YXRlOgogICAgIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7
CiAKICAgICB2b2lkIGxvYWRJbmRleGVzKCk7Ci0gICAgUGFzc1JlZlB0cjxJREJLZXk+IGdlbmVy
YXRlS2V5KCk7Ci0gICAgdm9pZCB1cGRhdGVLZXlHZW5lcmF0b3IoY29uc3QgSURCS2V5KiwgYm9v
bCBjaGVja0N1cnJlbnQpOworICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtleShQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICB2b2lkIHVwZGF0ZUtleUdl
bmVyYXRvcihQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBjb25zdCBJREJL
ZXkqLCBib29sIGNoZWNrQ3VycmVudCk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7
CisgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIHB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093
blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+KTsKLSAgICBzdGF0aWMgdm9pZCBkZWxldGVJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
Pik7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIHNldEluZGV4ZXNSZWFkeUludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0gICAgc3RhdGljIHZvaWQgY2xl
YXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICBzdGF0aWMg
dm9pZCBjbGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGNyZWF0
ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGRl
bGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lk
IG9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1
cnNvcjo6RGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4pOwotICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHN0YXRpYyB2
b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4p
OwogCiAgICAgLy8gVGhlc2UgYXJlIHVzZWQgYXMgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBhYm9y
dCB0YXNrcy4KICAgICBzdGF0aWMgdm9pZCByZW1vdmVJbmRleEZyb21NYXAoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCmluZGV4
IDI0YzRmZWUwNDE1YmQ1YmI1MTJhMjMyMmNhOGJmNTc1ZWI1MTczNzYuLjliY2EwN2RjZTgwNWUw
OTM5ZDZiN2ZmMjY2MDQ0Y2I4MWIwYzgyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKQEAg
LTY1LDYgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUGVuZGluZ0V2ZW50cyhpbnQpOwog
ICAgIHZvaWQgYWRkUHJlZW1wdGl2ZUV2ZW50KCkgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRz
Kys7IH0KICAgICB2b2lkIGRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgeyBtX3BlbmRpbmdQ
cmVlbXB0aXZlRXZlbnRzLS07IEFTU0VSVChtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID49IDAp
OyB9CisgICAgb3BlcmF0b3IgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYoKSB7IHJldHVy
biAqbV90cmFuc2FjdGlvbi5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBt
b2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163900</attachid>
            <date>2012-09-13 10:20:16 -0700</date>
            <delta_ts>2012-09-17 10:16:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96663-20120913101948.patch</filename>
            <type>text/plain</type>
            <size>113383</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjU2YTA4Nzg4ZTc3ZWU5
M2Y3MTlhZmFhODI5NzdkN2ZhNDA4ZTVmMi4uNmM3YzliZGZhZjQ4OWJjYjQ5ODUxYjc3OWE4Y2Qw
NDk4MDc4ZjEyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDEyLTA5LTEzICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBSZW1v
dmUgImN1cnJlbnQgdHJhbnNhY3Rpb24iIGNvbmNlcHQgZnJvbSBiYWNraW5nIHN0b3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjY2MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluZGV4ZWREQiBzaG91
bGQgYWxsb3cgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIHRvIHJ1biBpbiBwYXJhbGxlbCB3aXRoaW4g
YW5kCisgICAgICAgIGFjcm9zcyBkYXRhYmFzZXMgd2l0aGluIGFuIG9yaWdpbi4gQXMgYW4gaW5p
dGlhbCBzdGVwIHRvIGVuYWJsaW5nIHRoaXMsIHRoZQorICAgICAgICBiYWNraW5nIHN0b3JlIHNo
b3VsZCBub3QgaG9sZCBhICJjdXJyZW50IHRyYW5zYWN0aW9uIiAtIGluc3RlYWQsIG9wZXJhdGlv
bnMKKyAgICAgICAgc2hvdWxkIGJlIGRvbmUgcmVsYXRpdmUgdG8gYSB0cmFuc2FjdGlvbiBtYW5h
Z2VkIGJ5IHRoZSBkYXRhYmFzZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKwor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAo
SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZElt
cGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW50VmVyc2lvbkludGVy
bmFsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
Lmg6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4
QmFja2VuZEltcGw6OmdldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFj
a2VuZEltcGw6OmdldEtleUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFj
a2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpn
ZXRLZXkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwu
aDoKKyAgICAgICAgKElEQkluZGV4QmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRl
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9i
amVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0lu
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Zm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0
c0luSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Bl
bk9iamVjdFN0b3JlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5n
U3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6
YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkxldmVsREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKElEQkxldmVsREJCYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246
OmxldmVsREJUcmFuc2FjdGlvbik6CisgICAgICAgIChUcmFuc2FjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5z
YWN0aW9uRnJvbSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Z2V0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjptYWtl
SW5kZXhXcml0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnNldEluZGV4S2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29y
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291
bnRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpnZW5lcmF0ZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjp1cGRhdGVLZXlHZW5lcmF0b3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Om9w
ZXJhdG9yIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mKToKKwogMjAxMi0wOS0xMiAgQWxl
eGFuZHJlIEVsaWFzICA8YWVsaWFzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1d
IEZsaXAgWSBhbmQgc3dpenpsZSBpbnNpZGUgY29tcG9zaXRlQW5kUmVhZGJhY2sgaW1wbGVtZW50
YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggN2M4NGI3NTQzODkxZGQ4OGEzMzk3
NWU1OWUyMTc0YmY5NWUzYmM1MS4uYTNkYzg1MjNlNTI4ODlhMmFmNGJiNDAzZWQ5MzJhYmU2OTc0
NmRhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0w
OS0xMyAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4
ZWREQjogUmVtb3ZlICJjdXJyZW50IHRyYW5zYWN0aW9uIiBjb25jZXB0IGZyb20gYmFja2luZyBz
dG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY2
NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgZmFrZSBjbGFzcyB3aXRoIG5ldyBtZXRob2Qgc2lnbmF0dXJlcy4KKworICAgICAgICAqIHRl
c3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaDoKKwogMjAxMi0wOS0xMiAgQWxleGFuZHJlIEVsaWFz
ICA8YWVsaWFzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEZsaXAgWSBhbmQg
c3dpenpsZSBpbnNpZGUgY29tcG9zaXRlQW5kUmVhZGJhY2sgaW1wbGVtZW50YXRpb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5k
ZXggZjA2MGU3MmVmNGM2ZmQ0NzI1NGVjN2YxNTU4ODA5MDM5NWE2NTlkZS4uYWEwZTI2MTM0NzE5
OWZlZGE0NjQxZWMxYmVjNzNmMDE5NjMzZWM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTQ0LDE4ICs0NCwyMCBAQCBj
bGFzcyBTZWN1cml0eU9yaWdpbjsKIAogY2xhc3MgSURCQmFja2luZ1N0b3JlIDogcHVibGljIFJl
ZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlPiB7CiBwdWJsaWM6CisgICAgY2xhc3MgVHJhbnNhY3Rp
b247CisKICAgICB2aXJ0dWFsIH5JREJCYWNraW5nU3RvcmUoKSB7fTsKIAogICAgIHZpcnR1YWwg
dm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKSA9IDA7CiAg
ICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1l
LCBTdHJpbmcmIGZvdW5kU3RyaW5nVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJbnRWZXJzaW9uLCBp
bnQ2NF90JiBmb3VuZElkKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNl
TWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZ1ZlcnNpb24s
IGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50
VmVyc2lvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRh
KGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oVHJhbnNhY3Rpb24mLCBpbnQ2NF90IHJv
d0lkLCBpbnQ2NF90IGludFZlcnNpb24pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShUcmFuc2FjdGlvbiYsIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBT
dHJpbmcmIG5hbWUpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3RTdG9yZXMoaW50
NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5n
PiYgZm91bmROYW1lcywgVmVjdG9yPElEQktleVBhdGg+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8
Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNy
ZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9i
amVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVu
dCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZU9iamVjdFN0b3JlKFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpID0gMDsKIAogICAgIGNsYXNzIE9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllciA6IHB1YmxpYyBSZWZDb3VudGVkPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4g
ewogICAgIHB1YmxpYzoKQEAgLTY0LDI4ICs2NiwyOCBAQCBwdWJsaWM6CiAgICAgfTsKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJbnZh
bGlkUmVjb3JkSWRlbnRpZmllcigpID0gMDsKIAotICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVj
dFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJLZXkmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3Jk
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkm
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0
U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIGludDY0
X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGdl
dE9iamVjdFN0b3JlUmVjb3JkKFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
cHV0T2JqZWN0U3RvcmVSZWNvcmQoVHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVh
ck9iamVjdFN0b3JlKFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVSZWNv
cmQoVHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwg
aW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKFRyYW5zYWN0aW9uJiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKFRyYW5zYWN0aW9uJiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVy
LCBib29sIGNoZWNrQ3VycmVudCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9i
amVjdFN0b3JlKFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91
bmRSZWNvcmRJZGVudGlmaWVyKSA9IDA7CiAKICAgICBjbGFzcyBPYmplY3RTdG9yZVJlY29yZENh
bGxiYWNrIHsKICAgICBwdWJsaWM6CiAgICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2soY29u
c3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgPSAw
OwogICAgICAgICAgdmlydHVhbCB+T2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjaygpIHt9OwogICAg
IH07Ci0gICAgdmlydHVhbCBib29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFj
ayYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKFRyYW5z
YWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVj
dFN0b3JlUmVjb3JkQ2FsbGJhY2smKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5kZXhl
cyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0
X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxJREJLZXlQ
YXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzLCBWZWN0
b3I8Ym9vbD4mIGZvdW5kTXVsdGlFbnRyeUZsYWdzKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNy
ZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGlzVW5pcXVlLCBib29sIGlz
TXVsdGlFbnRyeSwgaW50NjRfdCYgaW5kZXhJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBPYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFiYXNlaWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBS
ZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KSA9IDA7CisgICAgdmlydHVhbCBib29sIGNy
ZWF0ZUluZGV4KFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNV
bmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRleElkKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUluZGV4KFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoVHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
LCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
S2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoVHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoVHJhbnNhY3Rpb24mLCBp
bnQ2NF90IGRhdGFiYXNlaWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5
KSA9IDA7CiAKICAgICBjbGFzcyBDdXJzb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxDdXJzb3I+IHsK
ICAgICBwdWJsaWM6CkBAIC0xMDUsMTAgKzEwNywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1
YWwgfkN1cnNvcigpIHsgfTsKICAgICB9OwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNv
cj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29y
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlS
YW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVu
SW5kZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikg
PSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNv
cihUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKFRyYW5zYWN0
aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoVHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJ
REJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwogCiAgICAgY2xhc3MgVHJhbnNh
Y3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUcmFuc2FjdGlvbj4gewogICAgIHB1YmxpYzoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggODExMGMyNGMxM2IzYzQ2M2VlMzdiMjBkNGNmZmE3MTI0
MjQ0YjYzOS4uZjlhNGY5ZWE1YTI5MjdjYzI0NTU3NThjZjZjYmVkMmFmNGFiYThmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5jcHAKQEAgLTE4NSwxMSArMTg1LDEyIEBAIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVP
YmplY3RTCiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCAgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFz
ZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKKyAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFu
c2FjdGlvbjsKICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQ7CiAKLSAgICBpZiAoIWRhdGFiYXNl
LT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUoZGF0YWJhc2UtPmlkKCksIG9iamVj
dFN0b3JlLT5uYW1lKCksIG9iamVjdFN0b3JlLT5rZXlQYXRoKCksIG9iamVjdFN0b3JlLT5hdXRv
SW5jcmVtZW50KCksIG9iamVjdFN0b3JlSWQpKSB7CisgICAgaWYgKCFkYXRhYmFzZS0+bV9iYWNr
aW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKCp0cmFuc2FjdGlvbiwgZGF0YWJhc2UtPmlkKCks
IG9iamVjdFN0b3JlLT5uYW1lKCksIG9iamVjdFN0b3JlLT5rZXlQYXRoKCksIG9iamVjdFN0b3Jl
LT5hdXRvSW5jcmVtZW50KCksIG9iamVjdFN0b3JlSWQpKSB7CiAgICAgICAgIHRyYW5zYWN0aW9u
LT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjIxLDkgKzIyMiwxMCBAQCB2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCVHJhbnNhY3RpbwogICAgIG1fb2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsK
IH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZUludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZUludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5z
YWN0aW9uKQogewotICAgIGRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3Rv
cmUoZGF0YWJhc2UtPmlkKCksIG9iamVjdFN0b3JlLT5pZCgpKTsKKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKKyAgICBk
YXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZU9iamVjdFN0b3JlKCp0cmFuc2FjdGlvbiwg
ZGF0YWJhc2UtPmlkKCksIG9iamVjdFN0b3JlLT5pZCgpKTsKICAgICB0cmFuc2FjdGlvbi0+ZGlk
Q29tcGxldGVUYXNrRXZlbnRzKCk7CiB9CiAKQEAgLTI3OCw3ICsyODAsNyBAQCB2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZgogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwogICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IGRhdGFi
YXNlLT5pZCgpOwogICAgIGRhdGFiYXNlLT5tX3ZlcnNpb24gPSB2ZXJzaW9uOwotICAgIGlmICgh
ZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT51cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGRhdGFi
YXNlSWQsIGRhdGFiYXNlLT5tX3ZlcnNpb24pKSB7CisgICAgaWYgKCFkYXRhYmFzZS0+bV9iYWNr
aW5nU3RvcmUtPnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoKnRyYW5zYWN0aW9uLCBkYXRhYmFz
ZUlkLCBkYXRhYmFzZS0+bV92ZXJzaW9uKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VS
UiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CiAgICAgICAgIHRy
YW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CkBAIC0yODYsMTMgKzI4OCwxNCBA
QCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZgogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPih0cmFuc2FjdGlvbikpOwogfQog
Ci12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEludFZlcnNpb25JbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBk
YXRhYmFzZSwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24pCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEludFZlcnNpb25JbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0
aW9uKQogeworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlv
biA9IHBycFRyYW5zYWN0aW9uOwogICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IGRhdGFiYXNlLT5p
ZCgpOwogICAgIGludDY0X3Qgb2xkVmVyc2lvbiA9IGRhdGFiYXNlLT5tX2ludFZlcnNpb247CiAg
ICAgQVNTRVJUKHZlcnNpb24gPiBvbGRWZXJzaW9uKTsKICAgICBkYXRhYmFzZS0+bV9pbnRWZXJz
aW9uID0gdmVyc2lvbjsKLSAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+dXBkYXRl
SURCRGF0YWJhc2VJbnRWZXJzaW9uKGRhdGFiYXNlSWQsIGRhdGFiYXNlLT5tX2ludFZlcnNpb24p
KSB7CisgICAgaWYgKCFkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPnVwZGF0ZUlEQkRhdGFiYXNl
SW50VmVyc2lvbigqdHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIGRhdGFiYXNlLT5tX2ludFZlcnNp
b24pKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRh
IHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAppbmRleCA3ZjMxY2IwNGVhNGVkYmZjZDY3
MjE3YzE5YzhjYTdhMmM5NzNiZTExLi44Y2NmMDE4ZWI4Mzk0NzcxNGI5ODFkMmMyZjNlNmYwZGNi
YThiMGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCkBAIC04Nyw3ICs4Nyw3IEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgc2V0VmVyc2lvbkludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+LCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0gICAgc3RhdGljIHZvaWQgc2V0
SW50VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+LCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKyAg
ICBzdGF0aWMgdm9pZCBzZXRJbnRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIGludDY0X3QgdmVyc2lvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+KTsKIAogICAgIC8vIFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rp
b24gYWJvcnQgdGFza3MuCiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFw
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5j
cHAKaW5kZXggMzhjZmNlYzk3ZmIyNzAxM2RiNzEwNGRmNzc2MjBhYjBkNjI2MDVmMy4uNGEyNWE0
OGViZTZlYTYzYzU5NTQ2Njc3Nzg5M2Y2ZTBlZjU3OWExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKQEAg
LTc0LDE5ICs3NCwyMCBAQCBJREJJbmRleE1ldGFkYXRhIElEQkluZGV4QmFja2VuZEltcGw6Om1l
dGFkYXRhKCkgY29uc3QKICAgICByZXR1cm4gSURCSW5kZXhNZXRhZGF0YShtX25hbWUsIG1fa2V5
UGF0aCwgbV91bmlxdWUsIG1fbXVsdGlFbnRyeSk7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5k
SW1wbDo6b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBy
YW5nZSwgdW5zaWduZWQgc2hvcnQgdW50eXBlZERpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uKQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCB1bnR5cGVkRGly
ZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJJ
bmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwiKTsKKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAgICBJ
REJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxJREJDdXJzb3I6OkRp
cmVjdGlvbj4odW50eXBlZERpcmVjdGlvbik7CiAKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
OjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKIAogICAgIHN3aXRjaCAoY3Vyc29yVHlwZSkg
ewogICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3I6Ci0g
ICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+b3Blbklu
ZGV4S2V5Q3Vyc29yKGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFj
a2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOworICAgICAg
ICBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtl
eUN1cnNvcigqdHJhbnNhY3Rpb24sIGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVj
dFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24p
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6Oklu
ZGV4Q3Vyc29yOgotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0
b3JlKCktPm9wZW5JbmRleEN1cnNvcihpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmpl
Y3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9u
KTsKKyAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5v
cGVuSW5kZXhDdXJzb3IoKnRyYW5zYWN0aW9uLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+
bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGly
ZWN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlOjpPYmplY3RTdG9yZUN1cnNvcjoKICAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OkludmFsaWRDdXJzb3JUeXBlOgpAQCAtMTI3LDEyICsxMjgsMTMgQEAgdm9pZCBJREJJbmRl
eEJhY2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtl
eVJhbmdlLCB1bnMKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJ
T05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudElu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZElt
cGw6OmNvdW50SW50ZXJuYWwiKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAgICB1aW50MzJfdCBjb3VudCA9IDA7
CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNv
ciA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKGluZGV4LT5kYXRh
YmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCks
IHJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOworICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5v
cGVuSW5kZXhLZXlDdXJzb3IoKnRyYW5zYWN0aW9uLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRl
eC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwg
SURCQ3Vyc29yOjpORVhUKTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewogICAgICAg
ICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bWJlclZhbHVl
KGNvdW50KSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE0NSwyNCArMTQ3LDI2IEBAIHZvaWQgSURC
SW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJJCiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpudW1iZXJWYWx1ZShjb3VudCkpOwogfQogCi12b2lkIElEQkluZGV4QmFja2VuZElt
cGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291
bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25Q
dHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5k
SW1wbDo6Y291bnQiKTsKLSAgICBpZiAoIUlEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20o
dHJhbnNhY3Rpb24pLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rh
c2soJmNvdW50SW50ZXJuYWwsIHRoaXMsIHJhbmdlLCBjYWxsYmFja3MpKSkKKyAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5z
Y2hlZHVsZVRhc2soCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmNvdW50SW50ZXJu
YWwsIHRoaXMsIHJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCiAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIAotdm9p
ZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2
b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKIHsK
ICAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsIik7CisgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNh
Y3Rpb247CiAKICAgICBSZWZQdHI8SURCS2V5PiBrZXk7CiAKICAgICBpZiAoa2V5UmFuZ2UtPmlz
T25seUtleSgpKQogICAgICAgICBrZXkgPSBrZXlSYW5nZS0+bG93ZXIoKTsKICAgICBlbHNlIHsK
LSAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJz
b3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNvcihpbmRleC0+ZGF0YWJh
c2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCBr
ZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICAgICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3Jl
KCktPm9wZW5JbmRleEN1cnNvcigqdHJhbnNhY3Rpb24sIGluZGV4LT5kYXRhYmFzZUlkKCksIGlu
ZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIGtleVJhbmdlLmdl
dCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogCiAgICAgICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29y
KSB7CiAgICAgICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OnVuZGVmaW5lZFZhbHVlKCkpOwpAQCAtMTcyLDkgKzE3Niw5IEBAIHZvaWQgSURCSW5kZXhC
YWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCSW5kCiAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvci0+Y2xvc2UoKTsKICAgICB9CiAK
LSAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5n
ZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0
U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgKmtleSk7CisgICAgUmVmUHRyPElEQktl
eT4gcHJpbWFyeUtleSA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZpYUlu
ZGV4KCp0cmFuc2FjdGlvbiwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3Rv
cmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgKmtleSk7CiAKLSAgICBTdHJpbmcgdmFsdWUg
PSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldE9iamVjdFN0b3JlUmVjb3JkKGluZGV4LT5kYXRh
YmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgKnByaW1hcnlLZXkp
OworICAgIFN0cmluZyB2YWx1ZSA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0T2JqZWN0U3Rv
cmVSZWNvcmQoKnRyYW5zYWN0aW9uLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmpl
Y3RTdG9yZUJhY2tlbmQtPmlkKCksICpwcmltYXJ5S2V5KTsKIAogICAgIGlmICh2YWx1ZS5pc051
bGwoKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OnVuZGVmaW5lZFZhbHVlKCkpOwpAQCAtMTg4LDE5ICsxOTIsMjAgQEAgdm9pZCBJREJJbmRl
eEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJJbmQKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZUZyb21XaXJlKHZhbHVlKSk7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1w
bDo6Z2V0S2V5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQklu
ZGV4QmFja2VuZEltcGw6OmdldEtleUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9uKQog
ewogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwiKTsKKyAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFu
c2FjdGlvbjsKIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0
b3JlQ3Vyc29yID0KLSAgICAgICAgICAgIGluZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4
S2V5Q3Vyc29yKGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2Vu
ZC0+aWQoKSwgaW5kZXgtPmlkKCksIGtleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwor
ICAgICAgICAgICAgaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3IoKnRy
YW5zYWN0aW9uLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tl
bmQtPmlkKCksIGluZGV4LT5pZCgpLCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsK
IAogICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKHN0YXRpY19jYXN0PElEQktleSo+KDApKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIFJlZlB0cjxJREJLZXk+IGtleVJlc3VsdCA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+
Z2V0UHJpbWFyeUtleVZpYUluZGV4KGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVj
dFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksICpiYWNraW5nU3RvcmVDdXJzb3ItPmtl
eSgpKTsKKyAgICBSZWZQdHI8SURCS2V5PiBrZXlSZXN1bHQgPSBpbmRleC0+YmFja2luZ1N0b3Jl
KCktPmdldFByaW1hcnlLZXlWaWFJbmRleCgqdHJhbnNhY3Rpb24sIGluZGV4LT5kYXRhYmFzZUlk
KCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksICpiYWNr
aW5nU3RvcmVDdXJzb3ItPmtleSgpKTsKICAgICBpZiAoIWtleVJlc3VsdCkgewogICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxJREJLZXkqPigwKSk7CiAgICAgICAgIGJh
Y2tpbmdTdG9yZUN1cnNvci0+Y2xvc2UoKTsKQEAgLTIxMSwyNSArMjE2LDI2IEBAIHZvaWQgSURC
SW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUGFzc1JlCiB9CiAKIAotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQoUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b24sIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQoUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNr
ZW5kSW1wbDo6Z2V0Iik7CiAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0g
dGhpczsKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7CiAg
ICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIGlm
ICghSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbiktPnNjaGVkdWxl
VGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0SW50ZXJuYWwsIGluZGV4
LCBrZXlSYW5nZSwgY2FsbGJhY2tzKSkpCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFu
c2FjdGlvblB0cik7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNh
bGxiYWNrVGFzaygmZ2V0SW50ZXJuYWwsIGluZGV4LCBrZXlSYW5nZSwgY2FsbGJhY2tzLCB0cmFu
c2FjdGlvbikpKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElP
Tl9JTkFDVElWRV9FUlI7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4
QmFja2VuZEltcGw6OmdldEtleSIpOwogICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBp
bmRleCA9IHRoaXM7CiAgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJh
bmdlOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsK
LSAgICBpZiAoIUlEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb24pLT5z
Y2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmdldEtleUludGVy
bmFsLCBpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpKQorICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OmZyb20odHJhbnNhY3Rpb25QdHIpOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
aygKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0S2V5SW50ZXJuYWwsIGluZGV4
LCBrZXlSYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQogICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwu
aAppbmRleCBlMTE3NDU3OWQ2MTczYWNlNTg0MDdkYzJiZjUzMzlmMmJmMzliNDBjLi4xNzNjMzJk
MDhmZjE0MzNiOTk5MGU1MDUyMjUwY2M4OWNhNmRhOGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oCkBAIC03OSw5
ICs3OSw5IEBAIHByaXZhdGU6CiAgICAgSURCSW5kZXhCYWNrZW5kSW1wbChjb25zdCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsKiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkp
OwogCiAgICAgc3RhdGljIHZvaWQgb3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlOjpDdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwotICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAg
IHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICBzdGF0aWMgdm9pZCBnZXRLZXlJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgc3Rh
dGljIHZvaWQgY291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7
CisgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4pOworICAgIHN0YXRpYyB2b2lkIGdldEtleUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+KTsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9
IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxl
dmVsREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggOTMwZTIwYjNiODM1ZGRhZWQ1MzdlN2Ux
OTBiMTQ1MTJlYWU0NzI2YS4uNjVmOTE1ODUyNGUwM2YxMTVkOTk0MmY1MDhkMDAyZmRlNjU3ZTFl
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTMzNiwyMiArMzM2LDIwIEBAIGJvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGlu
dDY0X3QgaW50VmVyc2lvbikKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURC
RGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pCiB7Ci0gICAgQVNTRVJUKG1f
Y3VycmVudFRyYW5zYWN0aW9uKTsKICAgICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gc3RyaWN0
bHkgZ3JlYXRlciB0aGFuIDAgb25jZSB3ZSB0aHJvdyBUeXBlRXJyb3IgZm9yCiAgICAgLy8gYmFk
IHZlcnNpb25zLgogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaW50VmVyc2lvbiA+PSAwLCAiaW50
VmVyc2lvbiB3YXMgJWxsZCIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oaW50VmVyc2lvbikpOwot
ICAgIGlmICghcHV0VmFySW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBEYXRhYmFzZU1l
dGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJz
aW9uKSwgaW50VmVyc2lvbikpCisgICAgaWYgKCFwdXRWYXJJbnQoVHJhbnNhY3Rpb246OmxldmVs
REJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNv
ZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJzaW9uKSwgaW50VmVyc2lv
bikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRf
dCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQorYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjp1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCiB7
Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBpZiAoIXB1dFN0cmluZyht
X2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJv
d0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VyVmVyc2lvbiksIHZlcnNpb24pKQorICAgIGlm
ICghcHV0U3RyaW5nKFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0
aW9uKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRh
S2V5OjpVc2VyVmVyc2lvbiksIHZlcnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTUxOSwxMSArNTE3LDExIEBAIHN0YXRpYyBpbnQ2NF90IGdldE5l
d09iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhCiAgICAgcmV0dXJuIG9iamVjdFN0b3JlSWQ7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwg
aW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKQorYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpjcmVhdGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRP
YmplY3RTdG9yZUlkKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlT2JqZWN0U3RvcmUiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwot
ICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGdldE5ld09iamVjdFN0b3JlSWQobV9jdXJyZW50
VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQpOworICAgIExldmVsREJUcmFuc2FjdGlvbiog
bGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20o
dHJhbnNhY3Rpb24pOworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGdldE5ld09iamVjdFN0
b3JlSWQobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkKTsKICAgICBpZiAob2JqZWN0U3Rv
cmVJZCA8IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTM3LDU1ICs1MzUsNTUgQEAg
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlHZW5lcmF0
b3JDdXJyZW50TnVtYmVyKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFtZXNLZXkgPSBPYmpl
Y3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgbmFtZSk7CiAKLSAgICBib29sIG9r
ID0gcHV0U3RyaW5nKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBuYW1lS2V5LCBuYW1lKTsK
KyAgICBib29sIG9rID0gcHV0U3RyaW5nKGxldmVsREJUcmFuc2FjdGlvbiwgbmFtZUtleSwgbmFt
ZSk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQg
REIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1
dElEQktleVBhdGgobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGtleVBhdGhLZXksIGtleVBh
dGgpOworICAgIG9rID0gcHV0SURCS2V5UGF0aChsZXZlbERCVHJhbnNhY3Rpb24sIGtleVBhdGhL
ZXksIGtleVBhdGgpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5h
bCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGF1dG9JbmNyZW1lbnRL
ZXksIGF1dG9JbmNyZW1lbnQpOworICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwg
YXV0b0luY3JlbWVudEtleSwgYXV0b0luY3JlbWVudCk7CiAgICAgaWYgKCFvaykgewogICAgICAg
ICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5n
ZXQoKSwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7CisgICAgb2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5z
YWN0aW9uLCBldmljdGFibGVLZXksIGZhbHNlKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExP
R19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBsYXN0VmVyc2lvbktleSwgMSk7CisgICAgb2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9u
LCBsYXN0VmVyc2lvbktleSwgMSk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1Io
IkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbWF4SW5k
ZXhJZEtleSwgTWluaW11bUluZGV4SWQpOworICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2Fj
dGlvbiwgbWF4SW5kZXhJZEtleSwgTWluaW11bUluZGV4SWQpOwogICAgIGlmICghb2spIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRCb29sKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBoYXNLZXlQYXRoS2V5LCAha2V5UGF0aC5pc051bGwoKSk7CisgICAgb2sgPSBw
dXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwgaGFzS2V5UGF0aEtleSwgIWtleVBhdGguaXNOdWxs
KCkpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVk
IERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBw
dXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGtleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXJLZXksIEtleUdlbmVyYXRvckluaXRpYWxOdW1iZXIpOworICAgIG9rID0gcHV0SW50KGxldmVs
REJUcmFuc2FjdGlvbiwga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgS2V5R2VuZXJhdG9y
SW5pdGlhbE51bWJlcik7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkludGVy
bmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZXNLZXksIG9i
amVjdFN0b3JlSWQpOworICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwgbmFtZXNL
ZXksIG9iamVjdFN0b3JlSWQpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJ
bnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01
OTYsMzUgKzU5NCwzNiBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVj
dFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJgogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQordm9pZCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmpl
Y3RTdG9yZSIpOwotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRy
YW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAKICAgICBTdHJpbmcgb2JqZWN0U3RvcmVOYW1l
OwotICAgIGdldFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgT2JqZWN0U3RvcmVN
ZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3Jl
TWV0YURhdGFLZXk6Ok5hbWUpLCBvYmplY3RTdG9yZU5hbWUpOworICAgIGdldFN0cmluZyhsZXZl
bERCVHJhbnNhY3Rpb24sIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpOYW1lKSwgb2JqZWN0U3Rv
cmVOYW1lKTsKIAotICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0
KCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCAwKSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQpKSkKKyAgICBpZiAoIWRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlv
biwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIDApLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCkpKQogICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3Iu
CiAKLSAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKE9iamVjdFN0b3JlTmFtZXNLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZU5hbWUpKTsKKyAgICBsZXZlbERCVHJhbnNh
Y3Rpb24tPnJlbW92ZShPYmplY3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVOYW1lKSk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgMCksIEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkKSkpCisgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIElu
ZGV4RnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgSW5k
ZXhGcmVlTGlzdEtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkK
ICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgotICAgIGlmICghZGVsZXRl
UmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5j
b2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkKKyAgICBpZiAoIWRlbGV0ZVJh
bmdlKGxldmVsREJUcmFuc2FjdGlvbiwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIDAsIDApLCBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXko
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKQogICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBS
ZXBvcnQgZXJyb3IuCiAKLSAgICBjbGVhck9iamVjdFN0b3JlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQpOworICAgIGNsZWFyT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQpOwogfQogCi1TdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2Jq
ZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleSYga2V5KQorU3RyaW5nIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9i
amVjdFN0b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
JiBrZXkpCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmpl
Y3RTdG9yZVJlY29yZCIpOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0
aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwor
CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwogICAgIFZlY3RvcjxjaGFy
PiBkYXRhOwogCi0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBpZiAoIW1f
Y3VycmVudFRyYW5zYWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCisgICAgaWYgKCFsZXZl
bERCVHJhbnNhY3Rpb24tPmdldChsZXZlbGRiS2V5LCBkYXRhKSkKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCiAgICAgaW50NjRfdCB2ZXJzaW9uOwpAQCAtNjc2LDIzICs2NzUsMjMgQEAgc3Rh
dGljIGludDY0X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGEKICAgICByZXR1cm4gdmVyc2lvbjsKIH0KIAotYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikK
K2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQogewog
ICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNv
cmQiKTsKICAgICBBU1NFUlQoa2V5LmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRy
YW5zYWN0aW9uKTsKLSAgICBpbnQ2NF90IHZlcnNpb24gPSBnZXROZXdWZXJzaW9uTnVtYmVyKG1f
Y3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKKyAg
ICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjps
ZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBpbnQ2NF90IHZlcnNpb24g
PSBnZXROZXdWZXJzaW9uTnVtYmVyKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3JlZGF0YUtleSA9
IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtl
eSk7CiAKICAgICBWZWN0b3I8Y2hhcj4gdjsKICAgICB2LmFwcGVuZChlbmNvZGVWYXJJbnQodmVy
c2lvbikpOwogICAgIHYuYXBwZW5kKGVuY29kZVN0cmluZyh2YWx1ZSkpOwogCi0gICAgaWYgKCFt
X2N1cnJlbnRUcmFuc2FjdGlvbi0+cHV0KG9iamVjdFN0b3JlZGF0YUtleSwgdikpCisgICAgaWYg
KCFsZXZlbERCVHJhbnNhY3Rpb24tPnB1dChvYmplY3RTdG9yZWRhdGFLZXksIHYpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50cnlLZXkg
PSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7
Ci0gICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cHV0KGV4aXN0c0VudHJ5S2V5LCBlbmNv
ZGVJbnQodmVyc2lvbikpKQorICAgIGlmICghbGV2ZWxEQlRyYW5zYWN0aW9uLT5wdXQoZXhpc3Rz
RW50cnlLZXksIGVuY29kZUludCh2ZXJzaW9uKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0
YXRpY19jYXN0PExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7CkBA
IC03MDEsMTQgKzcwMCwxNCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVj
dFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYgogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit2b2lkIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmpl
Y3RTdG9yZSIpOwotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRy
YW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0
S2V5ID0gS2V5UHJlZml4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLmVuY29kZSgpOwog
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gS2V5UHJlZml4KGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQgKyAxLCAwKS5lbmNvZGUoKTsKIAotICAgIGRlbGV0ZVJhbmdlKG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBzdGFydEtleSwgc3RvcEtleSk7CisgICAgZGVsZXRlUmFuZ2Uo
bGV2ZWxEQlRyYW5zYWN0aW9uLCBzdGFydEtleSwgc3RvcEtleSk7CiB9CiAKIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCkKQEAgLTcxNiwzMCAr
NzE1LDMwIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXI+IElEQkxldmVsREJCYWNraW5nU3RvcmU6CiAgICAgcmV0dXJuIExldmVsREJSZWNv
cmRJZGVudGlmaWVyOjpjcmVhdGUoKTsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVu
dGlmaWVyKQordm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJl
Y29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVs
REJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkIik7Ci0gICAgQVNTRVJUKG1f
Y3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFu
c2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9u
KTsKICAgICBjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50
aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29y
ZElkZW50aWZpZXIpOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3JlRGF0YUtl
eSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwotICAgIG1fY3VycmVudFRy
YW5zYWN0aW9uLT5yZW1vdmUob2JqZWN0U3RvcmVEYXRhS2V5KTsKKyAgICBsZXZlbERCVHJhbnNh
Y3Rpb24tPnJlbW92ZShvYmplY3RTdG9yZURhdGFLZXkpOwogCiAgICAgY29uc3QgVmVjdG9yPGNo
YXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKLSAg
ICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGV4aXN0c0VudHJ5S2V5KTsKKyAgICBsZXZl
bERCVHJhbnNhY3Rpb24tPnJlbW92ZShleGlzdHNFbnRyeUtleSk7CiB9CiAKIAotaW50NjRfdCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQoraW50NjRfdCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAg
IExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246Omxl
dmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgY29uc3QgVmVjdG9yPGNo
YXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CiAKICAgICBpbnQ2NF90IGtleUdlbmVyYXRv
ckN1cnJlbnROdW1iZXIgPSAtMTsKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgIGlmICht
X2N1cnJlbnRUcmFuc2FjdGlvbi0+Z2V0KGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXksIGRh
dGEpKQorICAgIGlmIChsZXZlbERCVHJhbnNhY3Rpb24tPmdldChrZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyS2V5LCBkYXRhKSkKICAgICAgICAga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlciA9IGRl
Y29kZUludChkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCkpOwogICAgIGVsc2UgewogICAgICAgICAv
LyBQcmV2aW91c2x5LCB0aGUga2V5IGdlbmVyYXRvciBzdGF0ZSB3YXMgbm90IHN0b3JlZCBleHBs
aWNpdGx5IGJ1dCBkZXJpdmVkIGZyb20gdGhlCkBAIC03NDgsNyArNzQ3LDcgQEAgaW50NjRfdCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0
X3QgZGF0YWJhc2VJZCwKICAgICAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2Jq
ZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURC
S2V5KCkpOwogICAgICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3Jl
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1heElEQktleSgpKTsK
IAotICAgICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0
aW9uLT5jcmVhdGVJdGVyYXRvcigpOworICAgICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBp
dCA9IGxldmVsREJUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICAgICAgaW50NjRf
dCBtYXhOdW1lcmljS2V5ID0gMDsKIAogICAgICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsg
aXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQt
Pm5leHQoKSkgewpAQCAtNzcyLDE4ICs3NzEsMTggQEAgaW50NjRfdCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwK
ICAgICByZXR1cm4ga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcjsKIH0KIAotYm9vbCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVy
LCBib29sIGNoZWNrQ3VycmVudCkKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVV
cGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJvb2wgY2hlY2tDdXJyZW50KQogewotICAgIEFTU0VSVCht
X2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJh
bnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlv
bik7CiAKICAgICBpZiAoY2hlY2tDdXJyZW50KSB7Ci0gICAgICAgIGludDY0X3QgY3VycmVudE51
bWJlciA9IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCk7CisgICAgICAgIGludDY0X3QgY3VycmVudE51bWJlciA9IGdldEtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXIodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwogICAg
ICAgICBpZiAobmV3TnVtYmVyIDw9IGN1cnJlbnROdW1iZXIpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKTsKLSAgICBib29sIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5LCBuZXdOdW1iZXIpOworICAgIGJvb2wgb2sg
PSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5
LCBuZXdOdW1iZXIpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5h
bCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03OTEsMTQg
Kzc5MCwxNCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2Vu
ZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRhdGFiYQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5
LCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikKK2Jv
b2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikKIHsKICAgICBJREJfVFJBQ0UoIklE
QkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUiKTsKLSAgICBBU1NF
UlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxE
QlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNh
Y3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKICAgICBWZWN0
b3I8Y2hhcj4gZGF0YTsKIAotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPmdldChsZXZl
bGRiS2V5LCBkYXRhKSkKKyAgICBpZiAoIWxldmVsREJUcmFuc2FjdGlvbi0+Z2V0KGxldmVsZGJL
ZXksIGRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpbnQ2NF90IHZlcnNpb247
CkBAIC04MTEsMTMgKzgxMCwxMyBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4
aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Zm9yRWFjaE9iamVjdFN0
b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmpl
Y3RTdG9yZVJlY29yZENhbGxiYWNrJiBjYWxsYmFjaykKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Zm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYgY2FsbGJhY2spCiB7Ci0gICAgQVNTRVJUKG1f
Y3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFu
c2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9u
KTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtaW5JREJLZXkoKSk7CiAgICAgY29u
c3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7CiAKLSAgICBPd25QdHI8TGV2ZWxE
Qkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwor
ICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbGV2ZWxEQlRyYW5zYWN0aW9uLT5jcmVh
dGVJdGVyYXRvcigpOwogICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxpZCgp
ICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7CiAg
ICAgICAgIGNvbnN0IGNoYXIqIHAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKICAgICAgICAgY29uc3Qg
Y2hhciogbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CkBAIC05MzUsMTEgKzkzNCwxMSBAQCBzdGF0
aWMgaW50NjRfdCBnZXROZXdJbmRleElkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZAogICAgIHJldHVybiBpbmRleElkOwogfQogCi1ib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGgsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRleElk
KQorYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5
UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQp
CiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCIp
OwotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgaW5kZXhJZCA9IGdldE5l
d0luZGV4SWQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQpOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJh
bnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIGluZGV4
SWQgPSBnZXROZXdJbmRleElkKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCk7CiAgICAgaWYgKGluZGV4SWQgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTk0OCwyNSArOTQ3LDI1IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRl
SW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlCiAgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGtleVBhdGhLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgSW5kZXhNZXRhRGF0YUtleTo6S2V5UGF0aCk7
CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG11bHRpRW50cnlLZXkgPSBJbmRleE1ldGFEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgSW5kZXhNZXRhRGF0
YUtleTo6TXVsdGlFbnRyeSk7CiAKLSAgICBib29sIG9rID0gcHV0U3RyaW5nKG1fY3VycmVudFRy
YW5zYWN0aW9uLmdldCgpLCBuYW1lS2V5LCBuYW1lKTsKKyAgICBib29sIG9rID0gcHV0U3RyaW5n
KGxldmVsREJUcmFuc2FjdGlvbiwgbmFtZUtleSwgbmFtZSk7CiAgICAgaWYgKCFvaykgewogICAg
ICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEJvb2wobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIHVuaXF1ZUtleSwgaXNVbmlxdWUpOworICAgIG9rID0gcHV0Qm9vbChsZXZlbERC
VHJhbnNhY3Rpb24sIHVuaXF1ZUtleSwgaXNVbmlxdWUpOwogICAgIGlmICghb2spIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJREJLZXlQYXRoKG1fY3VycmVudFRyYW5z
YWN0aW9uLmdldCgpLCBrZXlQYXRoS2V5LCBrZXlQYXRoKTsKKyAgICBvayA9IHB1dElEQktleVBh
dGgobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlQYXRoS2V5LCBrZXlQYXRoKTsKICAgICBpZiAoIW9r
KSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0Qm9vbChtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwgbXVsdGlFbnRyeUtleSwgaXNNdWx0aUVudHJ5KTsKKyAgICBvayA9
IHB1dEJvb2wobGV2ZWxEQlRyYW5zYWN0aW9uLCBtdWx0aUVudHJ5S2V5LCBpc011bHRpRW50cnkp
OwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERC
IGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05NzUsMTUgKzk3NCwxNSBAQCBi
b29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCit2b2lkIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
SW5kZXgiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJU
cmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFu
c2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4
TWV0YURhdGFTdGFydCA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkLCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhNZXRh
RGF0YUVuZCA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkKTsKIAotICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIGluZGV4TWV0YURhdGFTdGFydCwgaW5kZXhNZXRhRGF0YUVuZCkpIHsK
KyAgICBpZiAoIWRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwgaW5kZXhNZXRhRGF0YVN0
YXJ0LCBpbmRleE1ldGFEYXRhRW5kKSkgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIElu
ZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05OTEsMjcgKzk5
MCwyNyBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZQogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBp
bmRleERhdGFTdGFydCA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWluS2V5KGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleERhdGFF
bmQgPSBJbmRleERhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkKTsKIAotICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIGluZGV4RGF0YVN0YXJ0LCBpbmRleERhdGFFbmQpKSB7CisgICAgaWYgKCFkZWxldGVS
YW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIGluZGV4RGF0YVN0YXJ0LCBpbmRleERhdGFFbmQpKSB7
CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJ
bmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IE9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKK2Jvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQogewogICAgIElEQl9UUkFDRSgiSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkIik7CiAgICAgQVNTRVJU
KGtleS5pc1ZhbGlkKCkpOwogICAgIEFTU0VSVChpbmRleElkID49IE1pbmltdW1JbmRleElkKTsK
ICAgICBjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZp
ZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElk
ZW50aWZpZXIpOwogCi0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZl
bERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5k
ZXhEYXRhS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwgZW5jb2RlSURCS2V5KGtleSksIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5w
cmltYXJ5S2V5KCkpOwogCiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAgICAgZGF0YS5hcHBlbmQo
ZW5jb2RlVmFySW50KGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT52ZXJzaW9uKCkpKTsKICAgICBk
YXRhLmFwcGVuZChsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKIAotICAg
IHJldHVybiBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cHV0KGluZGV4RGF0YUtleSwgZGF0YSk7Cisg
ICAgcmV0dXJuIGxldmVsREJUcmFuc2FjdGlvbi0+cHV0KGluZGV4RGF0YUtleSwgZGF0YSk7CiB9
CiAKIHN0YXRpYyBib29sIGZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChMZXZlbERCVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIHRhcmdldCwgVmVjdG9y
PGNoYXI+JiBmb3VuZEtleSkKQEAgLTEwNDIsNyArMTA0MSw3IEBAIHN0YXRpYyBib29sIGZpbmRH
cmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QsIGludDY0X3QsIGludDY0X3QsIGNv
bnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopCitib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uJiwgaW50NjRfdCwgaW50NjRfdCwgaW50NjRfdCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKikKIHsKICAgICAvLyBGSVhNRTogVGhpcyBpc24ndCBuZWVkZWQgc2luY2Ugd2Ug
aW52YWxpZGF0ZSBpbmRleCBkYXRhIHZpYSB0aGUgdmVyc2lvbiBudW1iZXIgbWVjaGFuaXNtLgog
ICAgIHJldHVybiB0cnVlOwpAQCAtMTA1OSwxMyArMTA1OCwxNCBAQCBzdGF0aWMgYm9vbCB2ZXJz
aW9uRXhpc3RzKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaQogICAgIHJldHVybiBkZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpKSA9
PSB2ZXJzaW9uOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZpbmRLZXlJbklu
ZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1h
cnlLZXkpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4KElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtl
eSwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KQogewogICAgIElEQl9UUkFD
RSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgiKTsKICAgICBBU1NFUlQo
Zm91bmRFbmNvZGVkUHJpbWFyeUtleS5pc0VtcHR5KCkpOwogCisgICAgTGV2ZWxEQlRyYW5zYWN0
aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9u
RnJvbSh0cmFuc2FjdGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBJ
bmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBr
ZXkpOwotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9jdXJyZW50VHJhbnNhY3Rp
b24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBs
ZXZlbERCVHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgaXQtPnNlZWsobGV2ZWxk
YktleSk7CiAKICAgICBmb3IgKDs7KSB7CkBAIC0xMDgwLDkgKzEwODAsOSBAQCBib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBmb3VuZEVu
Y29kZWRQcmltYXJ5S2V5LmFwcGVuZChwLCBpdC0+dmFsdWUoKS5lbmQoKSAtIHApOwogCi0gICAg
ICAgIGlmICghdmVyc2lvbkV4aXN0cyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgdmVyc2lvbiwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsK
KyAgICAgICAgaWYgKCF2ZXJzaW9uRXhpc3RzKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgdmVyc2lvbiwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKICAg
ICAgICAgICAgIC8vIERlbGV0ZSBzdGFsZSBpbmRleCBkYXRhIGVudHJ5IGFuZCBjb250aW51ZS4K
LSAgICAgICAgICAgIG1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKTsKKyAg
ICAgICAgICAgIGxldmVsREJUcmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSk7CiAgICAgICAg
ICAgICBpdC0+bmV4dCgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTEw
OTEsMTMgKzEwOTEsMTIgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5J
bmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3QKICAgICB9CiB9CiAKLVBh
c3NSZWZQdHI8SURCS2V5PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5Vmlh
SW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCitQYXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKIHsKICAgICBJREJf
VFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCIpOwot
ICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAKICAgICBWZWN0b3I8Y2hhcj4gZm91
bmRFbmNvZGVkUHJpbWFyeUtleTsKLSAgICBpZiAoZmluZEtleUluSW5kZXgoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkgewor
ICAgIGlmIChmaW5kS2V5SW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCwga2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkgewogICAgICAgICBS
ZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5OwogICAgICAgICBkZWNvZGVJREJLZXkoZm91bmRFbmNv
ZGVkUHJpbWFyeUtleS5iZWdpbigpLCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmVuZCgpLCBwcmlt
YXJ5S2V5KTsKICAgICAgICAgcmV0dXJuIHByaW1hcnlLZXkucmVsZWFzZSgpOwpAQCAtMTEwNiwx
MyArMTEwNSwxMiBAQCBQYXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhcwogICAgIHJldHVybiAwOwogfQog
Ci1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkKK2Jvb2wg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVm
UHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVs
REJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50
VHJhbnNhY3Rpb24pOwogCiAgICAgVmVjdG9yPGNoYXI+IGZvdW5kRW5jb2RlZFByaW1hcnlLZXk7
Ci0gICAgaWYgKCFmaW5kS2V5SW5JbmRleChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRl
eElkLCBpbmRleEtleSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpCisgICAgaWYgKCFmaW5kS2V5
SW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
aW5kZXhLZXksIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBkZWNvZGVJREJLZXkoZm91bmRFbmNvZGVkUHJpbWFyeUtleS5iZWdpbigpLCBmb3Vu
ZEVuY29kZWRQcmltYXJ5S2V5LmVuZCgpLCBmb3VuZFByaW1hcnlLZXkpOwpAQCAtMTY4OSw1NiAr
MTY4Nyw1NiBAQCBib29sIGluZGV4Q3Vyc29yT3B0aW9ucyhMZXZlbERCVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludAogCiB9CiAKLVBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RT
dG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsK
ICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1
cnNvciIpOwotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRy
YW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5z
YWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25z
OwotICAgIGlmICghb2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJz
b3JPcHRpb25zKSkKKyAgICBpZiAoIW9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhsZXZlbERCVHJh
bnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1
cnNvck9wdGlvbnMpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8T2JqZWN0U3RvcmVD
dXJzb3JJbXBsPiBjdXJzb3IgPSBPYmplY3RTdG9yZUN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucyk7CisgICAgUmVmUHRyPE9iamVjdFN0
b3JlQ3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpjcmVhdGUobGV2
ZWxEQlRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKTsKICAgICBpZiAoIWN1cnNvci0+Zmlyc3RT
ZWVrKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7
CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNr
aW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6
OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNv
cjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNr
aW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvciIpOwotICAgIEFTU0VSVChtX2N1cnJl
bnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rp
b24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAg
ICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwotICAgIGlmICghb2JqZWN0U3RvcmVDdXJz
b3JPcHRpb25zKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKKyAgICBpZiAoIW9iamVj
dFN0b3JlQ3Vyc29yT3B0aW9ucyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICBSZWZQdHI8T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBPYmpl
Y3RTdG9yZUtleUN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwg
Y3Vyc29yT3B0aW9ucyk7CisgICAgUmVmUHRyPE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbD4gY3Vy
c29yID0gT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUobGV2ZWxEQlRyYW5zYWN0aW9u
LCBjdXJzb3JPcHRpb25zKTsKICAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5J
bmRleEtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGly
ZWN0aW9uIGRpcmVjdGlvbikKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElE
QkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJ
REJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IiKTsKLSAgICBBU1NFUlQobV9jdXJy
ZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0
aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwog
ICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKLSAgICBpZiAoIWluZGV4Q3Vyc29yT3B0
aW9ucyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCisgICAgaWYgKCFp
bmRleEN1cnNvck9wdGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5k
ZXhLZXlDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNv
ck9wdGlvbnMpOworICAgIFJlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGN1cnNvciA9IEluZGV4
S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7
CiAgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIAogICAg
IHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGly
ZWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbklu
ZGV4Q3Vyc29yIik7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZl
bERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9w
dGlvbnM7Ci0gICAgaWYgKCFpbmRleEN1cnNvck9wdGlvbnMobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBkaXJlY3Rp
b24sIGN1cnNvck9wdGlvbnMpKQorICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25zKGxldmVsREJU
cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmFuZ2UsIGRp
cmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxJ
bmRleEN1cnNvckltcGw+IGN1cnNvciA9IEluZGV4Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zKTsKKyAgICBSZWZQdHI8SW5kZXhDdXJz
b3JJbXBsPiBjdXJzb3IgPSBJbmRleEN1cnNvckltcGw6OmNyZWF0ZShsZXZlbERCVHJhbnNhY3Rp
b24sIGN1cnNvck9wdGlvbnMpOwogICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKQEAgLTE3NTcsMzAgKzE3NTUsMzAgQEAgUGFzc1JlZlB0cjxJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3QKIAogSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9u
KElEQkxldmVsREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKICAgICA6IG1fYmFja2luZ1N0
b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24oTGV2ZWxEQlRyYW5zYWN0aW9u
OjpjcmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0KCkpKQogewogfQogCiB2b2lkIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbigpCiB7Ci0gICAgQVNTRVJUKCFt
X2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIG1fYmFja2luZ1N0b3Jl
LT5tX2N1cnJlbnRUcmFuc2FjdGlvbiA9IExldmVsREJUcmFuc2FjdGlvbjo6Y3JlYXRlKG1fYmFj
a2luZ1N0b3JlLT5tX2RiLmdldCgpKTsKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0aGlzIEFQ
SSwgb3IganVzdCBjcmVhdGUgdGhlIHRyYW5zYWN0aW9uIGluIHRoZSBjb25zdHJ1Y3Rvcj8KIH0K
IAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0KCkKIHsK
ICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21t
aXQiKTsKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uKTsK
LSAgICBib29sIHJlc3VsdCA9IG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi0+
Y29tbWl0KCk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uLmNsZWFy
KCk7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOworICAgIGJvb2wgcmVzdWx0ID0gbV90cmFu
c2FjdGlvbi0+Y29tbWl0KCk7CisgICAgbV90cmFuc2FjdGlvbi5jbGVhcigpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246
OnJvbGxiYWNrKCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uOjpyb2xsYmFjayIpOwotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZS0+bV9jdXJy
ZW50VHJhbnNhY3Rpb24pOwotICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlv
bi0+cm9sbGJhY2soKTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24u
Y2xlYXIoKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7CisgICAgbV90cmFuc2FjdGlvbi0+
cm9sbGJhY2soKTsKKyAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7CiB9CiAKIGJvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6YmFja2luZ1N0b3JlRXhpc3RzKFNlY3VyaXR5T3JpZ2luKiBzZWN1
cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZUFyZykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNr
aW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuaAppbmRleCA3MzM5MjI2OTAxMzE1MjUwZjM1YTg4ZmEyNTI1YmRlMmZjNzhi
MzE5Li5kMzQ1Yjk0YzA1MzVmNmUyM2ZhMWFhMThhZWIzYWI0OWJkZjFkZTYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3Jl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5oCkBAIC00NywzNiArNDcsMzYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBn
ZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYg
Zm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZEludFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQp
OwogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0
X3QmIHJvd0lkKTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShp
bnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwotICAgIHZpcnR1YWwgYm9vbCB1
cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJz
aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJz
aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNp
b24pOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUp
OwogCiAgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQs
IFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBW
ZWN0b3I8SURCS2V5UGF0aD4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRv
SW5jcmVtZW50RmxhZ3MpOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2
NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJv
b2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3Qm
IGFzc2lnbmVkT2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0
b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCk7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKLSAgICB2
aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jik7Ci0gICAgdmlydHVhbCBib29sIHB1
dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCB2b2lkIGRl
bGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFs
IGludDY0X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBuZXdTdGF0ZSwgYm9vbCBjaGVja0N1cnJlbnQpOwotICAgIHZpcnR1
YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcik7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0
U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcHV0T2JqZWN0U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYs
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkm
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOworICAgIHZpcnR1YWwgaW50NjRfdCBnZXRL
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBi
b29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wg
a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9i
amVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKTsKIAotICAg
IHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
T2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpOwogCiAgICAgdmlydHVhbCB2b2lkIGdldEluZGV4
ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2
NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8SURCS2V5
UGF0aD4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRVbmlxdWVGbGFncywgVmVj
dG9yPGJvb2w+JiBmb3VuZE11bHRpRW50cnlGbGFncyk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0
ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVs
dGlFbnRyeSwgaW50NjRfdCYgaW5kZXhJZCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpOwotICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCBi
b29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5
VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0lu
SW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJp
bWFyeUtleSk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3Rv
cmVLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRp
cmVjdGlvbik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vy
c29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlS
YW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5k
ZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50NjRfdCYgaW5kZXhJZCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24m
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVj
b3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBPYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmlt
YXJ5S2V5VmlhSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSYpOworICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5
PiYgZm91bmRQcmltYXJ5S2V5KTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9w
ZW5PYmplY3RTdG9yZUtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdl
KiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+
IG9wZW5PYmplY3RTdG9yZUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdl
KiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+
IG9wZW5JbmRleEtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKIAogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2FjdGlvbj4gY3JlYXRlVHJhbnNhY3Rpb24oKTsKIApA
QCAtODYsMTMgKzg2LDEyIEBAIHByb3RlY3RlZDoKICAgICBJREJMZXZlbERCQmFja2luZ1N0b3Jl
KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgUGFzc093
blB0cjxMZXZlbERCRGF0YWJhc2U+KTsKIAogcHJpdmF0ZToKLSAgICBib29sIGZpbmRLZXlJbklu
ZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtl
eSk7CisgICAgYm9vbCBmaW5kS2V5SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
JiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5
KTsKIAogICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CiAgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNr
ZW5kSW1wbD4gbV9mYWN0b3J5OwogICAgIE93blB0cjxMZXZlbERCRGF0YWJhc2U+IG1fZGI7CiAg
ICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBtX2NvbXBhcmF0b3I7Ci0gICAgUmVmUHRyPExl
dmVsREJUcmFuc2FjdGlvbj4gbV9jdXJyZW50VHJhbnNhY3Rpb247CiAKICAgICBjbGFzcyBUcmFu
c2FjdGlvbiA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uIHsKICAgICBwdWJs
aWM6CkBAIC0xMDEsOSArMTAwLDE3IEBAIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBj
b21taXQoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrKCk7CiAKKyAgICAgICAgTGV2
ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24oKSB7IHJldHVybiBtX3RyYW5zYWN0
aW9uLmdldCgpOyB9CisKKyAgICAgICAgc3RhdGljIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxE
QlRyYW5zYWN0aW9uRnJvbShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
bikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PElEQkxldmVsREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJj4odHJhbnNhY3Rpb24pLmxldmVsREJUcmFuc2FjdGlv
bigpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBUcmFuc2FjdGlvbihJREJM
ZXZlbERCQmFja2luZ1N0b3JlKik7CiAgICAgICAgIElEQkxldmVsREJCYWNraW5nU3RvcmUqIG1f
YmFja2luZ1N0b3JlOworICAgICAgICBSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiBtX3RyYW5z
YWN0aW9uOwogICAgIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IDJm
YTVjMDg0YzdkNTY1MzQ4NjFkYzFmODU3NTdlMjcxODE0NTc3ZjQuLjllODQ5ZmFlN2NhM2UyYzY3
MTBlZTEzZTQ1M2Y2ZmE0ZmVkMTI1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBA
IC04NiwxOCArODYsMTkgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQoUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIFBhc3NSZWYKICAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVU
YXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGtleVJhbmdlLCBjYWxsYmFja3MpKSkK
KyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Z2V0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCBrZXlSYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2Fj
dGlvbikpKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9J
TkFDVElWRV9FUlI7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24pCiB7
CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCIp
OworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBy
cFRyYW5zYWN0aW9uOwogICAgIFJlZlB0cjxJREJLZXk+IGtleTsKICAgICBpZiAoa2V5UmFuZ2Ut
PmlzT25seUtleSgpKQogICAgICAgICBrZXkgPSBrZXlSYW5nZS0+bG93ZXIoKTsKICAgICBlbHNl
IHsKLSAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVD
dXJzb3IgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNv
cihvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwga2V5UmFuZ2Uu
Z2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgp
LT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IoKnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZS0+ZGF0YWJh
c2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwga2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVY
VCk7CiAgICAgICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAgICAgICAgICAgICBjYWxs
YmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkp
OwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTA2LDcgKzEwNyw3IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8CiAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvci0+Y2xvc2UoKTsKICAgICB9CiAK
LSAgICBTdHJpbmcgd2lyZURhdGEgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmdldE9i
amVjdFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5p
ZCgpLCAqa2V5KTsKKyAgICBTdHJpbmcgd2lyZURhdGEgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0
b3JlKCktPmdldE9iamVjdFN0b3JlUmVjb3JkKCp0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUtPmRh
dGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksICprZXkpOwogICAgIGlmICh3aXJlRGF0YS5p
c051bGwoKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CkBAIC0xNTQsMTIgKzE1
NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9pbmRleEtleXMoaW5kZXhLZXlzKQogICAgIHsg
fQogCi0gICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3Rv
cmUsCisgICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3Rv
cmUsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSURCS2V5
KiBwcmltYXJ5S2V5ID0gMCwgU3RyaW5nKiBlcnJvck1lc3NhZ2UgPSAwKQogICAgIHsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgaWYgKCFhZGRpbmdLZXlBbGxvd2VkKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwKKyAgICAgICAgICAgIGlmICghYWRkaW5nS2V5QWxsb3dl
ZChiYWNraW5nU3RvcmUsIHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtX2luZGV4S2V5cylb
aV0uZ2V0KCksIHByaW1hcnlLZXkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVycm9yTWVzc2Fn
ZSkKICAgICAgICAgICAgICAgICAgICAgKmVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJV
bmFibGUgdG8gYWRkIGtleSB0byBpbmRleCAnJXMnOiBhdCBsZWFzdCBvbmUga2V5IGRvZXMgbm90
IHNhdGlzZnkgdGhlIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIsCkBAIC0xNzAsMTIgKzE3MSwx
MiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgd3Jp
dGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
KSBjb25zdAorICAgIGJvb2wgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpP
YmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdT
dG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCkgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9p
bmRleEtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghYmFja2luZ1N0b3JlLmRl
bGV0ZUluZGV4RGF0YUZvclJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
LCByZWNvcmRJZGVudGlmaWVyKSkKKyAgICAgICAgICAgIGlmICghYmFja2luZ1N0b3JlLmRlbGV0
ZUluZGV4RGF0YUZvclJlY29yZCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwgcmVjb3JkSWRlbnRpZmllcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3Jk
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICoobV9pbmRleEtleXMpW2ldLmdl
dCgpLCByZWNvcmRJZGVudGlmaWVyKSkKKyAgICAgICAgICAgIGlmICghYmFja2luZ1N0b3JlLnB1
dEluZGV4RGF0YUZvclJlY29yZCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwgKihtX2luZGV4S2V5cylbaV0uZ2V0KCksIHJlY29yZElkZW50aWZpZXIpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTE4NSw3ICsxODYsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAKLSAgICBib29s
IGFkZGluZ0tleUFsbG93ZWQoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsCisgICAgYm9v
bCBhZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSURCS2V5KiBpbmRleEtl
eSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5KSBjb25zdAogICAgIHsKQEAgLTE5Myw3ICsxOTQs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgUmVmUHRy
PElEQktleT4gZm91bmRQcmltYXJ5S2V5OwotICAgICAgICBib29sIGZvdW5kID0gYmFja2luZ1N0
b3JlLmtleUV4aXN0c0luSW5kZXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
KmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXkpOworICAgICAgICBib29sIGZvdW5kID0gYmFja2lu
Z1N0b3JlLmtleUV4aXN0c0luSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsICppbmRleEtleSwgZm91bmRQcmltYXJ5S2V5KTsKICAgICAgICAgaWYg
KCFmb3VuZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAocHJpbWFyeUtl
eSAmJiBmb3VuZFByaW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtleSkpCkBAIC0yMDYsNyArMjA3
LDcgQEAgcHJpdmF0ZToKIH07CiB9CiAKLXN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPFN0cmluZz4gaW5k
ZXhOYW1lcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdy
aXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlKQorc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVy
cyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBy
aW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8U3RyaW5nPiBpbmRl
eE5hbWVzLCBjb25zdCBWZWN0b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRl
eEtleXM+JiBpbmRleEtleXMsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3Jp
dGVycywgU3RyaW5nKiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKGluZGV4TmFtZXMuc2l6
ZSgpID09IGluZGV4S2V5cy5zaXplKCkpOwogCkBAIC0yMzAsNiArMjMxLDcgQEAgc3RhdGljIGJv
b2wgbWFrZUluZGV4V3JpdGVycyhJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjwKIAogICAgICAgICBPd25QdHI8SW5kZXhXcml0ZXI+IGluZGV4V3JpdGVy
KGFkb3B0UHRyKG5ldyBJbmRleFdyaXRlcihpbmRleC0+bWV0YWRhdGEoKSwga2V5cykpKTsKICAg
ICAgICAgaWYgKCFpbmRleFdyaXRlci0+dmVyaWZ5SW5kZXhLZXlzKCpvYmplY3RTdG9yZS0+YmFj
a2luZ1N0b3JlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
dHJhbnNhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
YmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmlkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleC0+aWQoKSwgcHJpbWFyeUtleS5nZXQoKSwgZXJyb3JNZXNz
YWdlKSkgewpAQCAtMjQyLDIxICsyNDQsMjIgQEAgc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVy
cyhJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjwKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJ
bmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQordm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFBy
aW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8
SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRy
YW5zYWN0aW9uUHRyKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6c2V0SW5kZXhLZXlzIik7CiAgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBycFBy
aW1hcnlLZXk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CiAK
ICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgY291bGQgYmUgYXN5bmNocm9ub3VzLCBidXQgd2Ug
bmVlZCB0byBldmFsdWF0ZSBpZiBpdCdzIHdvcnRoIHRoZSBleHRyYSBjb21wbGV4aXR5LgogICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gcmVj
b3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRp
ZmllcigpOwotICAgIGlmICghYmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0luT2JqZWN0U3RvcmUo
ZGF0YWJhc2VJZCgpLCBpZCgpLCAqcHJpbWFyeUtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkp
IHsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKCp0cmFu
c2FjdGlvbiwgZGF0YWJhc2VJZCgpLCBpZCgpLCAqcHJpbWFyeUtleSwgcmVjb3JkSWRlbnRpZmll
ci5nZXQoKSkpIHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVy
czsKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmICghbWFrZUluZGV4V3JpdGVycyh0
aGlzLCBwcmltYXJ5S2V5LCBmYWxzZSwgaW5kZXhOYW1lcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0
ZXJzLCAmZXJyb3JNZXNzYWdlKSkgeworICAgIGlmICghbWFrZUluZGV4V3JpdGVycyh0cmFuc2Fj
dGlvbiwgdGhpcywgcHJpbWFyeUtleSwgZmFsc2UsIGluZGV4TmFtZXMsIGluZGV4S2V5cywgJmlu
ZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKICAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8g
ZGVhbCB3aXRoIGVycm9yTWVzc2FnZSBoZXJlLiBtYWtlSW5kZXhXcml0ZXJzIG9ubHkgZmFpbHMg
b24gdW5pcXVlbmVzcyBjb25zdHJhaW50IGVycm9ycy4KICAgICAgICAgdHJhbnNhY3Rpb24tPmFi
b3J0KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI2Niw2ICsyNjksNyBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJp
bWFyeUtleSwgYwogICAgICAgICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRl
cnNbaV0uZ2V0KCk7CiAgICAgICAgIGlmICghaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJl
Y29yZElkZW50aWZpZXIuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICpiYWNraW5nU3RvcmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKnRyYW5zYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhYmFzZUlkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5kZXhlcy5nZXQoaW5kZXhXcml0ZXItPmluZGV4TmFtZSgpKS0+aWQoKSkpIHsKQEAgLTI5OCw5
ICszMDIsMTAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVh
ZHlJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKICAgICB0cmFuc2FjdGlvbi0+ZGlk
Q29tcGxldGVUYXNrRXZlbnRzKCk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBw
dXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBQYXNzT3duUHRyPFZlY3RvcjxT
dHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IHBv
cEluZGV4S2V5cykKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBW
YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHBycFRyYW5zYWN0aW9uLCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9w
SW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cykK
IHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFs
Iik7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0g
cHJwVHJhbnNhY3Rpb247CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJh
bnNhY3Rpb246OlJFQURfT05MWSk7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
dmFsdWUgPSBwcnBWYWx1ZTsKICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CkBAIC0z
MTEsNyArMzE2LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICBib29sIGtleVdhc0dl
bmVyYXRlZCA9IGZhbHNlOwogCiAgICAgaWYgKHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGF1
dG9JbmNyZW1lbnQgJiYgIWtleSkgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5
ID0gb2JqZWN0U3RvcmUtPmdlbmVyYXRlS2V5KCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGF1
dG9JbmNLZXkgPSBvYmplY3RTdG9yZS0+Z2VuZXJhdGVLZXkodHJhbnNhY3Rpb24pOwogICAgICAg
ICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOwogICAgICAgICBpZiAoIWF1dG9JbmNLZXktPmlzVmFs
aWQoKSkgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJNYXhpbXVtIGtleSBnZW5l
cmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7CkBAIC0zMjMsMjEgKzMyOCwyMSBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPAogICAgIEFTU0VSVChrZXkgJiYga2V5LT5pc1ZhbGlkKCkpOwogCiAgICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiByZWNv
cmRJZGVudGlmaWVyID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbnZhbGlk
UmVjb3JkSWRlbnRpZmllcigpOwotICAgIGlmIChwdXRNb2RlID09IEFkZE9ubHkgJiYgb2JqZWN0
U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG9iamVjdFN0b3Jl
LT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRJZGVudGlmaWVy
LmdldCgpKSkgeworICAgIGlmIChwdXRNb2RlID09IEFkZE9ubHkgJiYgb2JqZWN0U3RvcmUtPmJh
Y2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKCp0cmFuc2FjdGlvbiwgb2JqZWN0
U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksICprZXksIHJlY29yZElkZW50
aWZpZXIuZ2V0KCkpKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCAiS2V5IGFs
cmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnMob2JqZWN0
U3RvcmUuZ2V0KCksIGtleSwga2V5V2FzR2VuZXJhdGVkLCAqaW5kZXhOYW1lcywgKmluZGV4S2V5
cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKKyAgICBpZiAoIW1ha2VJbmRleFdy
aXRlcnModHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLmdldCgpLCBrZXksIGtleVdhc0dlbmVyYXRl
ZCwgKmluZGV4TmFtZXMsICppbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJvck1lc3NhZ2Up
KSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCBlcnJvck1lc3NhZ2UpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBk
byBhbnkgbXV0YXRpb24uICBBZnRlciB0aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rp
b24gaW4gY2FzZSBvZiBlcnJvci4KIAotICAgIGlmICghb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9y
ZSgpLT5wdXRPYmplY3RTdG9yZVJlY29yZChvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmpl
Y3RTdG9yZS0+aWQoKSwgKmtleSwgdmFsdWUtPnRvV2lyZVN0cmluZygpLCByZWNvcmRJZGVudGlm
aWVyLmdldCgpKSkgeworICAgIGlmICghb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5wdXRP
YmplY3RTdG9yZVJlY29yZCgqdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCks
IG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCB2YWx1ZS0+dG9XaXJlU3RyaW5nKCksIHJlY29yZElk
ZW50aWZpZXIuZ2V0KCkpKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Ig
d3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsKICAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTM0Nyw2ICszNTIsNyBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPAogICAgICAgICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdy
aXRlcnNbaV0uZ2V0KCk7CiAgICAgICAgIGlmICghaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlz
KHJlY29yZElkZW50aWZpZXIuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICp0cmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPm1faWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5tX2lu
ZGV4ZXMuZ2V0KGluZGV4V3JpdGVyLT5pbmRleE5hbWUoKSktPmlkKCkpKSB7CkBAIC0zNTgsMzIg
KzM2NCwzNCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgIH0KIAogICAgIGlmIChhdXRv
SW5jcmVtZW50ICYmIHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGtleS0+dHlwZSgpID09IElE
QktleTo6TnVtYmVyVHlwZSkKLSAgICAgICAgb2JqZWN0U3RvcmUtPnVwZGF0ZUtleUdlbmVyYXRv
cihrZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOworICAgICAgICBvYmplY3RTdG9yZS0+dXBk
YXRlS2V5R2VuZXJhdG9yKHRyYW5zYWN0aW9uLCBrZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQp
OwogCiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlv
bkNvZGUmIGVjKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlv
bihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGUiKTsKIAotICAgIEFTU0VSVChJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uKS0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9u
OjpSRUFEX09OTFkpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIp
OworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFE
X09OTFkpOwogCiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlID0gdGhpczsKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFu
Z2U7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwog
Ci0gICAgaWYgKCFJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uKS0+
c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGtleVJhbmdlLCBj
YWxsYmFja3MpKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisgICAgICAg
ICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0
ZUludGVybmFsLCBvYmplY3RTdG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24p
KSkKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJ
VkVfRVJSOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9uKQog
ewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJu
YWwiKTsKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXI+IHJlY29yZElkZW50aWZpZXI7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CiAKLSAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNr
aW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlk
KCksIG9iamVjdFN0b3JlLT5pZCgpLCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsK
KyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9
IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKCp0cmFu
c2FjdGlvbiwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGtl
eVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogICAgIGlmIChiYWNraW5nU3RvcmVDdXJz
b3IpIHsKIAogICAgICAgICBkbyB7CkBAIC0zOTMsMTEgKzQwMSwxMSBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUAogICAgICAgICAgICAgICAgIGlmICghaXQtPnNlY29uZC0+aGFzVmFsaWRJZCgp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMg
YmVlbiBjcmVhdGVkLCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KIAot
ICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUo
KS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9i
amVjdFN0b3JlLT5pZCgpLCBpdC0+c2Vjb25kLT5pZCgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgp
KTsKKyAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0
b3JlKCktPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZCgqdHJhbnNhY3Rpb24sIG9iamVjdFN0b3Jl
LT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+c2Vjb25kLT5pZCgpLCByZWNv
cmRJZGVudGlmaWVyLmdldCgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nl
c3MsIHN1Y2Nlc3MpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBvYmplY3RTdG9yZS0+
YmFja2luZ1N0b3JlKCktPmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlLT5kYXRh
YmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKKyAg
ICAgICAgICAgIG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlT2JqZWN0U3RvcmVS
ZWNvcmQoKnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9y
ZS0+aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CiAKICAgICAgICAgfSB3aGlsZSAoYmFj
a2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKIApAQCAtNDA3LDIzICs0MTUs
MjUgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlAKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogfQogCi12b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBD
YWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4
Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcihQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFyIik7CiAKLSAgICBBU1NF
UlQoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbiktPm1vZGUoKSAh
PSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9t
KHRyYW5zYWN0aW9uUHRyKTsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJU
cmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogCi0gICAgaWYgKCFJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpmcm9tKHRyYW5zYWN0aW9uKS0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRl
Q2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhckludGVybmFsLCBv
YmplY3RTdG9yZSwgY2FsbGJhY2tzKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVU
YXNrKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjbGVhckludGVybmFsLCBvYmplY3RTdG9yZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlv
bikpKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFD
VElWRV9FUlI7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKLSAgICBvYmpl
Y3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmNsZWFyT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPmRh
dGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCkpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOworICAgIG9iamVjdFN0
b3JlLT5iYWNraW5nU3RvcmUoKS0+Y2xlYXJPYmplY3RTdG9yZSgqdHJhbnNhY3Rpb24sIG9iamVj
dFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpKTsKICAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogfQog
CkBAIC00NDksMTAgKzQ1OSwxMSBAQCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFj
ZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoY29ucwogICAgIHJldHVy
biBpbmRleC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Y3JlYXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5k
ZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFu
c2FjdGlvbikKIHsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAgICBpbnQ2NF90IGlkOwotICAgIGlmICghb2JqZWN0
U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbmRleChvYmplY3RTdG9yZS0+ZGF0YWJhc2VJ
ZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPm5hbWUoKSwgaW5kZXgtPmtleVBhdGgoKSwg
aW5kZXgtPnVuaXF1ZSgpLCBpbmRleC0+bXVsdGlFbnRyeSgpLCBpZCkpIHsKKyAgICBpZiAoIW9i
amVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRlSW5kZXgoKnRyYW5zYWN0aW9uLCBvYmpl
Y3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPm5hbWUoKSwg
aW5kZXgtPmtleVBhdGgoKSwgaW5kZXgtPnVuaXF1ZSgpLCBpbmRleC0+bXVsdGlFbnRyeSgpLCBp
ZCkpIHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC00OTAsOSArNTAxLDEwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhCiAgICAgbV9p
bmRleGVzLnJlbW92ZShuYW1lKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IHRyYW5zYWN0aW9uKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJ
bmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRy
YW5zYWN0aW9uKQogewotICAgIG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5k
ZXgob2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5p
ZCgpKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24g
PSBwcnBUcmFuc2FjdGlvbjsKKyAgICBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0
ZUluZGV4KCp0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3Rv
cmUtPmlkKCksIGluZGV4LT5pZCgpKTsKICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNr
RXZlbnRzKCk7CiB9CiAKQEAgLTUwOSwxMSArNTIxLDEyIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBSYW5nZSwg
SURCCiAgICAgfQogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJz
b3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFu
Z2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0
YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlv
bikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgSURCQ3Vyc29y
OjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9uKQogewogICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFs
Iik7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0g
cHJwVHJhbnNhY3Rpb247CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJh
Y2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVj
dFN0b3JlQ3Vyc29yKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgp
LCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpD
dXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+
b3Blbk9iamVjdFN0b3JlQ3Vyc29yKCp0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUtPmRhdGFiYXNl
SWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwogICAgIC8v
IFRoZSBmcm9udGVuZCBoYXMgYmVndW4gaW5kZXhpbmcsIHNvIHRoaXMgcGF1c2VzIHRoZSB0cmFu
c2FjdGlvbgogICAgIC8vIHVudGlsIHRoZSBpbmRleGluZyBpcyBjb21wbGV0ZS4gVGhpcyBjYW4n
dCBoYXBwZW4gYW55IGVhcmxpZXIKICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gc3dp
dGNoIHRvIGVhcmx5IG1vZGUgaW4gY2FzZSBtdWx0aXBsZQpAQCAtNTI5LDE5ICs1NDIsMjEgQEAg
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3MKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3Is
IGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVlKCkpOwog
fQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBl
YykKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQi
KTsKLSAgICBpZiAoIUlEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb24p
LT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwsIHRoaXMsIHJhbmdlLCBjYWxsYmFja3Mp
KSkKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKKyAgICBpZiAo
IXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rh
c2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwsIHRoaXMsIHJhbmdl
LCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
K3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4g
cHJwVHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpjb3VudEludGVybmFsIik7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CiAgICAgdWludDMyX3QgY291bnQgPSAw
OwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29y
ID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3Io
b2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIHJhbmdlLmdldCgp
LCBJREJDdXJzb3I6Ok5FWFQpOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
YmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5vcGVuT2Jq
ZWN0U3RvcmVLZXlDdXJzb3IoKnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgp
LCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CiAgICAg
aWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudW1iZXJWYWx1ZShjb3VudCkpOwogICAgICAgICByZXR1
cm47CkBAIC01ODYsMjAgKzYwMSwyNCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmFkZEluZGV4VG9NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdAogICAgIG9i
amVjdFN0b3JlLT5tX2luZGV4ZXMuc2V0KGluZGV4UHRyLT5uYW1lKCksIGluZGV4UHRyKTsKIH0K
IAotUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdlbmVyYXRl
S2V5KCkKK1Bhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZW5l
cmF0ZUtleShQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0
aW9uKQogeworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlv
biA9IHBycFRyYW5zYWN0aW9uOworCiAgICAgY29uc3QgaW50NjRfdCBtYXhHZW5lcmF0b3JWYWx1
ZSA9IDkwMDcxOTkyNTQ3NDA5OTJMTDsgLy8gTWF4aW11bSBpbnRlZ2VyIHN0b3JhYmxlIGFzIEVD
TUFTY3JpcHQgbnVtYmVyLgotICAgIGludDY0X3QgY3VycmVudE51bWJlciA9IGJhY2tpbmdTdG9y
ZSgpLT5nZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGRhdGFiYXNlSWQoKSwgaWQoKSk7Cisg
ICAgaW50NjRfdCBjdXJyZW50TnVtYmVyID0gYmFja2luZ1N0b3JlKCktPmdldEtleUdlbmVyYXRv
ckN1cnJlbnROdW1iZXIoKnRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkKCksIGlkKCkpOwogICAgIGlm
IChjdXJyZW50TnVtYmVyIDwgMCB8fCBjdXJyZW50TnVtYmVyID4gbWF4R2VuZXJhdG9yVmFsdWUp
CiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKIAogICAgIHJldHVybiBJ
REJLZXk6OmNyZWF0ZU51bWJlcihjdXJyZW50TnVtYmVyKTsKIH0KIAotdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjp1cGRhdGVLZXlHZW5lcmF0b3IoY29uc3QgSURCS2V5KiBrZXksIGJv
b2wgY2hlY2tDdXJyZW50KQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjp1cGRhdGVL
ZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFu
c2FjdGlvbiwgY29uc3QgSURCS2V5KiBrZXksIGJvb2wgY2hlY2tDdXJyZW50KQogeworICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0
aW9uOworCiAgICAgQVNTRVJUKGtleSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5
cGUpOwotICAgIGJhY2tpbmdTdG9yZSgpLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnRO
dW1iZXIoZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihmbG9vcihrZXkt
Pm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOworICAgIGJhY2tpbmdTdG9yZSgpLT5tYXli
ZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoKnRyYW5zYWN0aW9uLCBkYXRhYmFzZUlk
KCksIGlkKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KGZsb29yKGtleS0+bnVtYmVyKCkpKSArIDEs
IGNoZWNrQ3VycmVudCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4IDI4MTFj
YTFiYWQ3NmI2MTg5MmRmMjQyYTllODZiOTY5N2ZkMjI1MGEuLmJkOTViYmViZTJmN2UyYTJiZDI5
MzEyMGJmZjgxMjdlMGNiYjJmZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTEwMCwx
OCArMTAwLDE4IEBAIHByaXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChjb25z
dCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJL
ZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KTsKIAogICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsK
LSAgICBQYXNzUmVmUHRyPElEQktleT4gZ2VuZXJhdGVLZXkoKTsKLSAgICB2b2lkIHVwZGF0ZUtl
eUdlbmVyYXRvcihjb25zdCBJREJLZXkqLCBib29sIGNoZWNrQ3VycmVudCk7CisgICAgUGFzc1Jl
ZlB0cjxJREJLZXk+IGdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4pOworICAgIHZvaWQgdXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4sIGNvbnN0IElEQktleSosIGJvb2wgY2hlY2tDdXJyZW50KTsKIAot
ICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZv
aWQgcHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwg
UGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPFN0
cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4pOwot
ICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgc3Rh
dGljIHZvaWQgc2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9y
PFN0cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBjbGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4pOworICAgIHN0YXRpYyB2b2lkIGNsZWFySW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPik7CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgZGVsZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgb3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0gICAgc3RhdGljIHZvaWQg
Y291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgY291bnRJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAKICAgICAvLyBUaGVzZSBhcmUgdXNlZCBh
cyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGFib3J0IHRhc2tzLgogICAgIHN0YXRpYyB2b2lkIHJl
bW92ZUluZGV4RnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggMjRjNGZlZTA0MTViZDViYjUxMmEyMzIyY2E4
YmY1NzVlYjUxNzM3Ni4uOWJjYTA3ZGNlODA1ZTA5MzlkNmI3ZmYyNjYwNDRjYjgxYjBjODIwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaApAQCAtNjUsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBhZGRQZW5kaW5nRXZlbnRzKGludCk7CiAgICAgdm9pZCBhZGRQcmVlbXB0aXZlRXZlbnQo
KSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMrKzsgfQogICAgIHZvaWQgZGlkQ29tcGxldGVQ
cmVlbXB0aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMtLTsgQVNTRVJUKG1f
cGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7IH0KKyAgICBvcGVyYXRvciBJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uJigpIHsgcmV0dXJuICptX3RyYW5zYWN0aW9uLmdldCgpOyB9CiAK
IHByaXZhdGU6CiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBv
YmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tp
bmdTdG9yZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0
b3JlLmgKaW5kZXggZTBhNWE4ZmE1ZThkZDYzZjNhY2M4MDRiY2EwZTMzOWI0ZDE5NTlhOC4uYTIx
MGE4NjRmNzMyY2I1MmNlZTZmOGI1YjEzOWZiZTAwYzc1MjUwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKQEAgLTM1LDM4ICsz
NSwzOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9y
PFN0cmluZz4mIGZvdW5kTmFtZXMpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRJ
REJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNp
b24sIGludDY0X3QmIGZvdW5kSW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgT1ZFUlJJREUg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBp
bnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0
X3QgdmVyc2lvbikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShUcmFuc2FjdGlvbiYsIGludDY0X3Qgcm93SWQsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKFRyYW5zYWN0aW9uJiwgaW50NjRf
dCByb3dJZCwgaW50NjRfdCB2ZXJzaW9uKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpIE9WRVJSSURF
IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGlu
dDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmlu
Zz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxJREJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9y
PGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVh
bCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGlu
dDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgYm9vbCBjcmVh
dGVPYmplY3RTdG9yZShUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQs
IGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24mLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CiAKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJ
bnZhbGlkUmVjb3JkSWRlbnRpZmllcigpIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8T2Jq
ZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPigpOyB9CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRP
YmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCS2V5JikgT1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgcHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyB9Ci0gICAgdmly
dHVhbCBpbnQ2NF90IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9v
bCBjaGVja0N1cnJlbnQpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBi
b29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciog
Zm91bmRSZWNvcmRJZGVudGlmaWVyKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgU3RyaW5nIGdldE9iamVjdFN0b3JlUmVjb3JkKFRyYW5zYWN0aW9uJiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpIE9WRVJSSURF
IHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVj
b3JkKFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lk
IGNsZWFyT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9i
amVjdFN0b3JlUmVjb3JkKFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJS
SURFIHsgfQorICAgIHZpcnR1YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQp
IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyKFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVu
dCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3Rz
SW5PYmplY3RTdG9yZShUcmFuc2FjdGlvbiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
IGZvdW5kUmVjb3JkSWRlbnRpZmllcikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAg
IHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKSBPVkVS
UklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3Rv
cmVSZWNvcmQoVHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpIE9WRVJSSURFIHsgcmV0dXJuIGZh
bHNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9y
PFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxJREJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywg
VmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kTXVsdGlF
bnRyeUZsYWdzKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRp
RW50cnksIGludDY0X3QmIGluZGV4SWQpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgYm9v
bCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYp
IE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8SURCS2V5PigpOyB9Ci0gICAgdmlydHVhbCBi
b29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElE
QktleT4mIGZvdW5kUHJpbWFyeUtleSkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoVHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQ
YXRoJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50NjRfdCYg
aW5kZXhJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlSW5kZXgoVHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
cHV0SW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29u
c3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9u
JiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5
VmlhSW5kZXgoVHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKSBPVkVSUklERSB7IHJldHVy
biBQYXNzUmVmUHRyPElEQktleT4oKTsgfQorICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbklu
ZGV4KFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktl
eT4mIGZvdW5kUHJpbWFyeUtleSkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJ
REJDdXJzb3I6OkRpcmVjdGlvbikgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxDdXJzb3I+
KCk7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJz
b3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQ
dHI8Q3Vyc29yPigpOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4
S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9W
RVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9Ci0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURC
Q3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigp
OyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vy
c29yKFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsg
cmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1
cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKFRyYW5zYWN0aW9uJiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29y
OjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKFRyYW5zYWN0
aW9uJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgT1ZFUlJJ
REUgeyByZXR1cm4gUGFzc1JlZlB0cjxDdXJzb3I+KCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoVHJhbnNhY3Rpb24mLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlS
YW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRy
PEN1cnNvcj4oKTsgfQogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVh
dGVUcmFuc2FjdGlvbigpIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+
KCk7IH0KIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164411</attachid>
            <date>2012-09-17 10:16:25 -0700</date>
            <delta_ts>2012-09-17 16:12:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96663-20120917101553.patch</filename>
            <type>text/plain</type>
            <size>113302</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4NzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTFiNTZmZjI0NTdhNDY0
ZjQyMjcyNzhhODNlMjYzNzc1NzM4ZjczOS4uZTVmZTBkY2E3MGMyMmQwZGEwOGJhYzkwYzE4MTA1
MGE0MGQxZTlmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDEyLTA5LTEzICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBSZW1v
dmUgImN1cnJlbnQgdHJhbnNhY3Rpb24iIGNvbmNlcHQgZnJvbSBiYWNraW5nIHN0b3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjY2MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluZGV4ZWREQiBzaG91
bGQgYWxsb3cgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIHRvIHJ1biBpbiBwYXJhbGxlbCB3aXRoaW4g
YW5kCisgICAgICAgIGFjcm9zcyBkYXRhYmFzZXMgd2l0aGluIGFuIG9yaWdpbi4gQXMgYW4gaW5p
dGlhbCBzdGVwIHRvIGVuYWJsaW5nIHRoaXMsIHRoZQorICAgICAgICBiYWNraW5nIHN0b3JlIHNo
b3VsZCBub3QgaG9sZCBhICJjdXJyZW50IHRyYW5zYWN0aW9uIiAtIGluc3RlYWQsIG9wZXJhdGlv
bnMKKyAgICAgICAgc2hvdWxkIGJlIGRvbmUgcmVsYXRpdmUgdG8gYSB0cmFuc2FjdGlvbiBtYW5h
Z2VkIGJ5IHRoZSBkYXRhYmFzZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKwor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAo
SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZElt
cGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW50VmVyc2lvbkludGVy
bmFsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
Lmg6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4
QmFja2VuZEltcGw6OmdldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFj
a2VuZEltcGw6OmdldEtleUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFj
a2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpn
ZXRLZXkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwu
aDoKKyAgICAgICAgKElEQkluZGV4QmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRl
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9i
amVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0lu
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Zm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0
c0luSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Bl
bk9iamVjdFN0b3JlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5n
U3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6
YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkxldmVsREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKElEQkxldmVsREJCYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246
OmxldmVsREJUcmFuc2FjdGlvbik6CisgICAgICAgIChUcmFuc2FjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5z
YWN0aW9uRnJvbSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Z2V0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjptYWtl
SW5kZXhXcml0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnNldEluZGV4S2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29y
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291
bnRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpnZW5lcmF0ZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjp1cGRhdGVLZXlHZW5lcmF0b3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Om9w
ZXJhdG9yIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24mKToKKwogMjAxMi0wOS0xNyAgUGhp
bGlwIFJvZ2VycyAgPHBkckBnb29nbGUuY29tPgogCiAgICAgICAgIE1ha2UgU1ZHUGF0aFNlZ0xp
c3QuYXBwZW5kSXRlbSBPKDEpIGluc3RlYWQgb2YgTyhuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCA2ODVkYTM4YTY0NmY1ZjExY2Y1MmMzNDM2YzdlMWFlZjE2NjBkNjE5Li5jMDNjMWNm
ZDBkZTczNTU4YzcyOTc3ODcyNGRmMDJjM2UwYWVjNjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTA5LTEzICBKb3NodWEgQmVsbCAgPGpzYmVsbEBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBSZW1vdmUgImN1cnJlbnQgdHJhbnNh
Y3Rpb24iIGNvbmNlcHQgZnJvbSBiYWNraW5nIHN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjY2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBmYWtlIGNsYXNzIHdpdGggbmV3IG1ldGhv
ZCBzaWduYXR1cmVzLgorCisgICAgICAgICogdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oOgor
CiAyMDEyLTA5LTE0ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IE93blB0ciBhbmQgUmVmUHRyIHJlcG9ydGVkIGJ5IHBvaW50
ZXIgY2FuIGJlIGRvdWJsZSBjb3VudGVkIGJ5IHRoZSBtZW1vcnkgaW5zdHJ1bWVudGF0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3Rv
cmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5o
CmluZGV4IGYwNjBlNzJlZjRjNmZkNDcyNTRlYzdmMTU1ODgwOTAzOTVhNjU5ZGUuLjExYjUxMWZj
MzkwZmU2MDU4M2YxZTlhYjk0ZjA4ZTQxZTdiNTU3MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC00NCwxOCArNDQsMjAg
QEAgY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKIGNsYXNzIElEQkJhY2tpbmdTdG9yZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPElEQkJhY2tpbmdTdG9yZT4gewogcHVibGljOgorICAgIGNsYXNzIFRyYW5z
YWN0aW9uOworCiAgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCkge307CiAKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcykgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYg
bmFtZSwgU3RyaW5nJiBmb3VuZFN0cmluZ1ZlcnNpb24sIGludDY0X3QmIGZvdW5kSW50VmVyc2lv
biwgaW50NjRfdCYgZm91bmRJZCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRh
YmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdWZXJz
aW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihpbnQ2NF90IHJvd0lkLCBpbnQ2NF90
IGludFZlcnNpb24pID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRh
RGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKFRyYW5zYWN0aW9uKiwgaW50NjRf
dCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKSA9IDA7CisgICAgdmlydHVhbCBib29sIHVwZGF0
ZUlEQkRhdGFiYXNlTWV0YURhdGEoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBT
dHJpbmcmIHZlcnNpb24pID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29u
c3QgU3RyaW5nJiBuYW1lKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVz
KGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0
cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxJREJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVj
dG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWdu
ZWRPYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmly
dHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNy
ZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CiAKICAgICBjbGFzcyBPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXI+IHsKICAgICBwdWJsaWM6CkBAIC02NCwyOCArNjYsMjggQEAgcHVibGljOgogICAgIH07CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gY3JlYXRl
SW52YWxpZFJlY29yZElkZW50aWZpZXIoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRP
YmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCS2V5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwdXRPYmplY3RTdG9yZVJl
Y29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9i
amVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBp
bnQ2NF90IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVL
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBnZXRPYmplY3RTdG9yZVJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
UmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKKyAgICB2aXJ0
dWFsIGludDY0X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmlydHVh
bCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051
bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3Rz
SW5PYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
IGZvdW5kUmVjb3JkSWRlbnRpZmllcikgPSAwOwogCiAgICAgY2xhc3MgT2JqZWN0U3RvcmVSZWNv
cmRDYWxsYmFjayB7CiAgICAgcHVibGljOgogICAgICAgICAgdmlydHVhbCBib29sIGNhbGxiYWNr
KGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciosIGNvbnN0IFN0cmluZyYgdmFsdWUp
ID0gMDsKICAgICAgICAgIHZpcnR1YWwgfk9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2soKSB7fTsK
ICAgICB9OwotICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2Fs
bGJhY2smKSA9IDA7CisgICAgdmlydHVhbCBib29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBP
YmplY3RTdG9yZVJlY29yZENhbGxiYWNrJikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGdldElu
ZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3Rvcjxp
bnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8SURC
S2V5UGF0aD4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRVbmlxdWVGbGFncywg
VmVjdG9yPGJvb2w+JiBmb3VuZE11bHRpRW50cnlGbGFncykgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9v
bCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNv
cmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtl
eSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBjcmVhdGVJbmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29s
IGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50NjRfdCYgaW5kZXhJZCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBP
YmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KFRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFy
eUtleSkgPSAwOwogCiAgICAgY2xhc3MgQ3Vyc29yIDogcHVibGljIFJlZkNvdW50ZWQ8Q3Vyc29y
PiB7CiAgICAgcHVibGljOgpAQCAtMTA1LDEwICsxMDcsMTAgQEAgcHVibGljOgogICAgICAgICB2
aXJ0dWFsIH5DdXJzb3IoKSB7IH07CiAgICAgfTsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
dXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikg
PSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1
cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElE
QkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4g
b3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rp
b24pID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVD
dXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKIAogICAgIGNsYXNzIFRy
YW5zYWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8VHJhbnNhY3Rpb24+IHsKICAgICBwdWJsaWM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IDQ2NTczNjJkMTA1NjkxYWU1NmI4MmZiYzU3NmQ0
MTZjNjVhM2U4YzguLjcxMjNiN2VjODExMzExNDNlMGFmNjVjMTE3ZTAzMDJjNGYxZjQ3OWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0xOTAsMTEgKzE5MCwxMiBAQCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3Jl
YXRlT2JqZWN0UwogICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRh
YmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0
YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24pCiB7
CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJw
VHJhbnNhY3Rpb247CiAgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkOwogCi0gICAgaWYgKCFkYXRh
YmFzZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKGRhdGFiYXNlLT5pZCgpLCBv
YmplY3RTdG9yZS0+bmFtZSgpLCBvYmplY3RTdG9yZS0+a2V5UGF0aCgpLCBvYmplY3RTdG9yZS0+
YXV0b0luY3JlbWVudCgpLCBvYmplY3RTdG9yZUlkKSkgeworICAgIGlmICghZGF0YWJhc2UtPm1f
YmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSgqdHJhbnNhY3Rpb24sIGRhdGFiYXNlLT5p
ZCgpLCBvYmplY3RTdG9yZS0+bmFtZSgpLCBvYmplY3RTdG9yZS0+a2V5UGF0aCgpLCBvYmplY3RT
dG9yZS0+YXV0b0luY3JlbWVudCgpLCBvYmplY3RTdG9yZUlkKSkgewogICAgICAgICB0cmFuc2Fj
dGlvbi0+YWJvcnQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyNiw5ICsyMjcsMTAg
QEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBT
dHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW8KICAgICBtX29iamVjdFN0b3Jlcy5yZW1vdmUobmFt
ZSk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbikKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBU
cmFuc2FjdGlvbikKIHsKLSAgICBkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZU9iamVj
dFN0b3JlKGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZS0+aWQoKSk7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247Cisg
ICAgZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSgqdHJhbnNhY3Rp
b24sIGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZS0+aWQoKSk7CiAgICAgdHJhbnNhY3Rpb24t
PmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCkBAIC0yODQsNyArMjg2LDcgQEAgdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWYKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4g
dHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBk
YXRhYmFzZS0+aWQoKTsKICAgICBkYXRhYmFzZS0+bV92ZXJzaW9uID0gdmVyc2lvbjsKLSAgICBp
ZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShk
YXRhYmFzZUlkLCBkYXRhYmFzZS0+bV92ZXJzaW9uKSkgeworICAgIGlmICghZGF0YWJhc2UtPm1f
YmFja2luZ1N0b3JlLT51cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKCp0cmFuc2FjdGlvbiwgZGF0
YWJhc2VJZCwgZGF0YWJhc2UtPm1fdmVyc2lvbikpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9X
Tl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOwogICAgICAg
ICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjkyLDEzICsyOTQs
MTQgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWYKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4odHJhbnNhY3Rpb24pKTsK
IH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbnRWZXJzaW9uSW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gZGF0YWJhc2UsIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5z
YWN0aW9uKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbnRWZXJzaW9uSW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4gZGF0YWJhc2UsIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFu
c2FjdGlvbikKIHsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFz
ZS0+aWQoKTsKICAgICBpbnQ2NF90IG9sZFZlcnNpb24gPSBkYXRhYmFzZS0+bV9pbnRWZXJzaW9u
OwogICAgIEFTU0VSVCh2ZXJzaW9uID4gb2xkVmVyc2lvbik7CiAgICAgZGF0YWJhc2UtPm1faW50
VmVyc2lvbiA9IHZlcnNpb247Ci0gICAgaWYgKCFkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPnVw
ZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihkYXRhYmFzZUlkLCBkYXRhYmFzZS0+bV9pbnRWZXJz
aW9uKSkgeworICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT51cGRhdGVJREJEYXRh
YmFzZUludFZlcnNpb24oKnRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBkYXRhYmFzZS0+bV9pbnRW
ZXJzaW9uKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcg
ZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgp
OwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXggMjJjY2M0MzIyMGI1MDRm
ZTcwNjg1NjdiNTlhNDc2MjU1ZWVhODU0ZC4uMTMwMmM5ZDdlZGNmZjRhNjE2N2JkODdkMGJiOGE0
NmJjOGU1MWE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtODYsNyArODYsNyBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIHNldFZlcnNpb25JbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwotICAgIHN0YXRpYyB2b2lk
IHNldEludFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7
CisgICAgc3RhdGljIHZvaWQgc2V0SW50VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBpbnQ2NF90IHZlcnNp
b24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPik7CiAKICAgICAvLyBUaGVzZSBhcmUgdXNlZCBhcyBzZXRWZXJzaW9uIHRyYW5z
YWN0aW9uIGFib3J0IHRhc2tzLgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU9iamVjdFN0b3JlRnJv
bU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZElt
cGwuY3BwCmluZGV4IDM4Y2ZjZWM5N2ZiMjcwMTNkYjcxMDRkZjc3NjIwYWIwZDYyNjA1ZjMuLjRh
MjVhNDhlYmU2ZWE2M2M1OTU0NjY3Nzc4OTNmNmUwZWY1NzlhMWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3Bw
CkBAIC03NCwxOSArNzQsMjAgQEAgSURCSW5kZXhNZXRhZGF0YSBJREJJbmRleEJhY2tlbmRJbXBs
OjptZXRhZGF0YSgpIGNvbnN0CiAgICAgcmV0dXJuIElEQkluZGV4TWV0YWRhdGEobV9uYW1lLCBt
X2tleVBhdGgsIG1fdW5pcXVlLCBtX211bHRpRW50cnkpOwogfQogCi12b2lkIElEQkluZGV4QmFj
a2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IHVudHlwZWREaXJlY3Rpb24sIElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbikKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgdW50eXBl
ZERpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JU
eXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgi
SURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsIik7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CiAg
ICAgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8SURCQ3Vyc29y
OjpEaXJlY3Rpb24+KHVudHlwZWREaXJlY3Rpb24pOwogCiAgICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7CiAKICAgICBzd2l0Y2ggKGN1cnNvclR5
cGUpIHsKICAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29y
OgotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9w
ZW5JbmRleEtleUN1cnNvcihpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9y
ZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAg
ICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5k
ZXhLZXlDdXJzb3IoKnRyYW5zYWN0aW9uLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9v
YmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0
aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
OjpJbmRleEN1cnNvcjoKLSAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPmJhY2tp
bmdTdG9yZSgpLT5vcGVuSW5kZXhDdXJzb3IoaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1f
b2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVj
dGlvbik7CisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5iYWNraW5nU3RvcmUo
KS0+b3BlbkluZGV4Q3Vyc29yKCp0cmFuc2FjdGlvbiwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5k
ZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCks
IGRpcmVjdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJzb3I6CiAgICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZToKQEAgLTEyNywxMiArMTI4LDEzIEBAIHZvaWQgSURC
SW5kZXhCYWNrZW5kSW1wbDo6b3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBw
cnBLZXlSYW5nZSwgdW5zCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5T
QUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIAotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpjb3Vu
dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291
bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tl
bmRJbXBsOjpjb3VudEludGVybmFsIik7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CiAgICAgdWludDMyX3QgY291bnQg
PSAwOwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVD
dXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcihpbmRleC0+
ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5p
ZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5iYWNraW5nU3RvcmUo
KS0+b3BlbkluZGV4S2V5Q3Vyc29yKCp0cmFuc2FjdGlvbiwgaW5kZXgtPmRhdGFiYXNlSWQoKSwg
aW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgcmFuZ2UuZ2V0
KCksIElEQkN1cnNvcjo6TkVYVCk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKICAg
ICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudW1iZXJW
YWx1ZShjb3VudCkpOwogICAgICAgICByZXR1cm47CkBAIC0xNDUsMjQgKzE0NywyNiBAQCB2b2lk
IElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCSQogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsKIH0KIAotdm9pZCBJREJJbmRleEJhY2tl
bmRJbXBsOjpjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6
OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFj
a2VuZEltcGw6OmNvdW50Iik7Ci0gICAgaWYgKCFJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpm
cm9tKHRyYW5zYWN0aW9uKS0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZjb3VudEludGVybmFsLCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzKSkpCisgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CisgICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZjb3VudElu
dGVybmFsLCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQogICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiB9CiAK
LXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24p
CiB7CiAgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCIpOwor
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRy
YW5zYWN0aW9uOwogCiAgICAgUmVmUHRyPElEQktleT4ga2V5OwogCiAgICAgaWYgKGtleVJhbmdl
LT5pc09ubHlLZXkoKSkKICAgICAgICAga2V5ID0ga2V5UmFuZ2UtPmxvd2VyKCk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3Jl
Q3Vyc29yID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhDdXJzb3IoaW5kZXgtPmRh
dGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQo
KSwga2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgICAgIFJlZlB0cjxJREJC
YWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPmJhY2tpbmdT
dG9yZSgpLT5vcGVuSW5kZXhDdXJzb3IoKnRyYW5zYWN0aW9uLCBpbmRleC0+ZGF0YWJhc2VJZCgp
LCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCBrZXlSYW5n
ZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKIAogICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1
cnNvcikgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKQEAgLTE3Miw5ICsxNzYsOSBAQCB2b2lkIElEQklu
ZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQkluZAogICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7CiAgICAg
fQogCi0gICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGluZGV4LT5iYWNraW5nU3RvcmUo
KS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29i
amVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksICprZXkpOworICAgIFJlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXkgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlW
aWFJbmRleCgqdHJhbnNhY3Rpb24sIGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVj
dFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksICprZXkpOwogCi0gICAgU3RyaW5nIHZh
bHVlID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJlY29yZChpbmRleC0+
ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksICpwcmltYXJ5
S2V5KTsKKyAgICBTdHJpbmcgdmFsdWUgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldE9iamVj
dFN0b3JlUmVjb3JkKCp0cmFuc2FjdGlvbiwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1f
b2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCAqcHJpbWFyeUtleSk7CiAKICAgICBpZiAodmFsdWUu
aXNOdWxsKCkpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKQEAgLTE4OCwxOSArMTkyLDIwIEBAIHZvaWQgSURC
SW5kZXhCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCSW5kCiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh2YWx1ZSkpOwogfQogCi12b2lkIElEQkluZGV4QmFja2Vu
ZEltcGw6OmdldEtleUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJ
REJJbmRleEJhY2tlbmRJbXBsOjpnZXRLZXlJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlv
bikKIHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsIik7
CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJw
VHJhbnNhY3Rpb247CiAKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tp
bmdTdG9yZUN1cnNvciA9Ci0gICAgICAgICAgICBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5J
bmRleEtleUN1cnNvcihpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJh
Y2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhU
KTsKKyAgICAgICAgICAgIGluZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29y
KCp0cmFuc2FjdGlvbiwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVC
YWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwga2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVY
VCk7CiAKICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewogICAgICAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxJREJLZXkqPigwKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBSZWZQdHI8SURCS2V5PiBrZXlSZXN1bHQgPSBpbmRleC0+YmFja2luZ1N0b3Jl
KCktPmdldFByaW1hcnlLZXlWaWFJbmRleChpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9v
YmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAqYmFja2luZ1N0b3JlQ3Vyc29y
LT5rZXkoKSk7CisgICAgUmVmUHRyPElEQktleT4ga2V5UmVzdWx0ID0gaW5kZXgtPmJhY2tpbmdT
dG9yZSgpLT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgoKnRyYW5zYWN0aW9uLCBpbmRleC0+ZGF0YWJh
c2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAq
YmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKSk7CiAgICAgaWYgKCFrZXlSZXN1bHQpIHsKICAgICAg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8SURCS2V5Kj4oMCkpOwogICAgICAg
ICBiYWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7CkBAIC0yMTEsMjUgKzIxNiwyNiBAQCB2b2lk
IElEQkluZGV4QmFja2VuZEltcGw6OmdldEtleUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZQogfQogCiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4
QmFja2VuZEltcGw6OmdldCIpOwogICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRl
eCA9IHRoaXM7CiAgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdl
OwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAg
ICBpZiAoIUlEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb24pLT5zY2hl
ZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmdldEludGVybmFsLCBp
bmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpKQorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20o
dHJhbnNhY3Rpb25QdHIpOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVh
dGVDYWxsYmFja1Rhc2soJmdldEludGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcywg
dHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNB
Q1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEtl
eShQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6Omdl
dEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJJ
bmRleEJhY2tlbmRJbXBsOjpnZXRLZXkiKTsKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4gaW5kZXggPSB0aGlzOwogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBL
ZXlSYW5nZTsKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFj
a3M7Ci0gICAgaWYgKCFJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9u
KS0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZnZXRLZXlJ
bnRlcm5hbCwgaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3MpKSkKKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmdldEtleUludGVybmFsLCBp
bmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJ
bXBsLmgKaW5kZXggZTExNzQ1NzlkNjE3M2FjZTU4NDA3ZGMyYmY1MzM5ZjJiZjM5YjQwYy4uMTcz
YzMyZDA4ZmYxNDMzYjk5OTBlNTA1MjI1MGNjODljYTZkYThiOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaApAQCAt
NzksOSArNzksOSBAQCBwcml2YXRlOgogICAgIElEQkluZGV4QmFja2VuZEltcGwoY29uc3QgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbCosIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVu
dHJ5KTsKIAogICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZTo6Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBjb3VudEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsK
LSAgICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0S2V5SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAg
IHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4pOworICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRLZXlJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPik7CiAKICAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlk
SWQgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDkzMGUyMGIzYjgzNWRkYWVkNTM3
ZTdlMTkwYjE0NTEyZWFlNDcyNmEuLjY4NTE3ZDhhODFlOTg2MjE1ODIzNTExMDg1MDIwOTBiNTI4
MTg5OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxl
dmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCkBAIC0zMzYsMjIgKzMzNiwyMCBAQCBib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihpbnQ2NF90IHJvd0lk
LCBpbnQ2NF90IGludFZlcnNpb24pCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0
ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKQogewotICAgIEFTU0VS
VChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgLy8gRklYTUU6IENoYW5nZSB0aGlzIHRvIHN0
cmljdGx5IGdyZWF0ZXIgdGhhbiAwIG9uY2Ugd2UgdGhyb3cgVHlwZUVycm9yIGZvcgogICAgIC8v
IGJhZCB2ZXJzaW9ucy4KICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGludFZlcnNpb24gPj0gMCwg
ImludFZlcnNpb24gd2FzICVsbGQiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGludFZlcnNpb24p
KTsKLSAgICBpZiAoIXB1dFZhckludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgRGF0YWJh
c2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50
VmVyc2lvbiksIGludFZlcnNpb24pKQorICAgIGlmICghcHV0VmFySW50KFRyYW5zYWN0aW9uOjps
ZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6
ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVyc2lvbiksIGludFZl
cnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGlu
dDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK2Jvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
KQogewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgaWYgKCFwdXRTdHJp
bmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29k
ZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKKyAg
ICBpZiAoIXB1dFN0cmluZyhUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFu
c2FjdGlvbiksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRh
RGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgcmV0dXJuIHRydWU7CkBAIC01MTksMTEgKzUxNywxMSBAQCBzdGF0aWMgaW50NjRfdCBn
ZXROZXdPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YQogICAgIHJldHVybiBvYmplY3RTdG9yZUlkOwogfQogCi1ib29sIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1l
bnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKK2Jvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2ln
bmVkT2JqZWN0U3RvcmVJZCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmNyZWF0ZU9iamVjdFN0b3JlIik7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9u
KTsKLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBnZXROZXdPYmplY3RTdG9yZUlkKG1fY3Vy
cmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rp
b24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25G
cm9tKHRyYW5zYWN0aW9uKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBnZXROZXdPYmpl
Y3RTdG9yZUlkKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCk7CiAgICAgaWYgKG9iamVj
dFN0b3JlSWQgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTUzNyw1NSArNTM1LDU1
IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRf
dCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5R2Vu
ZXJhdG9yQ3VycmVudE51bWJlcik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVzS2V5ID0g
T2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG5hbWUpOwogCi0gICAgYm9v
bCBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZUtleSwgbmFt
ZSk7CisgICAgYm9vbCBvayA9IHB1dFN0cmluZyhsZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVLZXks
IG5hbWUpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRl
eGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sg
PSBwdXRJREJLZXlQYXRoKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlQYXRoS2V5LCBr
ZXlQYXRoKTsKKyAgICBvayA9IHB1dElEQktleVBhdGgobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlQ
YXRoS2V5LCBrZXlQYXRoKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50
ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBhdXRvSW5jcmVt
ZW50S2V5LCBhdXRvSW5jcmVtZW50KTsKKyAgICBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rp
b24sIGF1dG9JbmNyZW1lbnRLZXksIGF1dG9JbmNyZW1lbnQpOwogICAgIGlmICghb2spIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIGV2aWN0YWJsZUtleSwgZmFsc2UpOworICAgIG9rID0gcHV0SW50KGxldmVsREJU
cmFuc2FjdGlvbiwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7CiAgICAgaWYgKCFvaykgewogICAgICAg
ICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5n
ZXQoKSwgbGFzdFZlcnNpb25LZXksIDEpOworICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2Fj
dGlvbiwgbGFzdFZlcnNpb25LZXksIDEpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG1h
eEluZGV4SWRLZXksIE1pbmltdW1JbmRleElkKTsKKyAgICBvayA9IHB1dEludChsZXZlbERCVHJh
bnNhY3Rpb24sIG1heEluZGV4SWRLZXksIE1pbmltdW1JbmRleElkKTsKICAgICBpZiAoIW9rKSB7
CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0Qm9vbChtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgaGFzS2V5UGF0aEtleSwgIWtleVBhdGguaXNOdWxsKCkpOworICAgIG9r
ID0gcHV0Qm9vbChsZXZlbERCVHJhbnNhY3Rpb24sIGhhc0tleVBhdGhLZXksICFrZXlQYXRoLmlz
TnVsbCgpKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5k
ZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9r
ID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyS2V5LCBLZXlHZW5lcmF0b3JJbml0aWFsTnVtYmVyKTsKKyAgICBvayA9IHB1dEludChs
ZXZlbERCVHJhbnNhY3Rpb24sIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXksIEtleUdlbmVy
YXRvckluaXRpYWxOdW1iZXIpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJ
bnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG5hbWVzS2V5
LCBvYmplY3RTdG9yZUlkKTsKKyAgICBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIG5h
bWVzS2V5LCBvYmplY3RTdG9yZUlkKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJP
UigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNTk2LDM1ICs1OTQsMzYgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVP
YmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9y
ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3ZvaWQgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
T2JqZWN0U3RvcmUiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExl
dmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVs
REJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgU3RyaW5nIG9iamVjdFN0b3Jl
TmFtZTsKLSAgICBnZXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIE9iamVjdFN0
b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjpOYW1lKSwgb2JqZWN0U3RvcmVOYW1lKTsKKyAgICBnZXRTdHJpbmco
bGV2ZWxEQlRyYW5zYWN0aW9uLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TmFtZSksIG9iamVj
dFN0b3JlTmFtZSk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgMCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkKSkpCisgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNh
Y3Rpb24sIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCAwKSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQpKSkKICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVy
cm9yLgogCi0gICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShPYmplY3RTdG9yZU5hbWVz
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVOYW1lKSk7CisgICAgbGV2ZWxEQlRy
YW5zYWN0aW9uLT5yZW1vdmUoT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlTmFtZSkpOwogCi0gICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIDApLCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCkpKQorICAgIGlmICghZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9u
LCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCks
IEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
KSkpCiAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KLSAgICBpZiAoIWRl
bGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBJbmRleE1ldGFEYXRhS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCksIEluZGV4TWV0YURhdGFLZXk6
OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpCisgICAgaWYgKCFkZWxl
dGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlTWF4
S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkKICAgICAgICAgcmV0dXJuOyAvLyBGSVhN
RTogUmVwb3J0IGVycm9yLgogCi0gICAgY2xlYXJPYmplY3RTdG9yZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkKTsKKyAgICBjbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkKTsKIH0KIAotU3RyaW5nIElEQkxldmVsREJCYWNraW5nU3RvcmU6Omdl
dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXkmIGtleSkKK1N0cmluZyBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpn
ZXRPYmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYga2V5KQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0
T2JqZWN0U3RvcmVSZWNvcmQiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFu
c2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9u
KTsKKwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKICAgICBWZWN0b3I8
Y2hhcj4gZGF0YTsKIAotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgaWYg
KCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Z2V0KGxldmVsZGJLZXksIGRhdGEpKQorICAgIGlmICgh
bGV2ZWxEQlRyYW5zYWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAogICAgIGludDY0X3QgdmVyc2lvbjsKQEAgLTY3NiwyMyArNjc1LDIzIEBA
IHN0YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhCiAgICAgcmV0dXJuIHZlcnNpb247CiB9CiAKLWJvb2wg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZp
ZXIpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3JkKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikK
IHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3Jl
UmVjb3JkIik7CiAgICAgQVNTRVJUKGtleS5pc1ZhbGlkKCkpOwotICAgIEFTU0VSVChtX2N1cnJl
bnRUcmFuc2FjdGlvbik7Ci0gICAgaW50NjRfdCB2ZXJzaW9uID0gZ2V0TmV3VmVyc2lvbk51bWJl
cihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7
CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlv
bjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgaW50NjRfdCB2ZXJz
aW9uID0gZ2V0TmV3VmVyc2lvbk51bWJlcihsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZWRhdGFL
ZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBrZXkpOwogCiAgICAgVmVjdG9yPGNoYXI+IHY7CiAgICAgdi5hcHBlbmQoZW5jb2RlVmFySW50
KHZlcnNpb24pKTsKICAgICB2LmFwcGVuZChlbmNvZGVTdHJpbmcodmFsdWUpKTsKIAotICAgIGlm
ICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChvYmplY3RTdG9yZWRhdGFLZXksIHYpKQorICAg
IGlmICghbGV2ZWxEQlRyYW5zYWN0aW9uLT5wdXQob2JqZWN0U3RvcmVkYXRhS2V5LCB2KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5
S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBr
ZXkpOwotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChleGlzdHNFbnRyeUtleSwg
ZW5jb2RlSW50KHZlcnNpb24pKSkKKyAgICBpZiAoIWxldmVsREJUcmFuc2FjdGlvbi0+cHV0KGV4
aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIg
PSBzdGF0aWNfY2FzdDxMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIp
OwpAQCAtNzAxLDE0ICs3MDAsMTQgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRP
YmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2IKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0
b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQordm9pZCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFy
T2JqZWN0U3RvcmUiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExl
dmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVs
REJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBz
dGFydEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKS5lbmNvZGUo
KTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkICsgMSwgMCkuZW5jb2RlKCk7CiAKLSAgICBkZWxldGVSYW5nZShtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXksIHN0b3BLZXkpOworICAgIGRlbGV0ZVJh
bmdlKGxldmVsREJUcmFuc2FjdGlvbiwgc3RhcnRLZXksIHN0b3BLZXkpOwogfQogCiBQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpCkBAIC03MTYs
MzAgKzcxNSwzMCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOgogICAgIHJldHVybiBMZXZlbERC
UmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKCk7CiB9CiAKLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3Jk
SWRlbnRpZmllcikKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3Rv
cmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCiB7CiAgICAgSURCX1RSQUNFKCJJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZCIpOwotICAgIEFTU0VS
VChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERC
VHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2Fj
dGlvbik7CiAgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJ
ZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihy
ZWNvcmRJZGVudGlmaWVyKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZURh
dGFLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKLSAgICBtX2N1cnJl
bnRUcmFuc2FjdGlvbi0+cmVtb3ZlKG9iamVjdFN0b3JlRGF0YUtleSk7CisgICAgbGV2ZWxEQlRy
YW5zYWN0aW9uLT5yZW1vdmUob2JqZWN0U3RvcmVEYXRhS2V5KTsKIAogICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7
Ci0gICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShleGlzdHNFbnRyeUtleSk7CisgICAg
bGV2ZWxEQlRyYW5zYWN0aW9uLT5yZW1vdmUoZXhpc3RzRW50cnlLZXkpOwogfQogCiAKLWludDY0
X3QgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK2ludDY0X3QgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsK
KyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9u
OjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURh
dGFLZXk6OktleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOwogCiAgICAgaW50NjRfdCBrZXlHZW5l
cmF0b3JDdXJyZW50TnVtYmVyID0gLTE7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBp
ZiAobV9jdXJyZW50VHJhbnNhY3Rpb24tPmdldChrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5
LCBkYXRhKSkKKyAgICBpZiAobGV2ZWxEQlRyYW5zYWN0aW9uLT5nZXQoa2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlcktleSwgZGF0YSkpCiAgICAgICAgIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIg
PSBkZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpKTsKICAgICBlbHNlIHsKICAgICAg
ICAgLy8gUHJldmlvdXNseSwgdGhlIGtleSBnZW5lcmF0b3Igc3RhdGUgd2FzIG5vdCBzdG9yZWQg
ZXhwbGljaXRseSBidXQgZGVyaXZlZCBmcm9tIHRoZQpAQCAtNzQ4LDcgKzc0Nyw3IEBAIGludDY0
X3QgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihp
bnQ2NF90IGRhdGFiYXNlSWQsCiAgICAgICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9
IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1p
bklEQktleSgpKTsKICAgICAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RT
dG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXko
KSk7CiAKLSAgICAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFu
c2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICAgICAgT3duUHRyPExldmVsREJJdGVyYXRv
cj4gaXQgPSBsZXZlbERCVHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgICAgIGlu
dDY0X3QgbWF4TnVtZXJpY0tleSA9IDA7CiAKICAgICAgICAgZm9yIChpdC0+c2VlayhzdGFydEtl
eSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7
IGl0LT5uZXh0KCkpIHsKQEAgLTc3MiwxOCArNzcxLDE4IEBAIGludDY0X3QgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNl
SWQsCiAgICAgcmV0dXJuIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXI7CiB9CiAKLWJvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051
bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om1h
eWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkKIHsKLSAgICBBU1NF
UlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxE
QlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNh
Y3Rpb24pOwogCiAgICAgaWYgKGNoZWNrQ3VycmVudCkgewotICAgICAgICBpbnQ2NF90IGN1cnJl
bnROdW1iZXIgPSBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQpOworICAgICAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXIgPSBnZXRLZXlHZW5lcmF0
b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsK
ICAgICAgICAgaWYgKG5ld051bWJlciA8PSBjdXJyZW50TnVtYmVyKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlcik7Ci0gICAgYm9vbCBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5n
ZXQoKSwga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgbmV3TnVtYmVyKTsKKyAgICBib29s
IG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwga2V5R2VuZXJhdG9yQ3VycmVudE51bWJl
cktleSwgbmV3TnVtYmVyKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50
ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzkx
LDE0ICs3OTAsMTQgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtl
eUdlbmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBkYXRhYmEKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3Jl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkm
IGtleSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIp
Citib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCiB7CiAgICAgSURCX1RSQUNF
KCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlIik7Ci0gICAg
QVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxl
dmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRy
YW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IE9iamVjdFN0
b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAgICAg
VmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5nZXQo
bGV2ZWxkYktleSwgZGF0YSkpCisgICAgaWYgKCFsZXZlbERCVHJhbnNhY3Rpb24tPmdldChsZXZl
bGRiS2V5LCBkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaW50NjRfdCB2ZXJz
aW9uOwpAQCAtODExLDEzICs4MTAsMTMgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpr
ZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdAogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZvckVhY2hPYmpl
Y3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
T2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYgY2FsbGJhY2spCitib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmZvckVhY2hPYmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smIGNhbGxiYWNrKQogewotICAgIEFTU0VS
VChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERC
VHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2Fj
dGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURCS2V5KCkpOwogICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4SURCS2V5KCkpOwogCi0gICAgT3duUHRyPExl
dmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3Io
KTsKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGxldmVsREJUcmFuc2FjdGlvbi0+
Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFs
aWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkg
ewogICAgICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7CiAgICAgICAgIGNv
bnN0IGNoYXIqIGxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOwpAQCAtOTM1LDExICs5MzQsMTEgQEAg
c3RhdGljIGludDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQKICAgICByZXR1cm4gaW5kZXhJZDsKIH0KIAotYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50NjRfdCYgaW5k
ZXhJZCkKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
IGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRl
eElkKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5k
ZXgiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGluZGV4SWQgPSBn
ZXROZXdJbmRleElkKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9
IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBp
bmRleElkID0gZ2V0TmV3SW5kZXhJZChsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQpOwogICAgIGlmIChpbmRleElkIDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC05NDgsMjUgKzk0NywyNSBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNy
ZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZQogICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIEluZGV4TWV0YURhdGFLZXk6OktleVBh
dGgpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtdWx0aUVudHJ5S2V5ID0gSW5kZXhNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIEluZGV4TWV0
YURhdGFLZXk6Ok11bHRpRW50cnkpOwogCi0gICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7CisgICAgYm9vbCBvayA9IHB1dFN0
cmluZyhsZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVLZXksIG5hbWUpOwogICAgIGlmICghb2spIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRCb29sKG1fY3VycmVudFRyYW5z
YWN0aW9uLmdldCgpLCB1bmlxdWVLZXksIGlzVW5pcXVlKTsKKyAgICBvayA9IHB1dEJvb2wobGV2
ZWxEQlRyYW5zYWN0aW9uLCB1bmlxdWVLZXksIGlzVW5pcXVlKTsKICAgICBpZiAoIW9rKSB7CiAg
ICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0SURCS2V5UGF0aChtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwga2V5UGF0aEtleSwga2V5UGF0aCk7CisgICAgb2sgPSBwdXRJREJL
ZXlQYXRoKGxldmVsREJUcmFuc2FjdGlvbiwga2V5UGF0aEtleSwga2V5UGF0aCk7CiAgICAgaWYg
KCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEJvb2wobV9jdXJy
ZW50VHJhbnNhY3Rpb24uZ2V0KCksIG11bHRpRW50cnlLZXksIGlzTXVsdGlFbnRyeSk7CisgICAg
b2sgPSBwdXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwgbXVsdGlFbnRyeUtleSwgaXNNdWx0aUVu
dHJ5KTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhl
ZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTc1LDE1ICs5NzQsMTUg
QEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQordm9pZCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRl
bGV0ZUluZGV4Iik7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZl
bERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBp
bmRleE1ldGFEYXRhU3RhcnQgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4
TWV0YURhdGFFbmQgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBpbmRleE1ldGFEYXRhU3RhcnQsIGluZGV4TWV0YURhdGFFbmQp
KSB7CisgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIGluZGV4TWV0YURh
dGFTdGFydCwgaW5kZXhNZXRhRGF0YUVuZCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5h
bCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTkxLDI3
ICs5OTAsMjcgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmUKICAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gaW5kZXhEYXRhU3RhcnQgPSBJbmRleERhdGFLZXk6OmVuY29kZU1pbktleShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhE
YXRhRW5kID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBpbmRleERhdGFTdGFydCwgaW5kZXhEYXRhRW5kKSkgeworICAgIGlmICghZGVs
ZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBpbmRleERhdGFTdGFydCwgaW5kZXhEYXRhRW5k
KSkgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
cHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBPYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCitib29sIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IE9iamVjdFN0
b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKICAgICBJREJfVFJBQ0Uo
IklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZCIpOwogICAgIEFT
U0VSVChrZXkuaXNWYWxpZCgpKTsKICAgICBBU1NFUlQoaW5kZXhJZCA+PSBNaW5pbXVtSW5kZXhJ
ZCk7CiAgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVu
dGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNv
cmRJZGVudGlmaWVyKTsKIAotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAg
TGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2
ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+
IGluZGV4RGF0YUtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIGVuY29kZUlEQktleShrZXkpLCBsZXZlbERCUmVjb3JkSWRlbnRpZmll
ci0+cHJpbWFyeUtleSgpKTsKIAogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwogICAgIGRhdGEuYXBw
ZW5kKGVuY29kZVZhckludChsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+dmVyc2lvbigpKSk7CiAg
ICAgZGF0YS5hcHBlbmQobGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CiAK
LSAgICByZXR1cm4gbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChpbmRleERhdGFLZXksIGRhdGEp
OworICAgIHJldHVybiBsZXZlbERCVHJhbnNhY3Rpb24tPnB1dChpbmRleERhdGFLZXksIGRhdGEp
OwogfQogCiBzdGF0aWMgYm9vbCBmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwoTGV2ZWxE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiB0YXJnZXQsIFZl
Y3RvcjxjaGFyPiYgZm91bmRLZXkpCkBAIC0xMDQyLDcgKzEwNDEsNyBAQCBzdGF0aWMgYm9vbCBm
aW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90
LCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKQorYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QsIGludDY0X3QsIGludDY0X3QsIGNvbnN0IE9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllciopCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXNuJ3QgbmVlZGVkIHNpbmNl
IHdlIGludmFsaWRhdGUgaW5kZXggZGF0YSB2aWEgdGhlIHZlcnNpb24gbnVtYmVyIG1lY2hhbmlz
bS4KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwNTksMTMgKzEwNTgsMTQgQEAgc3RhdGljIGJvb2wg
dmVyc2lvbkV4aXN0cyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGkKICAgICByZXR1cm4gZGVjb2RlSW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQo
KSkgPT0gdmVyc2lvbjsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5
SW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQ
cmltYXJ5S2V5KQorYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
JiBrZXksIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkKIHsKICAgICBJREJf
VFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4Iik7CiAgICAgQVNT
RVJUKGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuaXNFbXB0eSgpKTsKIAorICAgIExldmVsREJUcmFu
c2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2Fj
dGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5
ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwga2V5KTsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5z
YWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0
ID0gbGV2ZWxEQlRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGl0LT5zZWVrKGxl
dmVsZGJLZXkpOwogCiAgICAgZm9yICg7OykgewpAQCAtMTA4MCw5ICsxMDgwLDkgQEAgYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3QKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZm91
bmRFbmNvZGVkUHJpbWFyeUtleS5hcHBlbmQocCwgaXQtPnZhbHVlKCkuZW5kKCkgLSBwKTsKIAot
ICAgICAgICBpZiAoIXZlcnNpb25FeGlzdHMobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkp
KSB7CisgICAgICAgIGlmICghdmVyc2lvbkV4aXN0cyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKSB7
CiAgICAgICAgICAgICAvLyBEZWxldGUgc3RhbGUgaW5kZXggZGF0YSBlbnRyeSBhbmQgY29udGlu
dWUuCi0gICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSk7
CisgICAgICAgICAgICBsZXZlbERCVHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpOwogICAg
ICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBA
IC0xMDkxLDEzICsxMDkxLDEyIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtl
eUluSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0CiAgICAgfQogfQog
Ci1QYXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtl
eVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQorUGFzc1JlZlB0cjxJREJLZXk+IElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCiB7CiAgICAg
SURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgi
KTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogCiAgICAgVmVjdG9yPGNoYXI+
IGZvdW5kRW5jb2RlZFByaW1hcnlLZXk7Ci0gICAgaWYgKGZpbmRLZXlJbkluZGV4KGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkp
IHsKKyAgICBpZiAoZmluZEtleUluSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGluZGV4SWQsIGtleSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKICAgICAg
ICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleTsKICAgICAgICAgZGVjb2RlSURCS2V5KGZvdW5k
RW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleS5lbmQoKSwg
cHJpbWFyeUtleSk7CiAgICAgICAgIHJldHVybiBwcmltYXJ5S2V5LnJlbGVhc2UoKTsKQEAgLTEx
MDYsMTMgKzExMDUsMTIgQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXMKICAgICByZXR1cm4gMDsK
IH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpCiti
b29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXks
IFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpCiB7CiAgICAgSURCX1RSQUNFKCJJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4Iik7Ci0gICAgQVNTRVJUKG1fY3Vy
cmVudFRyYW5zYWN0aW9uKTsKIAogICAgIFZlY3RvcjxjaGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5
S2V5OwotICAgIGlmICghZmluZEtleUluSW5kZXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhJZCwgaW5kZXhLZXksIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKQorICAgIGlmICghZmlu
ZEtleUluSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4
SWQsIGluZGV4S2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgZGVjb2RlSURCS2V5KGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwg
Zm91bmRFbmNvZGVkUHJpbWFyeUtleS5lbmQoKSwgZm91bmRQcmltYXJ5S2V5KTsKQEAgLTE2ODks
NTYgKzE2ODcsNTYgQEAgYm9vbCBpbmRleEN1cnNvck9wdGlvbnMoTGV2ZWxEQlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQKIAogfQogCi1QYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2Jq
ZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9u
KQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24p
CiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3Rv
cmVDdXJzb3IiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVs
REJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJU
cmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0
aW9uczsKLSAgICBpZiAoIW9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwg
Y3Vyc29yT3B0aW9ucykpCisgICAgaWYgKCFvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMobGV2ZWxE
QlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0aW9u
LCBjdXJzb3JPcHRpb25zKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPE9iamVjdFN0
b3JlQ3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpjcmVhdGUobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOworICAgIFJlZlB0cjxPYmpl
Y3RTdG9yZUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3JlYXRl
KGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7CiAgICAgaWYgKCFjdXJzb3ItPmZp
cnN0U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBjdXJzb3IucmVsZWFz
ZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJD
dXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IiKTsKLSAgICBBU1NFUlQobV9j
dXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5z
YWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24p
OwogICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKLSAgICBpZiAoIW9iamVjdFN0b3Jl
Q3Vyc29yT3B0aW9ucyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCisgICAgaWYgKCFv
YmplY3RTdG9yZUN1cnNvck9wdGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgUmVmUHRyPE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0g
T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0
KCksIGN1cnNvck9wdGlvbnMpOworICAgIFJlZlB0cjxPYmplY3RTdG9yZUtleUN1cnNvckltcGw+
IGN1cnNvciA9IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKGxldmVsREJUcmFuc2Fj
dGlvbiwgY3Vyc29yT3B0aW9ucyk7CiAgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwogfQogCi1QYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpv
cGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6
OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5n
ZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yIik7Ci0gICAgQVNTRVJUKG1f
Y3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFu
c2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9u
KTsKICAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7Ci0gICAgaWYgKCFpbmRleEN1cnNv
ck9wdGlvbnMobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQorICAgIGlm
ICghaW5kZXhDdXJzb3JPcHRpb25zKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGN1cnNvciA9
IEluZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBj
dXJzb3JPcHRpb25zKTsKKyAgICBSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBJ
bmRleEtleUN1cnNvckltcGw6OmNyZWF0ZShsZXZlbERCVHJhbnNhY3Rpb24sIGN1cnNvck9wdGlv
bnMpOwogICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9u
KQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6b3BlbkluZGV4Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9u
IGRpcmVjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9w
ZW5JbmRleEN1cnNvciIpOwotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAg
TGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2
ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgQ3Vyc29yT3B0aW9ucyBjdXJz
b3JPcHRpb25zOwotICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25zKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCByYW5nZSwgZGly
ZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKKyAgICBpZiAoIWluZGV4Q3Vyc29yT3B0aW9ucyhsZXZl
bERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJhbmdl
LCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQ
dHI8SW5kZXhDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEN1cnNvckltcGw6OmNyZWF0ZShtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucyk7CisgICAgUmVmUHRyPEluZGV4
Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhDdXJzb3JJbXBsOjpjcmVhdGUobGV2ZWxEQlRyYW5z
YWN0aW9uLCBjdXJzb3JPcHRpb25zKTsKICAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCiAg
ICAgICAgIHJldHVybiAwOwogCkBAIC0xNzU3LDMwICsxNzU1LDMwIEBAIFBhc3NSZWZQdHI8SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IElEQkxldmVsREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0CiAKIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2Fj
dGlvbihJREJMZXZlbERCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCiAgICAgOiBtX2JhY2tp
bmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgLCBtX3RyYW5zYWN0aW9uKExldmVsREJUcmFuc2Fj
dGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLT5tX2RiLmdldCgpKSkKIHsKIH0KIAogdm9pZCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6YmVnaW4oKQogewotICAgIEFTU0VS
VCghbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBtX2JhY2tpbmdT
dG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24gPSBMZXZlbERCVHJhbnNhY3Rpb246OmNyZWF0ZSht
X2JhY2tpbmdTdG9yZS0+bV9kYi5nZXQoKSk7CisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdGhp
cyBBUEksIG9yIGp1c3QgY3JlYXRlIHRoZSB0cmFuc2FjdGlvbiBpbiB0aGUgY29uc3RydWN0b3I/
CiB9CiAKIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCgp
CiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6
Y29tbWl0Iik7Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlv
bik7Ci0gICAgYm9vbCByZXN1bHQgPSBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rp
b24tPmNvbW1pdCgpOwotICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi5j
bGVhcigpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKKyAgICBib29sIHJlc3VsdCA9IG1f
dHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uOjpyb2xsYmFjaygpCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbjo6cm9sbGJhY2siKTsKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUtPm1f
Y3VycmVudFRyYW5zYWN0aW9uKTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNh
Y3Rpb24tPnJvbGxiYWNrKCk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0
aW9uLmNsZWFyKCk7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOworICAgIG1fdHJhbnNhY3Rp
b24tPnJvbGxiYWNrKCk7CisgICAgbV90cmFuc2FjdGlvbi5jbGVhcigpOwogfQogCiBib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmJhY2tpbmdTdG9yZUV4aXN0cyhTZWN1cml0eU9yaWdpbiog
c2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGF0aEJhc2VBcmcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERC
QmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZl
bERCQmFja2luZ1N0b3JlLmgKaW5kZXggNzMzOTIyNjkwMTMxNTI1MGYzNWE4OGZhMjUyNWJkZTJm
Yzc4YjMxOS4uNzdjYjA2ZTc4NWFmODA5ODA5N2I5ZTkyYzg2ZmUxZjJhN2VkZjY2OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuaApAQCAtNDcsMzYgKzQ3LDM2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcyk7CiAgICAgdmly
dHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJp
bmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJbnRWZXJzaW9uLCBpbnQ2NF90JiBmb3Vu
ZElkKTsKICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBp
bnQ2NF90JiByb3dJZCk7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURh
dGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKLSAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50
VmVyc2lvbik7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYg
dmVyc2lvbik7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRW
ZXJzaW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBu
YW1lKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFz
ZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1l
cywgVmVjdG9yPElEQktleVBhdGg+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5k
QXV0b0luY3JlbWVudEZsYWdzKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUo
aW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2
NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxPYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXI+IGNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCk7Ci0g
ICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpOwotICAgIHZpcnR1YWwgYm9v
bCBwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmly
dHVhbCBpbnQ2NF90IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0
ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KTsKLSAgICB2
aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldE9i
amVjdFN0b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jik7CisgICAgdmly
dHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7
CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIGludDY0X3Qg
Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1
YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCk7CisgICAgdmlydHVhbCBi
b29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkm
LCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcik7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJik7
CisgICAgdmlydHVhbCBib29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRJ
bmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBWZWN0b3I8
aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPElE
QktleVBhdGg+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3Ms
IFZlY3Rvcjxib29sPiYgZm91bmRNdWx0aUVudHJ5RmxhZ3MpOwotICAgIHZpcnR1YWwgYm9vbCBj
cmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBp
c011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJ
bmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkKTsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1
YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2V0UHJpbWFy
eUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlz
dHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3Vu
ZFByaW1hcnlLZXkpOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVj
dFN0b3JlS2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29y
OjpEaXJlY3Rpb24pOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtl
eUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAgdmlydHVhbCBib29sIGNyZWF0
ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQ
YXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQp
OworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCk7CisgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZv
clJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2V0
UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBJREJLZXkmKTsKKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElE
QktleT4mIGZvdW5kUHJpbWFyeUtleSk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29y
PiBvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlS
YW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vy
c29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlS
YW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vy
c29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CiAK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCk7
CiAKQEAgLTg2LDEzICs4NiwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCosIFBh
c3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPik7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBmaW5kS2V5
SW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1h
cnlLZXkpOworICAgIGJvb2wgZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFy
eUtleSk7CiAKICAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwogICAgIFJlZlB0cjxJREJGYWN0b3J5
QmFja2VuZEltcGw+IG1fZmFjdG9yeTsKICAgICBPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBtX2Ri
OwogICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4gbV9jb21wYXJhdG9yOwotICAgIFJlZlB0
cjxMZXZlbERCVHJhbnNhY3Rpb24+IG1fY3VycmVudFRyYW5zYWN0aW9uOwogCiAgICAgY2xhc3Mg
VHJhbnNhY3Rpb24gOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiB7CiAgICAg
cHVibGljOgpAQCAtMTAxLDkgKzEwMCwxNSBAQCBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIGJv
b2wgY29tbWl0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByb2xsYmFjaygpOwogCisgICAgICAg
IHN0YXRpYyBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbkZyb20oSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
bio+KHRyYW5zYWN0aW9uKS0+bV90cmFuc2FjdGlvbi5nZXQoKTsKKyAgICAgICAgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgVHJhbnNhY3Rpb24oSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSopOwog
ICAgICAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlKiBtX2JhY2tpbmdTdG9yZTsKKyAgICAgICAg
UmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKICAgICB9OwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCAyZmE1YzA4NGM3ZDU2NTM0ODYxZGMxZjg1
NzU3ZTI3MTgxNDU3N2Y0Li5lMGQyNDE1OGRmMjgzMTNjMzBjZmM3OTNiZWY2YjMwYTZjMDg5NjQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtODYsMTggKzg2LDE5IEBAIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBy
cEtleVJhbmdlLCBQYXNzUmVmCiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0g
cHJwQ2FsbGJhY2tzOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIp
OwogICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0
ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwsIG9i
amVjdFN0b3JlLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSkpCisgICAgICAgICAgICBjcmVhdGVDYWxs
YmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsLCBvYmplY3RT
dG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwiKTsKKyAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAgICBSZWZQ
dHI8SURCS2V5PiBrZXk7CiAgICAgaWYgKGtleVJhbmdlLT5pc09ubHlLZXkoKSkKICAgICAgICAg
a2V5ID0ga2V5UmFuZ2UtPmxvd2VyKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxJREJC
YWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPmJh
Y2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3Iob2JqZWN0U3RvcmUtPmRhdGFiYXNl
SWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGtleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQp
OworICAgICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1
cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29y
KCp0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlk
KCksIGtleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogICAgICAgICBpZiAoIWJhY2tp
bmdTdG9yZUN1cnNvcikgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTEwNiw3ICsxMDcsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldElu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHdpcmVEYXRhID0g
b2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJlY29yZChvYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSk7CisgICAgU3RyaW5n
IHdpcmVEYXRhID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJl
Y29yZCgqdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3Jl
LT5pZCgpLCAqa2V5KTsKICAgICBpZiAod2lyZURhdGEuaXNOdWxsKCkpIHsKICAgICAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgp
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTU0LDEyICsxNTUsMTIgQEAgcHVibGljOgogICAgICAg
ICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykKICAgICB7IH0KIAotICAgIGJvb2wgdmVyaWZ5SW5k
ZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLAorICAgIGJvb2wgdmVyaWZ5SW5k
ZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDAsIFN0cmlu
ZyogZXJyb3JNZXNzYWdlID0gMCkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9pbmRleEtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghYWRkaW5nS2V5
QWxsb3dlZChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQs
CisgICAgICAgICAgICBpZiAoIWFkZGluZ0tleUFsbG93ZWQoYmFja2luZ1N0b3JlLCB0cmFuc2Fj
dGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAobV9pbmRleEtleXMpW2ldLmdldCgpLCBwcmltYXJ5S2V5KSkg
ewogICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpCiAgICAgICAgICAgICAgICAgICAg
ICplcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5k
ZXggJyVzJzogYXQgbGVhc3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNz
IHJlcXVpcmVtZW50cy4iLApAQCAtMTcwLDEyICsxNzEsMTIgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIHdyaXRlSW5kZXhLZXlzKGNvbnN0IElEQkJh
Y2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVy
LCBJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgY29uc3QKKyAgICBib29sIHdyaXRl
SW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlm
aWVyKiByZWNvcmRJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIGNvbnN0CiAgICAgewog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhLZXlzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZS5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmVjb3JkSWRlbnRpZmllcikpCisg
ICAgICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZS5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQodHJh
bnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJlY29yZElkZW50
aWZpZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICgh
YmFja2luZ1N0b3JlLnB1dEluZGV4RGF0YUZvclJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkLCAqKG1faW5kZXhLZXlzKVtpXS5nZXQoKSwgcmVjb3JkSWRlbnRpZmllcikp
CisgICAgICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZS5wdXRJbmRleERhdGFGb3JSZWNvcmQodHJh
bnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICoobV9pbmRleEtl
eXMpW2ldLmdldCgpLCByZWNvcmRJZGVudGlmaWVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xODUsNyArMTg2LDcg
QEAgcHVibGljOgogCiBwcml2YXRlOgogCi0gICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKElEQkJh
Y2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLAorICAgIGJvb2wgYWRkaW5nS2V5QWxsb3dlZChJREJC
YWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFy
eUtleSkgY29uc3QKICAgICB7CkBAIC0xOTMsNyArMTk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIFJlZlB0cjxJREJLZXk+IGZvdW5kUHJpbWFyeUtl
eTsKLSAgICAgICAgYm9vbCBmb3VuZCA9IGJhY2tpbmdTdG9yZS5rZXlFeGlzdHNJbkluZGV4KGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICppbmRleEtleSwgZm91bmRQcmltYXJ5
S2V5KTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGJhY2tpbmdTdG9yZS5rZXlFeGlzdHNJbkluZGV4
KHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqaW5kZXhL
ZXksIGZvdW5kUHJpbWFyeUtleSk7CiAgICAgICAgIGlmICghZm91bmQpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKHByaW1hcnlLZXkgJiYgZm91bmRQcmltYXJ5S2V5LT5p
c0VxdWFsKHByaW1hcnlLZXkpKQpAQCAtMjA2LDcgKzIwNyw3IEBAIHByaXZhdGU6CiB9OwogfQog
Ci1zdGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwq
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgYm9vbCBrZXlXYXNH
ZW5lcmF0ZWQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4mIGluZGV4S2V5cywgVmVj
dG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9yTWVz
c2FnZSkKK3N0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCog
b2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dl
bmVyYXRlZCwgY29uc3QgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0
b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNz
YWdlKQogewogICAgIEFTU0VSVChpbmRleE5hbWVzLnNpemUoKSA9PSBpbmRleEtleXMuc2l6ZSgp
KTsKIApAQCAtMjMwLDYgKzIzMSw3IEBAIHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8CiAKICAgICAg
ICAgT3duUHRyPEluZGV4V3JpdGVyPiBpbmRleFdyaXRlcihhZG9wdFB0cihuZXcgSW5kZXhXcml0
ZXIoaW5kZXgtPm1ldGFkYXRhKCksIGtleXMpKSk7CiAgICAgICAgIGlmICghaW5kZXhXcml0ZXIt
PnZlcmlmeUluZGV4S2V5cygqb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRyYW5zYWN0aW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3Jl
LT5pZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgt
PmlkKCksIHByaW1hcnlLZXkuZ2V0KCksIGVycm9yTWVzc2FnZSkpIHsKQEAgLTI0MiwyMSArMjQ0
LDIyIEBAIHN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURC
S2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0
SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0cikKIHsKICAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyIpOwogICAg
IFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5OworICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbWV0
aG9kIGNvdWxkIGJlIGFzeW5jaHJvbm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQn
cyB3b3J0aCB0aGUgZXh0cmEgY29tcGxleGl0eS4KICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
OjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIgPSBiYWNraW5n
U3RvcmUoKS0+Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKLSAgICBpZiAoIWJhY2tp
bmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKGRhdGFiYXNlSWQoKSwgaWQoKSwgKnBy
aW1hcnlLZXksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7CisgICAgaWYgKCFiYWNraW5nU3Rv
cmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSgqdHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQoKSwg
aWQoKSwgKnByaW1hcnlLZXksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7CiAgICAgICAgIHRy
YW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgVmVjdG9y
PE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAgICAgU3RyaW5nIGVycm9yTWVz
c2FnZTsKLSAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModGhpcywgcHJpbWFyeUtleSwgZmFsc2Us
IGluZGV4TmFtZXMsIGluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsK
KyAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHRoaXMsIHByaW1hcnlLZXks
IGZhbHNlLCBpbmRleE5hbWVzLCBpbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJvck1lc3Nh
Z2UpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRlYWwgd2l0aCBlcnJvck1lc3NhZ2Ug
aGVyZS4gbWFrZUluZGV4V3JpdGVycyBvbmx5IGZhaWxzIG9uIHVuaXF1ZW5lc3MgY29uc3RyYWlu
dCBlcnJvcnMuCiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47
CkBAIC0yNjYsNiArMjY5LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJ
bmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGMKICAgICAgICAgSW5k
ZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwogICAgICAgICBp
ZiAoIWluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYmFja2luZ1N0b3JlKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0cmFuc2FjdGlvbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2VJZCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4ZXMuZ2V0KGluZGV4V3JpdGVy
LT5pbmRleE5hbWUoKSktPmlkKCkpKSB7CkBAIC0yOTgsOSArMzAyLDEwIEBAIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosCiAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwog
fQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBh
c3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbiwgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFtZXMs
IFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCit2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5
PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlv
biwgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFtZXMsIFBhc3NPd25QdHI8
VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCIpOworICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwogICAgIEFT
U0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwog
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7CiAgICAg
UmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwpAQCAtMzExLDcgKzMxNiw3IEBAIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8CiAgICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKIAogICAg
IGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSAmJiBhdXRvSW5jcmVtZW50ICYmICFrZXkpIHsK
LSAgICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IG9iamVjdFN0b3JlLT5nZW5lcmF0
ZUtleSgpOworICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUt
PmdlbmVyYXRlS2V5KHRyYW5zYWN0aW9uKTsKICAgICAgICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1
ZTsKICAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIGNh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OkRBVEFfRVJSLCAiTWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikp
OwpAQCAtMzIzLDIxICszMjgsMjEgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICBBU1NF
UlQoa2V5ICYmIGtleS0+aXNWYWxpZCgpKTsKIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6
Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllciA9IG9iamVjdFN0
b3JlLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKLSAg
ICBpZiAocHV0TW9kZSA9PSBBZGRPbmx5ICYmIG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+
a2V5RXhpc3RzSW5PYmplY3RTdG9yZShvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RT
dG9yZS0+aWQoKSwgKmtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkpIHsKKyAgICBpZiAocHV0
TW9kZSA9PSBBZGRPbmx5ICYmIG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+a2V5RXhpc3Rz
SW5PYmplY3RTdG9yZSgqdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9i
amVjdFN0b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewogICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2Jq
ZWN0IHN0b3JlLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFZlY3RvcjxPd25Q
dHI8SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOwogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7
Ci0gICAgaWYgKCFtYWtlSW5kZXhXcml0ZXJzKG9iamVjdFN0b3JlLmdldCgpLCBrZXksIGtleVdh
c0dlbmVyYXRlZCwgKmluZGV4TmFtZXMsICppbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJv
ck1lc3NhZ2UpKSB7CisgICAgaWYgKCFtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLCBvYmpl
Y3RTdG9yZS5nZXQoKSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsICppbmRleE5hbWVzLCAqaW5kZXhL
ZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlKSkgewogICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpD
T05TVFJBSU5UX0VSUiwgZXJyb3JNZXNzYWdlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICAvLyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiAgQWZ0ZXIg
dGhpcyBwb2ludCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCiAK
LSAgICBpZiAoIW9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0T2JqZWN0U3RvcmVSZWNv
cmQob2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksICprZXksIHZh
bHVlLT50b1dpcmVTdHJpbmcoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkpIHsKKyAgICBpZiAo
IW9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0T2JqZWN0U3RvcmVSZWNvcmQoKnRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtl
eSwgdmFsdWUtPnRvV2lyZVN0cmluZygpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewogICAg
ICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUg
c3RvcmFnZS4iKSk7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1
cm47CkBAIC0zNDcsNiArMzUyLDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAg
SW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwogICAgICAg
ICBpZiAoIWluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb2JqZWN0U3RvcmUt
PmJhY2tpbmdTdG9yZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqdHJhbnNhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5tX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmdldChpbmRleFdyaXRlci0+
aW5kZXhOYW1lKCkpLT5pZCgpKSkgewpAQCAtMzU4LDMyICszNjQsMzQgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjwKICAgICB9CiAKICAgICBpZiAoYXV0b0luY3JlbWVudCAmJiBwdXRNb2RlICE9
IEN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpCi0gICAg
ICAgIG9iamVjdFN0b3JlLT51cGRhdGVLZXlHZW5lcmF0b3Ioa2V5LmdldCgpLCAha2V5V2FzR2Vu
ZXJhdGVkKTsKKyAgICAgICAgb2JqZWN0U3RvcmUtPnVwZGF0ZUtleUdlbmVyYXRvcih0cmFuc2Fj
dGlvbiwga2V5LmdldCgpLCAha2V5V2FzR2VuZXJhdGVkKTsKIAogICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKGtleS5yZWxlYXNlKCkpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4gcHJwS2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVs
ZXRlIik7CiAKLSAgICBBU1NFUlQoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFu
c2FjdGlvbiktPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKKyAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKKyAgICBBU1NFUlQodHJhbnNhY3Rp
b24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKIAogICAgIFJlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CiAgICAgUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOwogICAgIFJlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKIAotICAgIGlmICghSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbiktPnNjaGVkdWxlVGFzaygKLSAgICAgICAg
ICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRl
SW50ZXJuYWwsIG9iamVjdFN0b3JlLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSkpCisgICAgaWYgKCF0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCwgb2JqZWN0U3RvcmUs
IGtleVJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCiAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIAotdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsIik7CiAgICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVy
OworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBy
cFRyYW5zYWN0aW9uOwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RT
dG9yZUN1cnNvcihvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwg
a2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0
b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcigqdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLT5k
YXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29y
OjpORVhUKTsKICAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAKICAgICAgICAgZG8gewpA
QCAtMzkzLDExICs0MDEsMTEgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxl
dGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlAKICAgICAgICAgICAg
ICAgICBpZiAoIWl0LT5zZWNvbmQtPmhhc1ZhbGlkSWQoKSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7IC8vIFRoZSBpbmRleCBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0IGRvZXMg
bm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZSB5ZXQuCiAKLSAgICAgICAgICAgICAgICBib29sIHN1
Y2Nlc3MgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4RGF0YUZvclJl
Y29yZChvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQtPnNl
Y29uZC0+aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CisgICAgICAgICAgICAgICAgYm9v
bCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleERhdGFG
b3JSZWNvcmQoKnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RT
dG9yZS0+aWQoKSwgaXQtPnNlY29uZC0+aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVP
YmplY3RTdG9yZVJlY29yZChvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+
aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CisgICAgICAgICAgICBvYmplY3RTdG9yZS0+
YmFja2luZ1N0b3JlKCktPmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKCp0cmFuc2FjdGlvbiwgb2Jq
ZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIHJlY29yZElkZW50aWZp
ZXIuZ2V0KCkpOwogCiAgICAgICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGlu
dWVGdW5jdGlvbigwKSk7CiAKQEAgLTQwNywyMyArNDE1LDI1IEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQCiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1
bmRlZmluZWRWYWx1ZSgpKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpj
bGVhcihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
blB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjbGVhciIpOwogCi0gICAgQVNTRVJUKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6OmZyb20odHJhbnNhY3Rpb24pLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURf
T05MWSk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9u
ID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CisgICAg
QVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7
CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0
aGlzOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsK
IAotICAgIGlmICghSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbikt
PnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGNhbGxiYWNrcykp
KQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0
ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbCwg
b2JqZWN0U3RvcmUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNsZWFySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gcHJwVHJhbnNhY3Rpb24pCiB7Ci0gICAgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgp
LT5jbGVhck9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3Jl
LT5pZCgpKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rp
b24gPSBwcnBUcmFuc2FjdGlvbjsKKyAgICBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmNs
ZWFyT2JqZWN0U3RvcmUoKnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBv
YmplY3RTdG9yZS0+aWQoKSk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKIH0KIApAQCAtNDQ5LDEwICs0NTksMTEgQEAg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNyZWF0ZUluZGV4KGNvbnMKICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQog
Ci12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24pCiB7CisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247
CiAgICAgaW50NjRfdCBpZDsKLSAgICBpZiAoIW9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+
Y3JlYXRlSW5kZXgob2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCks
IGluZGV4LT5uYW1lKCksIGluZGV4LT5rZXlQYXRoKCksIGluZGV4LT51bmlxdWUoKSwgaW5kZXgt
Pm11bHRpRW50cnkoKSwgaWQpKSB7CisgICAgaWYgKCFvYmplY3RTdG9yZS0+YmFja2luZ1N0b3Jl
KCktPmNyZWF0ZUluZGV4KCp0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwg
b2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5uYW1lKCksIGluZGV4LT5rZXlQYXRoKCksIGluZGV4
LT51bmlxdWUoKSwgaW5kZXgtPm11bHRpRW50cnkoKSwgaWQpKSB7CiAgICAgICAgIHRyYW5zYWN0
aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDkwLDkgKzUwMSwxMCBA
QCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYQogICAgIG1faW5kZXhlcy5yZW1vdmUobmFtZSk7CiB9
CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKLSAgICBvYmpl
Y3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4KG9iamVjdFN0b3JlLT5kYXRhYmFz
ZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+aWQoKSk7CisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CisgICAg
b2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleCgqdHJhbnNhY3Rpb24sIG9i
amVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+aWQoKSk7
CiAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCkBAIC01MDks
MTEgKzUyMSwxMiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3Io
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwUmFuZ2UsIElEQgogICAgIH0KIH0KIAotdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlv
biBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCIpOworICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwogCi0gICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmpl
Y3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihvYmplY3RTdG9y
ZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlv
bik7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJz
b3IgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcigq
dHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgp
LCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKICAgICAvLyBUaGUgZnJvbnRlbmQgaGFzIGJlZ3Vu
IGluZGV4aW5nLCBzbyB0aGlzIHBhdXNlcyB0aGUgdHJhbnNhY3Rpb24KICAgICAvLyB1bnRpbCB0
aGUgaW5kZXhpbmcgaXMgY29tcGxldGUuIFRoaXMgY2FuJ3QgaGFwcGVuIGFueSBlYXJsaWVyCiAg
ICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHN3aXRjaCB0byBlYXJseSBtb2RlIGluIGNh
c2UgbXVsdGlwbGUKQEAgLTUyOSwxOSArNTQyLDIxIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtleSgpLCBjdXJzb3It
PnByaW1hcnlLZXkoKSwgY3Vyc29yLT52YWx1ZSgpKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0Uo
IklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50Iik7Ci0gICAgaWYgKCFJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uKS0+c2NoZWR1bGVUYXNrKAotICAgICAg
ICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3Vu
dEludGVybmFsLCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzKSkpCisgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVU
YXNrKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjb3VudEludGVybmFsLCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlv
bikpKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFD
VElWRV9FUlI7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9uKQogewogICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCIpOwor
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRy
YW5zYWN0aW9uOwogICAgIHVpbnQzMl90IGNvdW50ID0gMDsKLSAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5n
U3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlk
KCksIG9iamVjdFN0b3JlLT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAg
ICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9i
amVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKCp0cmFu
c2FjdGlvbiwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIHJh
bmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29y
KSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
bnVtYmVyVmFsdWUoY291bnQpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTg2LDIwICs2MDEsMjQg
QEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHQKICAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnNl
dChpbmRleFB0ci0+bmFtZSgpLCBpbmRleFB0cik7CiB9CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZW5lcmF0ZUtleSgpCitQYXNzUmVmUHRyPElEQktl
eT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKIHsKKyAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKKwog
ICAgIGNvbnN0IGludDY0X3QgbWF4R2VuZXJhdG9yVmFsdWUgPSA5MDA3MTk5MjU0NzQwOTkyTEw7
IC8vIE1heGltdW0gaW50ZWdlciBzdG9yYWJsZSBhcyBFQ01BU2NyaXB0IG51bWJlci4KLSAgICBp
bnQ2NF90IGN1cnJlbnROdW1iZXIgPSBiYWNraW5nU3RvcmUoKS0+Z2V0S2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlcihkYXRhYmFzZUlkKCksIGlkKCkpOworICAgIGludDY0X3QgY3VycmVudE51bWJl
ciA9IGJhY2tpbmdTdG9yZSgpLT5nZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKCp0cmFuc2Fj
dGlvbiwgZGF0YWJhc2VJZCgpLCBpZCgpKTsKICAgICBpZiAoY3VycmVudE51bWJlciA8IDAgfHwg
Y3VycmVudE51bWJlciA+IG1heEdlbmVyYXRvclZhbHVlKQogICAgICAgICByZXR1cm4gSURCS2V5
OjpjcmVhdGVJbnZhbGlkKCk7CiAKICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIoY3Vy
cmVudE51bWJlcik7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRl
S2V5R2VuZXJhdG9yKGNvbnN0IElEQktleSoga2V5LCBib29sIGNoZWNrQ3VycmVudCkKK3ZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24sIGNvbnN0IElEQktleSog
a2V5LCBib29sIGNoZWNrQ3VycmVudCkKIHsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKKwogICAgIEFTU0VSVChrZXkg
JiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKTsKLSAgICBiYWNraW5nU3RvcmUo
KS0+bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGRhdGFiYXNlSWQoKSwgaWQo
KSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZmxvb3Ioa2V5LT5udW1iZXIoKSkpICsgMSwgY2hlY2tD
dXJyZW50KTsKKyAgICBiYWNraW5nU3RvcmUoKS0+bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyKCp0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2FzdDxp
bnQ2NF90PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOwogfQogCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaAppbmRleCAyODExY2ExYmFkNzZiNjE4OTJkZjI0MmE5ZTg2
Yjk2OTdmZDIyNTBhLi5iZDk1YmJlYmUyZjdlMmEyYmQyOTMxMjBiZmY4MTI3ZTBjYmIyZmU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC0xMDAsMTggKzEwMCwxOCBAQCBwcml2YXRlOgog
ICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3Jl
bWVudCk7CiAKICAgICB2b2lkIGxvYWRJbmRleGVzKCk7Ci0gICAgUGFzc1JlZlB0cjxJREJLZXk+
IGdlbmVyYXRlS2V5KCk7Ci0gICAgdm9pZCB1cGRhdGVLZXlHZW5lcmF0b3IoY29uc3QgSURCS2V5
KiwgYm9vbCBjaGVja0N1cnJlbnQpOworICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtl
eShQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICB2b2lkIHVwZGF0
ZUtleUdlbmVyYXRvcihQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBjb25z
dCBJREJLZXkqLCBib29sIGNoZWNrQ3VycmVudCk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPik7CisgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIHB1dEludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0
TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywg
UGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+KTsKLSAgICBzdGF0aWMgdm9pZCBkZWxldGVJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIHNldEluZGV4ZXNSZWFk
eUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1l
cywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0gICAgc3RhdGljIHZv
aWQgY2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICBz
dGF0aWMgdm9pZCBjbGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lk
IGNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2
b2lkIGRlbGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRp
YyB2b2lkIG9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4s
IElEQkN1cnNvcjo6RGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4pOwotICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHN0
YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4pOwogCiAgICAgLy8gVGhlc2UgYXJlIHVzZWQgYXMgc2V0VmVyc2lvbiB0cmFuc2FjdGlv
biBhYm9ydCB0YXNrcy4KICAgICBzdGF0aWMgdm9pZCByZW1vdmVJbmRleEZyb21NYXAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5o
CmluZGV4IDI0YzRmZWUwNDE1YmQ1YmI1MTJhMjMyMmNhOGJmNTc1ZWI1MTczNzYuLjdjMTI2ODE0
YTkzMDJjMWY2OTRiNDk3NGY3MjA0YzNkM2IyMmI5YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmgKQEAgLTY1LDYgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUGVuZGluZ0V2ZW50cyhp
bnQpOwogICAgIHZvaWQgYWRkUHJlZW1wdGl2ZUV2ZW50KCkgeyBtX3BlbmRpbmdQcmVlbXB0aXZl
RXZlbnRzKys7IH0KICAgICB2b2lkIGRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgeyBtX3Bl
bmRpbmdQcmVlbXB0aXZlRXZlbnRzLS07IEFTU0VSVChtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRz
ID49IDApOyB9CisgICAgb3BlcmF0b3IgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiooKSB7
IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNo
b3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKaW5kZXggZTBhNWE4ZmE1ZThk
ZDYzZjNhY2M4MDRiY2EwZTMzOWI0ZDE5NTlhOC4uNDU3YWUzNzQ1ZjQyYzZlODRkMjllNzIyNzFm
MTk1NjhmMzJjMDE3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9J
REJGYWtlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9J
REJGYWtlQmFja2luZ1N0b3JlLmgKQEAgLTM1LDM4ICszNSwzOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpIE9W
RVJSSURFIHsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0
IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSW50VmVy
c2lvbiwgaW50NjRfdCYgZm91bmRJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJ
ZCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJE
YXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikgT1ZF
UlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJh
c2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0X3QgdmVyc2lvbikgT1ZFUlJJREUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0
YShUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikgT1ZF
UlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJh
c2VJbnRWZXJzaW9uKFRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCB2ZXJzaW9u
KSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRh
YmFzZShjb25zdCBTdHJpbmcmIG5hbWUpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9y
PGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxJ
REJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1l
bnRGbGFncykgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3Jl
KGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3Rv
cmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9W
RVJSSURFIHsgfQorICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQ
YXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0
U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8T2Jq
ZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigp
IE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
PigpOyB9CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JikgT1ZFUlJJ
REUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3RvcmVS
ZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciop
IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0
U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURF
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKikgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdlbmVy
YXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVL
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpIE9WRVJSSURF
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3Rv
cmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKSBP
VkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFN0
b3JlUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYpIE9WRVJSSURFIHsgcmV0dXJuIFN0cmluZygpOyB9Cisg
ICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0
IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoVHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJ
REUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKFRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9i
amVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgaW50
NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKFRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkgT1ZFUlJJREUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikg
T1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2Jq
ZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNv
cmRDYWxsYmFjayYpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
VmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZl
Y3RvcjxJREJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1
ZUZsYWdzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kTXVsdGlFbnRyeUZsYWdzKSBPVkVSUklERSB7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5
UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQp
IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgT1ZF
UlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRh
Rm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURF
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2V0UHJp
bWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NS
ZWZQdHI8SURCS2V5PigpOyB9Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50
NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkg
T1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgo
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGlzVW5p
cXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50NjRfdCYgaW5kZXhJZCkgT1ZFUlJJREUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
KSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKFRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGVs
ZXRlSW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPElEQktleT4oKTsg
fQorICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KFRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkgT1ZF
UlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+
IG9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgT1ZF
UlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxDdXJzb3I+KCk7IH0KLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJl
Y3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQ
dHI8Q3Vyc29yPigpOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4
Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJS
SURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwg
SURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29y
PigpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vy
c29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsg
cmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1
cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFu
Z2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxD
dXJzb3I+KCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJz
b3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0
aW9uKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPEN1cnNvcj4oKTsgfQogCiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpIE9WRVJSSURF
IHsgcmV0dXJuIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+KCk7IH0KIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164471</attachid>
            <date>2012-09-17 16:12:07 -0700</date>
            <delta_ts>2012-09-18 11:42:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96663-20120917161134.patch</filename>
            <type>text/plain</type>
            <size>110572</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4NzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTFiNTZmZjI0NTdhNDY0
ZjQyMjcyNzhhODNlMjYzNzc1NzM4ZjczOS4uNGRiYzhmYzBjNzU2OTQxMTA4Y2Q1NzU4MzUwMzIx
NmY4MjVkZWVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDEyLTA5LTEzICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBSZW1v
dmUgImN1cnJlbnQgdHJhbnNhY3Rpb24iIGNvbmNlcHQgZnJvbSBiYWNraW5nIHN0b3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjY2MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluZGV4ZWREQiBzaG91
bGQgYWxsb3cgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIHRvIHJ1biBpbiBwYXJhbGxlbCB3aXRoaW4g
YW5kCisgICAgICAgIGFjcm9zcyBkYXRhYmFzZXMgd2l0aGluIGFuIG9yaWdpbi4gQXMgYW4gaW5p
dGlhbCBzdGVwIHRvIGVuYWJsaW5nIHRoaXMsIHRoZQorICAgICAgICBiYWNraW5nIHN0b3JlIHNo
b3VsZCBub3QgaG9sZCBhICJjdXJyZW50IHRyYW5zYWN0aW9uIiAtIGluc3RlYWQsIG9wZXJhdGlv
bnMKKyAgICAgICAgc2hvdWxkIGJlIGRvbmUgcmVsYXRpdmUgdG8gYSB0cmFuc2FjdGlvbiBtYW5h
Z2VkIGJ5IHRoZSBkYXRhYmFzZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBubyBmdW5jdGlv
bmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3Rv
cmUuaDoKKyAgICAgICAgKElEQkJhY2tpbmdTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlSW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lv
bkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNl
dEludFZlcnNpb25JbnRlcm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRLZXlJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5k
ZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJREJJbmRleEJhY2tlbmRJbXBsKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRh
dGVJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVs
REJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2Jq
ZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0
b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVs
REJCYWNraW5nU3RvcmU6OmZvckVhY2hPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXhEYXRhRm9y
UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmZpbmRL
ZXlJbkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Omdl
dFByaW1hcnlLZXlWaWFJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
bjo6VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb246OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJvbGxiYWNrKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJMZXZl
bERCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb24pOgorICAgICAgICAoVHJhbnNhY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OmxldmVsREJUcmFuc2FjdGlvbkZyb20pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6bWFrZUluZGV4V3JpdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleEludGVy
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0
ZUluZGV4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6b3BlbkN1cnNvckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJhdGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpvcGVyYXRvciBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uJik6CisK
IDIwMTItMDktMTcgIFBoaWxpcCBSb2dlcnMgIDxwZHJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBN
YWtlIFNWR1BhdGhTZWdMaXN0LmFwcGVuZEl0ZW0gTygxKSBpbnN0ZWFkIG9mIE8obikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNjg1ZGEzOGE2NDZmNWYxMWNmNTJjMzQzNmM3ZTFhZWYx
NjYwZDYxOS4uYzAzYzFjZmQwZGU3MzU1OGM3Mjk3Nzg3MjRkZjAyYzNlMGFlYzYxYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wOS0xMyAgSm9zaHVh
IEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogUmVtb3Zl
ICJjdXJyZW50IHRyYW5zYWN0aW9uIiBjb25jZXB0IGZyb20gYmFja2luZyBzdG9yZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY2NjMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgZmFrZSBjbGFz
cyB3aXRoIG5ldyBtZXRob2Qgc2lnbmF0dXJlcy4KKworICAgICAgICAqIHRlc3RzL0lEQkZha2VC
YWNraW5nU3RvcmUuaDoKKwogMjAxMi0wOS0xNCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBPd25QdHIgYW5kIFJlZlB0ciBy
ZXBvcnRlZCBieSBwb2ludGVyIGNhbiBiZSBkb3VibGUgY291bnRlZCBieSB0aGUgbWVtb3J5IGlu
c3RydW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJCYWNraW5nU3RvcmUuaAppbmRleCBmMDYwZTcyZWY0YzZmZDQ3MjU0ZWM3ZjE1NTg4MDkwMzk1
YTY1OWRlLi4xMWI1MTFmYzM5MGZlNjA1ODNmMWU5YWI5NGYwOGU0MWU3YjU1NzE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaApA
QCAtNDQsMTggKzQ0LDIwIEBAIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiBjbGFzcyBJREJCYWNr
aW5nU3RvcmUgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJCYWNraW5nU3RvcmU+IHsKIHB1YmxpYzoK
KyAgICBjbGFzcyBUcmFuc2FjdGlvbjsKKwogICAgIHZpcnR1YWwgfklEQkJhY2tpbmdTdG9yZSgp
IHt9OwogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4m
IGZvdW5kTmFtZXMpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0
YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRTdHJpbmdWZXJzaW9uLCBpbnQ2NF90
JiBmb3VuZEludFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgc3RyaW5nVmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oaW50NjRf
dCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0
ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
KSA9IDA7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihUcmFu
c2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikgPSAwOworICAgIHZp
cnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKFRyYW5zYWN0aW9uKiwgaW50NjRf
dCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGRl
bGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lk
IGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91
bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8SURCS2V5UGF0aD4mIGZv
dW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQs
IGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOwogCiAgICAgY2xhc3Mg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyIDogcHVibGljIFJlZkNvdW50ZWQ8T2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyPiB7CiAgICAgcHVibGljOgpAQCAtNjQsMjggKzY2LDI4IEBAIHB1
YmxpYzoKICAgICB9OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxPYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXI+IGNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCkgPSAwOwogCi0gICAgdmly
dHVhbCBTdHJpbmcgZ2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
cHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAw
OwotICAgIHZpcnR1YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJvb2wgY2hlY2tD
dXJyZW50KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9i
amVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKSA9IDA7Cisg
ICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0U3RvcmVSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JikgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RTdG9yZVJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
KSA9IDA7CisgICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIo
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXIoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJvb2wgY2hlY2tDdXJyZW50KSA9IDA7CisgICAgdmlydHVh
bCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpID0gMDsKIAogICAgIGNsYXNz
IE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2sgewogICAgIHB1YmxpYzoKICAgICAgICAgIHZpcnR1
YWwgYm9vbCBjYWxsYmFjayhjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqLCBjb25z
dCBTdHJpbmcmIHZhbHVlKSA9IDA7CiAgICAgICAgICB2aXJ0dWFsIH5PYmplY3RTdG9yZVJlY29y
ZENhbGxiYWNrKCkge307CiAgICAgfTsKLSAgICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9iamVjdFN0
b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmpl
Y3RTdG9yZVJlY29yZENhbGxiYWNrJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2Jq
ZWN0U3RvcmVSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpID0gMDsKIAogICAgIHZp
cnR1YWwgdm9pZCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRO
YW1lcywgVmVjdG9yPElEQktleVBhdGg+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZv
dW5kVW5pcXVlRmxhZ3MsIFZlY3Rvcjxib29sPiYgZm91bmRNdWx0aUVudHJ5RmxhZ3MpID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJv
b2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRleElkKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0
SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9y
UmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3Qg
ZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJ
REJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGlu
ZGV4SWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
KSA9IDA7CisgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciop
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5J
bmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJL
ZXk+JiBmb3VuZFByaW1hcnlLZXkpID0gMDsKIAogICAgIGNsYXNzIEN1cnNvciA6IHB1YmxpYyBS
ZWZDb3VudGVkPEN1cnNvcj4gewogICAgIHB1YmxpYzoKQEAgLTEwNSwxMCArMTA3LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgdmlydHVhbCB+Q3Vyc29yKCkgeyB9OwogICAgIH07CiAKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVu
T2JqZWN0U3RvcmVLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElE
QkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4g
b3Blbk9iamVjdFN0b3JlQ3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJl
Y3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3Rv
cmVLZXlDdXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0g
MDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoVHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7
CiAKICAgICBjbGFzcyBUcmFuc2FjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRyYW5zYWN0aW9u
PiB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA0NjU3MzYyZDEwNTY5
MWFlNTZiODJmYmM1NzZkNDE2YzY1YTNlOGM4Li45ZDAwMzA5YzcyN2I4NGQyM2I5ZGZhM2FiOTNj
MTY1MWY4NzMwMjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTkwLDExICsxOTAsMTEg
QEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFMKICAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFz
ZSgpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3Jl
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRy
YW5zYWN0aW9uKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9y
ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRy
YW5zYWN0aW9uKQogewogICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZDsKIAotICAgIGlmICghZGF0
YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZShkYXRhYmFzZS0+aWQoKSwg
b2JqZWN0U3RvcmUtPm5hbWUoKSwgb2JqZWN0U3RvcmUtPmtleVBhdGgoKSwgb2JqZWN0U3RvcmUt
PmF1dG9JbmNyZW1lbnQoKSwgb2JqZWN0U3RvcmVJZCkpIHsKKyAgICBpZiAoIWRhdGFiYXNlLT5t
X2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZS0+bmFtZSgpLCBvYmpl
Y3RTdG9yZS0+a2V5UGF0aCgpLCBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpLCBvYmplY3RT
dG9yZUlkKSkgewogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTIyOCw3ICsyMjgsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3RpbwogCiB2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4g
ZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCiB7
Ci0gICAgZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZShkYXRhYmFz
ZS0+aWQoKSwgb2JqZWN0U3RvcmUtPmlkKCkpOworICAgIGRhdGFiYXNlLT5tX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZS0+aWQoKSk7CiAgICAgdHJhbnNhY3Rpb24t
PmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWYKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4g
dHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBk
YXRhYmFzZS0+aWQoKTsKICAgICBkYXRhYmFzZS0+bV92ZXJzaW9uID0gdmVyc2lvbjsKLSAgICBp
ZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShk
YXRhYmFzZUlkLCBkYXRhYmFzZS0+bV92ZXJzaW9uKSkgeworICAgIGlmICghZGF0YWJhc2UtPm1f
YmFja2luZ1N0b3JlLT51cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBkYXRhYmFzZS0+bV92ZXJzaW9uKSkg
ewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBz
dGFibGUgc3RvcmFnZS4iKSk7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAg
ICByZXR1cm47CkBAIC0yOTIsMTMgKzI5MiwxMyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OnNldFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZgog
ICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPih0cmFuc2FjdGlvbikpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OnNldEludFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCB2ZXJzaW9uLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OnNldEludFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCB2ZXJzaW9u
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAgIGludDY0X3QgZGF0YWJhc2VJ
ZCA9IGRhdGFiYXNlLT5pZCgpOwogICAgIGludDY0X3Qgb2xkVmVyc2lvbiA9IGRhdGFiYXNlLT5t
X2ludFZlcnNpb247CiAgICAgQVNTRVJUKHZlcnNpb24gPiBvbGRWZXJzaW9uKTsKICAgICBkYXRh
YmFzZS0+bV9pbnRWZXJzaW9uID0gdmVyc2lvbjsKLSAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tp
bmdTdG9yZS0+dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKGRhdGFiYXNlSWQsIGRhdGFiYXNl
LT5tX2ludFZlcnNpb24pKSB7CisgICAgaWYgKCFkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPnVw
ZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgZGF0YWJhc2VJZCwgZGF0YWJhc2UtPm1faW50VmVyc2lvbikpIHsKICAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3Jh
Z2UuIikpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oCmluZGV4IDIyY2NjNDMyMjBiNTA0ZmU3MDY4NTY3YjU5YTQ3NjI1NWVl
YTg1NGQuLjEzMDJjOWQ3ZWRjZmY0YTYxNjdiZDg3ZDBiYjhhNDZiYzhlNTFhOWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBj
cmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICBz
dGF0aWMgdm9pZCBkZWxldGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+KTsKICAgICBzdGF0aWMgdm9pZCBzZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBzZXRJbnRWZXJzaW9uSW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4sIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIHNl
dEludFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogCiAgICAg
Ly8gVGhlc2UgYXJlIHVzZWQgYXMgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBhYm9ydCB0YXNrcy4K
ICAgICBzdGF0aWMgdm9pZCByZW1vdmVPYmplY3RTdG9yZUZyb21NYXAoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCAzOGNmY2Vj
OTdmYjI3MDEzZGI3MTA0ZGY3NzYyMGFiMGQ2MjYwNWYzLi5hMmI4NWI1ZTVjNDcxNzE0YWZkMjBi
MjkxNjgzZjg1MDJlNWJkYmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtODMsMTAgKzgzLDEwIEBA
IHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyCiAKICAgICBzd2l0Y2ggKGN1cnNvclR5cGUpIHsKICAg
ICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yOgotICAgICAg
ICBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtl
eUN1cnNvcihpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQt
PmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgYmFj
a2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJz
b3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGluZGV4LT5kYXRhYmFz
ZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIHJh
bmdlLmdldCgpLCBkaXJlY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4Q3Vyc29yOgotICAgICAgICBiYWNraW5nU3RvcmVDdXJz
b3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNvcihpbmRleC0+ZGF0YWJh
c2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCBy
YW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5k
ZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0
b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6Ok9iamVj
dFN0b3JlQ3Vyc29yOgogICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW52YWxp
ZEN1cnNvclR5cGU6CkBAIC0xMjcsMTIgKzEyNywxMiBAQCB2b2lkIElEQkluZGV4QmFja2VuZElt
cGw6Om9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIHVu
cwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRl
eCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5k
ZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5z
YWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRl
cm5hbCIpOwogICAgIHVpbnQzMl90IGNvdW50ID0gMDsKIAotICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgp
LT5vcGVuSW5kZXhLZXlDdXJzb3IoaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0
U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6
TkVYVCk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVD
dXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5k
ZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCks
IElEQkN1cnNvcjo6TkVYVCk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKICAgICAg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudW1iZXJWYWx1
ZShjb3VudCkpOwogICAgICAgICByZXR1cm47CkBAIC0xNDUsMTUgKzE0NSwxNiBAQCB2b2lkIElE
QkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCSQogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsKIH0KIAotdm9pZCBJREJJbmRleEJhY2tlbmRJ
bXBsOjpjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNv
dW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
UHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2Vu
ZEltcGw6OmNvdW50Iik7Ci0gICAgaWYgKCFJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9t
KHRyYW5zYWN0aW9uKS0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tU
YXNrKCZjb3VudEludGVybmFsLCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzKSkpCisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+
c2NoZWR1bGVUYXNrKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZjb3VudEludGVy
bmFsLCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQogICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiB9CiAKLXZv
aWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQor
dm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCiB7CiAg
ICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCIpOwogCkBAIC0x
NjIsNyArMTYzLDcgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmQKICAgICBpZiAoa2V5UmFuZ2Ut
PmlzT25seUtleSgpKQogICAgICAgICBrZXkgPSBrZXlSYW5nZS0+bG93ZXIoKTsKICAgICBlbHNl
IHsKLSAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVD
dXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNvcihpbmRleC0+ZGF0
YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgp
LCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICAgICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0
b3JlKCktPm9wZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5p
ZCgpLCBpbmRleC0+aWQoKSwga2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CiAKICAg
ICAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKICAgICAgICAgICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7CkBAIC0x
NzIsOSArMTczLDkgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmQKICAgICAgICAgYmFja2luZ1N0
b3JlQ3Vyc29yLT5jbG9zZSgpOwogICAgIH0KIAotICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXkgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlWaWFJbmRleChpbmRleC0+
ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5p
ZCgpLCAqa2V5KTsKKyAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gaW5kZXgtPmJhY2tp
bmdTdG9yZSgpLT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3Jl
QmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksICprZXkpOwogCi0gICAgU3RyaW5nIHZhbHVlID0g
aW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJlY29yZChpbmRleC0+ZGF0YWJh
c2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksICpwcmltYXJ5S2V5KTsK
KyAgICBTdHJpbmcgdmFsdWUgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldE9iamVjdFN0b3Jl
UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBpbmRleC0+ZGF0
YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksICpwcmltYXJ5S2V5
KTsKIAogICAgIGlmICh2YWx1ZS5pc051bGwoKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwpAQCAtMTg4LDE5
ICsxODksMTkgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmQKICAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHZhbHVlKSk7CiB9CiAK
LXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEtleUludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1w
bDo6Z2V0SW50ZXJuYWwiKTsKIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
YmFja2luZ1N0b3JlQ3Vyc29yID0KLSAgICAgICAgICAgIGluZGV4LT5iYWNraW5nU3RvcmUoKS0+
b3BlbkluZGV4S2V5Q3Vyc29yKGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0
b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIGtleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6
Ok5FWFQpOworICAgICAgICAgICAgaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlD
dXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGluZGV4LT5kYXRh
YmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCks
IGtleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogCiAgICAgaWYgKCFiYWNraW5nU3Rv
cmVDdXJzb3IpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8SURC
S2V5Kj4oMCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElEQktleT4g
a2V5UmVzdWx0ID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgo
aW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBp
bmRleC0+aWQoKSwgKmJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCkpOworICAgIFJlZlB0cjxJREJL
ZXk+IGtleVJlc3VsdCA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZpYUlu
ZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBpbmRleC0+ZGF0YWJh
c2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAq
YmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKSk7CiAgICAgaWYgKCFrZXlSZXN1bHQpIHsKICAgICAg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8SURCS2V5Kj4oMCkpOwogICAgICAg
ICBiYWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7CkBAIC0yMTEsMjUgKzIxMiwyNiBAQCB2b2lk
IElEQkluZGV4QmFja2VuZEltcGw6OmdldEtleUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZQogfQogCiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4
QmFja2VuZEltcGw6OmdldCIpOwogICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRl
eCA9IHRoaXM7CiAgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdl
OwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAg
ICBpZiAoIUlEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb24pLT5zY2hl
ZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmdldEludGVybmFsLCBp
bmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpKQorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20o
dHJhbnNhY3Rpb25QdHIpOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVh
dGVDYWxsYmFja1Rhc2soJmdldEludGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcywg
dHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNB
Q1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEtl
eShQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6Omdl
dEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJJ
bmRleEJhY2tlbmRJbXBsOjpnZXRLZXkiKTsKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4gaW5kZXggPSB0aGlzOwogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBL
ZXlSYW5nZTsKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFj
a3M7Ci0gICAgaWYgKCFJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9u
KS0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZnZXRLZXlJ
bnRlcm5hbCwgaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3MpKSkKKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmdldEtleUludGVybmFsLCBp
bmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJ
bXBsLmgKaW5kZXggZTExNzQ1NzlkNjE3M2FjZTU4NDA3ZGMyYmY1MzM5ZjJiZjM5YjQwYy4uMTcz
YzMyZDA4ZmYxNDMzYjk5OTBlNTA1MjI1MGNjODljYTZkYThiOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaApAQCAt
NzksOSArNzksOSBAQCBwcml2YXRlOgogICAgIElEQkluZGV4QmFja2VuZEltcGwoY29uc3QgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbCosIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVu
dHJ5KTsKIAogICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZTo6Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBjb3VudEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsK
LSAgICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0S2V5SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAg
IHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4pOworICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRLZXlJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPik7CiAKICAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlk
SWQgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDkzMGUyMGIzYjgzNWRkYWVkNTM3
ZTdlMTkwYjE0NTEyZWFlNDcyNmEuLjQwYjEyNjI3ODY0OWYxYTkxMzg0ZmIwZDFjOGUzM2UzNjBi
YzM0MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxl
dmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCkBAIC0zMzYsMjIgKzMzNiwyMCBAQCBib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihpbnQ2NF90IHJvd0lk
LCBpbnQ2NF90IGludFZlcnNpb24pCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0
ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKQogewotICAgIEFTU0VS
VChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgLy8gRklYTUU6IENoYW5nZSB0aGlzIHRvIHN0
cmljdGx5IGdyZWF0ZXIgdGhhbiAwIG9uY2Ugd2UgdGhyb3cgVHlwZUVycm9yIGZvcgogICAgIC8v
IGJhZCB2ZXJzaW9ucy4KICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGludFZlcnNpb24gPj0gMCwg
ImludFZlcnNpb24gd2FzICVsbGQiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGludFZlcnNpb24p
KTsKLSAgICBpZiAoIXB1dFZhckludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgRGF0YWJh
c2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50
VmVyc2lvbiksIGludFZlcnNpb24pKQorICAgIGlmICghcHV0VmFySW50KFRyYW5zYWN0aW9uOjps
ZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6
ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVyc2lvbiksIGludFZl
cnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGlu
dDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK2Jvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
KQogewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgaWYgKCFwdXRTdHJp
bmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29k
ZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKKyAg
ICBpZiAoIXB1dFN0cmluZyhUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFu
c2FjdGlvbiksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRh
RGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgcmV0dXJuIHRydWU7CkBAIC01MTksMTEgKzUxNywxMSBAQCBzdGF0aWMgaW50NjRfdCBn
ZXROZXdPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YQogICAgIHJldHVybiBvYmplY3RTdG9yZUlkOwogfQogCi1ib29sIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1l
bnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKK2Jvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2ln
bmVkT2JqZWN0U3RvcmVJZCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmNyZWF0ZU9iamVjdFN0b3JlIik7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9u
KTsKLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBnZXROZXdPYmplY3RTdG9yZUlkKG1fY3Vy
cmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rp
b24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25G
cm9tKHRyYW5zYWN0aW9uKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBnZXROZXdPYmpl
Y3RTdG9yZUlkKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCk7CiAgICAgaWYgKG9iamVj
dFN0b3JlSWQgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTUzNyw1NSArNTM1LDU1
IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRf
dCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5R2Vu
ZXJhdG9yQ3VycmVudE51bWJlcik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVzS2V5ID0g
T2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG5hbWUpOwogCi0gICAgYm9v
bCBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZUtleSwgbmFt
ZSk7CisgICAgYm9vbCBvayA9IHB1dFN0cmluZyhsZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVLZXks
IG5hbWUpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRl
eGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sg
PSBwdXRJREJLZXlQYXRoKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlQYXRoS2V5LCBr
ZXlQYXRoKTsKKyAgICBvayA9IHB1dElEQktleVBhdGgobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlQ
YXRoS2V5LCBrZXlQYXRoKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50
ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBhdXRvSW5jcmVt
ZW50S2V5LCBhdXRvSW5jcmVtZW50KTsKKyAgICBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rp
b24sIGF1dG9JbmNyZW1lbnRLZXksIGF1dG9JbmNyZW1lbnQpOwogICAgIGlmICghb2spIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIGV2aWN0YWJsZUtleSwgZmFsc2UpOworICAgIG9rID0gcHV0SW50KGxldmVsREJU
cmFuc2FjdGlvbiwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7CiAgICAgaWYgKCFvaykgewogICAgICAg
ICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5n
ZXQoKSwgbGFzdFZlcnNpb25LZXksIDEpOworICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2Fj
dGlvbiwgbGFzdFZlcnNpb25LZXksIDEpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG1h
eEluZGV4SWRLZXksIE1pbmltdW1JbmRleElkKTsKKyAgICBvayA9IHB1dEludChsZXZlbERCVHJh
bnNhY3Rpb24sIG1heEluZGV4SWRLZXksIE1pbmltdW1JbmRleElkKTsKICAgICBpZiAoIW9rKSB7
CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0Qm9vbChtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgaGFzS2V5UGF0aEtleSwgIWtleVBhdGguaXNOdWxsKCkpOworICAgIG9r
ID0gcHV0Qm9vbChsZXZlbERCVHJhbnNhY3Rpb24sIGhhc0tleVBhdGhLZXksICFrZXlQYXRoLmlz
TnVsbCgpKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5k
ZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9r
ID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyS2V5LCBLZXlHZW5lcmF0b3JJbml0aWFsTnVtYmVyKTsKKyAgICBvayA9IHB1dEludChs
ZXZlbERCVHJhbnNhY3Rpb24sIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXksIEtleUdlbmVy
YXRvckluaXRpYWxOdW1iZXIpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJ
bnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG5hbWVzS2V5
LCBvYmplY3RTdG9yZUlkKTsKKyAgICBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIG5h
bWVzS2V5LCBvYmplY3RTdG9yZUlkKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJP
UigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNTk2LDM1ICs1OTQsMzYgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVP
YmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9y
ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3ZvaWQgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
T2JqZWN0U3RvcmUiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExl
dmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVs
REJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgU3RyaW5nIG9iamVjdFN0b3Jl
TmFtZTsKLSAgICBnZXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIE9iamVjdFN0
b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjpOYW1lKSwgb2JqZWN0U3RvcmVOYW1lKTsKKyAgICBnZXRTdHJpbmco
bGV2ZWxEQlRyYW5zYWN0aW9uLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TmFtZSksIG9iamVj
dFN0b3JlTmFtZSk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgMCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkKSkpCisgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNh
Y3Rpb24sIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCAwKSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQpKSkKICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVy
cm9yLgogCi0gICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShPYmplY3RTdG9yZU5hbWVz
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVOYW1lKSk7CisgICAgbGV2ZWxEQlRy
YW5zYWN0aW9uLT5yZW1vdmUoT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlTmFtZSkpOwogCi0gICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIDApLCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCkpKQorICAgIGlmICghZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9u
LCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCks
IEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
KSkpCiAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KLSAgICBpZiAoIWRl
bGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBJbmRleE1ldGFEYXRhS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCksIEluZGV4TWV0YURhdGFLZXk6
OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpCisgICAgaWYgKCFkZWxl
dGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlTWF4
S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkKICAgICAgICAgcmV0dXJuOyAvLyBGSVhN
RTogUmVwb3J0IGVycm9yLgogCi0gICAgY2xlYXJPYmplY3RTdG9yZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkKTsKKyAgICBjbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkKTsKIH0KIAotU3RyaW5nIElEQkxldmVsREJCYWNraW5nU3RvcmU6Omdl
dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXkmIGtleSkKK1N0cmluZyBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpn
ZXRPYmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYga2V5KQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0
T2JqZWN0U3RvcmVSZWNvcmQiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFu
c2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9u
KTsKKwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKICAgICBWZWN0b3I8
Y2hhcj4gZGF0YTsKIAotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgaWYg
KCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Z2V0KGxldmVsZGJLZXksIGRhdGEpKQorICAgIGlmICgh
bGV2ZWxEQlRyYW5zYWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAogICAgIGludDY0X3QgdmVyc2lvbjsKQEAgLTY3NiwyMyArNjc1LDIzIEBA
IHN0YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhCiAgICAgcmV0dXJuIHZlcnNpb247CiB9CiAKLWJvb2wg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZp
ZXIpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3JkKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikK
IHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3Jl
UmVjb3JkIik7CiAgICAgQVNTRVJUKGtleS5pc1ZhbGlkKCkpOwotICAgIEFTU0VSVChtX2N1cnJl
bnRUcmFuc2FjdGlvbik7Ci0gICAgaW50NjRfdCB2ZXJzaW9uID0gZ2V0TmV3VmVyc2lvbk51bWJl
cihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7
CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlv
bjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgaW50NjRfdCB2ZXJz
aW9uID0gZ2V0TmV3VmVyc2lvbk51bWJlcihsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZWRhdGFL
ZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBrZXkpOwogCiAgICAgVmVjdG9yPGNoYXI+IHY7CiAgICAgdi5hcHBlbmQoZW5jb2RlVmFySW50
KHZlcnNpb24pKTsKICAgICB2LmFwcGVuZChlbmNvZGVTdHJpbmcodmFsdWUpKTsKIAotICAgIGlm
ICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChvYmplY3RTdG9yZWRhdGFLZXksIHYpKQorICAg
IGlmICghbGV2ZWxEQlRyYW5zYWN0aW9uLT5wdXQob2JqZWN0U3RvcmVkYXRhS2V5LCB2KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5
S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBr
ZXkpOwotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChleGlzdHNFbnRyeUtleSwg
ZW5jb2RlSW50KHZlcnNpb24pKSkKKyAgICBpZiAoIWxldmVsREJUcmFuc2FjdGlvbi0+cHV0KGV4
aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIg
PSBzdGF0aWNfY2FzdDxMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIp
OwpAQCAtNzAxLDE0ICs3MDAsMTQgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRP
YmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2IKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0
b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQordm9pZCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFy
T2JqZWN0U3RvcmUiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExl
dmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVs
REJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBz
dGFydEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKS5lbmNvZGUo
KTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkICsgMSwgMCkuZW5jb2RlKCk7CiAKLSAgICBkZWxldGVSYW5nZShtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXksIHN0b3BLZXkpOworICAgIGRlbGV0ZVJh
bmdlKGxldmVsREJUcmFuc2FjdGlvbiwgc3RhcnRLZXksIHN0b3BLZXkpOwogfQogCiBQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpCkBAIC03MTYs
MzAgKzcxNSwzMCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOgogICAgIHJldHVybiBMZXZlbERC
UmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKCk7CiB9CiAKLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3Jk
SWRlbnRpZmllcikKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3Rv
cmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCiB7CiAgICAgSURCX1RSQUNFKCJJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZCIpOwotICAgIEFTU0VS
VChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERC
VHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2Fj
dGlvbik7CiAgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJ
ZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihy
ZWNvcmRJZGVudGlmaWVyKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZURh
dGFLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKLSAgICBtX2N1cnJl
bnRUcmFuc2FjdGlvbi0+cmVtb3ZlKG9iamVjdFN0b3JlRGF0YUtleSk7CisgICAgbGV2ZWxEQlRy
YW5zYWN0aW9uLT5yZW1vdmUob2JqZWN0U3RvcmVEYXRhS2V5KTsKIAogICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7
Ci0gICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShleGlzdHNFbnRyeUtleSk7CisgICAg
bGV2ZWxEQlRyYW5zYWN0aW9uLT5yZW1vdmUoZXhpc3RzRW50cnlLZXkpOwogfQogCiAKLWludDY0
X3QgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK2ludDY0X3QgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsK
KyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9u
OjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURh
dGFLZXk6OktleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOwogCiAgICAgaW50NjRfdCBrZXlHZW5l
cmF0b3JDdXJyZW50TnVtYmVyID0gLTE7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBp
ZiAobV9jdXJyZW50VHJhbnNhY3Rpb24tPmdldChrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5
LCBkYXRhKSkKKyAgICBpZiAobGV2ZWxEQlRyYW5zYWN0aW9uLT5nZXQoa2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlcktleSwgZGF0YSkpCiAgICAgICAgIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIg
PSBkZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpKTsKICAgICBlbHNlIHsKICAgICAg
ICAgLy8gUHJldmlvdXNseSwgdGhlIGtleSBnZW5lcmF0b3Igc3RhdGUgd2FzIG5vdCBzdG9yZWQg
ZXhwbGljaXRseSBidXQgZGVyaXZlZCBmcm9tIHRoZQpAQCAtNzQ4LDcgKzc0Nyw3IEBAIGludDY0
X3QgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihp
bnQ2NF90IGRhdGFiYXNlSWQsCiAgICAgICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9
IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1p
bklEQktleSgpKTsKICAgICAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RT
dG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXko
KSk7CiAKLSAgICAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFu
c2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICAgICAgT3duUHRyPExldmVsREJJdGVyYXRv
cj4gaXQgPSBsZXZlbERCVHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgICAgIGlu
dDY0X3QgbWF4TnVtZXJpY0tleSA9IDA7CiAKICAgICAgICAgZm9yIChpdC0+c2VlayhzdGFydEtl
eSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7
IGl0LT5uZXh0KCkpIHsKQEAgLTc3MiwxOCArNzcxLDE4IEBAIGludDY0X3QgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNl
SWQsCiAgICAgcmV0dXJuIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXI7CiB9CiAKLWJvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051
bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om1h
eWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkKIHsKLSAgICBBU1NF
UlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxE
QlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNh
Y3Rpb24pOwogCiAgICAgaWYgKGNoZWNrQ3VycmVudCkgewotICAgICAgICBpbnQ2NF90IGN1cnJl
bnROdW1iZXIgPSBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQpOworICAgICAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXIgPSBnZXRLZXlHZW5lcmF0
b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsK
ICAgICAgICAgaWYgKG5ld051bWJlciA8PSBjdXJyZW50TnVtYmVyKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlcik7Ci0gICAgYm9vbCBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5n
ZXQoKSwga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgbmV3TnVtYmVyKTsKKyAgICBib29s
IG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwga2V5R2VuZXJhdG9yQ3VycmVudE51bWJl
cktleSwgbmV3TnVtYmVyKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50
ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzkx
LDE0ICs3OTAsMTQgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtl
eUdlbmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBkYXRhYmEKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3Jl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkm
IGtleSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIp
Citib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCiB7CiAgICAgSURCX1RSQUNF
KCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlIik7Ci0gICAg
QVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxl
dmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRy
YW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IE9iamVjdFN0
b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAgICAg
VmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5nZXQo
bGV2ZWxkYktleSwgZGF0YSkpCisgICAgaWYgKCFsZXZlbERCVHJhbnNhY3Rpb24tPmdldChsZXZl
bGRiS2V5LCBkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaW50NjRfdCB2ZXJz
aW9uOwpAQCAtODExLDEzICs4MTAsMTMgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpr
ZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdAogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZvckVhY2hPYmpl
Y3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
T2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYgY2FsbGJhY2spCitib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmZvckVhY2hPYmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smIGNhbGxiYWNrKQogewotICAgIEFTU0VS
VChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERC
VHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2Fj
dGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURCS2V5KCkpOwogICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4SURCS2V5KCkpOwogCi0gICAgT3duUHRyPExl
dmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3Io
KTsKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGxldmVsREJUcmFuc2FjdGlvbi0+
Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFs
aWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkg
ewogICAgICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7CiAgICAgICAgIGNv
bnN0IGNoYXIqIGxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOwpAQCAtOTM1LDExICs5MzQsMTEgQEAg
c3RhdGljIGludDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQKICAgICByZXR1cm4gaW5kZXhJZDsKIH0KIAotYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50NjRfdCYgaW5k
ZXhJZCkKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
IGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRl
eElkKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5k
ZXgiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGluZGV4SWQgPSBn
ZXROZXdJbmRleElkKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9
IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBp
bmRleElkID0gZ2V0TmV3SW5kZXhJZChsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQpOwogICAgIGlmIChpbmRleElkIDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC05NDgsMjUgKzk0NywyNSBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNy
ZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZQogICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIEluZGV4TWV0YURhdGFLZXk6OktleVBh
dGgpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtdWx0aUVudHJ5S2V5ID0gSW5kZXhNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIEluZGV4TWV0
YURhdGFLZXk6Ok11bHRpRW50cnkpOwogCi0gICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7CisgICAgYm9vbCBvayA9IHB1dFN0
cmluZyhsZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVLZXksIG5hbWUpOwogICAgIGlmICghb2spIHsK
ICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRCb29sKG1fY3VycmVudFRyYW5z
YWN0aW9uLmdldCgpLCB1bmlxdWVLZXksIGlzVW5pcXVlKTsKKyAgICBvayA9IHB1dEJvb2wobGV2
ZWxEQlRyYW5zYWN0aW9uLCB1bmlxdWVLZXksIGlzVW5pcXVlKTsKICAgICBpZiAoIW9rKSB7CiAg
ICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0SURCS2V5UGF0aChtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwga2V5UGF0aEtleSwga2V5UGF0aCk7CisgICAgb2sgPSBwdXRJREJL
ZXlQYXRoKGxldmVsREJUcmFuc2FjdGlvbiwga2V5UGF0aEtleSwga2V5UGF0aCk7CiAgICAgaWYg
KCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEJvb2wobV9jdXJy
ZW50VHJhbnNhY3Rpb24uZ2V0KCksIG11bHRpRW50cnlLZXksIGlzTXVsdGlFbnRyeSk7CisgICAg
b2sgPSBwdXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwgbXVsdGlFbnRyeUtleSwgaXNNdWx0aUVu
dHJ5KTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhl
ZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTc1LDE1ICs5NzQsMTUg
QEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQordm9pZCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRl
bGV0ZUluZGV4Iik7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZl
bERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBp
bmRleE1ldGFEYXRhU3RhcnQgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4
TWV0YURhdGFFbmQgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBpbmRleE1ldGFEYXRhU3RhcnQsIGluZGV4TWV0YURhdGFFbmQp
KSB7CisgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIGluZGV4TWV0YURh
dGFTdGFydCwgaW5kZXhNZXRhRGF0YUVuZCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5h
bCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTkxLDI3
ICs5OTAsMjcgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmUKICAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gaW5kZXhEYXRhU3RhcnQgPSBJbmRleERhdGFLZXk6OmVuY29kZU1pbktleShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhE
YXRhRW5kID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBpbmRleERhdGFTdGFydCwgaW5kZXhEYXRhRW5kKSkgeworICAgIGlmICghZGVs
ZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBpbmRleERhdGFTdGFydCwgaW5kZXhEYXRhRW5k
KSkgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
cHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBPYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCitib29sIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IE9iamVjdFN0
b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKICAgICBJREJfVFJBQ0Uo
IklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZCIpOwogICAgIEFT
U0VSVChrZXkuaXNWYWxpZCgpKTsKICAgICBBU1NFUlQoaW5kZXhJZCA+PSBNaW5pbXVtSW5kZXhJ
ZCk7CiAgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVu
dGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNv
cmRJZGVudGlmaWVyKTsKIAotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAg
TGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2
ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+
IGluZGV4RGF0YUtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIGVuY29kZUlEQktleShrZXkpLCBsZXZlbERCUmVjb3JkSWRlbnRpZmll
ci0+cHJpbWFyeUtleSgpKTsKIAogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwogICAgIGRhdGEuYXBw
ZW5kKGVuY29kZVZhckludChsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+dmVyc2lvbigpKSk7CiAg
ICAgZGF0YS5hcHBlbmQobGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CiAK
LSAgICByZXR1cm4gbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChpbmRleERhdGFLZXksIGRhdGEp
OworICAgIHJldHVybiBsZXZlbERCVHJhbnNhY3Rpb24tPnB1dChpbmRleERhdGFLZXksIGRhdGEp
OwogfQogCiBzdGF0aWMgYm9vbCBmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwoTGV2ZWxE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiB0YXJnZXQsIFZl
Y3RvcjxjaGFyPiYgZm91bmRLZXkpCkBAIC0xMDQyLDcgKzEwNDEsNyBAQCBzdGF0aWMgYm9vbCBm
aW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90
LCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKQorYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QsIGludDY0X3QsIGludDY0X3QsIGNvbnN0IE9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllciopCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXNuJ3QgbmVlZGVkIHNpbmNl
IHdlIGludmFsaWRhdGUgaW5kZXggZGF0YSB2aWEgdGhlIHZlcnNpb24gbnVtYmVyIG1lY2hhbmlz
bS4KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwNTksMTMgKzEwNTgsMTQgQEAgc3RhdGljIGJvb2wg
dmVyc2lvbkV4aXN0cyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGkKICAgICByZXR1cm4gZGVjb2RlSW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQo
KSkgPT0gdmVyc2lvbjsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5
SW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQ
cmltYXJ5S2V5KQorYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
JiBrZXksIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkKIHsKICAgICBJREJf
VFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4Iik7CiAgICAgQVNT
RVJUKGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuaXNFbXB0eSgpKTsKIAorICAgIExldmVsREJUcmFu
c2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2Fj
dGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5
ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwga2V5KTsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5z
YWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0
ID0gbGV2ZWxEQlRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGl0LT5zZWVrKGxl
dmVsZGJLZXkpOwogCiAgICAgZm9yICg7OykgewpAQCAtMTA4MCw5ICsxMDgwLDkgQEAgYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3QKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZm91
bmRFbmNvZGVkUHJpbWFyeUtleS5hcHBlbmQocCwgaXQtPnZhbHVlKCkuZW5kKCkgLSBwKTsKIAot
ICAgICAgICBpZiAoIXZlcnNpb25FeGlzdHMobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkp
KSB7CisgICAgICAgIGlmICghdmVyc2lvbkV4aXN0cyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKSB7
CiAgICAgICAgICAgICAvLyBEZWxldGUgc3RhbGUgaW5kZXggZGF0YSBlbnRyeSBhbmQgY29udGlu
dWUuCi0gICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSk7
CisgICAgICAgICAgICBsZXZlbERCVHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpOwogICAg
ICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBA
IC0xMDkxLDEzICsxMDkxLDEyIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtl
eUluSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0CiAgICAgfQogfQog
Ci1QYXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtl
eVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQorUGFzc1JlZlB0cjxJREJLZXk+IElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCiB7CiAgICAg
SURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgi
KTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogCiAgICAgVmVjdG9yPGNoYXI+
IGZvdW5kRW5jb2RlZFByaW1hcnlLZXk7Ci0gICAgaWYgKGZpbmRLZXlJbkluZGV4KGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkp
IHsKKyAgICBpZiAoZmluZEtleUluSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGluZGV4SWQsIGtleSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKICAgICAg
ICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleTsKICAgICAgICAgZGVjb2RlSURCS2V5KGZvdW5k
RW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleS5lbmQoKSwg
cHJpbWFyeUtleSk7CiAgICAgICAgIHJldHVybiBwcmltYXJ5S2V5LnJlbGVhc2UoKTsKQEAgLTEx
MDYsMTMgKzExMDUsMTIgQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXMKICAgICByZXR1cm4gMDsK
IH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpCiti
b29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXks
IFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpCiB7CiAgICAgSURCX1RSQUNFKCJJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4Iik7Ci0gICAgQVNTRVJUKG1fY3Vy
cmVudFRyYW5zYWN0aW9uKTsKIAogICAgIFZlY3RvcjxjaGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5
S2V5OwotICAgIGlmICghZmluZEtleUluSW5kZXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhJZCwgaW5kZXhLZXksIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKQorICAgIGlmICghZmlu
ZEtleUluSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4
SWQsIGluZGV4S2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgZGVjb2RlSURCS2V5KGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwg
Zm91bmRFbmNvZGVkUHJpbWFyeUtleS5lbmQoKSwgZm91bmRQcmltYXJ5S2V5KTsKQEAgLTE2ODks
NTYgKzE2ODcsNTYgQEAgYm9vbCBpbmRleEN1cnNvck9wdGlvbnMoTGV2ZWxEQlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQKIAogfQogCi1QYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2Jq
ZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9u
KQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24p
CiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3Rv
cmVDdXJzb3IiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVs
REJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJU
cmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0
aW9uczsKLSAgICBpZiAoIW9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwg
Y3Vyc29yT3B0aW9ucykpCisgICAgaWYgKCFvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMobGV2ZWxE
QlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0aW9u
LCBjdXJzb3JPcHRpb25zKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPE9iamVjdFN0
b3JlQ3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpjcmVhdGUobV9j
dXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOworICAgIFJlZlB0cjxPYmpl
Y3RTdG9yZUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3JlYXRl
KGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7CiAgICAgaWYgKCFjdXJzb3ItPmZp
cnN0U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBjdXJzb3IucmVsZWFz
ZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJD
dXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IiKTsKLSAgICBBU1NFUlQobV9j
dXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5z
YWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24p
OwogICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKLSAgICBpZiAoIW9iamVjdFN0b3Jl
Q3Vyc29yT3B0aW9ucyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCisgICAgaWYgKCFv
YmplY3RTdG9yZUN1cnNvck9wdGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgUmVmUHRyPE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0g
T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0
KCksIGN1cnNvck9wdGlvbnMpOworICAgIFJlZlB0cjxPYmplY3RTdG9yZUtleUN1cnNvckltcGw+
IGN1cnNvciA9IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKGxldmVsREJUcmFuc2Fj
dGlvbiwgY3Vyc29yT3B0aW9ucyk7CiAgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwogfQogCi1QYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpv
cGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6
OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5n
ZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yIik7Ci0gICAgQVNTRVJUKG1f
Y3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFu
c2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9u
KTsKICAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7Ci0gICAgaWYgKCFpbmRleEN1cnNv
ck9wdGlvbnMobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQorICAgIGlm
ICghaW5kZXhDdXJzb3JPcHRpb25zKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGN1cnNvciA9
IEluZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBj
dXJzb3JPcHRpb25zKTsKKyAgICBSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBJ
bmRleEtleUN1cnNvckltcGw6OmNyZWF0ZShsZXZlbERCVHJhbnNhY3Rpb24sIGN1cnNvck9wdGlv
bnMpOwogICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9u
KQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6b3BlbkluZGV4Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9u
IGRpcmVjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9w
ZW5JbmRleEN1cnNvciIpOwotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAg
TGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2
ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgQ3Vyc29yT3B0aW9ucyBjdXJz
b3JPcHRpb25zOwotICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25zKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCByYW5nZSwgZGly
ZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKKyAgICBpZiAoIWluZGV4Q3Vyc29yT3B0aW9ucyhsZXZl
bERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJhbmdl
LCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQ
dHI8SW5kZXhDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEN1cnNvckltcGw6OmNyZWF0ZShtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucyk7CisgICAgUmVmUHRyPEluZGV4
Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhDdXJzb3JJbXBsOjpjcmVhdGUobGV2ZWxEQlRyYW5z
YWN0aW9uLCBjdXJzb3JPcHRpb25zKTsKICAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCiAg
ICAgICAgIHJldHVybiAwOwogCkBAIC0xNzYyLDI1ICsxNzYwLDI2IEBAIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbihJREJMZXZlbERCQmFja2luZ1N0b3Jl
KiBiYWNraW5nCiAKIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJl
Z2luKCkKIHsKLSAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlv
bik7Ci0gICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uID0gTGV2ZWxEQlRy
YW5zYWN0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0KCkpOworICAgIElEQl9U
UkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2luIik7CisgICAg
QVNTRVJUKCFtX3RyYW5zYWN0aW9uKTsKKyAgICBtX3RyYW5zYWN0aW9uID0gTGV2ZWxEQlRyYW5z
YWN0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0KCkpOwogfQogCiBib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQoKQogewogICAgIElEQl9U
UkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCIpOwotICAg
IEFTU0VSVChtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGJvb2wg
cmVzdWx0ID0gbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uLT5jb21taXQoKTsK
LSAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24uY2xlYXIoKTsKKyAgICBB
U1NFUlQobV90cmFuc2FjdGlvbik7CisgICAgYm9vbCByZXN1bHQgPSBtX3RyYW5zYWN0aW9uLT5j
b21taXQoKTsKKyAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2so
KQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246
OnJvbGxiYWNrIik7Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2Fj
dGlvbik7Ci0gICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uLT5yb2xsYmFj
aygpOwotICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi5jbGVhcigpOwor
ICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKKyAgICBtX3RyYW5zYWN0aW9uLT5yb2xsYmFjaygp
OworICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKIH0KIAogYm9vbCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpiYWNraW5nU3RvcmVFeGlzdHMoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZS5oCmluZGV4IDczMzkyMjY5MDEzMTUyNTBmMzVhODhmYTI1MjViZGUyZmM3OGIzMTkuLjc3Y2Iw
NmU3ODVhZjgwOTgwOTdiOWU5MmM4NmZlMWYyYTdlZGY2NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgK
QEAgLTQ3LDM2ICs0NywzNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNl
TmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRJ
REJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNp
b24sIGludDY0X3QmIGZvdW5kSW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCk7CiAgICAgdmly
dHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQp
OwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93
SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRh
dGFiYXNlSW50VmVyc2lvbihpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOworICAg
IHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOworICAg
IHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbik7CiAgICAg
dmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGlu
dDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxJREJL
ZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRG
bGFncyk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5j
cmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCk7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRP
YmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyPiBjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOwotICAgIHZpcnR1YWwgU3Ry
aW5nIGdldE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3Rv
cmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciopOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0
U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgaW50NjRfdCBn
ZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCk7Ci0gICAgdmlydHVhbCBib29sIGtl
eUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRS
ZWNvcmRJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29y
ZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpOworICAgIHZpcnR1YWwgYm9vbCBwdXRP
YmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOworICAgIHZpcnR1YWwg
dm9pZCBjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdlbmVyYXRv
ckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIGJvb2wgbWF5YmVV
cGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBu
ZXdTdGF0ZSwgYm9vbCBjaGVja0N1cnJlbnQpOworICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJ
bk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpOwogCi0gICAgdmlydHVhbCBi
b29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpOworICAgIHZpcnR1YWwg
Ym9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9y
ZVJlY29yZENhbGxiYWNrJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5kZXhlcyhpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3Vu
ZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxJREJLZXlQYXRoPiYgZm91
bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzLCBWZWN0b3I8Ym9vbD4m
IGZvdW5kTXVsdGlFbnRyeUZsYWdzKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBp
bnQ2NF90JiBpbmRleElkKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7Ci0gICAg
dmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25z
dCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciop
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KTsK
LQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNv
cihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1
cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURC
Q3Vyc29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNV
bmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRleElkKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOworICAg
IHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllciopOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllciopOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJ
bmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7Cisg
ICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFBy
aW1hcnlLZXkpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0
b3JlS2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJz
b3I6OkRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVj
dFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJz
b3I6OkRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4
S2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlS
YW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vy
c29yPiBvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwogCiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpOwogCkBAIC04NiwxMyAr
ODYsMTIgQEAgcHJvdGVjdGVkOgogICAgIElEQkxldmVsREJCYWNraW5nU3RvcmUoY29uc3QgU3Ry
aW5nJiBpZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBQYXNzT3duUHRyPExldmVs
REJEYXRhYmFzZT4pOwogCiBwcml2YXRlOgotICAgIGJvb2wgZmluZEtleUluSW5kZXgoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5JiwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KTsKKyAgICBi
b29sIGZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpOwogCiAgICAg
U3RyaW5nIG1faWRlbnRpZmllcjsKICAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBt
X2ZhY3Rvcnk7CiAgICAgT3duUHRyPExldmVsREJEYXRhYmFzZT4gbV9kYjsKICAgICBPd25QdHI8
TGV2ZWxEQkNvbXBhcmF0b3I+IG1fY29tcGFyYXRvcjsKLSAgICBSZWZQdHI8TGV2ZWxEQlRyYW5z
YWN0aW9uPiBtX2N1cnJlbnRUcmFuc2FjdGlvbjsKIAogICAgIGNsYXNzIFRyYW5zYWN0aW9uIDog
cHVibGljIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24gewogICAgIHB1YmxpYzoKQEAgLTEw
MSw5ICsxMDAsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBib29sIGNvbW1pdCgpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKTsKIAorICAgICAgICBzdGF0aWMgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qPih0cmFuc2FjdGlv
biktPm1fdHJhbnNhY3Rpb24uZ2V0KCk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAg
ICAgIFRyYW5zYWN0aW9uKElEQkxldmVsREJCYWNraW5nU3RvcmUqKTsKICAgICAgICAgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZSogbV9iYWNraW5nU3RvcmU7CisgICAgICAgIFJlZlB0cjxMZXZlbERC
VHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CiAgICAgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAKaW5kZXggMmZhNWMwODRjN2Q1NjUzNDg2MWRjMWY4NTc1N2UyNzE4MTQ1Nzdm
NC4uODA1YjcxNTI0MDYwMTlhZmY4MGMwZTBhOWI4MDgyNWQwZWYwNWFjZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAKQEAgLTg2LDE4ICs4NiwxOCBAQCB2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFz
c1JlZgogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsK
ICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKICAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2so
JklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsLCBvYmplY3RTdG9yZSwga2V5
UmFuZ2UsIGNhbGxiYWNrcykpKQorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGtleVJhbmdl
LCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
Cit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmdldEludGVybmFsIik7CiAgICAgUmVmUHRyPElEQktleT4ga2V5OwogICAgIGlmIChrZXlS
YW5nZS0+aXNPbmx5S2V5KCkpCiAgICAgICAgIGtleSA9IGtleVJhbmdlLT5sb3dlcigpOwogICAg
IGVsc2UgewotICAgICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdT
dG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3Jl
Q3Vyc29yKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBrZXlS
YW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0
b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCks
IGtleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogICAgICAgICBpZiAoIWJhY2tpbmdT
dG9yZUN1cnNvcikgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTEwNiw3ICsxMDYsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgICAgICBiYWNraW5n
U3RvcmVDdXJzb3ItPmNsb3NlKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHdpcmVEYXRhID0gb2Jq
ZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJlY29yZChvYmplY3RTdG9y
ZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSk7CisgICAgU3RyaW5nIHdp
cmVEYXRhID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJlY29y
ZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRh
dGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksICprZXkpOwogICAgIGlmICh3aXJlRGF0YS5p
c051bGwoKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CkBAIC0xNTQsMTIgKzE1
NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9pbmRleEtleXMoaW5kZXhLZXlzKQogICAgIHsg
fQogCi0gICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3Rv
cmUsCisgICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3Rv
cmUsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSURCS2V5
KiBwcmltYXJ5S2V5ID0gMCwgU3RyaW5nKiBlcnJvck1lc3NhZ2UgPSAwKQogICAgIHsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgaWYgKCFhZGRpbmdLZXlBbGxvd2VkKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwKKyAgICAgICAgICAgIGlmICghYWRkaW5nS2V5QWxsb3dl
ZChiYWNraW5nU3RvcmUsIHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtX2luZGV4S2V5cylb
aV0uZ2V0KCksIHByaW1hcnlLZXkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVycm9yTWVzc2Fn
ZSkKICAgICAgICAgICAgICAgICAgICAgKmVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJV
bmFibGUgdG8gYWRkIGtleSB0byBpbmRleCAnJXMnOiBhdCBsZWFzdCBvbmUga2V5IGRvZXMgbm90
IHNhdGlzZnkgdGhlIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIsCkBAIC0xNzAsMTIgKzE3MCwx
MiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgd3Jp
dGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
KSBjb25zdAorICAgIGJvb2wgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpP
YmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdT
dG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCkgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9p
bmRleEtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghYmFja2luZ1N0b3JlLmRl
bGV0ZUluZGV4RGF0YUZvclJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
LCByZWNvcmRJZGVudGlmaWVyKSkKKyAgICAgICAgICAgIGlmICghYmFja2luZ1N0b3JlLmRlbGV0
ZUluZGV4RGF0YUZvclJlY29yZCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwgcmVjb3JkSWRlbnRpZmllcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3Jk
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICoobV9pbmRleEtleXMpW2ldLmdl
dCgpLCByZWNvcmRJZGVudGlmaWVyKSkKKyAgICAgICAgICAgIGlmICghYmFja2luZ1N0b3JlLnB1
dEluZGV4RGF0YUZvclJlY29yZCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwgKihtX2luZGV4S2V5cylbaV0uZ2V0KCksIHJlY29yZElkZW50aWZpZXIpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTE4NSw3ICsxODUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAKLSAgICBib29s
IGFkZGluZ0tleUFsbG93ZWQoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsCisgICAgYm9v
bCBhZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSURCS2V5KiBpbmRleEtl
eSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5KSBjb25zdAogICAgIHsKQEAgLTE5Myw3ICsxOTMs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgUmVmUHRy
PElEQktleT4gZm91bmRQcmltYXJ5S2V5OwotICAgICAgICBib29sIGZvdW5kID0gYmFja2luZ1N0
b3JlLmtleUV4aXN0c0luSW5kZXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
KmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXkpOworICAgICAgICBib29sIGZvdW5kID0gYmFja2lu
Z1N0b3JlLmtleUV4aXN0c0luSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsICppbmRleEtleSwgZm91bmRQcmltYXJ5S2V5KTsKICAgICAgICAgaWYg
KCFmb3VuZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAocHJpbWFyeUtl
eSAmJiBmb3VuZFByaW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtleSkpCkBAIC0yMDYsNyArMjA2
LDcgQEAgcHJpdmF0ZToKIH07CiB9CiAKLXN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPFN0cmluZz4gaW5k
ZXhOYW1lcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdy
aXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlKQorc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVy
cyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBy
aW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8U3RyaW5nPiBpbmRl
eE5hbWVzLCBjb25zdCBWZWN0b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRl
eEtleXM+JiBpbmRleEtleXMsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3Jp
dGVycywgU3RyaW5nKiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKGluZGV4TmFtZXMuc2l6
ZSgpID09IGluZGV4S2V5cy5zaXplKCkpOwogCkBAIC0yMzAsNiArMjMwLDcgQEAgc3RhdGljIGJv
b2wgbWFrZUluZGV4V3JpdGVycyhJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjwKIAogICAgICAgICBPd25QdHI8SW5kZXhXcml0ZXI+IGluZGV4V3JpdGVy
KGFkb3B0UHRyKG5ldyBJbmRleFdyaXRlcihpbmRleC0+bWV0YWRhdGEoKSwga2V5cykpKTsKICAg
ICAgICAgaWYgKCFpbmRleFdyaXRlci0+dmVyaWZ5SW5kZXhLZXlzKCpvYmplY3RTdG9yZS0+YmFj
a2luZ1N0b3JlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+aWQoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LT5pZCgpLCBw
cmltYXJ5S2V5LmdldCgpLCBlcnJvck1lc3NhZ2UpKSB7CkBAIC0yNDIsMjEgKzI0MywyMiBAQCBz
dGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJw
UHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3Rv
cjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5
cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIpCiB7CiAgICAgSURCX1RSQUNF
KCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMiKTsKICAgICBSZWZQdHI8
SURCS2V5PiBwcmltYXJ5S2V5ID0gcHJwUHJpbWFyeUtleTsKKyAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Ojpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBjb3Vs
ZCBiZSBhc3luY2hyb25vdXMsIGJ1dCB3ZSBuZWVkIHRvIGV2YWx1YXRlIGlmIGl0J3Mgd29ydGgg
dGhlIGV4dHJhIGNvbXBsZXhpdHkuCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gYmFja2luZ1N0b3JlKCkt
PmNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUo
KS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZShkYXRhYmFzZUlkKCksIGlkKCksICpwcmltYXJ5S2V5
LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgeworICAgIGlmICghYmFja2luZ1N0b3JlKCktPmtl
eUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIGRhdGFiYXNlSWQoKSwgaWQoKSwgKnByaW1hcnlLZXksIHJlY29yZElkZW50aWZpZXIuZ2V0
KCkpKSB7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModGhpcywg
cHJpbWFyeUtleSwgZmFsc2UsIGluZGV4TmFtZXMsIGluZGV4S2V5cywgJmluZGV4V3JpdGVycywg
JmVycm9yTWVzc2FnZSkpIHsKKyAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24s
IHRoaXMsIHByaW1hcnlLZXksIGZhbHNlLCBpbmRleE5hbWVzLCBpbmRleEtleXMsICZpbmRleFdy
aXRlcnMsICZlcnJvck1lc3NhZ2UpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRlYWwg
d2l0aCBlcnJvck1lc3NhZ2UgaGVyZS4gbWFrZUluZGV4V3JpdGVycyBvbmx5IGZhaWxzIG9uIHVu
aXF1ZW5lc3MgY29uc3RyYWludCBlcnJvcnMuCiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgp
OwogICAgICAgICByZXR1cm47CkBAIC0yNjYsNiArMjY4LDcgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlL
ZXksIGMKICAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ld
LmdldCgpOwogICAgICAgICBpZiAoIWluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJ
ZGVudGlmaWVyLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqYmFja2luZ1N0b3JlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZUlkKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5kZXhlcy5nZXQoaW5kZXhXcml0ZXItPmluZGV4TmFtZSgp
KS0+aWQoKSkpIHsKQEAgLTI5OCw5ICszMDEsMTAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwK
ICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiB9CiAKLXZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJL
ZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9u
LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxW
ZWN0b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cykKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0
TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9uLCBQYXNzT3duUHRy
PFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhL
ZXlzPiA+IHBvcEluZGV4S2V5cykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dEludGVybmFsIik7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CiAgICAgQVNTRVJUKHRyYW5zYWN0
aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7CiAgICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKICAgICBSZWZQdHI8SURCS2V5
PiBrZXkgPSBwcnBLZXk7CkBAIC0zMTEsNyArMzE1LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjwKICAgICBib29sIGtleVdhc0dlbmVyYXRlZCA9IGZhbHNlOwogCiAgICAgaWYgKHB1dE1vZGUg
IT0gQ3Vyc29yVXBkYXRlICYmIGF1dG9JbmNyZW1lbnQgJiYgIWtleSkgewotICAgICAgICBSZWZQ
dHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdlbmVyYXRlS2V5KCk7CisgICAg
ICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBvYmplY3RTdG9yZS0+Z2VuZXJhdGVLZXko
dHJhbnNhY3Rpb24pOwogICAgICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOwogICAgICAgICBp
ZiAoIWF1dG9JbmNLZXktPmlzVmFsaWQoKSkgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9F
UlIsICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7CkBAIC0zMjMsMjEg
KzMyNywyMSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgIEFTU0VSVChrZXkgJiYga2V5
LT5pc1ZhbGlkKCkpOwogCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdT
dG9yZSgpLT5jcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOwotICAgIGlmIChwdXRNb2Rl
ID09IEFkZE9ubHkgJiYgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9i
amVjdFN0b3JlKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCAq
a2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgeworICAgIGlmIChwdXRNb2RlID09IEFkZE9u
bHkgJiYgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3Jl
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0
YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQo
KSkpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlz
dHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBTdHJpbmcg
ZXJyb3JNZXNzYWdlOwotICAgIGlmICghbWFrZUluZGV4V3JpdGVycyhvYmplY3RTdG9yZS5nZXQo
KSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsICppbmRleE5hbWVzLCAqaW5kZXhLZXlzLCAmaW5kZXhX
cml0ZXJzLCAmZXJyb3JNZXNzYWdlKSkgeworICAgIGlmICghbWFrZUluZGV4V3JpdGVycyh0cmFu
c2FjdGlvbiwgb2JqZWN0U3RvcmUuZ2V0KCksIGtleSwga2V5V2FzR2VuZXJhdGVkLCAqaW5kZXhO
YW1lcywgKmluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKICAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsIGVycm9yTWVzc2FnZSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgLy8gQmVmb3JlIHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRh
dGlvbi4gIEFmdGVyIHRoaXMgcG9pbnQsIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNl
IG9mIGVycm9yLgogCi0gICAgaWYgKCFvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPnB1dE9i
amVjdFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5p
ZCgpLCAqa2V5LCB2YWx1ZS0+dG9XaXJlU3RyaW5nKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkp
KSB7CisgICAgaWYgKCFvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPnB1dE9iamVjdFN0b3Jl
UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9y
ZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgdmFsdWUtPnRvV2lyZVN0
cmluZygpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewogICAgICAgICBjYWxsYmFja3MtPm9u
RXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktO
T1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CiAgICAg
ICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CkBAIC0zNDcsNiArMzUx
LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4
V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwogICAgICAgICBpZiAoIWluZGV4V3JpdGVy
LT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPm1faWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZ2V0KGluZGV4
V3JpdGVyLT5pbmRleE5hbWUoKSktPmlkKCkpKSB7CkBAIC0zNTgsMzIgKzM2MywzMyBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPAogICAgIH0KIAogICAgIGlmIChhdXRvSW5jcmVtZW50ICYmIHB1
dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlw
ZSkKLSAgICAgICAgb2JqZWN0U3RvcmUtPnVwZGF0ZUtleUdlbmVyYXRvcihrZXkuZ2V0KCksICFr
ZXlXYXNHZW5lcmF0ZWQpOworICAgICAgICBvYmplY3RTdG9yZS0+dXBkYXRlS2V5R2VuZXJhdG9y
KHRyYW5zYWN0aW9uLCBrZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOwogCiAgICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5
UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxi
YWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpkZWxldGUiKTsKIAotICAgIEFTU0VSVChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpm
cm9tKHRyYW5zYWN0aW9uKS0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwor
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOworICAgIEFTU0VSVCh0
cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwogCiAgICAg
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKICAg
ICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7CiAgICAgUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogCi0gICAgaWYgKCFJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uKS0+c2NoZWR1bGVUYXNrKAot
ICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGVJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGtleVJhbmdlLCBjYWxsYmFja3MpKSkKKyAg
ICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisgICAgICAgICAgICBjcmVhdGVDYWxs
YmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsLCBvYmpl
Y3RTdG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVs
ZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgi
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwiKTsKICAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50
aWZpZXI7CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9y
ZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vy
c29yKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBrZXlSYW5n
ZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpD
dXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+
b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwga2V5UmFu
Z2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CiAgICAgaWYgKGJhY2tpbmdTdG9yZUN1cnNvcikg
ewogCiAgICAgICAgIGRvIHsKQEAgLTM5MywxMSArMzk5LDExIEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQCiAgICAgICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5oYXNWYWxpZElkKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVu
IGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgogCi0gICAg
ICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5k
ZWxldGVJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0
U3RvcmUtPmlkKCksIGl0LT5zZWNvbmQtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUo
KS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwg
aXQtPnNlY29uZC0+aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVPYmplY3RTdG9yZVJl
Y29yZChvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgcmVjb3Jk
SWRlbnRpZmllci5nZXQoKSk7CisgICAgICAgICAgICBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3Jl
KCktPmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwg
cmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CiAKICAgICAgICAgfSB3aGlsZSAoYmFja2luZ1N0b3Jl
Q3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKIApAQCAtNDA3LDIzICs0MTMsMjQgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlAKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcihQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0Uo
IklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFyIik7CiAKLSAgICBBU1NFUlQoSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbiktPm1vZGUoKSAhPSBJREJUcmFu
c2FjdGlvbjo6UkVBRF9PTkxZKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0
aW9uUHRyKTsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlv
bjo6UkVBRF9PTkxZKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSA9IHRoaXM7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0g
cHJwQ2FsbGJhY2tzOwogCi0gICAgaWYgKCFJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9t
KHRyYW5zYWN0aW9uKS0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tU
YXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhckludGVybmFsLCBvYmplY3RTdG9y
ZSwgY2FsbGJhY2tzKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAorICAg
ICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpj
bGVhckludGVybmFsLCBvYmplY3RTdG9yZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQogICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7
CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKLSAgICBvYmplY3RTdG9yZS0+YmFj
a2luZ1N0b3JlKCktPmNsZWFyT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwg
b2JqZWN0U3RvcmUtPmlkKCkpOworICAgIG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y2xl
YXJPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2Jq
ZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCkpOwogICAgIGNhbGxiYWNr
cy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7CiB9
CiAKQEAgLTQ1Miw3ICs0NTksNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFj
ZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoY29ucwogdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAgIGludDY0X3QgaWQ7
Ci0gICAgaWYgKCFvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmNyZWF0ZUluZGV4KG9iamVj
dFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+bmFtZSgpLCBp
bmRleC0+a2V5UGF0aCgpLCBpbmRleC0+dW5pcXVlKCksIGluZGV4LT5tdWx0aUVudHJ5KCksIGlk
KSkgeworICAgIGlmICghb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbmRleCh0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFi
YXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5uYW1lKCksIGluZGV4LT5rZXlQYXRo
KCksIGluZGV4LT51bmlxdWUoKSwgaW5kZXgtPm11bHRpRW50cnkoKSwgaWQpKSB7CiAgICAgICAg
IHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDkyLDcg
KzQ5OSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhCiAKIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKLSAgICBvYmplY3RTdG9yZS0+YmFja2luZ1N0
b3JlKCktPmRlbGV0ZUluZGV4KG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3Jl
LT5pZCgpLCBpbmRleC0+aWQoKSk7CisgICAgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5k
ZWxldGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0
U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5pZCgpKTsKICAg
ICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiB9CiAKQEAgLTUxMyw3ICs1
MjAsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzcwogewogICAgIElEQl9UUkFDRSgiSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsIik7CiAKLSAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3Jl
LT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG9iamVjdFN0b3JlLT5kYXRh
YmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAg
ICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9i
amVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgp
LCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CiAgICAgLy8gVGhl
IGZyb250ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMgdGhlIHRyYW5zYWN0
aW9uCiAgICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBUaGlzIGNhbid0IGhh
cHBlbiBhbnkgZWFybGllcgogICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBzd2l0Y2gg
dG8gZWFybHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCkBAIC01MjksMTkgKzUzNiwyMCBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzcwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vy
c29yLT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7CiB9CiAK
LXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQor
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudChQYXNzUmVmUHRyPElEQktleVJh
bmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudCIpOwot
ICAgIGlmICghSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbiktPnNj
aGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxiYWNrcykpKQor
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOworICAgIGlmICghdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygm
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNh
bGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNv
dW50SW50ZXJuYWwiKTsKICAgICB1aW50MzJfdCBjb3VudCA9IDA7Ci0gICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+YmFj
a2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihvYmplY3RTdG9yZS0+ZGF0YWJh
c2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7
CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3Ig
PSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUtleUN1cnNvcih0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFi
YXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIHJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQp
OwogICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtNTg2LDIwICs1OTQsMjAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHQK
ICAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnNldChpbmRleFB0ci0+bmFtZSgpLCBpbmRleFB0
cik7CiB9CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpn
ZW5lcmF0ZUtleSgpCitQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Z2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbikKIHsKICAgICBjb25zdCBpbnQ2NF90IG1heEdlbmVyYXRvclZhbHVlID0gOTAwNzE5
OTI1NDc0MDk5MkxMOyAvLyBNYXhpbXVtIGludGVnZXIgc3RvcmFibGUgYXMgRUNNQVNjcmlwdCBu
dW1iZXIuCi0gICAgaW50NjRfdCBjdXJyZW50TnVtYmVyID0gYmFja2luZ1N0b3JlKCktPmdldEtl
eUdlbmVyYXRvckN1cnJlbnROdW1iZXIoZGF0YWJhc2VJZCgpLCBpZCgpKTsKKyAgICBpbnQ2NF90
IGN1cnJlbnROdW1iZXIgPSBiYWNraW5nU3RvcmUoKS0+Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51
bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgp
LCBpZCgpKTsKICAgICBpZiAoY3VycmVudE51bWJlciA8IDAgfHwgY3VycmVudE51bWJlciA+IG1h
eEdlbmVyYXRvclZhbHVlKQogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJbnZhbGlkKCk7
CiAKICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIoY3VycmVudE51bWJlcik7CiB9CiAK
LXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKGNvbnN0
IElEQktleSoga2V5LCBib29sIGNoZWNrQ3VycmVudCkKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24sIGNvbnN0IElEQktleSoga2V5LCBib29sIGNoZWNrQ3VycmVu
dCkKIHsKICAgICBBU1NFUlQoa2V5ICYmIGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlw
ZSk7Ci0gICAgYmFja2luZ1N0b3JlKCktPm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51
bWJlcihkYXRhYmFzZUlkKCksIGlkKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KGZsb29yKGtleS0+
bnVtYmVyKCkpKSArIDEsIGNoZWNrQ3VycmVudCk7CisgICAgYmFja2luZ1N0b3JlKCktPm1heWJl
VXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2FzdDxpbnQ2NF90Pihm
bG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOwogfQogCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuaAppbmRleCAyODExY2ExYmFkNzZiNjE4OTJkZjI0MmE5ZTg2Yjk2OTdmZDIy
NTBhLi5iZDk1YmJlYmUyZjdlMmEyYmQyOTMxMjBiZmY4MTI3ZTBjYmIyZmU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5oCkBAIC0xMDAsMTggKzEwMCwxOCBAQCBwcml2YXRlOgogICAgIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7CiAK
ICAgICB2b2lkIGxvYWRJbmRleGVzKCk7Ci0gICAgUGFzc1JlZlB0cjxJREJLZXk+IGdlbmVyYXRl
S2V5KCk7Ci0gICAgdm9pZCB1cGRhdGVLZXlHZW5lcmF0b3IoY29uc3QgSURCS2V5KiwgYm9vbCBj
aGVja0N1cnJlbnQpOworICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtleShQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICB2b2lkIHVwZGF0ZUtleUdlbmVy
YXRvcihQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBjb25zdCBJREJLZXkq
LCBib29sIGNoZWNrQ3VycmVudCk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIHB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0
cjxWZWN0b3I8SW5kZXhLZXlzPiA+KTsKLSAgICBzdGF0aWMgdm9pZCBkZWxldGVJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7
CisgICAgc3RhdGljIHZvaWQgZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIHNldEluZGV4ZXNSZWFkeUludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0gICAgc3RhdGljIHZvaWQgY2xlYXJJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICBzdGF0aWMgdm9p
ZCBjbGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUlu
ZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0
ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIG9w
ZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1cnNv
cjo6RGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4pOwotICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHN0YXRpYyB2b2lk
IGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwog
CiAgICAgLy8gVGhlc2UgYXJlIHVzZWQgYXMgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBhYm9ydCB0
YXNrcy4KICAgICBzdGF0aWMgdm9pZCByZW1vdmVJbmRleEZyb21NYXAoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCmluZGV4IDI0
YzRmZWUwNDE1YmQ1YmI1MTJhMjMyMmNhOGJmNTc1ZWI1MTczNzYuLmQ2ZTNjODhhNTc5ZDU4NDcy
MzFiYWE5ZDBmNTZlYWQ0NmE2NmEzMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKQEAgLTY1
LDYgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUGVuZGluZ0V2ZW50cyhpbnQpOwogICAg
IHZvaWQgYWRkUHJlZW1wdGl2ZUV2ZW50KCkgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKys7
IH0KICAgICB2b2lkIGRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgeyBtX3BlbmRpbmdQcmVl
bXB0aXZlRXZlbnRzLS07IEFTU0VSVChtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID49IDApOyB9
CisgICAgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2ln
bmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKaW5kZXggZTBhNWE4
ZmE1ZThkZDYzZjNhY2M4MDRiY2EwZTMzOWI0ZDE5NTlhOC4uNDU3YWUzNzQ1ZjQyYzZlODRkMjll
NzIyNzFmMTk1NjhmMzJjMDE3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKQEAgLTM1LDM4ICszNSwzOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFt
ZXMpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRh
KGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5k
SW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90
JiByb3dJZCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCB1cGRh
dGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lv
bikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURC
RGF0YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0X3QgdmVyc2lvbikgT1ZFUlJJ
REUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VN
ZXRhRGF0YShUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lv
bikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURC
RGF0YWJhc2VJbnRWZXJzaW9uKFRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCB2
ZXJzaW9uKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBkZWxl
dGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwg
VmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZl
Y3RvcjxJREJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9J
bmNyZW1lbnRGbGFncykgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVj
dFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJL
ZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2Jq
ZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVk
T2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRp
ZmllcigpIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyPigpOyB9CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jikg
T1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0
U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFy
T2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9W
RVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IGdldEtl
eUdlbmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGJvb2wgbWF5YmVV
cGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpIE9W
RVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2Jq
ZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlm
aWVyKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGdldE9i
amVjdFN0b3JlUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpIE9WRVJSSURFIHsgcmV0dXJuIFN0cmluZygp
OyB9CisgICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKFRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJS
SURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUo
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkg
T1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKFRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsgfQorICAgIHZpcnR1
YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKFRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgcmV0dXJu
IDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVt
YmVyKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkgT1ZFUlJJREUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJLZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRp
ZmllcikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBmb3JF
YWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKSBPVkVSUklERSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoVHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3Rv
cmVSZWNvcmRDYWxsYmFjayYpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFt
ZXMsIFZlY3RvcjxJREJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3Vu
ZFVuaXF1ZUZsYWdzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kTXVsdGlFbnRyeUZsYWdzKSBPVkVSUklE
RSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0
aCYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGlu
ZGV4SWQpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JS
ZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
KikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5k
ZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9W
RVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4g
Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpIE9WRVJSSURFIHsgcmV0dXJu
IFBhc3NSZWZQdHI8SURCS2V5PigpOyB9Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5k
ZXgoaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFy
eUtleSkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRl
SW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29s
IGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50NjRfdCYgaW5kZXhJZCkgT1ZFUlJJREUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoVHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVj
b3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoVHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXkmKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPElEQktl
eT4oKTsgfQorICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KFRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtl
eSkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
dXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlv
bikgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxDdXJzb3I+KCk7IH0KLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29y
OjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBh
c3NSZWZQdHI8Q3Vyc29yPigpOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Bl
bkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24p
IE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKFRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJh
bmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8
Q3Vyc29yPigpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0
b3JlQ3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJS
SURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1Jl
ZlB0cjxDdXJzb3I+KCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5k
ZXhDdXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6
RGlyZWN0aW9uKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPEN1cnNvcj4oKTsgfQogCiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpIE9W
RVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+KCk7IH0KIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164594</attachid>
            <date>2012-09-18 11:42:28 -0700</date>
            <delta_ts>2012-09-19 16:03:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96663-20120918114155.patch</filename>
            <type>text/plain</type>
            <size>110413</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4ODQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTVhNjA0ZjFlODhjOGFi
NTE0ZTJlYTFlYzEwZDRlZjBmNTU5ZDdhNi4uNTFjOGIyODk5NWU2ZTRjYTliN2RlMTM3MzE4MmMy
MjFiNDJjYTFhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDEyLTA5LTEzICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBSZW1v
dmUgImN1cnJlbnQgdHJhbnNhY3Rpb24iIGNvbmNlcHQgZnJvbSBiYWNraW5nIHN0b3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjY2MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluZGV4ZWREQiBzaG91
bGQgYWxsb3cgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIHRvIHJ1biBpbiBwYXJhbGxlbCB3aXRoaW4g
YW5kCisgICAgICAgIGFjcm9zcyBkYXRhYmFzZXMgd2l0aGluIGFuIG9yaWdpbi4gQXMgYW4gaW5p
dGlhbCBzdGVwIHRvIGVuYWJsaW5nIHRoaXMsIHRoZQorICAgICAgICBiYWNraW5nIHN0b3JlIHNo
b3VsZCBub3QgaG9sZCBhICJjdXJyZW50IHRyYW5zYWN0aW9uIiAtIGluc3RlYWQsIG9wZXJhdGlv
bnMKKyAgICAgICAgc2hvdWxkIGJlIGRvbmUgcmVsYXRpdmUgdG8gYSB0cmFuc2FjdGlvbiBtYW5h
Z2VkIGJ5IHRoZSBkYXRhYmFzZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBubyBmdW5jdGlv
bmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3Rv
cmUuaDoKKyAgICAgICAgKElEQkJhY2tpbmdTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlSW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lv
bkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNl
dEludFZlcnNpb25JbnRlcm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbCk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRLZXlJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5k
ZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJREJJbmRleEJhY2tlbmRJbXBsKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRh
dGVJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVs
REJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2Jq
ZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0
b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVs
REJCYWNraW5nU3RvcmU6OmZvckVhY2hPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXhEYXRhRm9y
UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmZpbmRL
ZXlJbkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Omdl
dFByaW1hcnlLZXlWaWFJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
bjo6VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb246OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJvbGxiYWNrKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJMZXZl
bERCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb24pOgorICAgICAgICAoVHJhbnNhY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OmxldmVsREJUcmFuc2FjdGlvbkZyb20pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6bWFrZUluZGV4V3JpdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleEludGVy
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0
ZUluZGV4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6b3BlbkN1cnNvckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJhdGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKwogMjAxMi0wOS0xNyAgVml2ZWsgR2FsYXRhZ2UgIDx2
aXZla2dhbGF0YWdlQGdtYWlsLmNvbT4KIAogICAgICAgICBbR3RrXSBSZW1vdmUgdGhlIHVudXNl
ZCB2YXJpYWJsZSB3YXJuaW5nIGluIEdhbWVwYWRzR3RrLmNwcCB1c2luZyBBU1NFUlRfVU5VU0VE
IG1hY3JvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDg1MWU0Mzk3NjI5OTllYzM4NWE2
ZDY3MjNlNGUwODdkZDkxNGIzNzYuLjcyM2FhOTBjY2E4MGJlYWViMWNhOTJlNDRkMWRlZmM2OGJj
YzBmMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTIt
MDktMTMgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRl
eGVkREI6IFJlbW92ZSAiY3VycmVudCB0cmFuc2FjdGlvbiIgY29uY2VwdCBmcm9tIGJhY2tpbmcg
c3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2
NjYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBk
YXRlIGZha2UgY2xhc3Mgd2l0aCBuZXcgbWV0aG9kIHNpZ25hdHVyZXMuCisKKyAgICAgICAgKiB0
ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmg6CisKIDIwMTItMDktMTcgIEJyaWFuIEFuZGVyc29u
ICA8YnJpYW5kZXJzb25AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQWRkIHJl
bmRlcmluZyBjb21taXQgc3RhdGlzdGljcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAppbmRleCBmMDYwZTcyZWY0YzZmZDQ3MjU0ZWM3
ZjE1NTg4MDkwMzk1YTY1OWRlLi4xMWI1MTFmYzM5MGZlNjA1ODNmMWU5YWI5NGYwOGU0MWU3YjU1
NzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuaApAQCAtNDQsMTggKzQ0LDIwIEBAIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiBj
bGFzcyBJREJCYWNraW5nU3RvcmUgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJCYWNraW5nU3RvcmU+
IHsKIHB1YmxpYzoKKyAgICBjbGFzcyBUcmFuc2FjdGlvbjsKKwogICAgIHZpcnR1YWwgfklEQkJh
Y2tpbmdTdG9yZSgpIHt9OwogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVj
dG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0
YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRTdHJpbmdWZXJz
aW9uLCBpbnQ2NF90JiBmb3VuZEludFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpID0gMDsKICAg
ICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2
NF90JiByb3dJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZl
cnNpb24oaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uKSA9IDA7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50
VmVyc2lvbihUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikg
PSAwOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKFRyYW5zYWN0
aW9uKiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKSA9IDA7CiAgICAgdmly
dHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwogCiAgICAg
dmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3Rvcjxp
bnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8SURC
S2V5UGF0aD4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50
RmxhZ3MpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBk
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1
dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVj
dFN0b3JlSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoVHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOwog
CiAgICAgY2xhc3MgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyIDogcHVibGljIFJlZkNvdW50
ZWQ8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiB7CiAgICAgcHVibGljOgpAQCAtNjQsMjgg
KzY2LDI4IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxPYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXI+IGNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCkgPSAw
OwogCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9i
amVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJP
YmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIs
IGJvb2wgY2hlY2tDdXJyZW50KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2Jq
ZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlm
aWVyKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0U3RvcmVSZWNvcmQoVHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIqKSA9IDA7CisgICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRv
ckN1cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJvb2wgY2hlY2tDdXJyZW50KSA9IDA7
CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jiwg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpID0gMDsK
IAogICAgIGNsYXNzIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2sgewogICAgIHB1YmxpYzoKICAg
ICAgICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFjayhjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIqLCBjb25zdCBTdHJpbmcmIHZhbHVlKSA9IDA7CiAgICAgICAgICB2aXJ0dWFsIH5PYmpl
Y3RTdG9yZVJlY29yZENhbGxiYWNrKCkge307CiAgICAgfTsKLSAgICB2aXJ0dWFsIGJvb2wgZm9y
RWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJikgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpID0g
MDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3Ry
aW5nPiYgZm91bmROYW1lcywgVmVjdG9yPElEQktleVBhdGg+JiBmb3VuZEtleVBhdGhzLCBWZWN0
b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3MsIFZlY3Rvcjxib29sPiYgZm91bmRNdWx0aUVudHJ5
RmxhZ3MpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURC
S2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRl
eElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IE9i
amVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciop
ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5k
ZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbklu
ZGV4KGludDY0X3QgZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1h
cnlLZXkpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnks
IGludDY0X3QmIGluZGV4SWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoVHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkKSA9IDA7CisgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29y
ZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVj
b3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikg
PSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRl
eChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
a2V5RXhpc3RzSW5JbmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VpZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXks
IFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpID0gMDsKIAogICAgIGNsYXNzIEN1cnNv
ciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1cnNvcj4gewogICAgIHB1YmxpYzoKQEAgLTEwNSwxMCAr
MTA3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Q3Vyc29yKCkgeyB9OwogICAgIH07
CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3Io
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJh
bmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rp
b24pID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJz
b3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURC
Q3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBv
cGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRp
cmVjdGlvbikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtl
eUN1cnNvcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpE
aXJlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhD
dXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGly
ZWN0aW9uKSA9IDA7CiAKICAgICBjbGFzcyBUcmFuc2FjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVk
PFRyYW5zYWN0aW9uPiB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA3
M2U5YWFhNmY5YjczYTIzYTgwZDEwMWFhOGU3ZjM0MGEyYzYxOTEwLi42MDMxM2Y2NTg5ZjUwYTM3
YWVhMTMwOWQ4NWNkMzY0NGQwNjk4NDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTkw
LDExICsxOTAsMTEgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFMKICAgICByZXR1cm4gb2JqZWN0
U3RvcmUucmVsZWFzZSgpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVh
dGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZDsKIAot
ICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZShkYXRh
YmFzZS0+aWQoKSwgb2JqZWN0U3RvcmUtPm5hbWUoKSwgb2JqZWN0U3RvcmUtPmtleVBhdGgoKSwg
b2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKSwgb2JqZWN0U3RvcmVJZCkpIHsKKyAgICBpZiAo
IWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24t
PmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZS0+
bmFtZSgpLCBvYmplY3RTdG9yZS0+a2V5UGF0aCgpLCBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVu
dCgpLCBvYmplY3RTdG9yZUlkKSkgewogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyOCw3ICsyMjgsNyBAQCB2b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJh
bnNhY3RpbwogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3Jl
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24pCiB7Ci0gICAgZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RT
dG9yZShkYXRhYmFzZS0+aWQoKSwgb2JqZWN0U3RvcmUtPmlkKCkpOworICAgIGRhdGFiYXNlLT5t
X2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZS0+aWQoKSk7CiAgICAg
dHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCkBAIC0yODQsNyArMjg0
LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWYKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKICAgICBpbnQ2NF90IGRh
dGFiYXNlSWQgPSBkYXRhYmFzZS0+aWQoKTsKICAgICBkYXRhYmFzZS0+bV92ZXJzaW9uID0gdmVy
c2lvbjsKLSAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+dXBkYXRlSURCRGF0YWJh
c2VNZXRhRGF0YShkYXRhYmFzZUlkLCBkYXRhYmFzZS0+bV92ZXJzaW9uKSkgeworICAgIGlmICgh
ZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT51cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKHRyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBkYXRhYmFzZS0+
bV92ZXJzaW9uKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRp
bmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9y
dCgpOwogICAgICAgICByZXR1cm47CkBAIC0yOTIsMTMgKzI5MiwxMyBAQCB2b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZgogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPih0cmFuc2FjdGlvbikpOwogfQogCi12b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OnNldEludFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRf
dCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnNldEludFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50
NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAgIGludDY0
X3QgZGF0YWJhc2VJZCA9IGRhdGFiYXNlLT5pZCgpOwogICAgIGludDY0X3Qgb2xkVmVyc2lvbiA9
IGRhdGFiYXNlLT5tX2ludFZlcnNpb247CiAgICAgQVNTRVJUKHZlcnNpb24gPiBvbGRWZXJzaW9u
KTsKICAgICBkYXRhYmFzZS0+bV9pbnRWZXJzaW9uID0gdmVyc2lvbjsKLSAgICBpZiAoIWRhdGFi
YXNlLT5tX2JhY2tpbmdTdG9yZS0+dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKGRhdGFiYXNl
SWQsIGRhdGFiYXNlLT5tX2ludFZlcnNpb24pKSB7CisgICAgaWYgKCFkYXRhYmFzZS0+bV9iYWNr
aW5nU3RvcmUtPnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbih0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgZGF0YWJhc2UtPm1faW50VmVyc2lvbikp
IHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8g
c3RhYmxlIHN0b3JhZ2UuIikpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCmluZGV4IDIyY2NjNDMyMjBiNTA0ZmU3MDY4NTY3
YjU5YTQ3NjI1NWVlYTg1NGQuLjEzMDJjOWQ3ZWRjZmY0YTYxNjdiZDg3ZDBiYjhhNDZiYzhlNTFh
OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+KTsKICAgICBzdGF0aWMgdm9pZCBkZWxldGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+KTsKICAgICBzdGF0aWMgdm9pZCBzZXRWZXJzaW9uSW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4s
IGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBzZXRJbnRW
ZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4sIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHN0
YXRpYyB2b2lkIHNldEludFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4pOwogCiAgICAgLy8gVGhlc2UgYXJlIHVzZWQgYXMgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBh
Ym9ydCB0YXNrcy4KICAgICBzdGF0aWMgdm9pZCByZW1vdmVPYmplY3RTdG9yZUZyb21NYXAoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApp
bmRleCAzOGNmY2VjOTdmYjI3MDEzZGI3MTA0ZGY3NzYyMGFiMGQ2MjYwNWYzLi5hMmI4NWI1ZTVj
NDcxNzE0YWZkMjBiMjkxNjgzZjg1MDJlNWJkYmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtODMs
MTAgKzgzLDEwIEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyCiAKICAgICBzd2l0Y2ggKGN1cnNv
clR5cGUpIHsKICAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vy
c29yOgotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCkt
Pm9wZW5JbmRleEtleUN1cnNvcihpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RT
dG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsK
KyAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVu
SW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGlu
ZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5k
ZXgtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4Q3Vyc29yOgotICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNvcihp
bmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGlu
ZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgYmFja2luZ1N0b3Jl
Q3Vyc29yID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhDdXJzb3IodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4
LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBk
aXJlY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2U6Ok9iamVjdFN0b3JlQ3Vyc29yOgogICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6SW52YWxpZEN1cnNvclR5cGU6CkBAIC0xMjcsMTIgKzEyNywxMiBAQCB2b2lkIElEQklu
ZGV4QmFja2VuZEltcGw6Om9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJw
S2V5UmFuZ2UsIHVucwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FD
VElPTl9JTkFDVElWRV9FUlI7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1w
bDo6Y291bnRJbnRlcm5hbCIpOwogICAgIHVpbnQzMl90IGNvdW50ID0gMDsKIAotICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPmJh
Y2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3IoaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5k
ZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCks
IElEQkN1cnNvcjo6TkVYVCk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBi
YWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1
cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFi
YXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwg
cmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJz
b3IpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpudW1iZXJWYWx1ZShjb3VudCkpOwogICAgICAgICByZXR1cm47CkBAIC0xNDUsMTUgKzE0NSwx
NiBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSQogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsKIH0KIAotdm9pZCBJREJJ
bmRleEJhY2tlbmRJbXBsOjpjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIElEQkluZGV4QmFj
a2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklE
QkluZGV4QmFja2VuZEltcGw6OmNvdW50Iik7Ci0gICAgaWYgKCFJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uKS0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZjb3VudEludGVybmFsLCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzKSkp
CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CisgICAgaWYgKCF0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNr
KCZjb3VudEludGVybmFsLCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQog
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9F
UlI7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5h
bCIpOwogCkBAIC0xNjIsNyArMTYzLDcgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmQKICAgICBp
ZiAoa2V5UmFuZ2UtPmlzT25seUtleSgpKQogICAgICAgICBrZXkgPSBrZXlSYW5nZS0+bG93ZXIo
KTsKICAgICBlbHNlIHsKLSAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBi
YWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNv
cihpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCks
IGluZGV4LT5pZCgpLCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICAgICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRl
eC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3Rv
cmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwga2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6
TkVYVCk7CiAKICAgICAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKICAgICAgICAgICAg
IGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFs
dWUoKSk7CkBAIC0xNzIsOSArMTczLDkgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmQKICAgICAg
ICAgYmFja2luZ1N0b3JlQ3Vyc29yLT5jbG9zZSgpOwogICAgIH0KIAotICAgIFJlZlB0cjxJREJL
ZXk+IHByaW1hcnlLZXkgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlWaWFJ
bmRleChpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlk
KCksIGluZGV4LT5pZCgpLCAqa2V5KTsKKyAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0g
aW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgodHJhbnNhY3Rpb24t
PmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5t
X29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksICprZXkpOwogCi0gICAgU3Ry
aW5nIHZhbHVlID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJlY29yZChp
bmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksICpw
cmltYXJ5S2V5KTsKKyAgICBTdHJpbmcgdmFsdWUgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdl
dE9iamVjdFN0b3JlUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCks
ICpwcmltYXJ5S2V5KTsKIAogICAgIGlmICh2YWx1ZS5pc051bGwoKSkgewogICAgICAgICBjYWxs
YmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkp
OwpAQCAtMTg4LDE5ICsxODksMTkgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmQKICAgICBjYWxs
YmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHZh
bHVlKSk7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5SW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEtl
eUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSURCSW5k
ZXhCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwiKTsKIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0KLSAgICAgICAgICAgIGluZGV4LT5iYWNr
aW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4
LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIGtleVJhbmdlLmdldCgp
LCBJREJDdXJzb3I6Ok5FWFQpOworICAgICAgICAgICAgaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5v
cGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwg
aW5kZXgtPmlkKCksIGtleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogCiAgICAgaWYg
KCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3Rh
dGljX2Nhc3Q8SURCS2V5Kj4oMCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVm
UHRyPElEQktleT4ga2V5UmVzdWx0ID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRQcmltYXJ5
S2V5VmlhSW5kZXgoaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNr
ZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgKmJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCkpOworICAg
IFJlZlB0cjxJREJLZXk+IGtleVJlc3VsdCA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UHJp
bWFyeUtleVZpYUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBp
bmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGlu
ZGV4LT5pZCgpLCAqYmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKSk7CiAgICAgaWYgKCFrZXlSZXN1
bHQpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8SURCS2V5Kj4o
MCkpOwogICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7CkBAIC0yMTEsMjUgKzIx
MiwyNiBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEtleUludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZQogfQogCiAKLXZvaWQgSURCSW5kZXhCYWNr
ZW5kSW1wbDo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgSURCSW5kZXhCYWNr
ZW5kSW1wbDo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJB
Q0UoIklEQkluZGV4QmFja2VuZEltcGw6OmdldCIpOwogICAgIFJlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiBpbmRleCA9IHRoaXM7CiAgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9
IHBycEtleVJhbmdlOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENh
bGxiYWNrczsKLSAgICBpZiAoIUlEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNh
Y3Rpb24pLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmdl
dEludGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpKQorICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVk
dWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmdldEludGVybmFsLCBpbmRleCwga2V5UmFuZ2Us
IGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lkIElEQkluZGV4QmFja2Vu
ZEltcGw6OmdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIElEQkluZGV4QmFj
a2VuZEltcGw6OmdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURC
X1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRLZXkiKTsKICAgICBSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0aGlzOwogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBwcnBLZXlSYW5nZTsKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mg
PSBwcnBDYWxsYmFja3M7Ci0gICAgaWYgKCFJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9t
KHRyYW5zYWN0aW9uKS0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tU
YXNrKCZnZXRLZXlJbnRlcm5hbCwgaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3MpKSkKKyAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKKyAgICBpZiAoIXRyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmdldEtl
eUludGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJS
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmgKaW5kZXggZTExNzQ1NzlkNjE3M2FjZTU4NDA3ZGMyYmY1MzM5ZjJi
ZjM5YjQwYy4uMTczYzMyZDA4ZmYxNDMzYjk5OTBlNTA1MjI1MGNjODljYTZkYThiOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEltcGwuaApAQCAtNzksOSArNzksOSBAQCBwcml2YXRlOgogICAgIElEQkluZGV4QmFja2VuZElt
cGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1ZSwg
Ym9vbCBtdWx0aUVudHJ5KTsKIAogICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9p
ZCBjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+KTsKLSAgICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0
S2V5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4pOworICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4pOworICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRLZXlJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAKICAgICBzdGF0aWMgY29uc3QgaW50
NjRfdCBJbnZhbGlkSWQgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDkzMGUyMGIz
YjgzNWRkYWVkNTM3ZTdlMTkwYjE0NTEyZWFlNDcyNmEuLjQwYjEyNjI3ODY0OWYxYTkxMzg0ZmIw
ZDFjOGUzM2UzNjBiYzM0MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCkBAIC0zMzYsMjIgKzMz
NiwyMCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihp
bnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pCitib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKQog
ewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CiAgICAgLy8gRklYTUU6IENoYW5n
ZSB0aGlzIHRvIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAwIG9uY2Ugd2UgdGhyb3cgVHlwZUVycm9y
IGZvcgogICAgIC8vIGJhZCB2ZXJzaW9ucy4KICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGludFZl
cnNpb24gPj0gMCwgImludFZlcnNpb24gd2FzICVsbGQiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+
KGludFZlcnNpb24pKTsKLSAgICBpZiAoIXB1dFZhckludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5n
ZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRh
S2V5OjpVc2VySW50VmVyc2lvbiksIGludFZlcnNpb24pKQorICAgIGlmICghcHV0VmFySW50KFRy
YW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKSwgRGF0YWJhc2VN
ZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVy
c2lvbiksIGludFZlcnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFz
ZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK2Jvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uKQogewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAg
aWYgKCFwdXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIERhdGFiYXNlTWV0YURh
dGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCB2
ZXJzaW9uKSkKKyAgICBpZiAoIXB1dFN0cmluZyhUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0
aW9uRnJvbSh0cmFuc2FjdGlvbiksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwg
RGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC01MTksMTEgKzUxNywxMSBAQCBzdGF0
aWMgaW50NjRfdCBnZXROZXdPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGludDY0X3QgZGF0YQogICAgIHJldHVybiBvYmplY3RTdG9yZUlkOwogfQogCi1ib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29s
IGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKK2Jvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGlu
dDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVs
REJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlIik7Ci0gICAgQVNTRVJUKG1fY3VycmVu
dFRyYW5zYWN0aW9uKTsKLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBnZXROZXdPYmplY3RT
dG9yZUlkKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkKTsKKyAgICBMZXZl
bERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQg
PSBnZXROZXdPYmplY3RTdG9yZUlkKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCk7CiAg
ICAgaWYgKG9iamVjdFN0b3JlSWQgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTUz
Nyw1NSArNTM1LDU1IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0
U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgY29uc3QgVmVjdG9y
PGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+
IG5hbWVzS2V5ID0gT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG5hbWUp
OwogCi0gICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwg
bmFtZUtleSwgbmFtZSk7CisgICAgYm9vbCBvayA9IHB1dFN0cmluZyhsZXZlbERCVHJhbnNhY3Rp
b24sIG5hbWVLZXksIG5hbWUpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJ
bnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgb2sgPSBwdXRJREJLZXlQYXRoKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBr
ZXlQYXRoS2V5LCBrZXlQYXRoKTsKKyAgICBvayA9IHB1dElEQktleVBhdGgobGV2ZWxEQlRyYW5z
YWN0aW9uLCBrZXlQYXRoS2V5LCBrZXlQYXRoKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExP
R19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgp
LCBhdXRvSW5jcmVtZW50S2V5LCBhdXRvSW5jcmVtZW50KTsKKyAgICBvayA9IHB1dEludChsZXZl
bERCVHJhbnNhY3Rpb24sIGF1dG9JbmNyZW1lbnRLZXksIGF1dG9JbmNyZW1lbnQpOwogICAgIGlm
ICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9jdXJy
ZW50VHJhbnNhY3Rpb24uZ2V0KCksIGV2aWN0YWJsZUtleSwgZmFsc2UpOworICAgIG9rID0gcHV0
SW50KGxldmVsREJUcmFuc2FjdGlvbiwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7CiAgICAgaWYgKCFv
aykgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEludChtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwgbGFzdFZlcnNpb25LZXksIDEpOworICAgIG9rID0gcHV0SW50KGxl
dmVsREJUcmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXksIDEpOwogICAgIGlmICghb2spIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIG1heEluZGV4SWRLZXksIE1pbmltdW1JbmRleElkKTsKKyAgICBvayA9IHB1dElu
dChsZXZlbERCVHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIE1pbmltdW1JbmRleElkKTsKICAg
ICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJv
ci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0Qm9vbCht
X2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgaGFzS2V5UGF0aEtleSwgIWtleVBhdGguaXNOdWxs
KCkpOworICAgIG9rID0gcHV0Qm9vbChsZXZlbERCVHJhbnNhY3Rpb24sIGhhc0tleVBhdGhLZXks
ICFrZXlQYXRoLmlzTnVsbCgpKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigi
SW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlHZW5l
cmF0b3JDdXJyZW50TnVtYmVyS2V5LCBLZXlHZW5lcmF0b3JJbml0aWFsTnVtYmVyKTsKKyAgICBv
ayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJL
ZXksIEtleUdlbmVyYXRvckluaXRpYWxOdW1iZXIpOwogICAgIGlmICghb2spIHsKICAgICAgICAg
TE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0
KCksIG5hbWVzS2V5LCBvYmplY3RTdG9yZUlkKTsKKyAgICBvayA9IHB1dEludChsZXZlbERCVHJh
bnNhY3Rpb24sIG5hbWVzS2V5LCBvYmplY3RTdG9yZUlkKTsKICAgICBpZiAoIW9rKSB7CiAgICAg
ICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNTk2LDM1ICs1OTQsMzYgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxl
dGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkK
K3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rp
b24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNh
Y3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgU3RyaW5n
IG9iamVjdFN0b3JlTmFtZTsKLSAgICBnZXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0
KCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpOYW1lKSwgb2JqZWN0U3RvcmVOYW1lKTsKKyAg
ICBnZXRTdHJpbmcobGV2ZWxEQlRyYW5zYWN0aW9uLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6
TmFtZSksIG9iamVjdFN0b3JlTmFtZSk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1h
eEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpCisgICAgaWYgKCFkZWxldGVSYW5nZShs
ZXZlbERCVHJhbnNhY3Rpb24sIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlTWF4
S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkKICAgICAgICAgcmV0dXJuOyAvLyBGSVhN
RTogUmVwb3J0IGVycm9yLgogCi0gICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShPYmpl
Y3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVOYW1lKSk7Cisg
ICAgbGV2ZWxEQlRyYW5zYWN0aW9uLT5yZW1vdmUoT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlTmFtZSkpOwogCi0gICAgaWYgKCFkZWxldGVSYW5nZSht
X2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGVNYXhLZXko
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKQorICAgIGlmICghZGVsZXRlUmFuZ2UobGV2ZWxE
QlRyYW5zYWN0aW9uLCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgMCksIEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkKSkpCiAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4K
LSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBJbmRleE1l
dGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCksIEluZGV4
TWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpCisg
ICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIEluZGV4TWV0YURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKSwgSW5kZXhNZXRhRGF0YUtl
eTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkKICAgICAgICAgcmV0
dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgogCi0gICAgY2xlYXJPYmplY3RTdG9yZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKKyAgICBjbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9u
LCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKIH0KIAotU3RyaW5nIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSkKK1N0cmluZyBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYga2V5KQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24q
IGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9t
KHRyYW5zYWN0aW9uKTsKKwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gT2Jq
ZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsK
ICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlv
bik7Ci0gICAgaWYgKCFtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Z2V0KGxldmVsZGJLZXksIGRhdGEp
KQorICAgIGlmICghbGV2ZWxEQlRyYW5zYWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGludDY0X3QgdmVyc2lvbjsKQEAgLTY3Niwy
MyArNjc1LDIzIEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhCiAgICAgcmV0dXJuIHZlcnNpb247
CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYg
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJl
Y29yZElkZW50aWZpZXIpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0
b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3Jk
SWRlbnRpZmllcikKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1
dE9iamVjdFN0b3JlUmVjb3JkIik7CiAgICAgQVNTRVJUKGtleS5pc1ZhbGlkKCkpOwotICAgIEFT
U0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgaW50NjRfdCB2ZXJzaW9uID0gZ2V0TmV3
VmVyc2lvbk51bWJlcihtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCk7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24g
PSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAg
aW50NjRfdCB2ZXJzaW9uID0gZ2V0TmV3VmVyc2lvbk51bWJlcihsZXZlbERCVHJhbnNhY3Rpb24s
IGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmpl
Y3RTdG9yZWRhdGFLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBrZXkpOwogCiAgICAgVmVjdG9yPGNoYXI+IHY7CiAgICAgdi5hcHBlbmQo
ZW5jb2RlVmFySW50KHZlcnNpb24pKTsKICAgICB2LmFwcGVuZChlbmNvZGVTdHJpbmcodmFsdWUp
KTsKIAotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChvYmplY3RTdG9yZWRhdGFL
ZXksIHYpKQorICAgIGlmICghbGV2ZWxEQlRyYW5zYWN0aW9uLT5wdXQob2JqZWN0U3RvcmVkYXRh
S2V5LCB2KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+
IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBrZXkpOwotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChleGlz
dHNFbnRyeUtleSwgZW5jb2RlSW50KHZlcnNpb24pKSkKKyAgICBpZiAoIWxldmVsREJUcmFuc2Fj
dGlvbi0+cHV0KGV4aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29y
ZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29y
ZElkZW50aWZpZXIpOwpAQCAtNzAxLDE0ICs3MDAsMTQgQEAgYm9vbCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2IKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpj
bGVhck9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
KQordm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5n
U3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rp
b24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNh
Y3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBzdGFydEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCAwKS5lbmNvZGUoKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IEtleVByZWZp
eChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkICsgMSwgMCkuZW5jb2RlKCk7CiAKLSAgICBkZWxl
dGVSYW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXksIHN0b3BLZXkpOwor
ICAgIGRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwgc3RhcnRLZXksIHN0b3BLZXkpOwog
fQogCiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlm
aWVyPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmll
cigpCkBAIC03MTYsMzAgKzcxNSwzMCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2Jq
ZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOgogICAgIHJl
dHVybiBMZXZlbERCUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKCk7CiB9CiAKLXZvaWQgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllciogcmVjb3JkSWRlbnRpZmllcikKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVs
ZXRlT2JqZWN0U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBP
YmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCiB7CiAgICAgSURC
X1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZCIp
OwotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0
aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9u
RnJvbSh0cmFuc2FjdGlvbik7CiAgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxl
dmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElk
ZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBv
YmplY3RTdG9yZURhdGFLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsK
LSAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKG9iamVjdFN0b3JlRGF0YUtleSk7Cisg
ICAgbGV2ZWxEQlRyYW5zYWN0aW9uLT5yZW1vdmUob2JqZWN0U3RvcmVEYXRhS2V5KTsKIAogICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnBy
aW1hcnlLZXkoKSk7Ci0gICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShleGlzdHNFbnRy
eUtleSk7CisgICAgbGV2ZWxEQlRyYW5zYWN0aW9uLT5yZW1vdmUoZXhpc3RzRW50cnlLZXkpOwog
fQogCiAKLWludDY0X3QgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK2lu
dDY0X3QgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJl
cihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRy
YW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9
IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5ID0gT2JqZWN0
U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVj
dFN0b3JlTWV0YURhdGFLZXk6OktleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOwogCiAgICAgaW50
NjRfdCBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyID0gLTE7CiAgICAgVmVjdG9yPGNoYXI+IGRh
dGE7CiAKLSAgICBpZiAobV9jdXJyZW50VHJhbnNhY3Rpb24tPmdldChrZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyS2V5LCBkYXRhKSkKKyAgICBpZiAobGV2ZWxEQlRyYW5zYWN0aW9uLT5nZXQoa2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgZGF0YSkpCiAgICAgICAgIGtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXIgPSBkZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpKTsKICAgICBl
bHNlIHsKICAgICAgICAgLy8gUHJldmlvdXNseSwgdGhlIGtleSBnZW5lcmF0b3Igc3RhdGUgd2Fz
IG5vdCBzdG9yZWQgZXhwbGljaXRseSBidXQgZGVyaXZlZCBmcm9tIHRoZQpAQCAtNzQ4LDcgKzc0
Nyw3IEBAIGludDY0X3QgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsCiAgICAgICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBzdGFydEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIG1pbklEQktleSgpKTsKICAgICAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BL
ZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBtYXhJREJLZXkoKSk7CiAKLSAgICAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBt
X2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICAgICAgT3duUHRyPExl
dmVsREJJdGVyYXRvcj4gaXQgPSBsZXZlbERCVHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7
CiAgICAgICAgIGludDY0X3QgbWF4TnVtZXJpY0tleSA9IDA7CiAKICAgICAgICAgZm9yIChpdC0+
c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBz
dG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKQEAgLTc3MiwxOCArNzcxLDE4IEBAIGludDY0X3Qg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2
NF90IGRhdGFiYXNlSWQsCiAgICAgcmV0dXJuIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXI7CiB9
CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpCitib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkK
IHsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJUcmFuc2Fj
dGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlv
bkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgaWYgKGNoZWNrQ3VycmVudCkgewotICAgICAgICBp
bnQ2NF90IGN1cnJlbnROdW1iZXIgPSBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQpOworICAgICAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXIgPSBn
ZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkKTsKICAgICAgICAgaWYgKG5ld051bWJlciA8PSBjdXJyZW50TnVtYmVyKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtl
eUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcik7Ci0gICAgYm9vbCBvayA9IHB1dEludChtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgbmV3TnVtYmVy
KTsKKyAgICBib29sIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwga2V5R2VuZXJhdG9y
Q3VycmVudE51bWJlcktleSwgbmV3TnVtYmVyKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExP
R19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNzkxLDE0ICs3OTAsMTQgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpt
YXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBkYXRhYmEKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJ
bk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJLZXkmIGtleSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29y
ZElkZW50aWZpZXIpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2Jq
ZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCiB7CiAg
ICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0
b3JlIik7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJh
bnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNh
Y3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktl
eSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGtleSk7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAoIW1fY3VycmVudFRyYW5z
YWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCisgICAgaWYgKCFsZXZlbERCVHJhbnNhY3Rp
b24tPmdldChsZXZlbGRiS2V5LCBkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aW50NjRfdCB2ZXJzaW9uOwpAQCAtODExLDEzICs4MTAsMTMgQEAgYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYgY2FsbGJhY2spCitib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmZvckVhY2hPYmplY3RTdG9yZVJlY29yZChJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smIGNhbGxiYWNrKQog
ewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0
aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9u
RnJvbSh0cmFuc2FjdGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2Jq
ZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURC
S2V5KCkpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0U3RvcmVEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4SURCS2V5KCkpOwogCi0g
ICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3Jl
YXRlSXRlcmF0b3IoKTsKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGxldmVsREJU
cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5
KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsg
aXQtPm5leHQoKSkgewogICAgICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7
CiAgICAgICAgIGNvbnN0IGNoYXIqIGxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOwpAQCAtOTM1LDEx
ICs5MzQsMTEgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQKICAgICByZXR1cm4gaW5kZXhJZDsK
IH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwg
aW50NjRfdCYgaW5kZXhJZCkKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5k
ZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBp
bnQ2NF90JiBpbmRleElkKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlSW5kZXgiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAg
IGluZGV4SWQgPSBnZXROZXdJbmRleElkKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJU
cmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0
aW9uKTsKKyAgICBpbmRleElkID0gZ2V0TmV3SW5kZXhJZChsZXZlbERCVHJhbnNhY3Rpb24sIGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwogICAgIGlmIChpbmRleElkIDwgMCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC05NDgsMjUgKzk0NywyNSBAQCBib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZQogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5ID0gSW5kZXhNZXRhRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIEluZGV4TWV0YURh
dGFLZXk6OktleVBhdGgpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtdWx0aUVudHJ5S2V5ID0g
SW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4
SWQsIEluZGV4TWV0YURhdGFLZXk6Ok11bHRpRW50cnkpOwogCi0gICAgYm9vbCBvayA9IHB1dFN0
cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7CisgICAgYm9v
bCBvayA9IHB1dFN0cmluZyhsZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVLZXksIG5hbWUpOwogICAg
IGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9y
LiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRCb29sKG1f
Y3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCB1bmlxdWVLZXksIGlzVW5pcXVlKTsKKyAgICBvayA9
IHB1dEJvb2wobGV2ZWxEQlRyYW5zYWN0aW9uLCB1bmlxdWVLZXksIGlzVW5pcXVlKTsKICAgICBp
ZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4i
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0SURCS2V5UGF0
aChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwga2V5UGF0aEtleSwga2V5UGF0aCk7CisgICAg
b2sgPSBwdXRJREJLZXlQYXRoKGxldmVsREJUcmFuc2FjdGlvbiwga2V5UGF0aEtleSwga2V5UGF0
aCk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQg
REIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1
dEJvb2wobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG11bHRpRW50cnlLZXksIGlzTXVsdGlF
bnRyeSk7CisgICAgb2sgPSBwdXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwgbXVsdGlFbnRyeUtl
eSwgaXNNdWx0aUVudHJ5KTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50
ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTc1
LDE1ICs5NzQsMTUgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmUKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQordm9pZCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmRlbGV0ZUluZGV4Iik7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9u
KTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0
aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBpbmRleE1ldGFEYXRhU3RhcnQgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMCk7CiAgICAgY29uc3QgVmVjdG9y
PGNoYXI+IGluZGV4TWV0YURhdGFFbmQgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXko
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CiAKLSAgICBpZiAoIWRlbGV0ZVJh
bmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBpbmRleE1ldGFEYXRhU3RhcnQsIGluZGV4
TWV0YURhdGFFbmQpKSB7CisgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24s
IGluZGV4TWV0YURhdGFTdGFydCwgaW5kZXhNZXRhRGF0YUVuZCkpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtOTkxLDI3ICs5OTAsMjcgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxl
dGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmUKICAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhU3RhcnQgPSBJbmRleERhdGFLZXk6OmVuY29kZU1pbktl
eShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gaW5kZXhEYXRhRW5kID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3Vy
cmVudFRyYW5zYWN0aW9uLmdldCgpLCBpbmRleERhdGFTdGFydCwgaW5kZXhEYXRhRW5kKSkgewor
ICAgIGlmICghZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBpbmRleERhdGFTdGFydCwg
aW5kZXhEYXRhRW5kKSkgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIg
ZXJyb3IuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBj
b25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCitib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNv
bnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKICAg
ICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29y
ZCIpOwogICAgIEFTU0VSVChrZXkuaXNWYWxpZCgpKTsKICAgICBBU1NFUlQoaW5kZXhJZCA+PSBN
aW5pbXVtSW5kZXhJZCk7CiAgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVs
REJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50
aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKIAotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2Fj
dGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFu
c2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGluZGV4RGF0YUtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGVuY29kZUlEQktleShrZXkpLCBsZXZlbERCUmVj
b3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKIAogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwog
ICAgIGRhdGEuYXBwZW5kKGVuY29kZVZhckludChsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+dmVy
c2lvbigpKSk7CiAgICAgZGF0YS5hcHBlbmQobGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1h
cnlLZXkoKSk7CiAKLSAgICByZXR1cm4gbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChpbmRleERh
dGFLZXksIGRhdGEpOworICAgIHJldHVybiBsZXZlbERCVHJhbnNhY3Rpb24tPnB1dChpbmRleERh
dGFLZXksIGRhdGEpOwogfQogCiBzdGF0aWMgYm9vbCBmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9y
RXF1YWwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+
JiB0YXJnZXQsIFZlY3RvcjxjaGFyPiYgZm91bmRLZXkpCkBAIC0xMDQyLDcgKzEwNDEsNyBAQCBz
dGF0aWMgYm9vbCBmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90LCBpbnQ2
NF90LCBpbnQ2NF90LCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKQorYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QsIGludDY0X3QsIGludDY0X3QsIGNvbnN0IE9i
amVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXNuJ3Qg
bmVlZGVkIHNpbmNlIHdlIGludmFsaWRhdGUgaW5kZXggZGF0YSB2aWEgdGhlIHZlcnNpb24gbnVt
YmVyIG1lY2hhbmlzbS4KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwNTksMTMgKzEwNTgsMTQgQEAg
c3RhdGljIGJvb2wgdmVyc2lvbkV4aXN0cyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGkKICAgICByZXR1cm4gZGVjb2RlSW50KGRhdGEuYmVnaW4o
KSwgZGF0YS5lbmQoKSkgPT0gdmVyc2lvbjsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpmaW5kS2V5SW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgVmVjdG9yPGNoYXI+JiBm
b3VuZEVuY29kZWRQcmltYXJ5S2V5KQorYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5k
S2V5SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5JiBrZXksIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkK
IHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4
Iik7CiAgICAgQVNTRVJUKGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuaXNFbXB0eSgpKTsKIAorICAg
IExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246Omxl
dmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBsZXZlbGRiS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCwga2V5KTsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1f
Y3VycmVudFRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0cjxMZXZlbERC
SXRlcmF0b3I+IGl0ID0gbGV2ZWxEQlRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogICAg
IGl0LT5zZWVrKGxldmVsZGJLZXkpOwogCiAgICAgZm9yICg7OykgewpAQCAtMTA4MCw5ICsxMDgw
LDkgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3QKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgZm91bmRFbmNvZGVkUHJpbWFyeUtleS5hcHBlbmQocCwgaXQtPnZhbHVlKCkuZW5k
KCkgLSBwKTsKIAotICAgICAgICBpZiAoIXZlcnNpb25FeGlzdHMobV9jdXJyZW50VHJhbnNhY3Rp
b24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGZvdW5kRW5jb2Rl
ZFByaW1hcnlLZXkpKSB7CisgICAgICAgIGlmICghdmVyc2lvbkV4aXN0cyhsZXZlbERCVHJhbnNh
Y3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGZvdW5kRW5jb2RlZFBy
aW1hcnlLZXkpKSB7CiAgICAgICAgICAgICAvLyBEZWxldGUgc3RhbGUgaW5kZXggZGF0YSBlbnRy
eSBhbmQgY29udGludWUuCi0gICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3Zl
KGl0LT5rZXkoKSk7CisgICAgICAgICAgICBsZXZlbERCVHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+
a2V5KCkpOwogICAgICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CkBAIC0xMDkxLDEzICsxMDkxLDEyIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6ZmluZEtleUluSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
CiAgICAgfQogfQogCi1QYXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQorUGFzc1JlZlB0cjxJ
REJLZXk+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBr
ZXkpCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5
S2V5VmlhSW5kZXgiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogCiAgICAg
VmVjdG9yPGNoYXI+IGZvdW5kRW5jb2RlZFByaW1hcnlLZXk7Ci0gICAgaWYgKGZpbmRLZXlJbklu
ZGV4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgZm91bmRFbmNvZGVk
UHJpbWFyeUtleSkpIHsKKyAgICBpZiAoZmluZEtleUluSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgZm91bmRFbmNvZGVkUHJpbWFyeUtl
eSkpIHsKICAgICAgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleTsKICAgICAgICAgZGVjb2Rl
SURCS2V5KGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgZm91bmRFbmNvZGVkUHJpbWFy
eUtleS5lbmQoKSwgcHJpbWFyeUtleSk7CiAgICAgICAgIHJldHVybiBwcmltYXJ5S2V5LnJlbGVh
c2UoKTsKQEAgLTExMDYsMTMgKzExMDUsMTIgQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVs
REJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXMKICAg
ICByZXR1cm4gMDsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJ
bkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFBy
aW1hcnlLZXkpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpCiB7CiAgICAgSURC
X1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4Iik7Ci0gICAg
QVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKIAogICAgIFZlY3RvcjxjaGFyPiBmb3VuZEVu
Y29kZWRQcmltYXJ5S2V5OwotICAgIGlmICghZmluZEtleUluSW5kZXgoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwgaW5kZXhLZXksIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKQor
ICAgIGlmICghZmluZEtleUluSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIGluZGV4S2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgZGVjb2RlSURCS2V5KGZvdW5kRW5jb2RlZFByaW1hcnlL
ZXkuYmVnaW4oKSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleS5lbmQoKSwgZm91bmRQcmltYXJ5S2V5
KTsKQEAgLTE2ODksNTYgKzE2ODcsNTYgQEAgYm9vbCBpbmRleEN1cnNvck9wdGlvbnMoTGV2ZWxE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQKIAogfQog
Ci1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rp
b24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlv
biBkaXJlY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpv
cGVuT2JqZWN0U3RvcmVDdXJzb3IiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24p
OworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rp
b246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIEN1cnNvck9wdGlv
bnMgY3Vyc29yT3B0aW9uczsKLSAgICBpZiAoIW9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhtX2N1
cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgcmFuZ2Us
IGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCisgICAgaWYgKCFvYmplY3RTdG9yZUN1cnNvck9w
dGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByYW5n
ZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVm
UHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJzb3JJbXBs
OjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOworICAg
IFJlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3JlQ3Vyc29y
SW1wbDo6Y3JlYXRlKGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7CiAgICAgaWYg
KCFjdXJzb3ItPmZpcnN0U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBj
dXJzb3IucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiBy
YW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3Jl
S2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2Uq
IHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgSURCX1RSQUNF
KCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IiKTsKLSAg
ICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiog
bGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20o
dHJhbnNhY3Rpb24pOwogICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKLSAgICBpZiAo
IW9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykp
CisgICAgaWYgKCFvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25z
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1w
bD4gY3Vyc29yID0gT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOworICAgIFJlZlB0cjxPYmplY3RTdG9yZUtl
eUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKGxl
dmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7CiAgICAgaWYgKCFjdXJzb3ItPmZpcnN0
U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgp
OwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdl
LCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3Io
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIElE
Ql9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yIik7Ci0g
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24q
IGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9t
KHRyYW5zYWN0aW9uKTsKICAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7Ci0gICAgaWYg
KCFpbmRleEN1cnNvck9wdGlvbnMobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlv
bnMpKQorICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25zKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29y
T3B0aW9ucykpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxJbmRleEtleUN1cnNvcklt
cGw+IGN1cnNvciA9IEluZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCBjdXJzb3JPcHRpb25zKTsKKyAgICBSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBs
PiBjdXJzb3IgPSBJbmRleEtleUN1cnNvckltcGw6OmNyZWF0ZShsZXZlbERCVHJhbnNhY3Rpb24s
IGN1cnNvck9wdGlvbnMpOwogICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbklu
ZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rp
b24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNv
cjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNr
aW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvciIpOwotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2Fj
dGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFu
c2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgQ3Vyc29y
T3B0aW9ucyBjdXJzb3JPcHRpb25zOwotICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25zKG1fY3Vy
cmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
LCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKKyAgICBpZiAoIWluZGV4Q3Vyc29y
T3B0aW9ucyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4SWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICBSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEN1cnNvckltcGw6
OmNyZWF0ZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucyk7CisgICAg
UmVmUHRyPEluZGV4Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhDdXJzb3JJbXBsOjpjcmVhdGUo
bGV2ZWxEQlRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKTsKICAgICBpZiAoIWN1cnNvci0+Zmly
c3RTZWVrKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xNzYyLDI1ICsxNzYwLDI2IEBAIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbihJREJMZXZlbERC
QmFja2luZ1N0b3JlKiBiYWNraW5nCiAKIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb246OmJlZ2luKCkKIHsKLSAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlLT5tX2N1cnJl
bnRUcmFuc2FjdGlvbik7Ci0gICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9u
ID0gTGV2ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0KCkp
OworICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJl
Z2luIik7CisgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uKTsKKyAgICBtX3RyYW5zYWN0aW9uID0g
TGV2ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0KCkpOwog
fQogCiBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQoKQog
ewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNv
bW1pdCIpOwotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24p
OwotICAgIGJvb2wgcmVzdWx0ID0gbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9u
LT5jb21taXQoKTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24uY2xl
YXIoKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7CisgICAgYm9vbCByZXN1bHQgPSBtX3Ry
YW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
bjo6cm9sbGJhY2soKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb246OnJvbGxiYWNrIik7Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlLT5tX2N1
cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0
aW9uLT5yb2xsYmFjaygpOwotICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlv
bi5jbGVhcigpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKKyAgICBtX3RyYW5zYWN0aW9u
LT5yb2xsYmFjaygpOworICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKIH0KIAogYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpiYWNraW5nU3RvcmVFeGlzdHMoU2VjdXJpdHlPcmlnaW4qIHNl
Y3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5oCmluZGV4IDczMzkyMjY5MDEzMTUyNTBmMzVhODhmYTI1MjViZGUyZmM3
OGIzMTkuLjc3Y2IwNmU3ODVhZjgwOTgwOTdiOWU5MmM4NmZlMWYyYTdlZGY2NjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmgKQEAgLTQ3LDM2ICs0NywzNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpOwogICAgIHZpcnR1
YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5n
JiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJ
ZCk7CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50
NjRfdCYgcm93SWQpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRh
KGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7Ci0gICAgdmlydHVhbCBib29s
IHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZl
cnNpb24pOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZl
cnNpb24pOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVy
c2lvbik7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFt
ZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJ
ZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMs
IFZlY3RvcjxJREJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1
dG9JbmNyZW1lbnRGbGFncyk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKGlu
dDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwg
Ym9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOwotICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRf
dCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0
U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8T2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOwotICAg
IHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wg
cHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1
YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVL
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCk7Ci0gICAgdmly
dHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmpl
Y3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpOworICAgIHZpcnR1
YWwgYm9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBpbnQ2NF90IGdl
dEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFs
IGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBuZXdTdGF0ZSwgYm9vbCBjaGVja0N1cnJlbnQpOworICAgIHZpcnR1YWwgYm9v
bCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jiwg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpOwogCi0g
ICAgdmlydHVhbCBib29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpOwor
ICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5k
ZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGlu
dDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxJREJL
ZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzLCBW
ZWN0b3I8Ym9vbD4mIGZvdW5kTXVsdGlFbnRyeUZsYWdzKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNN
dWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRleElkKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5k
ZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCk7Ci0gICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJ
REJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlL
ZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3Rz
SW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQ
cmltYXJ5S2V5KTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RT
dG9yZUtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6
RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlD
dXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJ
bmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0
aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRleElkKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQpOworICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllciopOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JS
ZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllciopOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFBy
aW1hcnlLZXlWaWFJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5Jik7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJL
ZXk+JiBmb3VuZFByaW1hcnlLZXkpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4g
b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFu
Z2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNv
cj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFu
Z2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNv
cj4gb3BlbkluZGV4S2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwogCiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpOwog
CkBAIC04NiwxMyArODYsMTIgQEAgcHJvdGVjdGVkOgogICAgIElEQkxldmVsREJCYWNraW5nU3Rv
cmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBQYXNz
T3duUHRyPExldmVsREJEYXRhYmFzZT4pOwogCiBwcml2YXRlOgotICAgIGJvb2wgZmluZEtleUlu
SW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5
S2V5KTsKKyAgICBib29sIGZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlL
ZXkpOwogCiAgICAgU3RyaW5nIG1faWRlbnRpZmllcjsKICAgICBSZWZQdHI8SURCRmFjdG9yeUJh
Y2tlbmRJbXBsPiBtX2ZhY3Rvcnk7CiAgICAgT3duUHRyPExldmVsREJEYXRhYmFzZT4gbV9kYjsK
ICAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IG1fY29tcGFyYXRvcjsKLSAgICBSZWZQdHI8
TGV2ZWxEQlRyYW5zYWN0aW9uPiBtX2N1cnJlbnRUcmFuc2FjdGlvbjsKIAogICAgIGNsYXNzIFRy
YW5zYWN0aW9uIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24gewogICAgIHB1
YmxpYzoKQEAgLTEwMSw5ICsxMDAsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBib29s
IGNvbW1pdCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKTsKIAorICAgICAgICBz
dGF0aWMgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
Pih0cmFuc2FjdGlvbiktPm1fdHJhbnNhY3Rpb24uZ2V0KCk7CisgICAgICAgIH0KKwogICAgIHBy
aXZhdGU6CiAgICAgICAgIFRyYW5zYWN0aW9uKElEQkxldmVsREJCYWNraW5nU3RvcmUqKTsKICAg
ICAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogbV9iYWNraW5nU3RvcmU7CisgICAgICAgIFJl
ZlB0cjxMZXZlbERCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CiAgICAgfTsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggMmZhNWMwODRjN2Q1NjUzNDg2MWRjMWY4NTc1
N2UyNzE4MTQ1NzdmNC4uODA1YjcxNTI0MDYwMTlhZmY4MGMwZTBhOWI4MDgyNWQwZWYwNWFjZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTg2LDE4ICs4NiwxOCBAQCB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBL
ZXlSYW5nZSwgUGFzc1JlZgogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBy
cENhbGxiYWNrczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsK
ICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVD
YWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsLCBvYmpl
Y3RTdG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNrcykpKQorICAgICAgICAgICAgY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCwgb2JqZWN0U3Rv
cmUsIGtleVJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCiAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIAotdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsIik7CiAgICAgUmVmUHRyPElEQktleT4ga2V5Owog
ICAgIGlmIChrZXlSYW5nZS0+aXNPbmx5S2V5KCkpCiAgICAgICAgIGtleSA9IGtleVJhbmdlLT5s
b3dlcigpOwogICAgIGVsc2UgewotICAgICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Bl
bk9iamVjdFN0b3JlQ3Vyc29yKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3Jl
LT5pZCgpLCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICAgICAgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9y
ZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0
U3RvcmUtPmlkKCksIGtleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogICAgICAgICBp
ZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAg
ICAgICBiYWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHdp
cmVEYXRhID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJlY29y
ZChvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSk7Cisg
ICAgU3RyaW5nIHdpcmVEYXRhID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmpl
Y3RTdG9yZVJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2Jq
ZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksICprZXkpOwogICAgIGlm
ICh3aXJlRGF0YS5pc051bGwoKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CkBA
IC0xNTQsMTIgKzE1NCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9pbmRleEtleXMoaW5kZXhL
ZXlzKQogICAgIHsgfQogCi0gICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3Jl
JiBiYWNraW5nU3RvcmUsCisgICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3Jl
JiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSURCS2V5KiBwcmltYXJ5S2V5ID0gMCwgU3RyaW5nKiBlcnJvck1lc3NhZ2UgPSAwKQog
ICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgaWYgKCFhZGRpbmdLZXlBbGxvd2VkKGJhY2tpbmdTdG9yZSwg
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwKKyAgICAgICAgICAgIGlmICghYWRk
aW5nS2V5QWxsb3dlZChiYWNraW5nU3RvcmUsIHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICht
X2luZGV4S2V5cylbaV0uZ2V0KCksIHByaW1hcnlLZXkpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGVycm9yTWVzc2FnZSkKICAgICAgICAgICAgICAgICAgICAgKmVycm9yTWVzc2FnZSA9IFN0cmlu
Zzo6Zm9ybWF0KCJVbmFibGUgdG8gYWRkIGtleSB0byBpbmRleCAnJXMnOiBhdCBsZWFzdCBvbmUg
a2V5IGRvZXMgbm90IHNhdGlzZnkgdGhlIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIsCkBAIC0x
NzAsMTIgKzE3MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIGJvb2wgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9y
ZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSYgYmFj
a2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkKSBjb25zdAorICAgIGJvb2wgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFj
a2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIs
IElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCkgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9pbmRleEtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghYmFj
a2luZ1N0b3JlLmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkLCByZWNvcmRJZGVudGlmaWVyKSkKKyAgICAgICAgICAgIGlmICghYmFja2lu
Z1N0b3JlLmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmVjb3JkSWRlbnRpZmllcikpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUucHV0SW5kZXhE
YXRhRm9yUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICoobV9pbmRl
eEtleXMpW2ldLmdldCgpLCByZWNvcmRJZGVudGlmaWVyKSkKKyAgICAgICAgICAgIGlmICghYmFj
a2luZ1N0b3JlLnB1dEluZGV4RGF0YUZvclJlY29yZCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKihtX2luZGV4S2V5cylbaV0uZ2V0KCksIHJlY29yZElk
ZW50aWZpZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE4NSw3ICsxODUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAKLSAgICBib29sIGFkZGluZ0tleUFsbG93ZWQoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3Rv
cmUsCisgICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0
b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSURC
S2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5KSBjb25zdAogICAgIHsKQEAg
LTE5Myw3ICsxOTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICAgICAgUmVmUHRyPElEQktleT4gZm91bmRQcmltYXJ5S2V5OwotICAgICAgICBib29sIGZvdW5k
ID0gYmFja2luZ1N0b3JlLmtleUV4aXN0c0luSW5kZXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXkpOworICAgICAgICBib29sIGZv
dW5kID0gYmFja2luZ1N0b3JlLmtleUV4aXN0c0luSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICppbmRleEtleSwgZm91bmRQcmltYXJ5S2V5KTsK
ICAgICAgICAgaWYgKCFmb3VuZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBp
ZiAocHJpbWFyeUtleSAmJiBmb3VuZFByaW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtleSkpCkBA
IC0yMDYsNyArMjA2LDcgQEAgcHJpdmF0ZToKIH07CiB9CiAKLXN0YXRpYyBib29sIG1ha2VJbmRl
eFdyaXRlcnMoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQ
dHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9y
PFN0cmluZz4gaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVy
PiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlKQorc3RhdGljIGJvb2wgbWFr
ZUluZGV4V3JpdGVycyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5z
YWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0
cjxJREJLZXk+IHByaW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlOjpJbmRleEtleXM+JiBpbmRleEtleXMsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+
ID4qIGluZGV4V3JpdGVycywgU3RyaW5nKiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKGlu
ZGV4TmFtZXMuc2l6ZSgpID09IGluZGV4S2V5cy5zaXplKCkpOwogCkBAIC0yMzAsNiArMjMwLDcg
QEAgc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
KiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjwKIAogICAgICAgICBPd25QdHI8SW5kZXhXcml0ZXI+
IGluZGV4V3JpdGVyKGFkb3B0UHRyKG5ldyBJbmRleFdyaXRlcihpbmRleC0+bWV0YWRhdGEoKSwg
a2V5cykpKTsKICAgICAgICAgaWYgKCFpbmRleFdyaXRlci0+dmVyaWZ5SW5kZXhLZXlzKCpvYmpl
Y3RTdG9yZS0+YmFja2luZ1N0b3JlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5kYXRhYmFz
ZUlkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RT
dG9yZS0+aWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4LT5pZCgpLCBwcmltYXJ5S2V5LmdldCgpLCBlcnJvck1lc3NhZ2UpKSB7CkBAIC0yNDIsMjEg
KzI0MywyMiBAQCBzdGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwqIG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPAogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRy
PElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMs
IGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtl
eXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIpCiB7CiAg
ICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMiKTsK
ICAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gcHJwUHJpbWFyeUtleTsKKyAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKIAogICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBjb3VsZCBiZSBhc3luY2hyb25vdXMsIGJ1dCB3ZSBuZWVkIHRvIGV2YWx1YXRlIGlm
IGl0J3Mgd29ydGggdGhlIGV4dHJhIGNvbXBsZXhpdHkuCiAgICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gYmFj
a2luZ1N0b3JlKCktPmNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCk7Ci0gICAgaWYgKCFi
YWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZShkYXRhYmFzZUlkKCksIGlkKCks
ICpwcmltYXJ5S2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgeworICAgIGlmICghYmFja2lu
Z1N0b3JlKCktPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQoKSwgaWQoKSwgKnByaW1hcnlLZXksIHJlY29yZElk
ZW50aWZpZXIuZ2V0KCkpKSB7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRl
eFdyaXRlcnM7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIW1ha2VJbmRleFdy
aXRlcnModGhpcywgcHJpbWFyeUtleSwgZmFsc2UsIGluZGV4TmFtZXMsIGluZGV4S2V5cywgJmlu
ZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKKyAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnMo
dHJhbnNhY3Rpb24sIHRoaXMsIHByaW1hcnlLZXksIGZhbHNlLCBpbmRleE5hbWVzLCBpbmRleEtl
eXMsICZpbmRleFdyaXRlcnMsICZlcnJvck1lc3NhZ2UpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBO
ZWVkIHRvIGRlYWwgd2l0aCBlcnJvck1lc3NhZ2UgaGVyZS4gbWFrZUluZGV4V3JpdGVycyBvbmx5
IGZhaWxzIG9uIHVuaXF1ZW5lc3MgY29uc3RyYWludCBlcnJvcnMuCiAgICAgICAgIHRyYW5zYWN0
aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CkBAIC0yNjYsNiArMjY4LDcgQEAgdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+
IHBycFByaW1hcnlLZXksIGMKICAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5k
ZXhXcml0ZXJzW2ldLmdldCgpOwogICAgICAgICBpZiAoIWluZGV4V3JpdGVyLT53cml0ZUluZGV4
S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqYmFja2luZ1N0b3JlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZUlkKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhlcy5nZXQoaW5kZXhXcml0ZXIt
PmluZGV4TmFtZSgpKS0+aWQoKSkpIHsKQEAgLTI5OCw5ICszMDEsMTAgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwKICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiB9
CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFz
c1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
IHRyYW5zYWN0aW9uLCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywg
UGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cykKK3ZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9u
LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxW
ZWN0b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsIik7CisgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CiAgICAgQVNT
RVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7CiAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKICAgICBS
ZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CkBAIC0zMTEsNyArMzE1LDcgQEAgdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjwKICAgICBib29sIGtleVdhc0dlbmVyYXRlZCA9IGZhbHNlOwogCiAgICAg
aWYgKHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGF1dG9JbmNyZW1lbnQgJiYgIWtleSkgewot
ICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdlbmVyYXRl
S2V5KCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBvYmplY3RTdG9yZS0+
Z2VuZXJhdGVLZXkodHJhbnNhY3Rpb24pOwogICAgICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVl
OwogICAgICAgICBpZiAoIWF1dG9JbmNLZXktPmlzVmFsaWQoKSkgewogICAgICAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6REFUQV9FUlIsICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7
CkBAIC0zMjMsMjEgKzMyNywyMSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1
dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgIEFTU0VS
VChrZXkgJiYga2V5LT5pc1ZhbGlkKCkpOwogCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gb2JqZWN0U3Rv
cmUtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOwotICAg
IGlmIChwdXRNb2RlID09IEFkZE9ubHkgJiYgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5r
ZXlFeGlzdHNJbk9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0
b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgeworICAgIGlmIChwdXRN
b2RlID09IEFkZE9ubHkgJiYgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJ
bk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmpl
Y3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgcmVjb3JkSWRl
bnRpZmllci5nZXQoKSkpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkg
YWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsK
ICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmICghbWFrZUluZGV4V3JpdGVycyhvYmpl
Y3RTdG9yZS5nZXQoKSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsICppbmRleE5hbWVzLCAqaW5kZXhL
ZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlKSkgeworICAgIGlmICghbWFrZUluZGV4
V3JpdGVycyh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUuZ2V0KCksIGtleSwga2V5V2FzR2VuZXJh
dGVkLCAqaW5kZXhOYW1lcywgKmluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2Fn
ZSkpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsIGVycm9yTWVzc2FnZSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQmVmb3JlIHRoaXMgcG9pbnQsIGRvbid0
IGRvIGFueSBtdXRhdGlvbi4gIEFmdGVyIHRoaXMgcG9pbnQsIHJvbGxiYWNrIHRoZSB0cmFuc2Fj
dGlvbiBpbiBjYXNlIG9mIGVycm9yLgogCi0gICAgaWYgKCFvYmplY3RTdG9yZS0+YmFja2luZ1N0
b3JlKCktPnB1dE9iamVjdFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9i
amVjdFN0b3JlLT5pZCgpLCAqa2V5LCB2YWx1ZS0+dG9XaXJlU3RyaW5nKCksIHJlY29yZElkZW50
aWZpZXIuZ2V0KCkpKSB7CisgICAgaWYgKCFvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPnB1
dE9iamVjdFN0b3JlUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgdmFs
dWUtPnRvV2lyZVN0cmluZygpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewogICAgICAgICBj
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFn
ZS4iKSk7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CkBA
IC0zNDcsNiArMzUxLDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgSW5kZXhX
cml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwogICAgICAgICBpZiAo
IWluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb2JqZWN0U3RvcmUtPmJhY2tp
bmdTdG9yZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPm1faWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5tX2luZGV4
ZXMuZ2V0KGluZGV4V3JpdGVyLT5pbmRleE5hbWUoKSktPmlkKCkpKSB7CkBAIC0zNTgsMzIgKzM2
MywzMyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgIH0KIAogICAgIGlmIChhdXRvSW5j
cmVtZW50ICYmIHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGtleS0+dHlwZSgpID09IElEQktl
eTo6TnVtYmVyVHlwZSkKLSAgICAgICAgb2JqZWN0U3RvcmUtPnVwZGF0ZUtleUdlbmVyYXRvcihr
ZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOworICAgICAgICBvYmplY3RTdG9yZS0+dXBkYXRl
S2V5R2VuZXJhdG9yKHRyYW5zYWN0aW9uLCBrZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOwog
CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4gcHJwS2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbihQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpkZWxldGUiKTsKIAotICAgIEFTU0VSVChJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uKS0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpS
RUFEX09OTFkpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2Fj
dGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwor
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09O
TFkpOwogCiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
ID0gdGhpczsKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7
CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogCi0g
ICAgaWYgKCFJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uKS0+c2No
ZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGtleVJhbmdlLCBjYWxs
YmFja3MpKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisgICAgICAgICAg
ICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUlu
dGVybmFsLCBvYmplY3RTdG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkK
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVf
RVJSOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwiKTsK
ICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+
IHJlY29yZElkZW50aWZpZXI7CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+
IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9i
amVjdFN0b3JlQ3Vyc29yKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5p
ZCgpLCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNr
aW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+
aWQoKSwga2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CiAgICAgaWYgKGJhY2tpbmdT
dG9yZUN1cnNvcikgewogCiAgICAgICAgIGRvIHsKQEAgLTM5MywxMSArMzk5LDExIEBAIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQCiAgICAgICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5oYXNW
YWxpZElkKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2Jq
ZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2Ug
eWV0LgogCi0gICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tp
bmdTdG9yZSgpLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUtPmRhdGFiYXNl
SWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT5zZWNvbmQtPmlkKCksIHJlY29yZElkZW50aWZp
ZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5i
YWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RT
dG9yZS0+aWQoKSwgaXQtPnNlY29uZC0+aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVP
YmplY3RTdG9yZVJlY29yZChvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+
aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CisgICAgICAgICAgICBvYmplY3RTdG9yZS0+
YmFja2luZ1N0b3JlKCktPmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RT
dG9yZS0+aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CiAKICAgICAgICAgfSB3aGlsZSAo
YmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKIApAQCAtNDA3LDIzICs0
MTMsMjQgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlAKICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogfQogCi12b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBw
cnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24s
IEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVh
cihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFyIik7CiAKLSAgICBB
U1NFUlQoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbiktPm1vZGUo
KSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpm
cm9tKHRyYW5zYWN0aW9uUHRyKTsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJ
REJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogCi0gICAgaWYgKCFJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uKS0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhckludGVybmFs
LCBvYmplY3RTdG9yZSwgY2FsbGJhY2tzKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1
bGVUYXNrKAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpjbGVhckludGVybmFsLCBvYmplY3RTdG9yZSwgY2FsbGJhY2tzLCB0cmFuc2Fj
dGlvbikpKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9J
TkFDVElWRV9FUlI7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKLSAgICBvYmpl
Y3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmNsZWFyT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPmRh
dGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCkpOworICAgIG9iamVjdFN0b3JlLT5iYWNraW5n
U3RvcmUoKS0+Y2xlYXJPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCkpOwog
ICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVk
VmFsdWUoKSk7CiB9CiAKQEAgLTQ1Miw3ICs0NTksNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoY29u
cwogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAg
IGludDY0X3QgaWQ7Ci0gICAgaWYgKCFvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmNyZWF0
ZUluZGV4KG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRl
eC0+bmFtZSgpLCBpbmRleC0+a2V5UGF0aCgpLCBpbmRleC0+dW5pcXVlKCksIGluZGV4LT5tdWx0
aUVudHJ5KCksIGlkKSkgeworICAgIGlmICghb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5j
cmVhdGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0
U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5uYW1lKCksIGlu
ZGV4LT5rZXlQYXRoKCksIGluZGV4LT51bmlxdWUoKSwgaW5kZXgtPm11bHRpRW50cnkoKSwgaWQp
KSB7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNDkyLDcgKzQ5OSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVs
ZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhCiAKIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKLSAgICBvYmplY3RTdG9y
ZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4KG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCks
IG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+aWQoKSk7CisgICAgb2JqZWN0U3RvcmUtPmJhY2tp
bmdTdG9yZSgpLT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4
LT5pZCgpKTsKICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiB9CiAK
QEAgLTUxMyw3ICs1MjAsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5D
dXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzcwogewogICAgIElEQl9U
UkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsIik7CiAK
LSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9
IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG9iamVj
dFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCByYW5nZS5nZXQoKSwgZGly
ZWN0aW9uKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9y
ZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vy
c29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+
ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7
CiAgICAgLy8gVGhlIGZyb250ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMg
dGhlIHRyYW5zYWN0aW9uCiAgICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBU
aGlzIGNhbid0IGhhcHBlbiBhbnkgZWFybGllcgogICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2Fu
dCB0byBzd2l0Y2ggdG8gZWFybHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCkBAIC01MjksMTkgKzUz
NiwyMCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzcwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNz
KGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFs
dWUoKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQoUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlv
bkNvZGUmIGVjKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudChQYXNzUmVm
UHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
Ojpjb3VudCIpOwotICAgIGlmICghSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFu
c2FjdGlvbiktPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygm
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNh
bGxiYWNrcykpKQorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2Fj
dGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwor
ICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0ZUNh
bGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCwgdGhp
cywgcmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmNvdW50SW50ZXJuYWwiKTsKICAgICB1aW50MzJfdCBjb3VudCA9IDA7Ci0gICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmpl
Y3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihvYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIElEQkN1
cnNvcjo6TkVYVCk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5n
U3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9y
ZUtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0
U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIHJhbmdlLmdldCgpLCBJREJD
dXJzb3I6Ok5FWFQpOwogICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAgICAgICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoY291
bnQpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTg2LDIwICs1OTQsMjAgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHQKICAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnNldChpbmRleFB0ci0+bmFt
ZSgpLCBpbmRleFB0cik7CiB9CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpnZW5lcmF0ZUtleSgpCitQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Z2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKICAgICBjb25zdCBpbnQ2NF90IG1heEdlbmVyYXRvclZh
bHVlID0gOTAwNzE5OTI1NDc0MDk5MkxMOyAvLyBNYXhpbXVtIGludGVnZXIgc3RvcmFibGUgYXMg
RUNNQVNjcmlwdCBudW1iZXIuCi0gICAgaW50NjRfdCBjdXJyZW50TnVtYmVyID0gYmFja2luZ1N0
b3JlKCktPmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoZGF0YWJhc2VJZCgpLCBpZCgpKTsK
KyAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXIgPSBiYWNraW5nU3RvcmUoKS0+Z2V0S2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
ZGF0YWJhc2VJZCgpLCBpZCgpKTsKICAgICBpZiAoY3VycmVudE51bWJlciA8IDAgfHwgY3VycmVu
dE51bWJlciA+IG1heEdlbmVyYXRvclZhbHVlKQogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVh
dGVJbnZhbGlkKCk7CiAKICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIoY3VycmVudE51
bWJlcik7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2Vu
ZXJhdG9yKGNvbnN0IElEQktleSoga2V5LCBib29sIGNoZWNrQ3VycmVudCkKK3ZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sIGNvbnN0IElEQktleSoga2V5LCBib29s
IGNoZWNrQ3VycmVudCkKIHsKICAgICBBU1NFUlQoa2V5ICYmIGtleS0+dHlwZSgpID09IElEQktl
eTo6TnVtYmVyVHlwZSk7Ci0gICAgYmFja2luZ1N0b3JlKCktPm1heWJlVXBkYXRlS2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcihkYXRhYmFzZUlkKCksIGlkKCksIHN0YXRpY19jYXN0PGludDY0X3Q+
KGZsb29yKGtleS0+bnVtYmVyKCkpKSArIDEsIGNoZWNrQ3VycmVudCk7CisgICAgYmFja2luZ1N0
b3JlKCktPm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2Fz
dDxpbnQ2NF90PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOwogfQog
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAppbmRleCAyODExY2ExYmFkNzZiNjE4OTJkZjI0MmE5
ZTg2Yjk2OTdmZDIyNTBhLi5iZDk1YmJlYmUyZjdlMmEyYmQyOTMxMjBiZmY4MTI3ZTBjYmIyZmU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC0xMDAsMTggKzEwMCwxOCBAQCBwcml2YXRl
OgogICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0lu
Y3JlbWVudCk7CiAKICAgICB2b2lkIGxvYWRJbmRleGVzKCk7Ci0gICAgUGFzc1JlZlB0cjxJREJL
ZXk+IGdlbmVyYXRlS2V5KCk7Ci0gICAgdm9pZCB1cGRhdGVLZXlHZW5lcmF0b3IoY29uc3QgSURC
S2V5KiwgYm9vbCBjaGVja0N1cnJlbnQpOworICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0
ZUtleShQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICB2b2lkIHVw
ZGF0ZUtleUdlbmVyYXRvcihQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBj
b25zdCBJREJLZXkqLCBib29sIGNoZWNrQ3VycmVudCk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIHB1dEludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5Piwg
UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1l
cywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+KTsKLSAgICBzdGF0aWMgdm9pZCBkZWxl
dGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIHNldEluZGV4ZXNS
ZWFkeUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhO
YW1lcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0gICAgc3RhdGlj
IHZvaWQgY2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAg
ICBzdGF0aWMgdm9pZCBjbGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2
b2lkIGNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRp
YyB2b2lkIGRlbGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0
YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIElEQkN1cnNvcjo6RGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4pOwotICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAg
IHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4pOwogCiAgICAgLy8gVGhlc2UgYXJlIHVzZWQgYXMgc2V0VmVyc2lvbiB0cmFuc2Fj
dGlvbiBhYm9ydCB0YXNrcy4KICAgICBzdGF0aWMgdm9pZCByZW1vdmVJbmRleEZyb21NYXAoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5oCmluZGV4IDI0YzRmZWUwNDE1YmQ1YmI1MTJhMjMyMmNhOGJmNTc1ZWI1MTczNzYuLmQ2ZTNj
ODhhNTc5ZDU4NDcyMzFiYWE5ZDBmNTZlYWQ0NmE2NmEzMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsLmgKQEAgLTY1LDYgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUGVuZGluZ0V2ZW50
cyhpbnQpOwogICAgIHZvaWQgYWRkUHJlZW1wdGl2ZUV2ZW50KCkgeyBtX3BlbmRpbmdQcmVlbXB0
aXZlRXZlbnRzKys7IH0KICAgICB2b2lkIGRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgeyBt
X3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzLS07IEFTU0VSVChtX3BlbmRpbmdQcmVlbXB0aXZlRXZl
bnRzID49IDApOyB9CisgICAgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogYmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9CiAKIHByaXZh
dGU6CiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RT
dG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9y
ZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgK
aW5kZXggZTBhNWE4ZmE1ZThkZDYzZjNhY2M4MDRiY2EwZTMzOWI0ZDE5NTlhOC4uNDU3YWUzNzQ1
ZjQyYzZlODRkMjllNzIyNzFmMTk1NjhmMzJjMDE3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKQEAgLTM1LDM4ICszNSwzOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmlu
Zz4mIGZvdW5kTmFtZXMpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRh
YmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGlu
dDY0X3QmIGZvdW5kSW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgT1ZFUlJJREUgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJz
aW9uLCBpbnQ2NF90JiByb3dJZCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1
YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0X3QgdmVy
c2lvbikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
SURCRGF0YWJhc2VNZXRhRGF0YShUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKFRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJ
ZCwgaW50NjRfdCB2ZXJzaW9uKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpIE9WRVJSSURFIHsgcmV0
dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3Qg
ZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZv
dW5kTmFtZXMsIFZlY3RvcjxJREJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+
JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCBib29s
IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3Qm
IGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmpl
Y3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0
X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CiAKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJbnZhbGlk
UmVjb3JkSWRlbnRpZmllcigpIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8T2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyPigpOyB9CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RT
dG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCS2V5JikgT1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgcHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCBp
bnQ2NF90IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVj
a0N1cnJlbnQpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGtl
eUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRS
ZWNvcmRJZGVudGlmaWVyKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
U3RyaW5nIGdldE9iamVjdFN0b3JlUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpIE9WRVJSSURFIHsgcmV0
dXJuIFN0cmluZygpOyB9CisgICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKFRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFy
T2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0
b3JlUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsg
fQorICAgIHZpcnR1YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKFRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJS
SURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0
b3JDdXJyZW50TnVtYmVyKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkgT1ZF
UlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmpl
Y3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZvdW5k
UmVjb3JkSWRlbnRpZmllcikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1
YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKSBPVkVSUklERSB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNv
cmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmlu
Zz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxJREJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9y
PGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kTXVsdGlFbnRyeUZs
YWdzKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnks
IGludDY0X3QmIGluZGV4SWQpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgYm9vbCBwdXRJ
bmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpIE9WRVJS
SURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8SURCS2V5PigpOyB9Ci0gICAgdmlydHVhbCBib29sIGtl
eUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4m
IGZvdW5kUHJpbWFyeUtleSkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgY3JlYXRlSW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBr
ZXlQYXRoLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50NjRfdCYgaW5kZXhJ
ZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5k
ZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5k
ZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2Jq
ZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5k
ZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKSBPVkVSUklERSB7IHJldHVybiBQYXNz
UmVmUHRyPElEQktleT4oKTsgfQorICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KFRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZv
dW5kUHJpbWFyeUtleSkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJz
b3I6OkRpcmVjdGlvbikgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxDdXJzb3I+KCk7IH0K
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdl
KiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vy
c29yPigpOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vy
c29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURF
IHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29y
OjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKFRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJu
IFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4g
b3Blbk9iamVjdFN0b3JlQ3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJl
Y3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKFRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgT1ZFUlJJREUgeyBy
ZXR1cm4gUGFzc1JlZlB0cjxDdXJzb3I+KCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vy
c29yPiBvcGVuSW5kZXhDdXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSos
IElEQkN1cnNvcjo6RGlyZWN0aW9uKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPEN1cnNv
cj4oKTsgfQogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFu
c2FjdGlvbigpIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+KCk7IH0K
IH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164793</attachid>
            <date>2012-09-19 16:03:24 -0700</date>
            <delta_ts>2012-09-19 16:27:02 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-96663-20120919160249.patch</filename>
            <type>text/plain</type>
            <size>110683</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MDU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTViNmJhYTc1NTAxYzgx
MTJkN2RhNDEwNmZjNjdkNTk4NTg5ZTFiMy4uZTRlNWFmZWUxZTA2ZjUwMGYxNGM4NjZiYjdmYWIz
MTFjNTYxYTYyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDEyLTA5LTEzICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBSZW1v
dmUgImN1cnJlbnQgdHJhbnNhY3Rpb24iIGNvbmNlcHQgZnJvbSBiYWNraW5nIHN0b3JlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjY2MworCisgICAg
ICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgSW5kZXhlZERCIHNob3VsZCBh
bGxvdyBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgdG8gcnVuIGluIHBhcmFsbGVsIHdpdGhpbiBhbmQK
KyAgICAgICAgYWNyb3NzIGRhdGFiYXNlcyB3aXRoaW4gYW4gb3JpZ2luLiBBcyBhbiBpbml0aWFs
IHN0ZXAgdG8gZW5hYmxpbmcgdGhpcywgdGhlCisgICAgICAgIGJhY2tpbmcgc3RvcmUgc2hvdWxk
IG5vdCBob2xkIGEgImN1cnJlbnQgdHJhbnNhY3Rpb24iIC0gaW5zdGVhZCwgb3BlcmF0aW9ucwor
ICAgICAgICBzaG91bGQgYmUgZG9uZSByZWxhdGl2ZSB0byBhIHRyYW5zYWN0aW9uIG1hbmFnZWQg
YnkgdGhlIGRhdGFiYXNlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIG5vIGZ1bmN0aW9uYWwg
Y2hhbmdlcy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5o
OgorICAgICAgICAoSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW50
VmVyc2lvbkludGVybmFsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbXBsKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6OmdldEtleUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJh
Y2tlbmRJbXBsOjpnZXRLZXkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
QmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQkluZGV4QmFja2VuZEltcGwpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlE
QkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRPYmplY3RT
dG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpj
bGVhck9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVs
REJCYWNraW5nU3RvcmU6OmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6
OmtleUV4aXN0c0luT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Zm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNv
cmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUlu
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJp
bWFyeUtleVZpYUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmtleUV4aXN0c0luSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxl
dmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpU
cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKElEQkxldmVsREJC
YWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbik6CisgICAgICAgIChUcmFuc2FjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6
bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjptYWtlSW5kZXhXcml0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhckludGVybmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5k
ZXhJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpvcGVuQ3Vyc29ySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y291bnRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpnZW5lcmF0ZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjp1cGRhdGVLZXlHZW5lcmF0b3IpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwpOgorCiAyMDEyLTA5LTE5ICBUZXJyeSBBbmRlcnNvbiAgPHRkYW5k
ZXJzb25AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gU3RvcmUgdGhlIGNvbnRl
bnRzIHNjYWxlIGZhY3RvciBpbiBQbGF0Zm9ybUNvbnRleHRTa2lhIG9uIGluaXRpYWxpemF0aW9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDVhMjE4ZmNiODEzMDI1OGVjODljODliY2Qx
MGMzNjc3N2ViM2NlMmMuLjdlMTI5NmZjMjc1NTYzNTk5ODIxM2M3NDJmZTU1ZjJkMjQwYWJkMWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDktMTMg
IEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6
IFJlbW92ZSAiY3VycmVudCB0cmFuc2FjdGlvbiIgY29uY2VwdCBmcm9tIGJhY2tpbmcgc3RvcmUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NjYzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KKworICAgICAgICBVcGRhdGUgZmFrZSBj
bGFzcyB3aXRoIG5ldyBtZXRob2Qgc2lnbmF0dXJlcy4KKworICAgICAgICAqIHRlc3RzL0lEQkZh
a2VCYWNraW5nU3RvcmUuaDoKKwogMjAxMi0wOS0xOSAgVGVycnkgQW5kZXJzb24gIDx0ZGFuZGVy
c29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFN0b3JlIHRoZSBjb250ZW50
cyBzY2FsZSBmYWN0b3IgaW4gUGxhdGZvcm1Db250ZXh0U2tpYSBvbiBpbml0aWFsaXphdGlvbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0
b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
aAppbmRleCBmMDYwZTcyZWY0YzZmZDQ3MjU0ZWM3ZjE1NTg4MDkwMzk1YTY1OWRlLi4xMWI1MTFm
YzM5MGZlNjA1ODNmMWU5YWI5NGYwOGU0MWU3YjU1NzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaApAQCAtNDQsMTggKzQ0LDIw
IEBAIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiBjbGFzcyBJREJCYWNraW5nU3RvcmUgOiBwdWJs
aWMgUmVmQ291bnRlZDxJREJCYWNraW5nU3RvcmU+IHsKIHB1YmxpYzoKKyAgICBjbGFzcyBUcmFu
c2FjdGlvbjsKKwogICAgIHZpcnR1YWwgfklEQkJhY2tpbmdTdG9yZSgpIHt9OwogCiAgICAgdmly
dHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpID0g
MDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIFN0cmluZyYgZm91bmRTdHJpbmdWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZEludFZlcnNp
b24sIGludDY0X3QmIGZvdW5kSWQpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0
YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVmVy
c2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oaW50NjRfdCByb3dJZCwgaW50NjRf
dCBpbnRWZXJzaW9uKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEoaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKSA9IDA7CisgICAgdmly
dHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihUcmFuc2FjdGlvbiosIGludDY0
X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikgPSAwOworICAgIHZpcnR1YWwgYm9vbCB1cGRh
dGVJREJEYXRhYmFzZU1ldGFEYXRhKFRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwgY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNv
bnN0IFN0cmluZyYgbmFtZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3Jl
cyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxT
dHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8SURCS2V5UGF0aD4mIGZvdW5kS2V5UGF0aHMsIFZl
Y3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2ln
bmVkT2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5j
cmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOwogCiAgICAgY2xhc3MgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyIDogcHVibGljIFJlZkNvdW50ZWQ8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlm
aWVyPiB7CiAgICAgcHVibGljOgpAQCAtNjQsMjggKzY2LDI4IEBAIHB1YmxpYzoKICAgICB9Owog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IGNyZWF0
ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCkgPSAwOwogCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0
T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3RvcmVS
ZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciop
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVP
YmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwg
aW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRl
S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJvb2wgY2hlY2tDdXJyZW50KSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKSA9IDA7CisgICAgdmlydHVhbCBTdHJp
bmcgZ2V0T2JqZWN0U3RvcmVSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGNsZWFyT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZVJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSA9IDA7CisgICAgdmly
dHVhbCBpbnQ2NF90IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdO
dW1iZXIsIGJvb2wgY2hlY2tDdXJyZW50KSA9IDA7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0
c0luT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
KiBmb3VuZFJlY29yZElkZW50aWZpZXIpID0gMDsKIAogICAgIGNsYXNzIE9iamVjdFN0b3JlUmVj
b3JkQ2FsbGJhY2sgewogICAgIHB1YmxpYzoKICAgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFj
ayhjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqLCBjb25zdCBTdHJpbmcmIHZhbHVl
KSA9IDA7CiAgICAgICAgICB2aXJ0dWFsIH5PYmplY3RTdG9yZVJlY29yZENhbGxiYWNrKCkge307
CiAgICAgfTsKLSAgICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENh
bGxiYWNrJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQo
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
T2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRJ
bmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBWZWN0b3I8
aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPElE
QktleVBhdGg+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3Ms
IFZlY3Rvcjxib29sPiYgZm91bmRNdWx0aUVudHJ5RmxhZ3MpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgY3JlYXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJv
b2wgaXNNdWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRleElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGRlbGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVj
b3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciop
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VpZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhL
ZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgY3JlYXRlSW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9v
bCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4SWQpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSA9IDA7CisgICAgdmly
dHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1h
cnlLZXkpID0gMDsKIAogICAgIGNsYXNzIEN1cnNvciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1cnNv
cj4gewogICAgIHB1YmxpYzoKQEAgLTEwNSwxMCArMTA3LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
dmlydHVhbCB+Q3Vyc29yKCkgeyB9OwogICAgIH07CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24p
ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVLZXlD
dXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJ
REJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+
IG9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0
aW9uKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3Jl
Q3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoVHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7CiAKICAgICBjbGFzcyBU
cmFuc2FjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRyYW5zYWN0aW9uPiB7CiAgICAgcHVibGlj
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA0M2MwNDZiZThiMDc3NDk4YzdkNWFmNzE2MGU4
M2EwMzM5NDk4NjkzLi4wMjIxYjNmMDI1OTNhZDJkMzBhNDVmNjQ3NjMyNTBlYmUyMDI5YmMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTk0LDExICsxOTQsMTEgQEAgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNy
ZWF0ZU9iamVjdFMKICAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwogfQogCi12b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0
YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
ICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRh
dGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewog
ICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZDsKIAotICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2lu
Z1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZShkYXRhYmFzZS0+aWQoKSwgb2JqZWN0U3RvcmUtPm5h
bWUoKSwgb2JqZWN0U3RvcmUtPmtleVBhdGgoKSwgb2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQo
KSwgb2JqZWN0U3RvcmVJZCkpIHsKKyAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+
Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZS0+bmFtZSgpLCBvYmplY3RTdG9yZS0+a2V5UGF0
aCgpLCBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpLCBvYmplY3RTdG9yZUlkKSkgewogICAg
ICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIz
Miw3ICsyMzIsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0
b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3RpbwogCiB2b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCiB7Ci0gICAgZGF0YWJhc2Ut
Pm1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZShkYXRhYmFzZS0+aWQoKSwgb2JqZWN0
U3RvcmUtPmlkKCkpOworICAgIGRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0
U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlLT5p
ZCgpLCBvYmplY3RTdG9yZS0+aWQoKSk7CiAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFz
a0V2ZW50cygpOwogfQogCkBAIC0yODUsNyArMjg1LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWYKICAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFzZS0+aWQoKTsKICAgICBkYXRhYmFz
ZS0+bV92ZXJzaW9uID0gdmVyc2lvbjsKICAgICBkYXRhYmFzZS0+bV9pbnRWZXJzaW9uID0gSURC
RGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwotICAgIGlmICghZGF0YWJhc2UtPm1fYmFj
a2luZ1N0b3JlLT51cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGRhdGFiYXNlSWQsIGRhdGFiYXNl
LT5tX3ZlcnNpb24pIHx8ICFkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPnVwZGF0ZUlEQkRhdGFi
YXNlSW50VmVyc2lvbihkYXRhYmFzZUlkLCBkYXRhYmFzZS0+bV9pbnRWZXJzaW9uKSkgeworICAg
IGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT51cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRh
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBkYXRh
YmFzZS0+bV92ZXJzaW9uKSB8fCAhZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT51cGRhdGVJREJE
YXRhYmFzZUludFZlcnNpb24odHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IGRhdGFiYXNlSWQsIGRhdGFiYXNlLT5tX2ludFZlcnNpb24pKSB7CiAgICAgICAgIGNhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsK
ICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI5Mywx
MyArMjkzLDEzIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmCiAgICAgY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KHRyYW5zYWN0
aW9uKSk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW50VmVyc2lvbklu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW50VmVyc2lv
bkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4g
dHJhbnNhY3Rpb24pCiB7CiAgICAgaW50NjRfdCBkYXRhYmFzZUlkID0gZGF0YWJhc2UtPmlkKCk7
CiAgICAgaW50NjRfdCBvbGRWZXJzaW9uID0gZGF0YWJhc2UtPm1faW50VmVyc2lvbjsKICAgICBB
U1NFUlQodmVyc2lvbiA+IG9sZFZlcnNpb24pOwogICAgIGRhdGFiYXNlLT5tX2ludFZlcnNpb24g
PSB2ZXJzaW9uOwotICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT51cGRhdGVJREJE
YXRhYmFzZUludFZlcnNpb24oZGF0YWJhc2VJZCwgZGF0YWJhc2UtPm1faW50VmVyc2lvbikpIHsK
KyAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+dXBkYXRlSURCRGF0YWJhc2VJbnRW
ZXJzaW9uKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlk
LCBkYXRhYmFzZS0+bV9pbnRWZXJzaW9uKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VS
UiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CiAgICAgICAgIHRy
YW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5k
ZXggNDU4MTI0Y2Y1MmQ4MjQ3YTdlY2Y4ZTg4YjA5NTg1OWZhODAyNTM5Ny4uNzZjNTUyMGZkNjQ2
OTk4Y2JkZmZiMzY0Y2YzZTE3NjZiNWYzMmJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtODYs
NyArODYsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlSW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU9i
amVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2
b2lkIHNldFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4p
OwotICAgIHN0YXRpYyB2b2lkIHNldEludFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgaW50NjRfdCB2ZXJz
aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPik7CisgICAgc3RhdGljIHZvaWQgc2V0SW50VmVyc2lvbkludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+LCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAKICAgICAvLyBUaGVzZSBhcmUgdXNlZCBh
cyBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uIGFib3J0IHRhc2tzLgogICAgIHN0YXRpYyB2b2lkIHJl
bW92ZU9iamVjdFN0b3JlRnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJJbmRleEJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4QmFja2VuZEltcGwuY3BwCmluZGV4IDM4Y2ZjZWM5N2ZiMjcwMTNkYjcxMDRkZjc3
NjIwYWIwZDYyNjA1ZjMuLmEyYjg1YjVlNWM0NzE3MTRhZmQyMGIyOTE2ODNmODUwMmU1YmRiZGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFj
a2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4QmFja2VuZEltcGwuY3BwCkBAIC04MywxMCArODMsMTAgQEAgdm9pZCBJREJJbmRleEJhY2tl
bmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHIKIAogICAgIHN3aXRjaCAoY3Vyc29yVHlwZSkgewogICAgIGNhc2UgSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3I6Ci0gICAgICAgIGJhY2tpbmdTdG9yZUN1cnNv
ciA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKGluZGV4LT5kYXRh
YmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCks
IHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOworICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBp
bmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2Jq
ZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlv
bik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6
SW5kZXhDdXJzb3I6Ci0gICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5iYWNraW5n
U3RvcmUoKS0+b3BlbkluZGV4Q3Vyc29yKGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29i
amVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rp
b24pOworICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCkt
Pm9wZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
aW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBp
bmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJzb3I6CiAgICAg
Y2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZToKQEAgLTEy
NywxMiArMTI3LDEyIEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbktleUN1cnNvcihQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgdW5zCiAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIAotdm9pZCBJ
REJJbmRleEJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQg
SURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCiB7CiAgICAgSURC
X1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsIik7CiAgICAgdWludDMy
X3QgY291bnQgPSAwOwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNv
cihpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCks
IGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5iYWNr
aW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJh
Y2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsK
ICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewogICAgICAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bWJlclZhbHVlKGNvdW50KSk7CiAgICAgICAg
IHJldHVybjsKQEAgLTE0NSwxNSArMTQ1LDE2IEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6
Y291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJCiAg
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudW1iZXJWYWx1
ZShjb3VudCkpOwogfQogCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25D
b2RlJiBlYykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnQiKTsKLSAg
ICBpZiAoIUlEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb24pLT5zY2hl
ZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmNvdW50SW50ZXJuYWws
IHRoaXMsIHJhbmdlLCBjYWxsYmFja3MpKSkKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRy
YW5zYWN0aW9uUHRyKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisgICAg
ICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmNvdW50SW50ZXJuYWwsIHRoaXMsIHJhbmdlLCBj
YWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIAotdm9pZCBJREJJbmRleEJhY2tlbmRJ
bXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQkluZGV4QmFja2Vu
ZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQklu
ZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsIik7CiAKQEAgLTE2Miw3ICsxNjMsNyBAQCB2b2lk
IElEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkluZAogICAgIGlmIChrZXlSYW5nZS0+aXNPbmx5S2V5KCkpCiAgICAg
ICAgIGtleSA9IGtleVJhbmdlLT5sb3dlcigpOwogICAgIGVsc2UgewotICAgICAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5iYWNr
aW5nU3RvcmUoKS0+b3BlbkluZGV4Q3Vyc29yKGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5t
X29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIGtleVJhbmdlLmdldCgpLCBJ
REJDdXJzb3I6Ok5FWFQpOworICAgICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+
IGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4Q3Vy
c29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBpbmRleC0+ZGF0YWJh
c2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCBr
ZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKIAogICAgICAgICBpZiAoIWJhY2tpbmdT
dG9yZUN1cnNvcikgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKQEAgLTE3Miw5ICsxNzMsOSBAQCB2b2lk
IElEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkluZAogICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7
CiAgICAgfQogCi0gICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGluZGV4LT5iYWNraW5n
U3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4
LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksICprZXkpOworICAgIFJl
ZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldFByaW1h
cnlLZXlWaWFJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5k
ZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRl
eC0+aWQoKSwgKmtleSk7CiAKLSAgICBTdHJpbmcgdmFsdWUgPSBpbmRleC0+YmFja2luZ1N0b3Jl
KCktPmdldE9iamVjdFN0b3JlUmVjb3JkKGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29i
amVjdFN0b3JlQmFja2VuZC0+aWQoKSwgKnByaW1hcnlLZXkpOworICAgIFN0cmluZyB2YWx1ZSA9
IGluZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0T2JqZWN0U3RvcmVSZWNvcmQodHJhbnNhY3Rpb24t
PmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5t
X29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgKnByaW1hcnlLZXkpOwogCiAgICAgaWYgKHZhbHVl
LmlzTnVsbCgpKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7CkBAIC0xODgsMTkgKzE4OSwxOSBAQCB2b2lkIElE
QkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQkluZAogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpKTsKIH0KIAotdm9pZCBJREJJbmRleEJhY2tl
bmRJbXBsOjpnZXRLZXlJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQg
SURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24p
CiB7CiAgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCIpOwog
CiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3Ig
PQotICAgICAgICAgICAgaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3Io
aW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBp
bmRleC0+aWQoKSwga2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgICAgICAg
ICBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1f
b2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwga2V5UmFuZ2UuZ2V0KCksIElE
QkN1cnNvcjo6TkVYVCk7CiAKICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewogICAgICAg
ICBjYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxJREJLZXkqPigwKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCS2V5PiBrZXlSZXN1bHQgPSBpbmRleC0+
YmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlWaWFJbmRleChpbmRleC0+ZGF0YWJhc2VJZCgp
LCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAqYmFja2lu
Z1N0b3JlQ3Vyc29yLT5rZXkoKSk7CisgICAgUmVmUHRyPElEQktleT4ga2V5UmVzdWx0ID0gaW5k
ZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgodHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29i
amVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksICpiYWNraW5nU3RvcmVDdXJzb3It
PmtleSgpKTsKICAgICBpZiAoIWtleVJlc3VsdCkgewogICAgICAgICBjYWxsYmFja3MtPm9uU3Vj
Y2VzcyhzdGF0aWNfY2FzdDxJREJLZXkqPigwKSk7CiAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNv
ci0+Y2xvc2UoKTsKQEAgLTIxMSwyNSArMjEyLDI2IEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1w
bDo6Z2V0S2V5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1Jl
CiB9CiAKIAotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4gcHJwS2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4gcHJwS2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0Iik7
CiAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gdGhpczsKICAgICBSZWZQ
dHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7CiAgICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIGlmICghSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbiktPnNjaGVkdWxlVGFzaygKLSAgICAgICAg
ICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0SW50ZXJuYWwsIGluZGV4LCBrZXlSYW5nZSwgY2Fs
bGJhY2tzKSkpCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Cisg
ICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0
SW50ZXJuYWwsIGluZGV4LCBrZXlSYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQogICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7
CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25D
b2RlJiBlYykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6Omdl
dEtleSIpOwogICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IHRoaXM7CiAg
ICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOwogICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBpZiAoIUlEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb24pLT5zY2hlZHVsZVRhc2soCi0g
ICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmdldEtleUludGVybmFsLCBpbmRleCwga2V5
UmFuZ2UsIGNhbGxiYWNrcykpKQorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rp
b25QdHIpOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKKyAgICAgICAgICAg
IGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0S2V5SW50ZXJuYWwsIGluZGV4LCBrZXlSYW5nZSwgY2Fs
bGJhY2tzLCB0cmFuc2FjdGlvbikpKQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaAppbmRleCBlMTE3NDU3
OWQ2MTczYWNlNTg0MDdkYzJiZjUzMzlmMmJmMzliNDBjLi4xNzNjMzJkMDhmZjE0MzNiOTk5MGU1
MDUyMjUwY2M4OWNhNmRhOGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oCkBAIC03OSw5ICs3OSw5IEBAIHByaXZh
dGU6CiAgICAgSURCSW5kZXhCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
KiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
SURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOwogCiAgICAgc3RhdGlj
IHZvaWQgb3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWdu
ZWQgc2hvcnQgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4pOwotICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHN0YXRpYyB2b2lkIGdl
dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+KTsKLSAgICBzdGF0aWMgdm9pZCBnZXRLZXlJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgY291bnRJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIHZv
aWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOworICAgIHN0
YXRpYyB2b2lkIGdldEtleUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
KTsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5jcHAKaW5kZXggNTJiZGE0OWI2OGI1ZGYyYTliZTU4YjA2MTc1MTFjMWI2MTFiYzU3
Mi4uNTBlZGZkNDZjYzBjMmM5OTM0ZGM1ZDVjODlkMmVjNWFkN2VkYmRiYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5jcHAKQEAgLTMzNiwyMiArMzM2LDIwIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBk
YXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lv
bikKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJz
aW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHJv
d0lkLCBpbnQ2NF90IGludFZlcnNpb24pCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0
aW9uKTsKICAgICBpZiAoaW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZl
cnNpb24pCiAgICAgICAgIGludFZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0
SW50VmVyc2lvbjsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGludFZlcnNpb24gPj0gMCwgImlu
dFZlcnNpb24gd2FzICVsbGQiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGludFZlcnNpb24pKTsK
LSAgICBpZiAoIXB1dFZhckludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgRGF0YWJhc2VN
ZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVy
c2lvbiksIGludFZlcnNpb24pKQorICAgIGlmICghcHV0VmFySW50KFRyYW5zYWN0aW9uOjpsZXZl
bERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5j
b2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVyc2lvbiksIGludFZlcnNp
b24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0
X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQog
ewotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgaWYgKCFwdXRTdHJpbmco
bV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShy
b3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKKyAgICBp
ZiAoIXB1dFN0cmluZyhUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2Fj
dGlvbiksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0
YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgcmV0dXJuIHRydWU7CkBAIC01MTksMTEgKzUxNywxMSBAQCBzdGF0aWMgaW50NjRfdCBnZXRO
ZXdPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YQogICAgIHJldHVybiBvYmplY3RTdG9yZUlkOwogfQogCi1ib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQs
IGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVk
T2JqZWN0U3RvcmVJZCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6
OmNyZWF0ZU9iamVjdFN0b3JlIik7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsK
LSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBnZXROZXdPYmplY3RTdG9yZUlkKG1fY3VycmVu
dFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24q
IGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9t
KHRyYW5zYWN0aW9uKTsKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBnZXROZXdPYmplY3RT
dG9yZUlkKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCk7CiAgICAgaWYgKG9iamVjdFN0
b3JlSWQgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTUzNyw1NSArNTM1LDU1IEBA
IGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBk
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleUdlbmVy
YXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVzS2V5ID0gT2Jq
ZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG5hbWUpOwogCi0gICAgYm9vbCBv
ayA9IHB1dFN0cmluZyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7
CisgICAgYm9vbCBvayA9IHB1dFN0cmluZyhsZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVLZXksIG5h
bWUpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVk
IERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBw
dXRJREJLZXlQYXRoKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlQYXRoS2V5LCBrZXlQ
YXRoKTsKKyAgICBvayA9IHB1dElEQktleVBhdGgobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlQYXRo
S2V5LCBrZXlQYXRoKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJu
YWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIG9rID0gcHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBhdXRvSW5jcmVtZW50
S2V5LCBhdXRvSW5jcmVtZW50KTsKKyAgICBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24s
IGF1dG9JbmNyZW1lbnRLZXksIGF1dG9JbmNyZW1lbnQpOwogICAgIGlmICghb2spIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24u
Z2V0KCksIGV2aWN0YWJsZUtleSwgZmFsc2UpOworICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFu
c2FjdGlvbiwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBM
T0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQo
KSwgbGFzdFZlcnNpb25LZXksIDEpOworICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlv
biwgbGFzdFZlcnNpb25LZXksIDEpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9S
KCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG1heElu
ZGV4SWRLZXksIE1pbmltdW1JbmRleElkKTsKKyAgICBvayA9IHB1dEludChsZXZlbERCVHJhbnNh
Y3Rpb24sIG1heEluZGV4SWRLZXksIE1pbmltdW1JbmRleElkKTsKICAgICBpZiAoIW9rKSB7CiAg
ICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0Qm9vbChtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgaGFzS2V5UGF0aEtleSwgIWtleVBhdGguaXNOdWxsKCkpOworICAgIG9rID0g
cHV0Qm9vbChsZXZlbERCVHJhbnNhY3Rpb24sIGhhc0tleVBhdGhLZXksICFrZXlQYXRoLmlzTnVs
bCgpKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhl
ZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0g
cHV0SW50KG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBrZXlHZW5lcmF0b3JDdXJyZW50TnVt
YmVyS2V5LCBLZXlHZW5lcmF0b3JJbml0aWFsTnVtYmVyKTsKKyAgICBvayA9IHB1dEludChsZXZl
bERCVHJhbnNhY3Rpb24sIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXksIEtleUdlbmVyYXRv
ckluaXRpYWxOdW1iZXIpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRl
cm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgb2sgPSBwdXRJbnQobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIG5hbWVzS2V5LCBv
YmplY3RTdG9yZUlkKTsKKyAgICBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVz
S2V5LCBvYmplY3RTdG9yZUlkKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigi
SW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
NTk2LDM1ICs1OTQsMzYgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmpl
Y3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3ZvaWQgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2Jq
ZWN0U3RvcmUiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVs
REJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJU
cmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFt
ZTsKLSAgICBnZXRTdHJpbmcobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIE9iamVjdFN0b3Jl
TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjpOYW1lKSwgb2JqZWN0U3RvcmVOYW1lKTsKKyAgICBnZXRTdHJpbmcobGV2
ZWxEQlRyYW5zYWN0aW9uLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TmFtZSksIG9iamVjdFN0
b3JlTmFtZSk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdl
dCgpLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgMCksIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkKSkpCisgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rp
b24sIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCAwKSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQpKSkKICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9y
LgogCi0gICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShPYmplY3RTdG9yZU5hbWVzS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVOYW1lKSk7CisgICAgbGV2ZWxEQlRyYW5z
YWN0aW9uLT5yZW1vdmUoT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlTmFtZSkpOwogCi0gICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRUcmFuc2Fj
dGlvbi5nZXQoKSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIDApLCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCkpKQorICAgIGlmICghZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBJ
bmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIElu
ZGV4RnJlZUxpc3RLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkp
CiAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KLSAgICBpZiAoIWRlbGV0
ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBJbmRleE1ldGFEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCksIEluZGV4TWV0YURhdGFLZXk6OmVu
Y29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpCisgICAgaWYgKCFkZWxldGVS
YW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkKICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTog
UmVwb3J0IGVycm9yLgogCi0gICAgY2xlYXJPYmplY3RTdG9yZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkKTsKKyAgICBjbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkKTsKIH0KIAotU3RyaW5nIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9i
amVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXkmIGtleSkKK1N0cmluZyBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRP
YmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYga2V5KQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2Jq
ZWN0U3RvcmVSZWNvcmQiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2Fj
dGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsK
KwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKICAgICBWZWN0b3I8Y2hh
cj4gZGF0YTsKIAotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7Ci0gICAgaWYgKCFt
X2N1cnJlbnRUcmFuc2FjdGlvbi0+Z2V0KGxldmVsZGJLZXksIGRhdGEpKQorICAgIGlmICghbGV2
ZWxEQlRyYW5zYWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAogICAgIGludDY0X3QgdmVyc2lvbjsKQEAgLTY3NiwyMyArNjc1LDIzIEBAIHN0
YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhCiAgICAgcmV0dXJuIHZlcnNpb247CiB9CiAKLWJvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIp
Citib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3JkKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsK
ICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVj
b3JkIik7CiAgICAgQVNTRVJUKGtleS5pc1ZhbGlkKCkpOwotICAgIEFTU0VSVChtX2N1cnJlbnRU
cmFuc2FjdGlvbik7Ci0gICAgaW50NjRfdCB2ZXJzaW9uID0gZ2V0TmV3VmVyc2lvbk51bWJlciht
X2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7Cisg
ICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6
bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgaW50NjRfdCB2ZXJzaW9u
ID0gZ2V0TmV3VmVyc2lvbk51bWJlcihsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZWRhdGFLZXkg
PSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBr
ZXkpOwogCiAgICAgVmVjdG9yPGNoYXI+IHY7CiAgICAgdi5hcHBlbmQoZW5jb2RlVmFySW50KHZl
cnNpb24pKTsKICAgICB2LmFwcGVuZChlbmNvZGVTdHJpbmcodmFsdWUpKTsKIAotICAgIGlmICgh
bV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChvYmplY3RTdG9yZWRhdGFLZXksIHYpKQorICAgIGlm
ICghbGV2ZWxEQlRyYW5zYWN0aW9uLT5wdXQob2JqZWN0U3RvcmVkYXRhS2V5LCB2KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5
ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkp
OwotICAgIGlmICghbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChleGlzdHNFbnRyeUtleSwgZW5j
b2RlSW50KHZlcnNpb24pKSkKKyAgICBpZiAoIWxldmVsREJUcmFuc2FjdGlvbi0+cHV0KGV4aXN0
c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBz
dGF0aWNfY2FzdDxMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwpA
QCAtNzAxLDE0ICs3MDAsMTQgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRPYmpl
Y3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2IKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3Jl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQordm9pZCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFyT2Jq
ZWN0U3RvcmUiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVs
REJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJU
cmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFy
dEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKS5lbmNvZGUoKTsK
ICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkICsgMSwgMCkuZW5jb2RlKCk7CiAKLSAgICBkZWxldGVSYW5nZShtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXksIHN0b3BLZXkpOworICAgIGRlbGV0ZVJhbmdl
KGxldmVsREJUcmFuc2FjdGlvbiwgc3RhcnRLZXksIHN0b3BLZXkpOwogfQogCiBQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpCkBAIC03MTYsMzAg
KzcxNSwzMCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOgogICAgIHJldHVybiBMZXZlbERCUmVj
b3JkSWRlbnRpZmllcjo6Y3JlYXRlKCk7CiB9CiAKLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRl
bnRpZmllcikKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVS
ZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZCIpOwotICAgIEFTU0VSVCht
X2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJh
bnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlv
bik7CiAgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVu
dGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNv
cmRJZGVudGlmaWVyKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZURhdGFL
ZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKLSAgICBtX2N1cnJlbnRU
cmFuc2FjdGlvbi0+cmVtb3ZlKG9iamVjdFN0b3JlRGF0YUtleSk7CisgICAgbGV2ZWxEQlRyYW5z
YWN0aW9uLT5yZW1vdmUob2JqZWN0U3RvcmVEYXRhS2V5KTsKIAogICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7Ci0g
ICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShleGlzdHNFbnRyeUtleSk7CisgICAgbGV2
ZWxEQlRyYW5zYWN0aW9uLT5yZW1vdmUoZXhpc3RzRW50cnlLZXkpOwogfQogCiAKLWludDY0X3Qg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK2ludDY0X3QgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAg
ICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjps
ZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6OktleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOwogCiAgICAgaW50NjRfdCBrZXlHZW5lcmF0
b3JDdXJyZW50TnVtYmVyID0gLTE7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAo
bV9jdXJyZW50VHJhbnNhY3Rpb24tPmdldChrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5LCBk
YXRhKSkKKyAgICBpZiAobGV2ZWxEQlRyYW5zYWN0aW9uLT5nZXQoa2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcktleSwgZGF0YSkpCiAgICAgICAgIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIgPSBk
ZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpKTsKICAgICBlbHNlIHsKICAgICAgICAg
Ly8gUHJldmlvdXNseSwgdGhlIGtleSBnZW5lcmF0b3Igc3RhdGUgd2FzIG5vdCBzdG9yZWQgZXhw
bGljaXRseSBidXQgZGVyaXZlZCBmcm9tIHRoZQpAQCAtNzQ4LDcgKzc0Nyw3IEBAIGludDY0X3Qg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2
NF90IGRhdGFiYXNlSWQsCiAgICAgICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9i
amVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1pbklE
QktleSgpKTsKICAgICAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9y
ZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7
CiAKLSAgICAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2Fj
dGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4g
aXQgPSBsZXZlbERCVHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgICAgIGludDY0
X3QgbWF4TnVtZXJpY0tleSA9IDA7CiAKICAgICAgICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7
IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0
LT5uZXh0KCkpIHsKQEAgLTc3MiwxOCArNzcxLDE4IEBAIGludDY0X3QgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQs
CiAgICAgcmV0dXJuIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXI7CiB9CiAKLWJvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJl
ciwgYm9vbCBjaGVja0N1cnJlbnQpCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJl
VXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkKIHsKLSAgICBBU1NFUlQo
bV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRy
YW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rp
b24pOwogCiAgICAgaWYgKGNoZWNrQ3VycmVudCkgewotICAgICAgICBpbnQ2NF90IGN1cnJlbnRO
dW1iZXIgPSBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQpOworICAgICAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXIgPSBnZXRLZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKICAg
ICAgICAgaWYgKG5ld051bWJlciA8PSBjdXJyZW50TnVtYmVyKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcik7Ci0gICAgYm9vbCBvayA9IHB1dEludChtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQo
KSwga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgbmV3TnVtYmVyKTsKKyAgICBib29sIG9r
ID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktl
eSwgbmV3TnVtYmVyKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJu
YWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzkxLDE0
ICs3OTAsMTQgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBkYXRhYmEKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtl
eSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCiti
b29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCiB7CiAgICAgSURCX1RSQUNFKCJJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlIik7Ci0gICAgQVNT
RVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVs
REJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5z
YWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IE9iamVjdFN0b3Jl
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAgICAgVmVj
dG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAoIW1fY3VycmVudFRyYW5zYWN0aW9uLT5nZXQobGV2
ZWxkYktleSwgZGF0YSkpCisgICAgaWYgKCFsZXZlbERCVHJhbnNhY3Rpb24tPmdldChsZXZlbGRi
S2V5LCBkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaW50NjRfdCB2ZXJzaW9u
OwpAQCAtODExLDEzICs4MTAsMTMgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlF
eGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdAogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZvckVhY2hPYmplY3RT
dG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2Jq
ZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYgY2FsbGJhY2spCitib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmZvckVhY2hPYmplY3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smIGNhbGxiYWNrKQogewotICAgIEFTU0VSVCht
X2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJh
bnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlv
bik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURCS2V5KCkpOwogICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4SURCS2V5KCkpOwogCi0gICAgT3duUHRyPExldmVs
REJJdGVyYXRvcj4gaXQgPSBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsK
KyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGxldmVsREJUcmFuc2FjdGlvbi0+Y3Jl
YXRlSXRlcmF0b3IoKTsKICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQo
KSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewog
ICAgICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7CiAgICAgICAgIGNvbnN0
IGNoYXIqIGxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOwpAQCAtOTM1LDExICs5MzQsMTEgQEAgc3Rh
dGljIGludDY0X3QgZ2V0TmV3SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQKICAgICByZXR1cm4gaW5kZXhJZDsKIH0KIAotYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBr
ZXlQYXRoLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50NjRfdCYgaW5kZXhJ
ZCkKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGgsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRleElk
KQogewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgi
KTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGluZGV4SWQgPSBnZXRO
ZXdJbmRleElkKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRy
YW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBpbmRl
eElkID0gZ2V0TmV3SW5kZXhJZChsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQpOwogICAgIGlmIChpbmRleElkIDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC05NDgsMjUgKzk0NywyNSBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0
ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZQogICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIEluZGV4TWV0YURhdGFLZXk6OktleVBhdGgp
OwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtdWx0aUVudHJ5S2V5ID0gSW5kZXhNZXRhRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIEluZGV4TWV0YURh
dGFLZXk6Ok11bHRpRW50cnkpOwogCi0gICAgYm9vbCBvayA9IHB1dFN0cmluZyhtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwgbmFtZUtleSwgbmFtZSk7CisgICAgYm9vbCBvayA9IHB1dFN0cmlu
ZyhsZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVLZXksIG5hbWUpOwogICAgIGlmICghb2spIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJbmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgb2sgPSBwdXRCb29sKG1fY3VycmVudFRyYW5zYWN0
aW9uLmdldCgpLCB1bmlxdWVLZXksIGlzVW5pcXVlKTsKKyAgICBvayA9IHB1dEJvb2wobGV2ZWxE
QlRyYW5zYWN0aW9uLCB1bmlxdWVLZXksIGlzVW5pcXVlKTsKICAgICBpZiAoIW9rKSB7CiAgICAg
ICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBEQiBlcnJvci4iKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG9rID0gcHV0SURCS2V5UGF0aChtX2N1cnJlbnRUcmFu
c2FjdGlvbi5nZXQoKSwga2V5UGF0aEtleSwga2V5UGF0aCk7CisgICAgb2sgPSBwdXRJREJLZXlQ
YXRoKGxldmVsREJUcmFuc2FjdGlvbiwga2V5UGF0aEtleSwga2V5UGF0aCk7CiAgICAgaWYgKCFv
aykgewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBvayA9IHB1dEJvb2wobV9jdXJyZW50
VHJhbnNhY3Rpb24uZ2V0KCksIG11bHRpRW50cnlLZXksIGlzTXVsdGlFbnRyeSk7CisgICAgb2sg
PSBwdXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwgbXVsdGlFbnRyeUtleSwgaXNNdWx0aUVudHJ5
KTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZCBE
QiBlcnJvci4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTc1LDE1ICs5NzQsMTUgQEAg
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQordm9pZCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0
ZUluZGV4Iik7Ci0gICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERC
VHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJh
bnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRl
eE1ldGFEYXRhU3RhcnQgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwgMCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4TWV0
YURhdGFFbmQgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRy
YW5zYWN0aW9uLmdldCgpLCBpbmRleE1ldGFEYXRhU3RhcnQsIGluZGV4TWV0YURhdGFFbmQpKSB7
CisgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIGluZGV4TWV0YURhdGFT
dGFydCwgaW5kZXhNZXRhRGF0YUVuZCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJJbnRlcm5hbCBJ
bmRleGVkIERCIGVycm9yLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTkxLDI3ICs5
OTAsMjcgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmUKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
aW5kZXhEYXRhU3RhcnQgPSBJbmRleERhdGFLZXk6OmVuY29kZU1pbktleShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBpbmRleElkKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRh
RW5kID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCk7CiAKLSAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBpbmRleERhdGFTdGFydCwgaW5kZXhEYXRhRW5kKSkgeworICAgIGlmICghZGVsZXRl
UmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBpbmRleERhdGFTdGFydCwgaW5kZXhEYXRhRW5kKSkg
ewogICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWQgREIgZXJyb3IuIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0
SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBPYmplY3RTdG9y
ZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCitib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IE9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKICAgICBJREJfVFJBQ0UoIklE
QkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZCIpOwogICAgIEFTU0VS
VChrZXkuaXNWYWxpZCgpKTsKICAgICBBU1NFUlQoaW5kZXhJZCA+PSBNaW5pbXVtSW5kZXhJZCk7
CiAgICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlm
aWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJ
ZGVudGlmaWVyKTsKIAotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2
ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxE
QlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGlu
ZGV4RGF0YUtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIGVuY29kZUlEQktleShrZXkpLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+
cHJpbWFyeUtleSgpKTsKIAogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwogICAgIGRhdGEuYXBwZW5k
KGVuY29kZVZhckludChsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+dmVyc2lvbigpKSk7CiAgICAg
ZGF0YS5hcHBlbmQobGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CiAKLSAg
ICByZXR1cm4gbV9jdXJyZW50VHJhbnNhY3Rpb24tPnB1dChpbmRleERhdGFLZXksIGRhdGEpOwor
ICAgIHJldHVybiBsZXZlbERCVHJhbnNhY3Rpb24tPnB1dChpbmRleERhdGFLZXksIGRhdGEpOwog
fQogCiBzdGF0aWMgYm9vbCBmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwoTGV2ZWxEQlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiB0YXJnZXQsIFZlY3Rv
cjxjaGFyPiYgZm91bmRLZXkpCkBAIC0xMDQyLDcgKzEwNDEsNyBAQCBzdGF0aWMgYm9vbCBmaW5k
R3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90LCBj
b25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKQorYm9vbCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QsIGludDY0X3QsIGludDY0X3QsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciopCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXNuJ3QgbmVlZGVkIHNpbmNlIHdl
IGludmFsaWRhdGUgaW5kZXggZGF0YSB2aWEgdGhlIHZlcnNpb24gbnVtYmVyIG1lY2hhbmlzbS4K
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwNTksMTMgKzEwNTgsMTQgQEAgc3RhdGljIGJvb2wgdmVy
c2lvbkV4aXN0cyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGkKICAgICByZXR1cm4gZGVjb2RlSW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSkg
PT0gdmVyc2lvbjsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5J
bmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmlt
YXJ5S2V5KQorYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBr
ZXksIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkKIHsKICAgICBJREJfVFJB
Q0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4Iik7CiAgICAgQVNTRVJU
KGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuaXNFbXB0eSgpKTsKIAorICAgIExldmVsREJUcmFuc2Fj
dGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlv
bkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0g
SW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
a2V5KTsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fY3VycmVudFRyYW5zYWN0
aW9uLT5jcmVhdGVJdGVyYXRvcigpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0g
bGV2ZWxEQlRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwogICAgIGl0LT5zZWVrKGxldmVs
ZGJLZXkpOwogCiAgICAgZm9yICg7OykgewpAQCAtMTA4MCw5ICsxMDgwLDkgQEAgYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3QKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZm91bmRF
bmNvZGVkUHJpbWFyeUtleS5hcHBlbmQocCwgaXQtPnZhbHVlKCkuZW5kKCkgLSBwKTsKIAotICAg
ICAgICBpZiAoIXZlcnNpb25FeGlzdHMobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKSB7
CisgICAgICAgIGlmICghdmVyc2lvbkV4aXN0cyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKSB7CiAg
ICAgICAgICAgICAvLyBEZWxldGUgc3RhbGUgaW5kZXggZGF0YSBlbnRyeSBhbmQgY29udGludWUu
Ci0gICAgICAgICAgICBtX2N1cnJlbnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSk7Cisg
ICAgICAgICAgICBsZXZlbERCVHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpOwogICAgICAg
ICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0x
MDkxLDEzICsxMDkxLDEyIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUlu
SW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0CiAgICAgfQogfQogCi1Q
YXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZp
YUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQorUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVs
REJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCiB7CiAgICAgSURC
X1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgiKTsK
LSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOwogCiAgICAgVmVjdG9yPGNoYXI+IGZv
dW5kRW5jb2RlZFByaW1hcnlLZXk7Ci0gICAgaWYgKGZpbmRLZXlJbkluZGV4KGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsK
KyAgICBpZiAoZmluZEtleUluSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIGtleSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKICAgICAgICAg
UmVmUHRyPElEQktleT4gcHJpbWFyeUtleTsKICAgICAgICAgZGVjb2RlSURCS2V5KGZvdW5kRW5j
b2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleS5lbmQoKSwgcHJp
bWFyeUtleSk7CiAgICAgICAgIHJldHVybiBwcmltYXJ5S2V5LnJlbGVhc2UoKTsKQEAgLTExMDYs
MTMgKzExMDUsMTIgQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXMKICAgICByZXR1cm4gMDsKIH0K
IAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpCitib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJl
ZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZl
bERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4Iik7Ci0gICAgQVNTRVJUKG1fY3VycmVu
dFRyYW5zYWN0aW9uKTsKIAogICAgIFZlY3RvcjxjaGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5
OwotICAgIGlmICghZmluZEtleUluSW5kZXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCwgaW5kZXhLZXksIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKQorICAgIGlmICghZmluZEtl
eUluSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQs
IGluZGV4S2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgZGVjb2RlSURCS2V5KGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgZm91
bmRFbmNvZGVkUHJpbWFyeUtleS5lbmQoKSwgZm91bmRQcmltYXJ5S2V5KTsKQEAgLTE2ODksNTYg
KzE2ODcsNTYgQEAgYm9vbCBpbmRleEN1cnNvck9wdGlvbnMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQKIAogfQogCi1QYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0
U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQor
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7
CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVD
dXJzb3IiKTsKLSAgICBBU1NFUlQobV9jdXJyZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJU
cmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFu
c2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9u
czsKLSAgICBpZiAoIW9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhtX2N1cnJlbnRUcmFuc2FjdGlv
bi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vy
c29yT3B0aW9ucykpCisgICAgaWYgKCFvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMobGV2ZWxEQlRy
YW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0aW9uLCBj
dXJzb3JPcHRpb25zKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPE9iamVjdFN0b3Jl
Q3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJy
ZW50VHJhbnNhY3Rpb24uZ2V0KCksIGN1cnNvck9wdGlvbnMpOworICAgIFJlZlB0cjxPYmplY3RT
dG9yZUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3JlYXRlKGxl
dmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7CiAgICAgaWYgKCFjdXJzb3ItPmZpcnN0
U2VlaygpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgp
OwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29y
OjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJz
b3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IiKTsKLSAgICBBU1NFUlQobV9jdXJy
ZW50VHJhbnNhY3Rpb24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0
aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwog
ICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKLSAgICBpZiAoIW9iamVjdFN0b3JlQ3Vy
c29yT3B0aW9ucyhtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCisgICAgaWYgKCFvYmpl
Y3RTdG9yZUN1cnNvck9wdGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgUmVmUHRyPE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gT2Jq
ZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCks
IGN1cnNvck9wdGlvbnMpOworICAgIFJlZlB0cjxPYmplY3RTdG9yZUtleUN1cnNvckltcGw+IGN1
cnNvciA9IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKGxldmVsREJUcmFuc2FjdGlv
biwgY3Vyc29yT3B0aW9ucyk7CiAgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwogfQogCi1QYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVu
SW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRp
cmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwg
SURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yIik7Ci0gICAgQVNTRVJUKG1fY3Vy
cmVudFRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2Fj
dGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsK
ICAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7Ci0gICAgaWYgKCFpbmRleEN1cnNvck9w
dGlvbnMobV9jdXJyZW50VHJhbnNhY3Rpb24uZ2V0KCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQorICAgIGlmICgh
aW5kZXhDdXJzb3JPcHRpb25zKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgaW5kZXhJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGN1cnNvciA9IElu
ZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBjdXJz
b3JPcHRpb25zKTsKKyAgICBSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRl
eEtleUN1cnNvckltcGw6OmNyZWF0ZShsZXZlbERCVHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMp
OwogICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQor
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3BlbkluZGV4Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5J
bmRleEN1cnNvciIpOwotICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CisgICAgTGV2
ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxE
QlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JP
cHRpb25zOwotICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25zKG1fY3VycmVudFRyYW5zYWN0aW9u
LmdldCgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCByYW5nZSwgZGlyZWN0
aW9uLCBjdXJzb3JPcHRpb25zKSkKKyAgICBpZiAoIWluZGV4Q3Vyc29yT3B0aW9ucyhsZXZlbERC
VHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBk
aXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8
SW5kZXhDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEN1cnNvckltcGw6OmNyZWF0ZShtX2N1cnJl
bnRUcmFuc2FjdGlvbi5nZXQoKSwgY3Vyc29yT3B0aW9ucyk7CisgICAgUmVmUHRyPEluZGV4Q3Vy
c29ySW1wbD4gY3Vyc29yID0gSW5kZXhDdXJzb3JJbXBsOjpjcmVhdGUobGV2ZWxEQlRyYW5zYWN0
aW9uLCBjdXJzb3JPcHRpb25zKTsKICAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCiAgICAg
ICAgIHJldHVybiAwOwogCkBAIC0xNzYyLDI1ICsxNzYwLDI2IEBAIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbihJREJMZXZlbERCQmFja2luZ1N0b3JlKiBi
YWNraW5nCiAKIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2lu
KCkKIHsKLSAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbik7
Ci0gICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uID0gTGV2ZWxEQlRyYW5z
YWN0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0KCkpOworICAgIElEQl9UUkFD
RSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2luIik7CisgICAgQVNT
RVJUKCFtX3RyYW5zYWN0aW9uKTsKKyAgICBtX3RyYW5zYWN0aW9uID0gTGV2ZWxEQlRyYW5zYWN0
aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0KCkpOwogfQogCiBib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQoKQogewogICAgIElEQl9UUkFD
RSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCIpOwotICAgIEFT
U0VSVChtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24pOwotICAgIGJvb2wgcmVz
dWx0ID0gbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uLT5jb21taXQoKTsKLSAg
ICBtX2JhY2tpbmdTdG9yZS0+bV9jdXJyZW50VHJhbnNhY3Rpb24uY2xlYXIoKTsKKyAgICBBU1NF
UlQobV90cmFuc2FjdGlvbik7CisgICAgYm9vbCByZXN1bHQgPSBtX3RyYW5zYWN0aW9uLT5jb21t
aXQoKTsKKyAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQog
ewogICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJv
bGxiYWNrIik7Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlv
bik7Ci0gICAgbV9iYWNraW5nU3RvcmUtPm1fY3VycmVudFRyYW5zYWN0aW9uLT5yb2xsYmFjaygp
OwotICAgIG1fYmFja2luZ1N0b3JlLT5tX2N1cnJlbnRUcmFuc2FjdGlvbi5jbGVhcigpOworICAg
IEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKKyAgICBtX3RyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwor
ICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKIH0KIAogYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpiYWNraW5nU3RvcmVFeGlzdHMoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5o
CmluZGV4IDczMzkyMjY5MDEzMTUyNTBmMzVhODhmYTI1MjViZGUyZmM3OGIzMTkuLjc3Y2IwNmU3
ODVhZjgwOTgwOTdiOWU5MmM4NmZlMWYyYTdlZGY2NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKQEAg
LTQ3LDM2ICs0NywzNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFt
ZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24s
IGludDY0X3QmIGZvdW5kSW50VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCk7CiAgICAgdmlydHVh
bCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOwot
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbik7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFi
YXNlSW50VmVyc2lvbihpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOworICAgIHZp
cnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOworICAgIHZp
cnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbik7CiAgICAgdmly
dHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0
X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxJREJLZXlQ
YXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFn
cyk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVt
ZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCk7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmpl
Y3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlm
aWVyPiBjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOwotICAgIHZpcnR1YWwgU3RyaW5n
IGdldE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3RvcmVS
ZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciop
OwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3Rv
cmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgaW50NjRfdCBnZXRL
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCk7Ci0gICAgdmlydHVhbCBib29sIGtleUV4
aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNv
cmRJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpOworICAgIHZpcnR1YWwgYm9vbCBwdXRPYmpl
Y3RTdG9yZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOworICAgIHZpcnR1YWwgdm9p
ZCBjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZU9iamVjdFN0b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRh
dGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdT
dGF0ZSwgYm9vbCBjaGVja0N1cnJlbnQpOworICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9i
amVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpOwogCi0gICAgdmlydHVhbCBib29s
IGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpOworICAgIHZpcnR1YWwgYm9v
bCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJl
Y29yZENhbGxiYWNrJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5kZXhlcyhpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElk
cywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxJREJLZXlQYXRoPiYgZm91bmRL
ZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzLCBWZWN0b3I8Ym9vbD4mIGZv
dW5kTXVsdGlFbnRyeUZsYWdzKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBpbnQ2
NF90JiBpbmRleElkKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7Ci0gICAgdmly
dHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBP
YmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5k
ZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopOwot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KTsKLQot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFu
Z2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNv
cj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlx
dWUsIGJvb2wgaXNNdWx0aUVudHJ5LCBpbnQ2NF90JiBpbmRleElkKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOworICAgIHZp
cnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciopOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciopOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRl
eChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CisgICAg
dmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1h
cnlLZXkpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3Jl
S2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6
OkRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0
b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6
OkRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5
Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5n
ZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29y
PiBvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwogCiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpOwogCkBAIC04NiwxMyArODYs
MTIgQEAgcHJvdGVjdGVkOgogICAgIElEQkxldmVsREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBQYXNzT3duUHRyPExldmVsREJE
YXRhYmFzZT4pOwogCiBwcml2YXRlOgotICAgIGJvb2wgZmluZEtleUluSW5kZXgoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5JiwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KTsKKyAgICBib29s
IGZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJ
REJLZXkmLCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpOwogCiAgICAgU3Ry
aW5nIG1faWRlbnRpZmllcjsKICAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2Zh
Y3Rvcnk7CiAgICAgT3duUHRyPExldmVsREJEYXRhYmFzZT4gbV9kYjsKICAgICBPd25QdHI8TGV2
ZWxEQkNvbXBhcmF0b3I+IG1fY29tcGFyYXRvcjsKLSAgICBSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0
aW9uPiBtX2N1cnJlbnRUcmFuc2FjdGlvbjsKIAogICAgIGNsYXNzIFRyYW5zYWN0aW9uIDogcHVi
bGljIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24gewogICAgIHB1YmxpYzoKQEAgLTEwMSw5
ICsxMDAsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBib29sIGNvbW1pdCgpOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKTsKIAorICAgICAgICBzdGF0aWMgTGV2ZWxEQlRy
YW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qPih0cmFuc2FjdGlvbikt
Pm1fdHJhbnNhY3Rpb24uZ2V0KCk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAg
IFRyYW5zYWN0aW9uKElEQkxldmVsREJCYWNraW5nU3RvcmUqKTsKICAgICAgICAgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZSogbV9iYWNraW5nU3RvcmU7CisgICAgICAgIFJlZlB0cjxMZXZlbERCVHJh
bnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CiAgICAgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5jcHAKaW5kZXggMmZhNWMwODRjN2Q1NjUzNDg2MWRjMWY4NTc1N2UyNzE4MTQ1NzdmNC4u
ODA1YjcxNTI0MDYwMTlhZmY4MGMwZTBhOWI4MDgyNWQwZWYwNWFjZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAKQEAgLTg2LDE4ICs4NiwxOCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1Jl
ZgogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKICAgICBpZiAoIXRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsLCBvYmplY3RTdG9yZSwga2V5UmFu
Z2UsIGNhbGxiYWNrcykpKQorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGtleVJhbmdlLCBj
YWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0
cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmdldEludGVybmFsIik7CiAgICAgUmVmUHRyPElEQktleT4ga2V5OwogICAgIGlmIChrZXlSYW5n
ZS0+aXNPbmx5S2V5KCkpCiAgICAgICAgIGtleSA9IGtleVJhbmdlLT5sb3dlcigpOwogICAgIGVs
c2UgewotICAgICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9y
ZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vy
c29yKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBrZXlSYW5n
ZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3Jl
KCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGtl
eVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogICAgICAgICBpZiAoIWJhY2tpbmdTdG9y
ZUN1cnNvcikgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEw
Niw3ICsxMDYsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgICAgICBiYWNraW5nU3Rv
cmVDdXJzb3ItPmNsb3NlKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHdpcmVEYXRhID0gb2JqZWN0
U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJlY29yZChvYmplY3RTdG9yZS0+
ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSk7CisgICAgU3RyaW5nIHdpcmVE
YXRhID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJlY29yZCh0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFi
YXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksICprZXkpOwogICAgIGlmICh3aXJlRGF0YS5pc051
bGwoKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CkBAIC0xNTQsMTIgKzE1NCwx
MiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9pbmRleEtleXMoaW5kZXhLZXlzKQogICAgIHsgfQog
Ci0gICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUs
CisgICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUs
IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSURCS2V5KiBw
cmltYXJ5S2V5ID0gMCwgU3RyaW5nKiBlcnJvck1lc3NhZ2UgPSAwKQogICAgIHsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgaWYgKCFhZGRpbmdLZXlBbGxvd2VkKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwKKyAgICAgICAgICAgIGlmICghYWRkaW5nS2V5QWxsb3dlZChi
YWNraW5nU3RvcmUsIHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRl
eElkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtX2luZGV4S2V5cylbaV0u
Z2V0KCksIHByaW1hcnlLZXkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkK
ICAgICAgICAgICAgICAgICAgICAgKmVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJVbmFi
bGUgdG8gYWRkIGtleSB0byBpbmRleCAnJXMnOiBhdCBsZWFzdCBvbmUga2V5IGRvZXMgbm90IHNh
dGlzZnkgdGhlIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIsCkBAIC0xNzAsMTIgKzE3MCwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgd3JpdGVJ
bmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSBj
b25zdAorICAgIGJvb2wgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9y
ZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCkgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbmRl
eEtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghYmFja2luZ1N0b3JlLmRlbGV0
ZUluZGV4RGF0YUZvclJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBy
ZWNvcmRJZGVudGlmaWVyKSkKKyAgICAgICAgICAgIGlmICghYmFja2luZ1N0b3JlLmRlbGV0ZUlu
ZGV4RGF0YUZvclJlY29yZCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhJZCwgcmVjb3JkSWRlbnRpZmllcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3JkKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICoobV9pbmRleEtleXMpW2ldLmdldCgp
LCByZWNvcmRJZGVudGlmaWVyKSkKKyAgICAgICAgICAgIGlmICghYmFja2luZ1N0b3JlLnB1dElu
ZGV4RGF0YUZvclJlY29yZCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhJZCwgKihtX2luZGV4S2V5cylbaV0uZ2V0KCksIHJlY29yZElkZW50aWZpZXIpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTE4NSw3ICsxODUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAKLSAgICBib29sIGFk
ZGluZ0tleUFsbG93ZWQoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsCisgICAgYm9vbCBh
ZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSURCS2V5KiBpbmRleEtleSwg
Y29uc3QgSURCS2V5KiBwcmltYXJ5S2V5KSBjb25zdAogICAgIHsKQEAgLTE5Myw3ICsxOTMsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgUmVmUHRyPElE
QktleT4gZm91bmRQcmltYXJ5S2V5OwotICAgICAgICBib29sIGZvdW5kID0gYmFja2luZ1N0b3Jl
LmtleUV4aXN0c0luSW5kZXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKmlu
ZGV4S2V5LCBmb3VuZFByaW1hcnlLZXkpOworICAgICAgICBib29sIGZvdW5kID0gYmFja2luZ1N0
b3JlLmtleUV4aXN0c0luSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsICppbmRleEtleSwgZm91bmRQcmltYXJ5S2V5KTsKICAgICAgICAgaWYgKCFm
b3VuZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAocHJpbWFyeUtleSAm
JiBmb3VuZFByaW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtleSkpCkBAIC0yMDYsNyArMjA2LDcg
QEAgcHJpdmF0ZToKIH07CiB9CiAKLXN0YXRpYyBib29sIG1ha2VJbmRleFdyaXRlcnMoSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmlt
YXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPFN0cmluZz4gaW5kZXhO
YW1lcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhL
ZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRl
cnMsIFN0cmluZyogZXJyb3JNZXNzYWdlKQorc3RhdGljIGJvb2wgbWFrZUluZGV4V3JpdGVycyhQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1h
cnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8U3RyaW5nPiBpbmRleE5h
bWVzLCBjb25zdCBWZWN0b3I8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtl
eXM+JiBpbmRleEtleXMsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3JpdGVy
cywgU3RyaW5nKiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKGluZGV4TmFtZXMuc2l6ZSgp
ID09IGluZGV4S2V5cy5zaXplKCkpOwogCkBAIC0yMzAsNiArMjMwLDcgQEAgc3RhdGljIGJvb2wg
bWFrZUluZGV4V3JpdGVycyhJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjwKIAogICAgICAgICBPd25QdHI8SW5kZXhXcml0ZXI+IGluZGV4V3JpdGVyKGFk
b3B0UHRyKG5ldyBJbmRleFdyaXRlcihpbmRleC0+bWV0YWRhdGEoKSwga2V5cykpKTsKICAgICAg
ICAgaWYgKCFpbmRleFdyaXRlci0+dmVyaWZ5SW5kZXhLZXlzKCpvYmplY3RTdG9yZS0+YmFja2lu
Z1N0b3JlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+aWQoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LT5pZCgpLCBwcmlt
YXJ5S2V5LmdldCgpLCBlcnJvck1lc3NhZ2UpKSB7CkBAIC0yNDIsMjEgKzI0MywyMiBAQCBzdGF0
aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJp
bWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJ
bmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQ
YXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGlu
ZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIpCiB7CiAgICAgSURCX1RSQUNFKCJJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMiKTsKICAgICBSZWZQdHI8SURC
S2V5PiBwcmltYXJ5S2V5ID0gcHJwUHJpbWFyeUtleTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpm
cm9tKHRyYW5zYWN0aW9uUHRyKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBjb3VsZCBi
ZSBhc3luY2hyb25vdXMsIGJ1dCB3ZSBuZWVkIHRvIGV2YWx1YXRlIGlmIGl0J3Mgd29ydGggdGhl
IGV4dHJhIGNvbXBsZXhpdHkuCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gYmFja2luZ1N0b3JlKCktPmNy
ZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUoKS0+
a2V5RXhpc3RzSW5PYmplY3RTdG9yZShkYXRhYmFzZUlkKCksIGlkKCksICpwcmltYXJ5S2V5LCBy
ZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgeworICAgIGlmICghYmFja2luZ1N0b3JlKCktPmtleUV4
aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IGRhdGFiYXNlSWQoKSwgaWQoKSwgKnByaW1hcnlLZXksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkp
KSB7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CiAgICAg
U3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModGhpcywgcHJp
bWFyeUtleSwgZmFsc2UsIGluZGV4TmFtZXMsIGluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVy
cm9yTWVzc2FnZSkpIHsKKyAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHRo
aXMsIHByaW1hcnlLZXksIGZhbHNlLCBpbmRleE5hbWVzLCBpbmRleEtleXMsICZpbmRleFdyaXRl
cnMsICZlcnJvck1lc3NhZ2UpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRlYWwgd2l0
aCBlcnJvck1lc3NhZ2UgaGVyZS4gbWFrZUluZGV4V3JpdGVycyBvbmx5IGZhaWxzIG9uIHVuaXF1
ZW5lc3MgY29uc3RyYWludCBlcnJvcnMuCiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwog
ICAgICAgICByZXR1cm47CkBAIC0yNjYsNiArMjY4LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXks
IGMKICAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdl
dCgpOwogICAgICAgICBpZiAoIWluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVu
dGlmaWVyLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
YmFja2luZ1N0b3JlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZUlkKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXhlcy5nZXQoaW5kZXhXcml0ZXItPmluZGV4TmFtZSgpKS0+
aWQoKSkpIHsKQEAgLTI5OCw5ICszMDEsMTAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpzZXRJbmRleGVzUmVhZHlJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKICAg
ICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiB9CiAKLXZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBQ
YXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0
b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cykKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9k
ZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9uLCBQYXNzT3duUHRyPFZl
Y3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlz
PiA+IHBvcEluZGV4S2V5cykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnB1dEludGVybmFsIik7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9u
LT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7CiAgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKICAgICBSZWZQdHI8SURCS2V5PiBr
ZXkgPSBwcnBLZXk7CkBAIC0zMTEsNyArMzE1LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwK
ICAgICBib29sIGtleVdhc0dlbmVyYXRlZCA9IGZhbHNlOwogCiAgICAgaWYgKHB1dE1vZGUgIT0g
Q3Vyc29yVXBkYXRlICYmIGF1dG9JbmNyZW1lbnQgJiYgIWtleSkgewotICAgICAgICBSZWZQdHI8
SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdlbmVyYXRlS2V5KCk7CisgICAgICAg
IFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBvYmplY3RTdG9yZS0+Z2VuZXJhdGVLZXkodHJh
bnNhY3Rpb24pOwogICAgICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOwogICAgICAgICBpZiAo
IWF1dG9JbmNLZXktPmlzVmFsaWQoKSkgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIs
ICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7CkBAIC0zMjMsMjEgKzMy
NywyMSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgIEFTU0VSVChrZXkgJiYga2V5LT5p
c1ZhbGlkKCkpOwogCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9y
ZSgpLT5jcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOwotICAgIGlmIChwdXRNb2RlID09
IEFkZE9ubHkgJiYgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVj
dFN0b3JlKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5
LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgeworICAgIGlmIChwdXRNb2RlID09IEFkZE9ubHkg
JiYgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJh
c2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkp
IHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMg
aW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBW
ZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBTdHJpbmcgZXJy
b3JNZXNzYWdlOwotICAgIGlmICghbWFrZUluZGV4V3JpdGVycyhvYmplY3RTdG9yZS5nZXQoKSwg
a2V5LCBrZXlXYXNHZW5lcmF0ZWQsICppbmRleE5hbWVzLCAqaW5kZXhLZXlzLCAmaW5kZXhXcml0
ZXJzLCAmZXJyb3JNZXNzYWdlKSkgeworICAgIGlmICghbWFrZUluZGV4V3JpdGVycyh0cmFuc2Fj
dGlvbiwgb2JqZWN0U3RvcmUuZ2V0KCksIGtleSwga2V5V2FzR2VuZXJhdGVkLCAqaW5kZXhOYW1l
cywgKmluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKICAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsIGVycm9yTWVzc2FnZSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgLy8gQmVmb3JlIHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlv
bi4gIEFmdGVyIHRoaXMgcG9pbnQsIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9m
IGVycm9yLgogCi0gICAgaWYgKCFvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPnB1dE9iamVj
dFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgp
LCAqa2V5LCB2YWx1ZS0+dG9XaXJlU3RyaW5nKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7
CisgICAgaWYgKCFvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPnB1dE9iamVjdFN0b3JlUmVj
b3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+
ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgdmFsdWUtPnRvV2lyZVN0cmlu
ZygpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dO
X0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CiAgICAgICAg
IHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CkBAIC0zNDcsNiArMzUxLDcg
QEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3Jp
dGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwogICAgICAgICBpZiAoIWluZGV4V3JpdGVyLT53
cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPm1faWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZ2V0KGluZGV4V3Jp
dGVyLT5pbmRleE5hbWUoKSktPmlkKCkpKSB7CkBAIC0zNTgsMzIgKzM2MywzMyBAQCB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPAogICAgIH0KIAogICAgIGlmIChhdXRvSW5jcmVtZW50ICYmIHB1dE1v
ZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkK
LSAgICAgICAgb2JqZWN0U3RvcmUtPnVwZGF0ZUtleUdlbmVyYXRvcihrZXkuZ2V0KCksICFrZXlX
YXNHZW5lcmF0ZWQpOworICAgICAgICBvYmplY3RTdG9yZS0+dXBkYXRlS2V5R2VuZXJhdG9yKHRy
YW5zYWN0aW9uLCBrZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOwogCiAgICAgY2FsbGJhY2tz
LT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFu
Z2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpkZWxldGUiKTsKIAotICAgIEFTU0VSVChJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9t
KHRyYW5zYWN0aW9uKS0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOworICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOworICAgIEFTU0VSVCh0cmFu
c2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwogCiAgICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKICAgICBS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7CiAgICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogCi0gICAgaWYgKCFJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uKS0+c2NoZWR1bGVUYXNrKAotICAg
ICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpk
ZWxldGVJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGtleVJhbmdlLCBjYWxsYmFja3MpKSkKKyAgICBp
ZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFj
a1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsLCBvYmplY3RT
dG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRl
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwiKTsKICAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZp
ZXI7CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1
cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29y
KG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBrZXlSYW5nZS5n
ZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Bl
bk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwga2V5UmFuZ2Uu
Z2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CiAgICAgaWYgKGJhY2tpbmdTdG9yZUN1cnNvcikgewog
CiAgICAgICAgIGRvIHsKQEAgLTM5MywxMSArMzk5LDExIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQCiAgICAgICAgICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5oYXNWYWxpZElkKCkpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBiZWVuIGNy
ZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgogCi0gICAgICAg
ICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxl
dGVJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3Rv
cmUtPmlkKCksIGl0LT5zZWNvbmQtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+
ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQt
PnNlY29uZC0+aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CiAgICAgICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVPYmplY3RTdG9yZVJlY29y
ZChvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgcmVjb3JkSWRl
bnRpZmllci5nZXQoKSk7CisgICAgICAgICAgICBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCkt
PmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgcmVj
b3JkSWRlbnRpZmllci5nZXQoKSk7CiAKICAgICAgICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vy
c29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKIApAQCAtNDA3LDIzICs0MTMsMjQgQEAgdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlAKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUm
IGVjKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcihQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFyIik7CiAKLSAgICBBU1NFUlQoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbiktPm1vZGUoKSAhPSBJREJUcmFuc2Fj
dGlvbjo6UkVBRF9PTkxZKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4g
dHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9u
UHRyKTsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6
UkVBRF9PTkxZKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSA9IHRoaXM7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJw
Q2FsbGJhY2tzOwogCi0gICAgaWYgKCFJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRy
YW5zYWN0aW9uKS0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhckludGVybmFsLCBvYmplY3RTdG9yZSwg
Y2FsbGJhY2tzKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAorICAgICAg
ICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVh
ckludGVybmFsLCBvYmplY3RTdG9yZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQogICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiB9
CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKLSAgICBvYmplY3RTdG9yZS0+YmFja2lu
Z1N0b3JlKCktPmNsZWFyT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2Jq
ZWN0U3RvcmUtPmlkKCkpOworICAgIG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y2xlYXJP
YmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0
U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCkpOwogICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7CiB9CiAK
QEAgLTQ1Miw3ICs0NTksNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4g
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoY29ucwogdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAgIGludDY0X3QgaWQ7Ci0g
ICAgaWYgKCFvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmNyZWF0ZUluZGV4KG9iamVjdFN0
b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+bmFtZSgpLCBpbmRl
eC0+a2V5UGF0aCgpLCBpbmRleC0+dW5pcXVlKCksIGluZGV4LT5tdWx0aUVudHJ5KCksIGlkKSkg
eworICAgIGlmICghb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbmRleCh0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNl
SWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5uYW1lKCksIGluZGV4LT5rZXlQYXRoKCks
IGluZGV4LT51bmlxdWUoKSwgaW5kZXgtPm11bHRpRW50cnkoKSwgaWQpKSB7CiAgICAgICAgIHRy
YW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDkyLDcgKzQ5
OSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhCiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKLSAgICBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3Jl
KCktPmRlbGV0ZUluZGV4KG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5p
ZCgpLCBpbmRleC0+aWQoKSk7CisgICAgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxl
dGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3Rv
cmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5pZCgpKTsKICAgICB0
cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiB9CiAKQEAgLTUxMyw3ICs1MjAs
NyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzcwogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsIik7CiAKLSAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5i
YWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG9iamVjdFN0b3JlLT5kYXRhYmFz
ZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVj
dFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBv
YmplY3RTdG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CiAgICAgLy8gVGhlIGZy
b250ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMgdGhlIHRyYW5zYWN0aW9u
CiAgICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBUaGlzIGNhbid0IGhhcHBl
biBhbnkgZWFybGllcgogICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBzd2l0Y2ggdG8g
ZWFybHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCkBAIC01MjksMTkgKzUzNiwyMCBAQCB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzcwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29y
LT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7CiB9CiAKLXZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdl
PiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudCIpOwotICAg
IGlmICghSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbiktPnNjaGVk
dWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxiYWNrcykpKQorICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOworICAgIGlmICghdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzaygKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxi
YWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2Fj
dGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50
SW50ZXJuYWwiKTsKICAgICB1aW50MzJfdCBjb3VudCA9IDA7Ci0gICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+YmFja2lu
Z1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihvYmplY3RTdG9yZS0+ZGF0YWJhc2VJ
ZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7Cisg
ICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBv
YmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUtleUN1cnNvcih0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNl
SWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIHJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwog
ICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNj
ZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoY291bnQpKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNTg2LDIwICs1OTQsMjAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHQKICAg
ICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnNldChpbmRleFB0ci0+bmFtZSgpLCBpbmRleFB0cik7
CiB9CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZW5l
cmF0ZUtleSgpCitQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Z2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2Fj
dGlvbikKIHsKICAgICBjb25zdCBpbnQ2NF90IG1heEdlbmVyYXRvclZhbHVlID0gOTAwNzE5OTI1
NDc0MDk5MkxMOyAvLyBNYXhpbXVtIGludGVnZXIgc3RvcmFibGUgYXMgRUNNQVNjcmlwdCBudW1i
ZXIuCi0gICAgaW50NjRfdCBjdXJyZW50TnVtYmVyID0gYmFja2luZ1N0b3JlKCktPmdldEtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXIoZGF0YWJhc2VJZCgpLCBpZCgpKTsKKyAgICBpbnQ2NF90IGN1
cnJlbnROdW1iZXIgPSBiYWNraW5nU3RvcmUoKS0+Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJl
cih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBp
ZCgpKTsKICAgICBpZiAoY3VycmVudE51bWJlciA8IDAgfHwgY3VycmVudE51bWJlciA+IG1heEdl
bmVyYXRvclZhbHVlKQogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJbnZhbGlkKCk7CiAK
ICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIoY3VycmVudE51bWJlcik7CiB9CiAKLXZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKGNvbnN0IElE
QktleSoga2V5LCBib29sIGNoZWNrQ3VycmVudCkKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gdHJhbnNhY3Rpb24sIGNvbnN0IElEQktleSoga2V5LCBib29sIGNoZWNrQ3VycmVudCkK
IHsKICAgICBBU1NFUlQoa2V5ICYmIGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSk7
Ci0gICAgYmFja2luZ1N0b3JlKCktPm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJl
cihkYXRhYmFzZUlkKCksIGlkKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KGZsb29yKGtleS0+bnVt
YmVyKCkpKSArIDEsIGNoZWNrQ3VycmVudCk7CisgICAgYmFja2luZ1N0b3JlKCktPm1heWJlVXBk
YXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihmbG9v
cihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOwogfQogCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaAppbmRleCAyODExY2ExYmFkNzZiNjE4OTJkZjI0MmE5ZTg2Yjk2OTdmZDIyNTBh
Li5iZDk1YmJlYmUyZjdlMmEyYmQyOTMxMjBiZmY4MTI3ZTBjYmIyZmU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5oCkBAIC0xMDAsMTggKzEwMCwxOCBAQCBwcml2YXRlOgogICAgIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7CiAKICAg
ICB2b2lkIGxvYWRJbmRleGVzKCk7Ci0gICAgUGFzc1JlZlB0cjxJREJLZXk+IGdlbmVyYXRlS2V5
KCk7Ci0gICAgdm9pZCB1cGRhdGVLZXlHZW5lcmF0b3IoY29uc3QgSURCS2V5KiwgYm9vbCBjaGVj
a0N1cnJlbnQpOworICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtleShQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICB2b2lkIHVwZGF0ZUtleUdlbmVyYXRv
cihQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBjb25zdCBJREJLZXkqLCBi
b29sIGNoZWNrQ3VycmVudCk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAg
c3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIHB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxW
ZWN0b3I8SW5kZXhLZXlzPiA+KTsKLSAgICBzdGF0aWMgdm9pZCBkZWxldGVJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Cisg
ICAgc3RhdGljIHZvaWQgZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIHNldEluZGV4ZXNSZWFkeUludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+LCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0gICAgc3RhdGljIHZvaWQgY2xlYXJJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICBzdGF0aWMgdm9pZCBj
bGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUluZGV4
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUlu
ZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHN0YXRpYyB2b2lkIG9wZW5D
dXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1cnNvcjo6
RGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZTo6VGFza1R5cGUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4pOwotICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHN0YXRpYyB2b2lkIGNv
dW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogCiAg
ICAgLy8gVGhlc2UgYXJlIHVzZWQgYXMgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbiBhYm9ydCB0YXNr
cy4KICAgICBzdGF0aWMgdm9pZCByZW1vdmVJbmRleEZyb21NYXAoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCmluZGV4IDI0YzRm
ZWUwNDE1YmQ1YmI1MTJhMjMyMmNhOGJmNTc1ZWI1MTczNzYuLmQ2ZTNjODhhNTc5ZDU4NDcyMzFi
YWE5ZDBmNTZlYWQ0NmE2NmEzMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKQEAgLTY1LDYg
KzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUGVuZGluZ0V2ZW50cyhpbnQpOwogICAgIHZv
aWQgYWRkUHJlZW1wdGl2ZUV2ZW50KCkgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKys7IH0K
ICAgICB2b2lkIGRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgeyBtX3BlbmRpbmdQcmVlbXB0
aXZlRXZlbnRzLS07IEFTU0VSVChtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID49IDApOyB9Cisg
ICAgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVk
IHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKaW5kZXggZTBhNWE4ZmE1
ZThkZDYzZjNhY2M4MDRiY2EwZTMzOWI0ZDE5NTlhOC4uNDU3YWUzNzQ1ZjQyYzZlODRkMjllNzIy
NzFmMTk1NjhmMzJjMDE3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKQEAgLTM1LDM4ICszNSwzOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMp
IE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNv
bnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSW50
VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiBy
b3dJZCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJ
REJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikg
T1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0
YWJhc2VJbnRWZXJzaW9uKGludDY0X3Qgcm93SWQsIGludDY0X3QgdmVyc2lvbikgT1ZFUlJJREUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRh
RGF0YShUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikg
T1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0
YWJhc2VJbnRWZXJzaW9uKFRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCB2ZXJz
aW9uKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVE
YXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVj
dG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3Rv
cjxJREJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNy
ZW1lbnRGbGFncykgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0
b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQ
YXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0
U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQp
IE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJL
ZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2Jq
ZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmll
cigpIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlm
aWVyPigpOyB9CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JikgT1ZF
UlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3Rv
cmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyT2Jq
ZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJS
SURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpIE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRh
dGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpIE9WRVJS
SURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0
U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVy
KSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVj
dFN0b3JlUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpIE9WRVJSSURFIHsgcmV0dXJuIFN0cmluZygpOyB9
CisgICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNv
bnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURF
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoVHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZF
UlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKFRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwg
aW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKFRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkgT1ZFUlJJREUgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmll
cikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNo
T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVS
ZWNvcmRDYWxsYmFjayYpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMs
IFZlY3RvcjxJREJLZXlQYXRoPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVu
aXF1ZUZsYWdzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kTXVsdGlFbnRyeUZsYWdzKSBPVkVSUklERSB7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYg
a2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnksIGludDY0X3QmIGluZGV4
SWQpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUlu
ZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNv
cmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikg
T1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhE
YXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopIE9WRVJS
SURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2V0
UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpIE9WRVJSSURFIHsgcmV0dXJuIFBh
c3NSZWZQdHI8SURCS2V5PigpOyB9Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgo
aW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtl
eSkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5k
ZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGlz
VW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSwgaW50NjRfdCYgaW5kZXhJZCkgT1ZFUlJJREUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3Jk
KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPElEQktleT4o
KTsgfQorICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KFRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkg
T1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJz
b3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikg
T1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxDdXJzb3I+KCk7IH0KLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpE
aXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NS
ZWZQdHI8Q3Vyc29yPigpOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbklu
ZGV4Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9W
RVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdl
KiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vy
c29yPigpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3Jl
Q3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURF
IHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0
cjxDdXJzb3I+KCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhD
dXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGly
ZWN0aW9uKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPEN1cnNvcj4oKTsgfQogCiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpIE9WRVJS
SURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+KCk7IH0KIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>