<?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>46823</bug_id>
          
          <creation_ts>2010-09-29 11:07:24 -0700</creation_ts>
          <short_desc>Finished IDBTransaction for IndexedDB</short_desc>
          <delta_ts>2010-09-30 09:56:13 -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>Other</rep_platform>
          <op_sys>OS X 10.5</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="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>andreip</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>286998</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-09-29 11:07:24 -0700</bug_when>
    <thetext>Finished IDBTransaction for IndexedDB</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286999</commentid>
    <comment_count>1</comment_count>
      <attachid>69223</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-09-29 11:08:07 -0700</bug_when>
    <thetext>Created attachment 69223
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287484</commentid>
    <comment_count>2</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-09-30 04:39:00 -0700</bug_when>
    <thetext>Nice work, first round of comments:

&gt; class SerializedScriptValue : public ThreadSafeShared&lt;SerializedScriptValue&gt; {

Hmm, this is a change that affects everyone so may be a perf issue for platforms that don&apos;t define USE_LOCKFREE_THREADSAFESHARED so now have to lock a mutex for each refcount.

&gt;  if (!m_transaction-&gt;scheduleTask(createCallbackTask(&amp;IDBCursorBackendImpl::updateInternal, this, value, callbacks)))

The type parameters for the CrossThreadTask constructor are inferred form this call, so the Task object will store a raw IDBCursorBackendImpl pointer. If that happens to be released before the task is executed, we&apos;ll crash due to a dangling pointer.

&gt; scheduleTask(createCallbackTask(&amp;IDBCursorBackendImpl::continueFunctionInternal, this, key, callbacks)))

ditto

&gt; scheduleTask(createCallbackTask(&amp;IDBCursorBackendImpl::removeInternal, this, callbacks)))

ditto

&gt; scheduleTask(createCallbackTask(&amp;IDBDatabaseBackendImpl::createObjectStoreInternal, this, name, keyPath, autoIncrement, callbacks)))

ditto

&gt; scheduleTask(createCallbackTask(&amp;IDBDatabaseBackendImpl::removeObjectStoreInternal, this, name, callbacks)))

ditto

&gt; scheduleTask(createCallbackTask(&amp;openCursorInternal, this, keyRange, direction, true, callbacks, transaction))

ditto

&gt; scheduleTask(createCallbackTask(&amp;openCursorInternal, this, keyRange, direction, false, callbacks, transaction)))

ditto

&gt; scheduleTask(createCallbackTask(&amp;getInternal, this, key, true, callbacks)))

ditto

&gt; scheduleTask(createCallbackTask(&amp;getInternal, this, key, false, callbacks)))

ditto

&gt; scheduleTask(createCallbackTask(&amp;IDBObjectStoreBackendImpl::getInternal, this, key, callbacks)))

ditto


&gt; RefPtr&lt;IDBRequest&gt; request = IDBRequest::create(context, IDBAny::create(this), m_setVersionTransaction.get());
&gt; 62     if (!m_setVersionTransaction)
&gt; 63         request-&gt;onError(IDBDatabaseError::create(IDBDatabaseException::NOT_ALLOWED_ERR,
&gt; &quot;createObjectStore must be called from within a setVersion transaction.&quot;));

Nice but it won&apos;t work after merging with 46883, as we lose the callbacks param. I&apos;m updating that patch to make this throw an exception instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287533</commentid>
    <comment_count>3</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-09-30 07:05:41 -0700</bug_when>
    <thetext>One more comment:

&gt; oid IDBTransactionBackendImpl::abort()

This needs to abort the timer. My bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287540</commentid>
    <comment_count>4</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-09-30 07:28:23 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Nice work, first round of comments:
&gt; 
&gt; &gt; class SerializedScriptValue : public ThreadSafeShared&lt;SerializedScriptValue&gt; {
&gt; 
&gt; Hmm, this is a change that affects everyone so may be a perf issue for platforms that don&apos;t define USE_LOCKFREE_THREADSAFESHARED so now have to lock a mutex for each refcount.

I too was worried about this, so I did some research: It&apos;s mostly just used for history push state, indexedDB, message ports, and event source.  None of them should have too much ref count thrashing (they use pointers in many cases).  So I&apos;m pretty sure this won&apos;t cause a regression.

If we&apos;re super worried or see performance issues, we could probably leave it single threaded and simply copy the underlying string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287546</commentid>
    <comment_count>5</comment_count>
      <attachid>69335</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-09-30 08:01:49 -0700</bug_when>
    <thetext>Created attachment 69335
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287584</commentid>
    <comment_count>6</comment_count>
      <attachid>69335</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-09-30 09:28:21 -0700</bug_when>
    <thetext>Comment on attachment 69335
Patch

rubberstamp after discussion with andrei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287605</commentid>
    <comment_count>7</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-09-30 09:56:13 -0700</bug_when>
    <thetext>Committed r68795: &lt;http://trac.webkit.org/changeset/68795&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69223</attachid>
            <date>2010-09-29 11:08:07 -0700</date>
            <delta_ts>2010-09-30 08:01:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46823-20100929190803.patch</filename>
            <type>text/plain</type>
            <size>161204</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3NjNlZWQ4ZDhjMTMzN2EwMWVjOTE4MmQ3Yjk4NjJhMDNiZjMxM2UwLi43NjRlYTM4
NDFhNjA0NzQ4ZmFmZDhjNGNiMGRjM2JhNDZmMzE5ZDE4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTAtMDktMjkgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmluaXNoZWQgSURCVHJh
bnNhY3Rpb24gZm9yIEluZGV4ZWREQgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDY4MjMKKworICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2RhdGFi
YXNlLWJhc2ljcy5odG1sOgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWJhc2lj
cy5odG1sOgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWN1cnNvci5odG1sOgor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy5odG1sOgorICAg
ICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNvci5odG1sOgorICAgICAg
ICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLXJlbW92ZW9iamVjdHN0b3JlLmh0bWw6
CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jdXJzb3IuaHRtbDoKKyAgICAgICAg
KiBzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1iYXNpY3MuaHRtbDoKKwogMjAxMC0wOS0y
OCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFz
ZS1iYXNpY3MuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLWJh
c2ljcy5odG1sCmluZGV4IGIwOTlhNDkxY2FiYWNiNDE4MjE2ODI4OTlmYTg1NWIxYjM2YTViYWMu
LmQxYmVmM2JmYjIwNzY1MjI4ODFkMTg5ZGNjM2MzZDE4YzExMTQ3YjQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLWJhc2ljcy5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLWJhc2ljcy5odG1sCkBAIC0xNCwx
MSArMTQsMzIgQEAgZGVzY3JpcHRpb24oIlRlc3QgdGhlIGJhc2ljcyBvZiBJbmRleGVkREIncyBJ
REJEYXRhYmFzZS4iKTsKIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIAogICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKIAorZnVuY3Rpb24gdGVzdCgpCit7
CisgICAgcmVzdWx0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLm9wZW4oJ25hbWUnLCAnZGVzY3Jp
cHRpb24nKSIpOworICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nl
c3MgPSBvcGVuU3VjY2VzczsKKyAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNh
bGxiYWNrOworfQorCiBmdW5jdGlvbiBvcGVuU3VjY2VzcygpCiB7CiAgICAgdmVyaWZ5U3VjY2Vz
c0V2ZW50KGV2ZW50KTsKKyAgICB3aW5kb3cuZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnJl
c3VsdCIpOworCisgICAgcmVzdWx0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZl
cnNpb24nKSIpOworICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nl
c3MgPSBzZXRWZXJzaW9uU3VjY2VzczsKKyAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRF
cnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBzZXRWZXJzaW9uU3VjY2VzcygpCit7CisgICAg
ZGVidWcoInNldFZlcnNpb25TdWNjZXNzKCk6Iik7CisgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2
ZW50KTsKKyAgICB3aW5kb3cudHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGV2ZW50LnJlc3Vs
dCIpOworICAgIHNob3VsZEJlVHJ1ZSgidHJhbnMgIT09IG51bGwiKTsKIAotICAgIHZhciBkYiA9
IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CiAgICAgZGVsZXRlQWxsT2JqZWN0U3Rv
cmVzKGRiKTsKIAogICAgIC8vIFdlIG11c3QgZG8gc29tZXRoaW5nIGFzeW5jaHJvbm91cyBiZWZv
cmUgYW55dGhpbmcgc3luY2hyb25vdXMgc2luY2UKQEAgLTcwLDE0ICs5MSw2IEBAIGZ1bmN0aW9u
IGNoZWNrT2JqZWN0U3RvcmUoKQogICAgIGRvbmUoKTsKIH0KIAotZnVuY3Rpb24gdGVzdCgpCi17
Ci0gICAgcmVzdWx0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLm9wZW4oJ25hbWUnLCAnZGVzY3Jp
cHRpb24nKSIpOwotICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOwotICAgIHJlc3VsdC5vbnN1Y2Nl
c3MgPSBvcGVuU3VjY2VzczsKLSAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNh
bGxiYWNrOwotfQotCiB0ZXN0KCk7CiAKIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtYmFzaWNzLmh0
bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1iYXNpY3MuaHRtbAppbmRl
eCBjMjNmMTQxMDJhOTEzNGY4ZWQ2NDExYWI5NzUzOTUwZDU0Zjg3NmFhLi4yOGY1M2JjZmQyOTNm
MzU0MDQxYjljOWY4ZWU5ZmZkNjZlOTI5ZTk0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9pbmRleC1iYXNpY3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9pbmRleC1iYXNpY3MuaHRtbApAQCAtMjcsNiArMjcsMTkgQEAgZnVuY3Rpb24g
Y3JlYXRlT2JqZWN0U3RvcmUoKQogICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7CiAgICAg
ZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnJlc3VsdCIpOwogCisgICAgcmVzdWx0ID0gZXZh
bEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKSIpOworICAgIHZlcmlmeVJlc3Vs
dChyZXN1bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBzZXRWZXJzaW9uU3VjY2VzczsKKyAg
ICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlv
biBzZXRWZXJzaW9uU3VjY2VzcygpCit7CisgICAgZGVidWcoInNldFZlcnNpb25TdWNjZXNzKCk6
Iik7CisgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50KTsKKyAgICB3aW5kb3cudHJhbnMgPSBl
dmFsQW5kTG9nKCJ0cmFucyA9IGV2ZW50LnJlc3VsdCIpOworICAgIHNob3VsZEJlVHJ1ZSgidHJh
bnMgIT09IG51bGwiKTsKKwogICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CiAKICAgICBy
ZXN1bHQgPSBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmVOYW1lJywgbnVs
bCkiKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWN1
cnNvci5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtY3Vyc29yLmh0
bWwKaW5kZXggOTU0MWQ2MDA2YWYxODY4NjVkZDJmZDkyNGZmNDY2OTEyMjgxOWQ1Ny4uMzFhNGVk
OTYwMzBjNWI4ZDRiNTJkNTQ4NzQ3OTIzYzUzY2EzZDUyNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtY3Vyc29yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtY3Vyc29yLmh0bWwKQEAgLTQwLDYgKzQwLDE5IEBAIGZ1
bmN0aW9uIG9wZW5PYmplY3RTdG9yZSgpCiAgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50KTsK
ICAgICB3aW5kb3cuZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnJlc3VsdCIpOwogCisgICAg
cmVzdWx0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKSIpOworICAg
IHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBzZXRWZXJzaW9u
U3VjY2VzczsKKyAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
fQorCitmdW5jdGlvbiBzZXRWZXJzaW9uU3VjY2VzcygpCit7CisgICAgZGVidWcoInNldFZlcnNp
b25TdWNjZXNzKCk6Iik7CisgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50KTsKKyAgICB3aW5k
b3cudHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGV2ZW50LnJlc3VsdCIpOworICAgIHNob3Vs
ZEJlVHJ1ZSgidHJhbnMgIT09IG51bGwiKTsKKwogICAgIGRlbGV0ZUFsbE9iamVjdFN0b3Jlcyhk
Yik7CiAKICAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmplY3RTdG9yZSgnc29t
ZU9iamVjdFN0b3JlJykiKTsKQEAgLTEwNSw3ICsxMTgsNyBAQCBmdW5jdGlvbiBzY2hlZHVsZVRl
c3RzKCkKICAgICB9CiAgCiAgICAgZGVidWcoIlJ1bm5pbmcgdGVzdHMuLi4iKTsKLSAgICBzZXRU
aW1lb3V0KHJ1bk5leHRUZXN0LCAwKTsKKyAgICBydW5OZXh0VGVzdCgpOwogfQogIAogZnVuY3Rp
b24gcnVuTmV4dFRlc3QoKQpAQCAtMjEzLDEyICsyMjYsMTIgQEAgZnVuY3Rpb24gY3Vyc29ySXRl
cmF0aW9uKCkKIHsKICAgICBpZiAoZXhwZWN0ZWRJbmRleCA9PT0gbnVsbCkgewogICAgICAgICBz
aG91bGRCZU51bGwoImV2ZW50LnJlc3VsdCIpOwotICAgICAgICBzZXRUaW1lb3V0KHJ1bk5leHRU
ZXN0LCAwKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBpZiAoZXZlbnQucmVzdWx0ID09PSBudWxsKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoIkV2
ZW50LnJlc3VsdCBzaG91bGQgbm90IGJlIG51bGwuIikKLSAgICAgICAgc2V0VGltZW91dChydW5O
ZXh0VGVzdCwgMCk7CisgICAgICAgIHRlc3RGYWlsZWQoIkV2ZW50LnJlc3VsdCBzaG91bGQgbm90
IGJlIG51bGwuIik7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3Rz
dG9yZS1iYXNpY3MuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0
b3JlLWJhc2ljcy5odG1sCmluZGV4IGIyZDM4M2ExYjljZmU1YWQ2ZmE2NTk4NTZiMzY3NmJmYjIz
Yjg1N2MuLmMyZmUyZjFhYzEwMmZkOGYzNDMxNDBhM2E3ZGI3ZGRmMzQ4ODcwZWIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy5odG1s
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy5o
dG1sCkBAIC0yNiw3ICsyNiwyMCBAQCBmdW5jdGlvbiBvcGVuU3VjY2VzcygpCiB7CiAgICAgZGVi
dWcoIm9wZW5TdWNjZXNzKCk6Iik7CiAgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50KTsKLSAg
ICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CisgICAgd2luZG93LmRiID0g
ZXZhbEFuZExvZygiZGIgPSBldmVudC5yZXN1bHQiKTsKKworICAgIHJlc3VsdCA9IGV2YWxBbmRM
b2coImRiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykiKTsKKyAgICB2ZXJpZnlSZXN1bHQocmVz
dWx0KTsKKyAgICByZXN1bHQub25zdWNjZXNzID0gc2V0VmVyc2lvblN1Y2Nlc3M7CisgICAgcmVz
dWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gc2V0
VmVyc2lvblN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJzZXRWZXJzaW9uU3VjY2VzcygpOiIpOwor
ICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7CisgICAgd2luZG93LnRyYW5zID0gZXZhbEFu
ZExvZygidHJhbnMgPSBldmVudC5yZXN1bHQiKTsKKyAgICBzaG91bGRCZVRydWUoInRyYW5zICE9
PSBudWxsIik7CiAKICAgICBkZWxldGVBbGxPYmplY3RTdG9yZXMoZGIpOwogCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jdXJzb3IuaHRtbCBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNvci5odG1sCmlu
ZGV4IDI1ZTk0NTZjMGUyZDMwYjZhZTM3ZjEyZjg0YWMxN2VkMTNkNGE2NTcuLmMyNDgwZWQ3Zjc0
ZDRhMDJiNGZiNzk2YjAxMGVkZmEwMmIyYTcwNzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNvci5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNvci5odG1sCkBAIC0zOSw2ICszOSwx
OSBAQCBmdW5jdGlvbiBvcGVuT2JqZWN0U3RvcmUoKQogICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChl
dmVudCk7CiAgICAgd2luZG93LmRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC5yZXN1bHQiKTsK
IAorICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJyki
KTsKKyAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKKyAgICByZXN1bHQub25zdWNjZXNzID0gc2V0
VmVyc2lvblN1Y2Nlc3M7CisgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxs
YmFjazsKK30KKworZnVuY3Rpb24gc2V0VmVyc2lvblN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJz
ZXRWZXJzaW9uU3VjY2VzcygpOiIpOworICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7Cisg
ICAgd2luZG93LnRyYW5zID0gZXZhbEFuZExvZygidHJhbnMgPSBldmVudC5yZXN1bHQiKTsKKyAg
ICBzaG91bGRCZVRydWUoInRyYW5zICE9PSBudWxsIik7CisKICAgICBkZWxldGVBbGxPYmplY3RT
dG9yZXMoZGIpOwogCiAgICAgcmVzdWx0ID0gZXZhbEFuZExvZygiZGIuY3JlYXRlT2JqZWN0U3Rv
cmUoJ3NvbWVPYmplY3RTdG9yZScpIik7CkBAIC05Myw3ICsxMDYsNyBAQCBmdW5jdGlvbiBzY2hl
ZHVsZVRlc3RzKCkKICAgICB9CiAgCiAgICAgZGVidWcoIlJ1bm5pbmcgdGVzdHMuLi4iKTsKLSAg
ICBzZXRUaW1lb3V0KHJ1bk5leHRUZXN0LCAwKTsKKyAgICBydW5OZXh0VGVzdCgpOwogfQogIAog
ZnVuY3Rpb24gcnVuTmV4dFRlc3QoKQpAQCAtMTgyLDEyICsxOTUsMTIgQEAgZnVuY3Rpb24gY3Vy
c29ySXRlcmF0aW9uKCkKIHsKICAgICBpZiAoZXhwZWN0ZWRJbmRleCA9PT0gbnVsbCkgewogICAg
ICAgICBzaG91bGRCZU51bGwoImV2ZW50LnJlc3VsdCIpOwotICAgICAgICBzZXRUaW1lb3V0KHJ1
bk5leHRUZXN0LCAwKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAoZXZlbnQucmVzdWx0ID09PSBudWxsKSB7Ci0gICAgICAgIHRlc3RGYWls
ZWQoIkV2ZW50LnJlc3VsdCBzaG91bGQgbm90IGJlIG51bGwuIikKLSAgICAgICAgc2V0VGltZW91
dChydW5OZXh0VGVzdCwgMCk7CisgICAgICAgIHRlc3RGYWlsZWQoIkV2ZW50LnJlc3VsdCBzaG91
bGQgbm90IGJlIG51bGwuIik7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9v
YmplY3RzdG9yZS1yZW1vdmVvYmplY3RzdG9yZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvb2JqZWN0c3RvcmUtcmVtb3Zlb2JqZWN0c3RvcmUuaHRtbAppbmRleCA3ODc4Yzdm
YWUxYTY2NDUyOWUwMjI4NjhmYmZjZjQxNmJjZTJjODg3Li5mMzJiMTE3ZTVlMjM2ZDQ2MmYyNzkw
MGY2ZTU3M2JiMjA1MjQ2YzY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9vYmplY3RzdG9yZS1yZW1vdmVvYmplY3RzdG9yZS5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLXJlbW92ZW9iamVjdHN0b3JlLmh0bWwKQEAg
LTI3LDYgKzI3LDE5IEBAIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFN0b3JlKCkKICAgICB2ZXJpZnlT
dWNjZXNzRXZlbnQoZXZlbnQpOwogICAgIGRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC5yZXN1
bHQiKTsKIAorICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJ25ldyB2ZXJz
aW9uJykiKTsKKyAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKKyAgICByZXN1bHQub25zdWNjZXNz
ID0gc2V0VmVyc2lvblN1Y2Nlc3M7CisgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJy
b3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gc2V0VmVyc2lvblN1Y2Nlc3MoKQoreworICAgIGRl
YnVnKCJzZXRWZXJzaW9uU3VjY2VzcygpOiIpOworICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVu
dCk7CisgICAgd2luZG93LnRyYW5zID0gZXZhbEFuZExvZygidHJhbnMgPSBldmVudC5yZXN1bHQi
KTsKKyAgICBzaG91bGRCZVRydWUoInRyYW5zICE9PSBudWxsIik7CisKICAgICBkZWxldGVBbGxP
YmplY3RTdG9yZXMoZGIpOwogCiAgICAgcmVzdWx0ID0gZXZhbEFuZExvZygiZGIuY3JlYXRlT2Jq
ZWN0U3RvcmUoJ3N0b3JlTmFtZScsIG51bGwpIik7CkBAIC03NSwxMSArODgsMjQgQEAgZnVuY3Rp
b24gY29tbWl0VHJhbnNhY3Rpb24oKQogICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7CiAg
ICAgc2hvdWxkQmVUcnVlKCJldmVudC5zb3VyY2UuaW5kZXhOYW1lcy5jb250YWlucygnaW5kZXhO
YW1lJykiKTsKICAgICAvLyBMZXQgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdC4KLSAgICB3aW5kb3cu
c2V0VGltZW91dCgncmVtb3ZlT2JqZWN0U3RvcmUoKScsIDApOworICAgIHdpbmRvdy5zZXRUaW1l
b3V0KCdzZWNvbmRTZXRWZXJzaW9uKCknLCAwKTsKK30KKworZnVuY3Rpb24gc2Vjb25kU2V0VmVy
c2lvbigpCit7CisgICAgcmVzdWx0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZl
cnNpb24nKSIpOworICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nl
c3MgPSByZW1vdmVPYmplY3RTdG9yZTsKKyAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRF
cnJvckNhbGxiYWNrOwogfQogCiBmdW5jdGlvbiByZW1vdmVPYmplY3RTdG9yZSgpCiB7CisgICAg
ZGVidWcoInNldFZlcnNpb25TdWNjZXNzKCk6Iik7CisgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2
ZW50KTsKKyAgICB3aW5kb3cudHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGV2ZW50LnJlc3Vs
dCIpOworICAgIHNob3VsZEJlVHJ1ZSgidHJhbnMgIT09IG51bGwiKTsKKwogICAgIHJlc3VsdCA9
IGV2YWxBbmRMb2coImRiLnJlbW92ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKSIpOwogICAgIHZl
cmlmeVJlc3VsdChyZXN1bHQpOwogICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBjcmVhdGVPYmplY3RT
dG9yZUFnYWluOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Bl
bi1jdXJzb3IuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY3Vyc29y
Lmh0bWwKaW5kZXggMDNkMWRhMDk5NjJlZmQzZTgyMGY3OTlkNjE4YjlmYWIwNzIyODBiOC4uODk5
OTZjNmY4NjZmNmNhNWUyYWQ1NDMxYzYxMjliZTQzYWE3Njg5MiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jdXJzb3IuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWN1cnNvci5odG1sCkBAIC02OSwxMCArNjksMTIgQEAg
ZnVuY3Rpb24gY3JlYXRlT2JqZWN0U3RvcmVTdWNjZXNzKCkKICAgICBwb3B1bGF0ZU9iamVjdFN0
b3JlKG9iamVjdFN0b3JlKTsKIH0KIAotZnVuY3Rpb24gb3BlblN1Y2Nlc3MoKQorZnVuY3Rpb24g
c2V0VmVyc2lvblN1Y2Nlc3MoKQogeworICAgIGRlYnVnKCJzZXRWZXJzaW9uU3VjY2VzcygpOiIp
OwogICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7Ci0gICAgdmFyIGRiID0gZXZhbEFuZExv
ZygiZGIgPSBldmVudC5yZXN1bHQiKTsKKyAgICB3aW5kb3cudHJhbnMgPSBldmFsQW5kTG9nKCJ0
cmFucyA9IGV2ZW50LnJlc3VsdCIpOworICAgIHNob3VsZEJlVHJ1ZSgidHJhbnMgIT09IG51bGwi
KTsKIAogICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CiAKQEAgLTgyLDYgKzg0LDE3IEBA
IGZ1bmN0aW9uIG9wZW5TdWNjZXNzKCkKICAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRF
cnJvckNhbGxiYWNrOwogfQogCitmdW5jdGlvbiBvcGVuU3VjY2VzcygpCit7CisgICAgdmVyaWZ5
U3VjY2Vzc0V2ZW50KGV2ZW50KTsKKyAgICB2YXIgZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50
LnJlc3VsdCIpOworCisgICAgcmVzdWx0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3
IHZlcnNpb24nKSIpOworICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgIHJlc3VsdC5vbnN1
Y2Nlc3MgPSBzZXRWZXJzaW9uU3VjY2VzczsKKyAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOworfQorCiBmdW5jdGlvbiB0ZXN0KCkKIHsKICAgICByZXN1bHQgPSBl
dmFsQW5kTG9nKCJpbmRleGVkREIub3BlbignbmFtZScsICdkZXNjcmlwdGlvbicpIik7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1iYXNpY3Mu
aHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWJhc2ljcy5o
dG1sCmluZGV4IGNlYTVkNWRjZmNkMDBhMDA4ZjQwZTU0MTlkZjExZDA3NGRiMTZkMjEuLmU1ZDVh
ZTJmZjg5ZGM2YzE3ODcwNjkxZTQyOWE0ZWI4MzYxNGQzZjIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWJhc2ljcy5odG1sCisrKyBiL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWJhc2ljcy5odG1sCkBAIC0zMSw2
ICszMSwxOSBAQCBmdW5jdGlvbiBvcGVuU3VjY2VzcygpCiAgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50
KGV2ZW50KTsKICAgICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CiAKKyAg
ICByZXN1bHQgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpIik7Cisg
ICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IHNldFZlcnNp
b25TdWNjZXNzOworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7
Cit9CisKK2Z1bmN0aW9uIHNldFZlcnNpb25TdWNjZXNzKCkKK3sKKyAgICBkZWJ1Zygic2V0VmVy
c2lvblN1Y2Nlc3MoKToiKTsKKyAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOworICAgIHdp
bmRvdy50cmFucyA9IGV2YWxBbmRMb2coInRyYW5zID0gZXZlbnQucmVzdWx0Iik7CisgICAgc2hv
dWxkQmVUcnVlKCJ0cmFucyAhPT0gbnVsbCIpOworCiAgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVz
KGRiKTsKIAogICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3JlKCdz
dG9yZU5hbWUnLCBudWxsKSIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBiN2QxMTgwNTI5MjJlM2RhOWM4ZTVkZDc5NDA1MTc5NGI4NDI2
Y2RiLi4yNzk3Yzg0ZTc0YTU1ZDU2MWQ1ODU0NDI5NjhkNzk0MjkxNGY1NzQ1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
OSBAQAorMjAxMC0wOS0yOSAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaW5pc2hlZCBJ
REJUcmFuc2FjdGlvbiBmb3IgSW5kZXhlZERCCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00NjgyMworCisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJB
bnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbENv
bnRleHQ6OkxvY2FsQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbENvbnRleHQ6On5M
b2NhbENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6
ZWRWYWx1ZUFuZEtleVBhdGgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnJl
bGVhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxp
emVkU2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOElEQkFueUN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVh
ZENvcGllci5jcHA6CisgICAgICAgICogc3RvcmFnZS9JREJBbnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQW55OjppZGJGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6aWRi
VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQW55OjpzZXQpOgorICAgICAgICAq
IHN0b3JhZ2UvSURCQW55Lmg6CisgICAgICAgICogc3RvcmFnZS9JREJDYWxsYmFja3MuaDoKKyAg
ICAgICAgKiBzdG9yYWdlL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJz
b3I6OklEQkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVwZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SURCQ3Vyc29yOjpyZW1vdmUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29y
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNyZWF0ZSk6CisgICAgICAgICogc3Rv
cmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJz
b3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQ3Vyc29yQmFja2VuZEltcGw6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJz
b3JCYWNrZW5kSW1wbDo6dXBkYXRlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vy
c29yQmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rpb25JbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkN1cnNvckJhY2tlbmRJbXBsOjpyZW1vdmVJbnRlcm5hbCk6CisgICAgICAgICogc3RvcmFn
ZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFj
a2VuZEltcGw6OmNyZWF0ZSk6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6c2V0U2V0VmVyc2lvblRyYW5zYWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6cmVtb3ZlT2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2U6OnNldFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlLmg6CisgICAg
ICAgICogc3RvcmFnZS9JREJEYXRhYmFzZS5pZGw6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmVJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25J
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbG9z
ZSk6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6CisgICAgICAg
ICogc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBzdG9y
YWdlL0lEQkZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6b3Blbik6
CisgICAgICAgICogc3RvcmFnZS9JREJJbmRleC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleDo6SURCSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5PYmplY3RD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5DdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCSW5kZXg6OmdldE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleDo6Z2V0KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4Lmg6CisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2Vu
ZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1
cnNvckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Om9w
ZW5PYmplY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6
b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0KToKKyAgICAg
ICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lE
QkluZGV4QmFja2VuZEludGVyZmFjZS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6SURCS2V5KToKKyAgICAgICAgKiBzdG9yYWdlL0lE
QktleS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UmFuZ2UuaDoKKyAgICAgICAgKiBzdG9y
YWdlL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
OjpJREJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6YWRk
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmU6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6
OmluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpyZW1vdmVJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcik6CisgICAgICAg
ICogc3RvcmFnZS9JREJPYmplY3RTdG9yZS5pZGw6CisgICAgICAgICogc3RvcmFnZS9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cHV0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnJlbW92ZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRl
cm5hbCk6CisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6Cisg
ICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVz
dDo6SURCUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXNldFJlYWR5
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b25TdWNjZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnRpbWVyRmlyZWQpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCUmVxdWVzdC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hl
ZHVsZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
ZGlkQ29tcGxldGVUYXNrRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6OnJ1bik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6dGltZXJGaXJlZCk6CisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsLmg6CisKIDIwMTAtMDktMjggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJ1biBzb3J0LVhjb2RlLXByb2plY3QtZmlsZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAppbmRleCBlNDI4YmY2NmEyZjRiY2E2ZGM3YzMw
ODExMjlmNjljY2MzZGYzZTZkLi41MDZmMTVmMmNkNWQxMGFlZjk2MzMzMTQ2MmUxZjlkN2MzMDA0
MTFkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcApAQCAtNDQsNiArNDQs
NyBAQAogI2luY2x1ZGUgIkpTSURCSW5kZXguaCIKICNpbmNsdWRlICJKU0lEQktleS5oIgogI2lu
Y2x1ZGUgIkpTSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJKU0lEQlRyYW5zYWN0aW9uLmgi
CiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CkBAIC02NCwxNCArNjUsMTYgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSURCQW55KiBpZGJBbnkpCiAgICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaWRiQW55LT5pZGJDdXJzb3IoKSk7CiAgICAg
Y2FzZSBJREJBbnk6OklEQkRhdGFiYXNlVHlwZToKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCBpZGJBbnktPmlkYkRhdGFiYXNlKCkpOworICAgIGNhc2UgSURCQW55OjpJ
REJGYWN0b3J5VHlwZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
ZGJBbnktPmlkYkZhY3RvcnkoKSk7CiAgICAgY2FzZSBJREJBbnk6OklEQkluZGV4VHlwZToKICAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlkYkluZGV4KCkp
OwogICAgIGNhc2UgSURCQW55OjpJREJLZXlUeXBlOgogICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIGlkYkFueS0+aWRiS2V5KCkpOwogICAgIGNhc2UgSURCQW55OjpJREJP
YmplY3RTdG9yZVR5cGU6CiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
aWRiQW55LT5pZGJPYmplY3RTdG9yZSgpKTsKLSAgICBjYXNlIElEQkFueTo6SURCRmFjdG9yeVR5
cGU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaWRiQW55LT5pZGJG
YWN0b3J5KCkpOworICAgIGNhc2UgSURCQW55OjpJREJUcmFuc2FjdGlvblR5cGU6CisgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaWRiQW55LT5pZGJUcmFuc2FjdGlvbigp
KTsKICAgICBjYXNlIElEQkFueTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlVHlwZToKICAgICAgICAg
cmV0dXJuIGlkYkFueS0+c2VyaWFsaXplZFNjcmlwdFZhbHVlKCktPmRlc2VyaWFsaXplKGV4ZWMs
IGdsb2JhbE9iamVjdCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9J
REJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0
aWxpdGllcy5jcHAKaW5kZXggYTAwMGE3ZGUxMTk0MjExOTVhOWUwYjdkOTJhY2ZkZmExZDVjYzRk
MS4uNGE1ODg1MzczMjBhNjk2ZGM1ZGU1ZWZjYzlmNDAwYjRiZjU3OWMzMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCkBAIC01OCw5ICs1OCwyOCBAQCBi
b29sIGdldFZhbHVlRnJvbShUIGluZGV4T3JOYW1lLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4
VmFsdWUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2NsYXNzIExvY2FsQ29udGV4dCB7CitwdWJs
aWM6CisgICAgTG9jYWxDb250ZXh0KCkKKyAgICAgICAgOiBtX2NvbnRleHQodjg6OkNvbnRleHQ6
Ok5ldygpKQorICAgIHsKKyAgICAgICAgbV9jb250ZXh0LT5FbnRlcigpOworICAgIH0KKworICAg
IH5Mb2NhbENvbnRleHQoKQorICAgIHsKKyAgICAgICAgbV9jb250ZXh0LT5FeGl0KCk7CisgICAg
ICAgIG1fY29udGV4dC5EaXNwb3NlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHY4OjpIYW5k
bGVTY29wZSBtX3Njb3BlOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBtX2NvbnRl
eHQ7Cit9OworCiBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRW
YWx1ZUFuZEtleVBhdGgoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBj
b25zdCBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+JiBrZXlQYXRoKQogewotICAgIHY4OjpIYW5k
bGVTY29wZSBzY29wZTsKKyAgICBMb2NhbENvbnRleHQgbG9jYWxDb250ZXh0OwogICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2OFZhbHVlKHZhbHVlLT5kZXNlcmlhbGl6ZSgpKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtleVBhdGguc2l6ZSgpOyArK2kpIHsKICAgICAgICAgc3dpdGNo
IChrZXlQYXRoW2ldLnR5cGUpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAppbmRleCA0ZTUzNTRlOTgwYjQ5NzZhOWRjMzc0MGEyNWE3OTg0MDllODNh
ZWJmLi5mZjkyMTY3MjQ5YTNiYzg1OTcxNjFhNTNiZTI4ZjYxNTBiNDk4M2I0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0xMTA1LDcgKzEx
MDUsNyBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVs
bFZhbHVlKCkKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OnJlbGVhc2UoKQogewogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUobV9kYXRhLCBXaXJl
RGF0YSkpOwotICAgIG1fZGF0YSA9IFN0cmluZygpOworICAgIG1fZGF0YSA9IFN0cmluZygpLmNy
b3NzVGhyZWFkU3RyaW5nKCk7CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKQEAg
LTExMjMsMTggKzExMjMsMTggQEAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBib29sJgogICAgICAgICBkaWRU
aHJvdyA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9kYXRhID0gU3RyaW5n
SW1wbDo6YWRvcHQod3JpdGVyLmRhdGEoKSk7CisgICAgbV9kYXRhID0gU3RyaW5nKFN0cmluZ0lt
cGw6OmFkb3B0KHdyaXRlci5kYXRhKCkpKS5jcm9zc1RocmVhZFN0cmluZygpOwogfQogCiBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShTdHJpbmcgZGF0YSwgU3Ry
aW5nRGF0YU1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBXaXJlRGF0YSkKLSAgICAgICAg
bV9kYXRhID0gZGF0YTsKKyAgICAgICAgbV9kYXRhID0gZGF0YS5jcm9zc1RocmVhZFN0cmluZygp
OwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQobW9kZSA9PSBTdHJpbmdWYWx1ZSk7CiAgICAg
ICAgIFdyaXRlciB3cml0ZXI7CiAgICAgICAgIHdyaXRlci53cml0ZVdlYkNvcmVTdHJpbmcoZGF0
YSk7Ci0gICAgICAgIG1fZGF0YSA9IFN0cmluZ0ltcGw6OmFkb3B0KHdyaXRlci5kYXRhKCkpOwor
ICAgICAgICBtX2RhdGEgPSBTdHJpbmcoU3RyaW5nSW1wbDo6YWRvcHQod3JpdGVyLmRhdGEoKSkp
LmNyb3NzVGhyZWFkU3RyaW5nKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCAyNzVlNWYyZGU1Y2EyZDZiYWJjNGNhNDU5MmQy
Yjc5OGZhZWNlZjU1Li5iNTM0YTU3NWQ0ZjkzMmJjOWVlNDc4NTMwM2QyOTM3MDk3ZTE1MDhjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKQEAgLTMzLDEx
ICszMywxMSBAQAogCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx2OC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA6IHB1
YmxpYyBSZWZDb3VudGVkPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4geworY2xhc3MgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGVzZXJpYWxpemVBbmRTZXRQcm9wZXJ0
eSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgY29uc3QgY2hhciogcHJvcGVydHlOYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjg6OlByb3BlcnR5
QXR0cmlidXRlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCQW55Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SURCQW55Q3VzdG9tLmNwcAppbmRleCAzZGZmZWI1YTJmMGNjYzhlZTRhYThj
YmQ1YzMxMDNlYzgyYjNjODMyLi5mZDZmMWE1ZmEwOTFiYWI1MmUwMzJiNDNiMTlhMWZmN2NhNTk2
MWZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElEQkFueUN1c3Rv
bS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJREJBbnlDdXN0b20uY3Bw
CkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiVjhJREJJbmRleC5oIgogI2luY2x1ZGUgIlY4
SURCS2V5LmgiCiAjaW5jbHVkZSAiVjhJREJPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIlY4SURC
VHJhbnNhY3Rpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NSwxNCArNTYsMTYg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSURCQW55KiBpbXBsKQogICAgICAgICByZXR1
cm4gdG9WOChpbXBsLT5pZGJDdXJzb3IoKSk7CiAgICAgY2FzZSBJREJBbnk6OklEQkRhdGFiYXNl
VHlwZToKICAgICAgICAgcmV0dXJuIHRvVjgoaW1wbC0+aWRiRGF0YWJhc2UoKSk7CisgICAgY2Fz
ZSBJREJBbnk6OklEQkZhY3RvcnlUeXBlOgorICAgICAgICByZXR1cm4gdG9WOChpbXBsLT5pZGJG
YWN0b3J5KCkpOwogICAgIGNhc2UgSURCQW55OjpJREJJbmRleFR5cGU6CiAgICAgICAgIHJldHVy
biB0b1Y4KGltcGwtPmlkYkluZGV4KCkpOwogICAgIGNhc2UgSURCQW55OjpJREJLZXlUeXBlOgog
ICAgICAgICByZXR1cm4gdG9WOChpbXBsLT5pZGJLZXkoKSk7CiAgICAgY2FzZSBJREJBbnk6OklE
Qk9iamVjdFN0b3JlVHlwZToKICAgICAgICAgcmV0dXJuIHRvVjgoaW1wbC0+aWRiT2JqZWN0U3Rv
cmUoKSk7Ci0gICAgY2FzZSBJREJBbnk6OklEQkZhY3RvcnlUeXBlOgotICAgICAgICByZXR1cm4g
dG9WOChpbXBsLT5pZGJGYWN0b3J5KCkpOworICAgIGNhc2UgSURCQW55OjpJREJUcmFuc2FjdGlv
blR5cGU6CisgICAgICAgIHJldHVybiB0b1Y4KGltcGwtPmlkYlRyYW5zYWN0aW9uKCkpOwogICAg
IGNhc2UgSURCQW55OjpTZXJpYWxpemVkU2NyaXB0VmFsdWVUeXBlOgogICAgICAgICByZXR1cm4g
aW1wbC0+c2VyaWFsaXplZFNjcmlwdFZhbHVlKCktPmRlc2VyaWFsaXplKCk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAppbmRleCA2ODNiYTU0MzZmMjZhZmVmNGFk
MGRjNGEwOTFhNGUzNWQxZWVkZThkLi40MjgwNDg2YzIxMTc2NTYwYmU3NDk4ODg4ZWM2ZDI0NjJl
ZDc4ZDg3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcApAQCAtMzcsNiAr
MzcsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJl
cXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9zdG9yYWdlL0lEQkFueS5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmNwcApp
bmRleCA0NWIxNjZkNDIyMGNhNGNlM2Q1ZjQyMzkzZDJjOTRiYjMwMzExYWEyLi4zYTA0OWMwMThh
YmI4NGI5YTEzOGU0NjVjYWI5NTE4ZTBlNDI5M2JkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3Jh
Z2UvSURCQW55LmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmNwcApAQCAtNzAsNiAr
NzAsMTIgQEAgUGFzc1JlZlB0cjxJREJEYXRhYmFzZT4gSURCQW55OjppZGJEYXRhYmFzZSgpCiAg
ICAgcmV0dXJuIG1faWRiRGF0YWJhc2U7CiB9CiAKK1Bhc3NSZWZQdHI8SURCRmFjdG9yeT4gSURC
QW55OjppZGJGYWN0b3J5KCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkZhY3RvcnlUeXBl
KTsKKyAgICByZXR1cm4gbV9pZGJGYWN0b3J5OworfQorCiBQYXNzUmVmUHRyPElEQkluZGV4PiBJ
REJBbnk6OmlkYkluZGV4KCkKIHsKICAgICBBU1NFUlQobV90eXBlID09IElEQkluZGV4VHlwZSk7
CkBAIC04OCwxMCArOTQsMTAgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCQW55Ojpp
ZGJPYmplY3RTdG9yZSgpCiAgICAgcmV0dXJuIG1faWRiT2JqZWN0U3RvcmU7CiB9CiAKLVBhc3NS
ZWZQdHI8SURCRmFjdG9yeT4gSURCQW55OjppZGJGYWN0b3J5KCkKK1Bhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IElEQkFueTo6aWRiVHJhbnNhY3Rpb24oKQogewotICAgIEFTU0VSVChtX3R5cGUg
PT0gSURCRmFjdG9yeVR5cGUpOwotICAgIHJldHVybiBtX2lkYkZhY3Rvcnk7CisgICAgQVNTRVJU
KG1fdHlwZSA9PSBJREJUcmFuc2FjdGlvblR5cGUpOworICAgIHJldHVybiBtX2lkYlRyYW5zYWN0
aW9uOwogfQogCiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSURCQW55OjpzZXJp
YWxpemVkU2NyaXB0VmFsdWUoKQpAQCAtMTIwLDYgKzEyNiwxMyBAQCB2b2lkIElEQkFueTo6c2V0
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2U+IHZhbHVlKQogICAgIG1faWRiRGF0YWJhc2UgPSB2YWx1
ZTsKIH0KIAordm9pZCBJREJBbnk6OnNldChQYXNzUmVmUHRyPElEQkZhY3Rvcnk+IHZhbHVlKQor
eworICAgIEFTU0VSVChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7CisgICAgbV90eXBlID0gSURC
RmFjdG9yeVR5cGU7CisgICAgbV9pZGJGYWN0b3J5ID0gdmFsdWU7Cit9CisKIHZvaWQgSURCQW55
OjpzZXQoUGFzc1JlZlB0cjxJREJJbmRleD4gdmFsdWUpCiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9
PSBVbmRlZmluZWRUeXBlKTsKQEAgLTEzNCwxOCArMTQ3LDE4IEBAIHZvaWQgSURCQW55OjpzZXQo
UGFzc1JlZlB0cjxJREJLZXk+IHZhbHVlKQogICAgIG1faWRiS2V5ID0gdmFsdWU7CiB9CiAKLXZv
aWQgSURCQW55OjpzZXQoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gdmFsdWUpCit2b2lkIElE
QkFueTo6c2V0KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHZhbHVlKQogewogICAgIEFTU0VS
VChtX3R5cGUgPT0gVW5kZWZpbmVkVHlwZSk7Ci0gICAgbV90eXBlID0gSURCT2JqZWN0U3RvcmVU
eXBlOwotICAgIG1faWRiT2JqZWN0U3RvcmUgPSB2YWx1ZTsKKyAgICBtX3R5cGUgPSBJREJUcmFu
c2FjdGlvblR5cGU7CisgICAgbV9pZGJUcmFuc2FjdGlvbiA9IHZhbHVlOwogfQogCi12b2lkIElE
QkFueTo6c2V0KFBhc3NSZWZQdHI8SURCRmFjdG9yeT4gdmFsdWUpCit2b2lkIElEQkFueTo6c2V0
KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IHZhbHVlKQogewogICAgIEFTU0VSVChtX3R5cGUg
PT0gVW5kZWZpbmVkVHlwZSk7Ci0gICAgbV90eXBlID0gSURCRmFjdG9yeVR5cGU7Ci0gICAgbV9p
ZGJGYWN0b3J5ID0gdmFsdWU7CisgICAgbV90eXBlID0gSURCT2JqZWN0U3RvcmVUeXBlOworICAg
IG1faWRiT2JqZWN0U3RvcmUgPSB2YWx1ZTsKIH0KIAogdm9pZCBJREJBbnk6OnNldChQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0
b3JhZ2UvSURCQW55LmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmgKaW5kZXggOTA2NmUxMzc5
MDc3N2Y0YWNiN2M4NTAwOWRlOTQ1NmU4NmZkODM1Yi4uOGUzZjgzZTlkYmU5ZjdlZDA0MDdiMGU0
OTMzYzU5OGZiNjhlNTE0ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkFueS5oCisr
KyBiL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaApAQCAtMzYsMTAgKzM2LDExIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCQ3Vyc29yOwogY2xhc3MgSURCRGF0YWJhc2U7CitjbGFz
cyBJREJGYWN0b3J5OwogY2xhc3MgSURCSW5kZXg7CiBjbGFzcyBJREJLZXk7CiBjbGFzcyBJREJP
YmplY3RTdG9yZTsKLWNsYXNzIElEQkZhY3Rvcnk7CitjbGFzcyBJREJUcmFuc2FjdGlvbjsKIGNs
YXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogY2xhc3MgSURCQW55IDogcHVibGljIFJlZkNv
dW50ZWQ8SURCQW55PiB7CkBAIC03MSw2ICs3Miw3IEBAIHB1YmxpYzoKICAgICAgICAgSURCSW5k
ZXhUeXBlLAogICAgICAgICBJREJLZXlUeXBlLAogICAgICAgICBJREJPYmplY3RTdG9yZVR5cGUs
CisgICAgICAgIElEQlRyYW5zYWN0aW9uVHlwZSwKICAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZh
bHVlVHlwZQogICAgIH07CiAKQEAgLTgyLDYgKzg0LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQ
dHI8SURCSW5kZXg+IGlkYkluZGV4KCk7CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleSgp
OwogICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlKCk7CisgICAg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24oKTsKICAgICBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CiAKICAg
ICAvLyBTZXQgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuCkBAIC05Miw2ICs5NSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQkluZGV4Pik7CiAgICAgdm9pZCBzZXQoUGFz
c1JlZlB0cjxJREJLZXk+KTsKICAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
Pik7CisgICAgdm9pZCBzZXQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4pOwogICAgIHZvaWQg
c2V0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7CiAKIHByaXZhdGU6CkBAIC0x
MDYsNiArMTEwLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCSW5kZXg+IG1faWRiSW5kZXg7
CiAgICAgUmVmUHRyPElEQktleT4gbV9pZGJLZXk7CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3Jl
PiBtX2lkYk9iamVjdFN0b3JlOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV9pZGJUcmFu
c2FjdGlvbjsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX3NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJDYWxsYmFj
a3MuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJDYWxsYmFja3MuaAppbmRleCBiYzQ4NDc3Yzc3MGJl
YTYzMDU3MDM2ZWJkZmFkNzk3NmE3N2QzM2JhLi5lNjJjMDg1YjkxZWY1OWNjMDVmZTZhM2FlZGQx
ZWUxYTBmYzgyOGNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCQ2FsbGJhY2tzLmgK
KysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkNhbGxiYWNrcy5oCkBAIC0zNSwxNCArMzUsMTYgQEAK
ICNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJLZXku
aCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRl
ICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJTZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIElEQkNhbGxiYWNrcyA6IHB1YmxpYyBSZWZDb3VudGVkPElE
QkNhbGxiYWNrcz4geworLy8gRklYTUU6IEFsbCBjaGlsZCBjbGFzc2VzIG5lZWQgdG8gYmUgbWFk
ZSB0aHJlYWRzYWZlLgorY2xhc3MgSURCQ2FsbGJhY2tzIDogcHVibGljIFRocmVhZFNhZmVTaGFy
ZWQ8SURCQ2FsbGJhY2tzPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCQ2FsbGJhY2tzKCkg
eyB9CiAKQEAgLTUzLDYgKzU1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nl
c3MoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+KSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4pID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pID0gMDsKIH07CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5j
cHAKaW5kZXggYzFjMDc3YjIzYTFmMTNhMDNjMTY0MTFlNTUxZTBhYzFjOGE4ZjQxYS4uZDJlYWE2
MWY2OTgzZmVlZmQ1NzFlYzY5NzkwNWIyY2ZiYWU5NGQ4NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9z
dG9yYWdlL0lEQkN1cnNvci5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5jcHAK
QEAgLTM1LDEzICszNSwxOCBAQAogI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotSURCQ3Vyc29yOjpJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJSZXF1ZXN0KiByZXF1ZXN0KQorSURCQ3Vy
c29yOjpJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBiYWNr
ZW5kLCBJREJSZXF1ZXN0KiByZXF1ZXN0LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uKQogICAgIDogbV9iYWNrZW5kKGJhY2tlbmQpCiAgICAgLCBtX3JlcXVlc3Qo
cmVxdWVzdCkKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiB7CisgICAgQVNTRVJU
KG1fYmFja2VuZCk7CisgICAgQVNTRVJUKG1fcmVxdWVzdCk7CisgICAgQVNTRVJUKG1fdHJhbnNh
Y3Rpb24pOwogfQogCiBJREJDdXJzb3I6On5JREJDdXJzb3IoKQpAQCAtNjUsNyArNzAsNyBAQCBQ
YXNzUmVmUHRyPElEQkFueT4gSURCQ3Vyc29yOjp2YWx1ZSgpIGNvbnN0CiAKIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKQogewotICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElE
QkFueTo6Y3JlYXRlKHRoaXMpKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CiAgICAgbV9iYWNrZW5kLT51cGRhdGUodmFsdWUsIHJlcXVlc3QpOwogICAg
IHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKIH0KQEAgLTc0LDE0ICs3OSwxNCBAQCB2b2lkIElE
QkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4ga2V5KQogewogICAg
IC8vIEZJWE1FOiBXZSdyZSBub3QgdXNpbmcgdGhlIGNvbnRleHQgZnJvbSB3aGVuIGNvbnRpbnVl
IHdhcyBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoZSBjYWxsYmFjawogICAgIC8vICAgICAgICB3aWxs
IGJlIG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IG9wZW5DdXJzb3Igd2FzIGNhbGxlZCBvbi4gSXMg
dGhpcyByaWdodD8KLSAgICBpZiAobV9yZXF1ZXN0LT5yZXNldFJlYWR5U3RhdGUoKSkKKyAgICBp
ZiAobV9yZXF1ZXN0LT5yZXNldFJlYWR5U3RhdGUobV90cmFuc2FjdGlvbi5nZXQoKSkpCiAgICAg
ICAgIG1fYmFja2VuZC0+Y29udGludWVGdW5jdGlvbihrZXksIG1fcmVxdWVzdCk7CiAgICAgLy8g
RklYTUU6IEVsc2UgdGhyb3c/CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29y
OjpyZW1vdmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSk7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1
ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24u
Z2V0KCkpOwogICAgIG1fYmFja2VuZC0+cmVtb3ZlKHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1
ZXN0LnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3Iu
aCBiL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuaAppbmRleCAwYzQzOGM0ZTY5MjU0NGIwNDU3
MzE4MzE3NDU0OGFmNTRiNDg3MmI0Li41YWQyZDYxNmRmMzFkNDdiYzgzZDE3M2ZlY2FjMGQzZjEw
MzNkOTgzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmgKKysrIGIvV2Vi
Q29yZS9zdG9yYWdlL0lEQkN1cnNvci5oCkBAIC00MSw2ICs0MSw3IEBAIGNsYXNzIElEQktleTsK
IGNsYXNzIElEQlJlcXVlc3Q7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3Mg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOworY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlOwogCiBjbGFzcyBJREJDdXJzb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJDdXJzb3I+IHsK
IHB1YmxpYzoKQEAgLTUwLDkgKzUxLDkgQEAgcHVibGljOgogICAgICAgICBQUkVWID0gMiwKICAg
ICAgICAgUFJFVl9OT19EVVBMSUNBVEUgPSAzLAogICAgIH07Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCQ3Vyc29yPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
PiBiYWNrZW5kLCBJREJSZXF1ZXN0KiByZXF1ZXN0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QkN1cnNvcj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFj
a2VuZCwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vy
c29yKGJhY2tlbmQsIHJlcXVlc3QpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJD
dXJzb3IoYmFja2VuZCwgcmVxdWVzdCwgdHJhbnNhY3Rpb24pKTsKICAgICB9CiAgICAgfklEQkN1
cnNvcigpOwogCkBAIC02NSwxMCArNjYsMTEgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gcmVtb3ZlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogcHJpdmF0ZToKLSAg
ICBleHBsaWNpdCBJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
PiwgSURCUmVxdWVzdCopOworICAgIGV4cGxpY2l0IElEQkN1cnNvcihQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U+LCBJREJSZXF1ZXN0KiwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKik7CiAKICAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gbV9i
YWNrZW5kOwogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBtX3JlcXVlc3Q7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JC
YWNrZW5kSW1wbC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
CmluZGV4IDEzZGY1ZjAyMTU0ZTU1ZDE2MjZkMDYyMmUwYmQyNWM1Y2UwYmQ5OGEuLmFlZjFkMmNm
MTllMmNjMDg4MWQyNWRhZWRmNTA3OTZjYThkZjY5ZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3Rv
cmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkN1
cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJJ
REJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5j
bHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgpAQCAtNDMsMjIgKzQ0LDI0IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotSURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBs
KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gaWRiT2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJl
Y3Rpb24sIFBhc3NPd25QdHI8U1FMaXRlU3RhdGVtZW50PiBxdWVyeSkKK0lEQkN1cnNvckJhY2tl
bmRJbXBsOjpJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IGlkYk9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzT3duUHRyPFNRTGl0ZVN0YXRl
bWVudD4gcXVlcnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24p
CiAgICAgOiBtX2lkYk9iamVjdFN0b3JlKGlkYk9iamVjdFN0b3JlKQogICAgICwgbV9rZXlSYW5n
ZShrZXlSYW5nZSkKICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICAsIG1fcXVlcnko
cXVlcnkpCiAgICAgLCBtX2lzU2VyaWFsaXplZFNjcmlwdFZhbHVlQ3Vyc29yKHRydWUpCisgICAg
LCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogewogICAgIGxvYWRDdXJyZW50Um93KCk7CiB9
CiAKLUlEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IGlkYkluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzT3duUHRyPFNRTGl0
ZVN0YXRlbWVudD4gcXVlcnksIGJvb2wgaXNTZXJpYWxpemVkU2NyaXB0VmFsdWVDdXJzb3IpCitJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBpZGJJbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc093blB0cjxTUUxpdGVTdGF0
ZW1lbnQ+IHF1ZXJ5LCBib29sIGlzU2VyaWFsaXplZFNjcmlwdFZhbHVlQ3Vyc29yLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogICAgIDogbV9pZGJJbmRleChp
ZGJJbmRleCkKICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCiAgICAgLCBtX2RpcmVjdGlvbihk
aXJlY3Rpb24pCiAgICAgLCBtX3F1ZXJ5KHF1ZXJ5KQogICAgICwgbV9pc1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUN1cnNvcihpc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUN1cnNvcikKKyAgICAsIG1fdHJh
bnNhY3Rpb24odHJhbnNhY3Rpb24pCiB7CiAgICAgbG9hZEN1cnJlbnRSb3coKTsKIH0KQEAgLTg1
LDcgKzg4LDE1IEBAIFBhc3NSZWZQdHI8SURCQW55PiBJREJDdXJzb3JCYWNrZW5kSW1wbDo6dmFs
dWUoKSBjb25zdAogICAgIHJldHVybiBJREJBbnk6OmNyZWF0ZShtX2N1cnJlbnRJREJLZXlWYWx1
ZS5nZXQoKSk7CiB9CiAKLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnVwZGF0ZShQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCit2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzKQoreworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHZhbHVlID0gcHJwVmFsdWU7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0g
cHJwQ2FsbGJhY2tzOworICAgIGlmICghbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0
ZUNhbGxiYWNrVGFzaygmSURCQ3Vyc29yQmFja2VuZEltcGw6OnVwZGF0ZUludGVybmFsLCB0aGlz
LCB2YWx1ZSwgY2FsbGJhY2tzKSkpCisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUiwg
InVwZGF0ZSBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiBhIHRyYW5zYWN0aW9uLiIp
KTsKK30KKwordm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRlSW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNv
ciwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBk
b2Vzbid0IHVwZGF0ZSBpbmRleGVzLiBJdCdzIGRhbmdlcm91cyB0byBjYWxsIGluIGl0cyBjdXJy
ZW50IHN0YXRlLgogICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiTm90IGltcGxlbWVudGVkLiIp
KTsKQEAgLTkzLDgyICsxMDQsOTggQEAgdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRl
KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGEKIAogICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7CiAKLSAgICBpZiAo
IW1fcXVlcnkgfHwgbV9jdXJyZW50SWQgPT0gSW52YWxpZElkKSB7CisgICAgaWYgKCFjdXJzb3It
Pm1fcXVlcnkgfHwgY3Vyc29yLT5tX2N1cnJlbnRJZCA9PSBJbnZhbGlkSWQpIHsKICAgICAgICAg
Ly8gRklYTUU6IFVzZSB0aGUgcHJvcGVyIGVycm9yIGNvZGUgd2hlbiBpdCdzIHNwZWNjZWQuCiAg
ICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiT3BlcmF0aW9uIG5vdCBwb3NzaWJsZS4iKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBTdHJpbmcgc3FsID0gIlVQREFURSBPYmpl
Y3RTdG9yZURhdGEgU0VUIHZhbHVlID0gPyBXSEVSRSBpZCA9ID8iOwotICAgIFNRTGl0ZVN0YXRl
bWVudCB1cGRhdGVRdWVyeShkYXRhYmFzZSgpLT5zcWxpdGVEYXRhYmFzZSgpLCBzcWwpOworICAg
IFNRTGl0ZVN0YXRlbWVudCB1cGRhdGVRdWVyeShjdXJzb3ItPmRhdGFiYXNlKCktPnNxbGl0ZURh
dGFiYXNlKCksIHNxbCk7CiAgICAgCiAgICAgYm9vbCBvayA9IHVwZGF0ZVF1ZXJ5LnByZXBhcmUo
KSA9PSBTUUxSZXN1bHRPazsKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBC
ZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCiAgICAgdXBkYXRlUXVlcnkuYmluZFRleHQoMSwgdmFsdWUt
PnRvV2lyZVN0cmluZygpKTsKLSAgICB1cGRhdGVRdWVyeS5iaW5kSW50NjQoMiwgbV9jdXJyZW50
SWQpOworICAgIHVwZGF0ZVF1ZXJ5LmJpbmRJbnQ2NCgyLCBjdXJzb3ItPm1fY3VycmVudElkKTsK
ICAgICBvayA9IHVwZGF0ZVF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwogICAgIEFTU0VS
VF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KIAotICAg
IGlmIChtX2lzU2VyaWFsaXplZFNjcmlwdFZhbHVlQ3Vyc29yKQotICAgICAgICBtX2N1cnJlbnRT
ZXJpYWxpemVkU2NyaXB0VmFsdWUgPSB2YWx1ZS5yZWxlYXNlKCk7CisgICAgaWYgKGN1cnNvci0+
bV9pc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUN1cnNvcikKKyAgICAgICAgY3Vyc29yLT5tX2N1cnJl
bnRTZXJpYWxpemVkU2NyaXB0VmFsdWUgPSB2YWx1ZS5yZWxlYXNlKCk7CiAgICAgY2FsbGJhY2tz
LT5vblN1Y2Nlc3MoKTsKIH0KIAotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVG
dW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQordm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlv
bihQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJw
Q2FsbGJhY2tzKQoreworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKyAgICBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgaWYgKCFtX3Ry
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJDdXJzb3JCYWNr
ZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbkludGVybmFsLCB0aGlzLCBrZXksIGNhbGxiYWNrcykp
KQorICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlIsICJjb250aW51ZSBtdXN0IGJlIGNh
bGxlZCBpbiB0aGUgY29udGV4dCBvZiBhIHRyYW5zYWN0aW9uLiIpKTsKK30KKwordm9pZCBJREJD
dXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBwcnBDdXJzb3IsIFBh
c3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCiB7CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBwcnBDdXJz
b3I7CiAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwogICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgIGlmICghbV9xdWVyeSB8fCBtX3F1ZXJ5LT5zdGVwKCkgIT0gU1FMUmVzdWx0Um93
KSB7Ci0gICAgICAgICAgICBtX3F1ZXJ5ID0gMDsKLSAgICAgICAgICAgIG1fY3VycmVudElkID0g
SW52YWxpZElkOwotICAgICAgICAgICAgbV9jdXJyZW50S2V5ID0gMDsKLSAgICAgICAgICAgIG1f
Y3VycmVudFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA9IDA7Ci0gICAgICAgICAgICBtX2N1cnJlbnRJ
REJLZXlWYWx1ZSA9IDA7CisgICAgICAgIGlmICghY3Vyc29yLT5tX3F1ZXJ5IHx8IGN1cnNvci0+
bV9xdWVyeS0+c3RlcCgpICE9IFNRTFJlc3VsdFJvdykgeworICAgICAgICAgICAgY3Vyc29yLT5t
X3F1ZXJ5ID0gMDsKKyAgICAgICAgICAgIGN1cnNvci0+bV9jdXJyZW50SWQgPSBJbnZhbGlkSWQ7
CisgICAgICAgICAgICBjdXJzb3ItPm1fY3VycmVudEtleSA9IDA7CisgICAgICAgICAgICBjdXJz
b3ItPm1fY3VycmVudFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA9IDA7CisgICAgICAgICAgICBjdXJz
b3ItPm1fY3VycmVudElEQktleVZhbHVlID0gMDsKICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQ
dHI8SURCS2V5PiBvbGRLZXkgPSBtX2N1cnJlbnRLZXk7Ci0gICAgICAgIGxvYWRDdXJyZW50Um93
KCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IG9sZEtleSA9IGN1cnNvci0+bV9jdXJyZW50S2V5
OworICAgICAgICBjdXJzb3ItPmxvYWRDdXJyZW50Um93KCk7CiAKICAgICAgICAgLy8gSWYgYSBr
ZXkgd2FzIHN1cHBsaWVkLCB3ZSBtdXN0IGxvb3AgdW50aWwgd2UgZmluZCB0aGF0IGtleSAob3Ig
aGl0IHRoZSBlbmQpLgotICAgICAgICBpZiAoa2V5ICYmICFrZXktPmlzRXF1YWwobV9jdXJyZW50
S2V5LmdldCgpKSkKKyAgICAgICAgaWYgKGtleSAmJiAha2V5LT5pc0VxdWFsKGN1cnNvci0+bV9j
dXJyZW50S2V5LmdldCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIElm
IHdlIGRvbid0IGhhdmUgYSB1bmlxdWVuZXNzIGNvbnN0cmFpbnQsIHdlIGNhbiBzdG9wIG5vdy4K
LSAgICAgICAgaWYgKG1fZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCB8fCBtX2RpcmVjdGlv
biA9PSBJREJDdXJzb3I6OlBSRVYpCisgICAgICAgIGlmIChjdXJzb3ItPm1fZGlyZWN0aW9uID09
IElEQkN1cnNvcjo6TkVYVCB8fCBjdXJzb3ItPm1fZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJF
VikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIW1fY3VycmVudEtleS0+aXNFcXVh
bChvbGRLZXkuZ2V0KCkpKQorICAgICAgICBpZiAoIWN1cnNvci0+bV9jdXJyZW50S2V5LT5pc0Vx
dWFsKG9sZEtleS5nZXQoKSkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYWxs
YmFja3MtPm9uU3VjY2Vzcyh0aGlzKTsKKyAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3Iu
Z2V0KCkpOworfQorCit2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpyZW1vdmUoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJDdXJzb3JCYWNrZW5kSW1wbDo6cmVtb3Zl
SW50ZXJuYWwsIHRoaXMsIGNhbGxiYWNrcykpKQorICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dF
RF9FUlIsICJyZW1vdmUgbXVzdCBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgYSB0cmFuc2Fj
dGlvbi4iKSk7CiB9CiAKLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnJlbW92ZShQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6
cmVtb3ZlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vy
c29yQmFja2VuZEltcGw+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKIHsKICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgZG9lc24ndCB1cGRhdGUgaW5kZXhlcy4g
SXQncyBkYW5nZXJvdXMgdG8gY2FsbCBpbiBpdHMgY3VycmVudCBzdGF0ZS4KICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVTktOT1dOX0VSUiwgIk5vdCBpbXBsZW1lbnRlZC4iKSk7CiAgICAgcmV0dXJuOwogCi0gICAg
aWYgKCFtX3F1ZXJ5IHx8IG1fY3VycmVudElkID09IEludmFsaWRJZCkgeworICAgIGlmICghY3Vy
c29yLT5tX3F1ZXJ5IHx8IGN1cnNvci0+bV9jdXJyZW50SWQgPT0gSW52YWxpZElkKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBVc2UgdGhlIHByb3BlciBlcnJvciBjb2RlIHdoZW4gaXQncyBzcGVjY2Vk
LgogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIk9wZXJhdGlvbiBub3QgcG9zc2libGUu
IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgU3RyaW5nIHNxbCA9ICJERUxFVEUg
RlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgaWQgPSA/IjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
ZGVsZXRlUXVlcnkoZGF0YWJhc2UoKS0+c3FsaXRlRGF0YWJhc2UoKSwgc3FsKTsKKyAgICBTUUxp
dGVTdGF0ZW1lbnQgZGVsZXRlUXVlcnkoY3Vyc29yLT5kYXRhYmFzZSgpLT5zcWxpdGVEYXRhYmFz
ZSgpLCBzcWwpOwogICAgIAogICAgIGJvb2wgb2sgPSBkZWxldGVRdWVyeS5wcmVwYXJlKCkgPT0g
U1FMUmVzdWx0T2s7CiAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVy
IGVycm9yIGhhbmRsaW5nLgotICAgIGRlbGV0ZVF1ZXJ5LmJpbmRJbnQ2NCgxLCBtX2N1cnJlbnRJ
ZCk7CisgICAgZGVsZXRlUXVlcnkuYmluZEludDY0KDEsIGN1cnNvci0+bV9jdXJyZW50SWQpOwog
ICAgIG9rID0gZGVsZXRlUXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7CiAgICAgQVNTRVJU
X1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgogCi0gICAg
bV9jdXJyZW50SWQgPSBJbnZhbGlkSWQ7Ci0gICAgbV9jdXJyZW50U2VyaWFsaXplZFNjcmlwdFZh
bHVlID0gMDsKLSAgICBtX2N1cnJlbnRJREJLZXlWYWx1ZSA9IDA7CisgICAgY3Vyc29yLT5tX2N1
cnJlbnRJZCA9IEludmFsaWRJZDsKKyAgICBjdXJzb3ItPm1fY3VycmVudFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSA9IDA7CisgICAgY3Vyc29yLT5tX2N1cnJlbnRJREJLZXlWYWx1ZSA9IDA7CiAgICAg
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdl
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2Vu
ZEltcGwuaAppbmRleCBiNjdlYzcwYmM5MzM1OTBiNzA0OWY2NGQ3YTYyZTlkOTQxNDUyYzVmLi4y
MTFkMzhkMGFlMDY1MzMxOGZkYThlZTBhZTUzN2U5YjBlZTQ4YWYyIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCQ3Vyc29yQmFja2VuZEltcGwuaApAQCAtNDEsMTggKzQxLDE5IEBAIGNsYXNzIElEQkRhdGFi
YXNlQmFja2VuZEltcGw7CiBjbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOwogY2xhc3MgSURCS2V5
UmFuZ2U7CiBjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOworY2xhc3MgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlOwogY2xhc3MgU1FMaXRlU3RhdGVtZW50OwogY2xhc3MgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOwogCiBjbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbCA6IHB1Ymxp
YyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIFBhc3NPd25QdHI8U1FMaXRlU3Rh
dGVtZW50PiBxdWVyeSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1w
bD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlv
biBkaXJlY3Rpb24sIFBhc3NPd25QdHI8U1FMaXRlU3RhdGVtZW50PiBxdWVyeSwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwob2JqZWN0U3RvcmUsIGtleVJhbmdl
LCBkaXJlY3Rpb24sIHF1ZXJ5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vy
c29yQmFja2VuZEltcGwob2JqZWN0U3RvcmUsIGtleVJhbmdlLCBkaXJlY3Rpb24sIHF1ZXJ5LCB0
cmFuc2FjdGlvbikpOwogICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW1wbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJl
Y3Rpb24sIFBhc3NPd25QdHI8U1FMaXRlU3RhdGVtZW50PiBxdWVyeSwgYm9vbCBpc1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUN1cnNvcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW1wbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJl
Y3Rpb24sIFBhc3NPd25QdHI8U1FMaXRlU3RhdGVtZW50PiBxdWVyeSwgYm9vbCBpc1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUN1cnNvciwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvbikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFj
a2VuZEltcGwoaW5kZXgsIGtleVJhbmdlLCBkaXJlY3Rpb24sIHF1ZXJ5LCBpc1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUN1cnNvcikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNv
ckJhY2tlbmRJbXBsKGluZGV4LCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBxdWVyeSwgaXNTZXJpYWxp
emVkU2NyaXB0VmFsdWVDdXJzb3IsIHRyYW5zYWN0aW9uKSk7CiAgICAgfQogICAgIHZpcnR1YWwg
fklEQkN1cnNvckJhY2tlbmRJbXBsKCk7CiAKQEAgLTY0LDEyICs2NSwxNiBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogCiBwcml2
YXRlOgotICAgIElEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJREJDdXJzb3I6OkRpcmVjdGlv
biwgUGFzc093blB0cjxTUUxpdGVTdGF0ZW1lbnQ+IHF1ZXJ5KTsKLSAgICBJREJDdXJzb3JCYWNr
ZW5kSW1wbChQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NPd25QdHI8U1FMaXRlU3RhdGVtZW50
PiBxdWVyeSwgYm9vbCBpc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUN1cnNvcik7CisgICAgSURCQ3Vy
c29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1cnNvcjo6RGlyZWN0aW9uLCBQYXNzT3duUHRyPFNR
TGl0ZVN0YXRlbWVudD4gcXVlcnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwor
ICAgIElEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc093blB0
cjxTUUxpdGVTdGF0ZW1lbnQ+IHF1ZXJ5LCBib29sIGlzU2VyaWFsaXplZFNjcmlwdFZhbHVlQ3Vy
c29yLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKIAogICAgIHZvaWQgbG9hZEN1
cnJlbnRSb3coKTsKICAgICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSgpIGNvbnN0
OwogCisgICAgc3RhdGljIHZvaWQgdXBkYXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgc3RhdGljIHZv
aWQgY29udGludWVGdW5jdGlvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4pOworICAgIHN0YXRpYyB2b2lkIHJlbW92ZUludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKwogICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFs
aWRJZCA9IC0xOwogCiAgICAgLy8gT25seSBvbmUgb3IgdGhlIG90aGVyIHNob3VsZCBiZSB1c2Vk
LgpAQCAtODYsNiArOTEsOCBAQCBwcml2YXRlOgogICAgIC8vIE9ubHkgb25lIG9mIHRoZXNlIHdp
bGwgZXZlciBiZSB1c2VkIGZvciBlYWNoIGluc3RhbmNlLiBXaGljaCBkZXBlbmRzIG9uIG1faXNT
ZXJpYWxpemVkU2NyaXB0VmFsdWVDdXJzb3IuCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gbV9jdXJyZW50U2VyaWFsaXplZFNjcmlwdFZhbHVlOwogICAgIFJlZlB0cjxJREJLZXk+
IG1fY3VycmVudElEQktleVZhbHVlOworCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAgYi9XZWJDb3JlL3N0
b3JhZ2UvSURCRGF0YWJhc2UuY3BwCmluZGV4IDBlYTdhYzI5MjY3NGNlYTYwOTcwMzVmYTVmZTVj
ODk3ZjQ0ZGI2YjcuLjRkMzIyMTM4ZjdiMTUzMGRlZDBjMzg0ODRkZGNkZjVhZmVkOGE1YWYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKKysrIGIvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlLmNwcApAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgIklEQkRh
dGFiYXNlLmgiCiAKICNpbmNsdWRlICJJREJBbnkuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUVy
cm9yLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCiAj
aW5jbHVkZSAiSURCUmVxdWVzdC5oIgpAQCAtNDgsMzEgKzUwLDM2IEBAIElEQkRhdGFiYXNlOjp+
SURCRGF0YWJhc2UoKQogewogfQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkRhdGFiYXNl
OjpjcmVhdGVPYmplY3RTdG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50
KQordm9pZCBJREJEYXRhYmFzZTo6c2V0U2V0VmVyc2lvblRyYW5zYWN0aW9uKElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCiB7Ci0gICAgUmVmUHRyPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUo
dGhpcykpOwotICAgIG1fYmFja2VuZC0+Y3JlYXRlT2JqZWN0U3RvcmUobmFtZSwga2V5UGF0aCwg
YXV0b0luY3JlbWVudCwgcmVxdWVzdCk7Ci0gICAgcmV0dXJuIHJlcXVlc3Q7CisgICAgbV9zZXRW
ZXJzaW9uVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKIH0KIAotLy8gRklYTUU6IHJlbW92ZSB0
aGlzIG1ldGhvZC4KLVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpvYmpl
Y3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIHNob3J0IG1vZGUpCisvLyBGSVhN
RTogU2hvdWxkIGJlIHN5bmNocm9ub3VzLgorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJEYXRh
YmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3Jl
bWVudCkKIHsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmpl
Y3RTdG9yZSA9IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUobmFtZSwgbW9kZSk7Ci0gICAgQVNTRVJU
KG9iamVjdFN0b3JlKTsgLy8gRklYTUU6IElmIHRoaXMgaXMgbnVsbCwgd2Ugc2hvdWxkIHJhaXNl
IGEgTk9UX0ZPVU5EX0VSUi4KLSAgICByZXR1cm4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShvYmpl
Y3RTdG9yZS5yZWxlYXNlKCksIDApOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0g
SURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3NldFZl
cnNpb25UcmFuc2FjdGlvbi5nZXQoKSk7CisgICAgaWYgKCFtX3NldFZlcnNpb25UcmFuc2FjdGlv
bikKKyAgICAgICAgcmVxdWVzdC0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUiwgImNyZWF0ZU9iamVjdFN0b3JlIG11
c3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbi4iKSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2JhY2tlbmQtPmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBh
dGgsIGF1dG9JbmNyZW1lbnQsIHJlcXVlc3QsIG1fc2V0VmVyc2lvblRyYW5zYWN0aW9uLmdldCgp
KTsKKyAgICByZXR1cm4gcmVxdWVzdDsKIH0KIAorLy8gRklYTUU6IFNob3VsZCBiZSBzeW5jaHJv
bm91cy4KIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRGF0YWJhc2U6OnJlbW92ZU9iamVjdFN0
b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSkK
IHsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShj
b250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSk7Ci0gICAgbV9iYWNrZW5kLT5yZW1vdmVPYmpl
Y3RTdG9yZShuYW1lLCByZXF1ZXN0KTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9
IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV9zZXRW
ZXJzaW9uVHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIGlmICghbV9zZXRWZXJzaW9uVHJhbnNhY3Rp
b24pCisgICAgICAgIHJlcXVlc3QtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlIsICJyZW1vdmVPYmplY3RTdG9yZSBt
dXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhIHNldFZlcnNpb24gdHJhbnNhY3Rpb24uIikpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kLT5yZW1vdmVPYmplY3RTdG9yZShuYW1lLCByZXF1
ZXN0LCBtX3NldFZlcnNpb25UcmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7
CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRGF0YWJhc2U6OnNldFZlcnNpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQogewot
ICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRl
eHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVz
dCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7
CiAgICAgbV9iYWNrZW5kLT5zZXRWZXJzaW9uKHZlcnNpb24sIHJlcXVlc3QpOwogICAgIHJldHVy
biByZXF1ZXN0OwogfQpAQCAtODksNiArOTYsMTEgQEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQK
ICAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVsZWFzZSgpOwogfQogCit2b2lkIElEQkRhdGFiYXNl
OjpjbG9zZSgpCit7CisgICAgbV9iYWNrZW5kLT5jbG9zZSgpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlLmgKaW5kZXggZGM3MDExNDQ5YjE4NGZmYzU2ODU5NGJlMGRlMTE0ZTY4MmJhNmNiNS4u
Y2Y5NTMxN2E3ZjQzZWEwMmFiYjFhNGE1YWFiNmZiMWI1YTBjZWJjMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFi
YXNlLmgKQEAgLTUwLDIyICs1MCwyNSBAQCBwdWJsaWM6CiAgICAgfQogICAgIH5JREJEYXRhYmFz
ZSgpOwogCisgICAgdm9pZCBzZXRTZXRWZXJzaW9uVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKik7CisKICAgICAvLyBJbXBsZW1lbnQgdGhlIElETAogICAgIFN0cmlu
ZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT5uYW1lKCk7IH0KICAgICBTdHJpbmcg
dmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+dmVyc2lvbigpOyB9CiAgICAgUGFz
c1JlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZXMoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tlbmQtPm9iamVjdFN0b3JlcygpOyB9CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNy
ZWF0ZU9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCA9IFN0cmluZygpLCBib29sIGF1dG9JbmNyZW1lbnQg
PSBmYWxzZSk7Ci0gICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBzaG9ydCBtb2RlID0gSURCVHJhbnNhY3Rpb246OlJF
QURfT05MWSk7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiByZW1vdmVPYmplY3RTdG9yZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IHNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFN0cmluZyYgdmVyc2lvbik7CiAgICAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNh
Y3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERPTVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMg
PSAwLCB1bnNpZ25lZCBzaG9ydCBtb2RlID0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRp
bWVvdXQgPSAwKTsgLy8gRklYTUU6IHdoYXQgc2hvdWxkIHRoZSBkZWZhdWx0IHRpbWVvdXQgYmU/
CisgICAgdm9pZCBjbG9zZSgpOwogCiBwcml2YXRlOgogICAgIElEQkRhdGFiYXNlKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPik7CiAKICAgICBSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gbV9zZXRWZXJzaW9uVHJhbnNhY3Rpb247CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2Uu
aWRsIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbAppbmRleCAzNDdiM2E3Yzg0MWY5
N2Q1YWI0MWVkYTYyNWYyNGJlM2ExMTkxY2RjLi4zMGNkZjMwM2U1NWU3OWUyYTBjMGNlOWExYjU4
OWUwZGE0NjcxNDY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaWRs
CisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwKQEAgLTMyLDE0ICszMiwxMSBA
QCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
dmVyc2lvbjsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ0xpc3Qgb2JqZWN0
U3RvcmVzOwogCi0KICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElE
QlJlcXVlc3QgY3JlYXRlT2JqZWN0U3RvcmUoaW4gRE9NU3RyaW5nIG5hbWUsIGluIFtPcHRpb25h
bCwgQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBrZXlQYXRoLCBpbiBbT3B0aW9u
YWxdIGJvb2xlYW4gYXV0b0luY3JlbWVudCk7Ci0gICAgICAgIC8vIEZJWE1FOiBvYmplY3RTdG9y
ZSBuZWVkcyB0byBiZSBhYmxlIHRvIHJhaXNlIGFuIElEQkRhdGFiYXNlRXhjZXB0aW9uLgotICAg
ICAgICBJREJPYmplY3RTdG9yZSBvYmplY3RTdG9yZShpbiBET01TdHJpbmcgbmFtZSwgaW4gW09w
dGlvbmFsXSB1bnNpZ25lZCBzaG9ydCBtb2RlKTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgcmVtb3ZlT2JqZWN0U3RvcmUoaW4gRE9NU3RyaW5n
IG5hbWUpOwogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVx
dWVzdCBzZXRWZXJzaW9uKGluIERPTVN0cmluZyB2ZXJzaW9uKTsKICAgICAgICAgW0NhbGxXaXRo
PVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uIChpbiBb
T3B0aW9uYWxdIERPTVN0cmluZ0xpc3Qgc3RvcmVOYW1lcywgaW4gW09wdGlvbmFsXSB1bnNpZ25l
ZCBzaG9ydCBtb2RlLCBpbiBbT3B0aW9uYWxdIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7Ci0gICAg
ICAgIC8vIEZJWE1FOiBBZGQgY2xvc2UuCisgICAgICAgIHZvaWQgY2xvc2UoKTsKICAgICB9Owog
CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggYjhm
ZTliNTA2MmY2ZDYwMzA1YmMxZDVjNjAxNWRkMDAyMmZjNzU0MS4uMzIxZmRjYTRhNjIwMDliZTg0
MjViNmZlYTM5YWRlNzIyMTI5YzhlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmNwcApAQCAtMjYsMTYgKzI2LDE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgogCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJET01T
dHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRl
ICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5o
IgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50
LmgiCiAjaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKIAotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIGV4dHJhY3RN
ZXRhRGF0YShTUUxpdGVEYXRhYmFzZSogc3FsaXRlRGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWROYW1lLCBTdHJpbmcmIGZvdW5kRGVzY3JpcHRpb24sIFN0cmluZyYgZm91bmRWZXJzaW9u
KQpAQCAtMTI1LDE0ICsxMjcsMjEgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZXMoKSBjb25zdAogICAgIHJldHVybiBvYmplY3RT
dG9yZU5hbWVzLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpj
cmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewotICAgIGlmIChtX29iamVjdFN0b3Jlcy5jb250
YWlucyhuYW1lKSkgeworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENh
bGxiYWNrczsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFs
LCB0aGlzLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBjYWxsYmFja3MpKSkKKyAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSLCAiY3JlYXRlT2JqZWN0U3RvcmUgbXVzdCBiZSBj
YWxsZWQgZnJvbSB3aXRoaW4gYSBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uLiIpKTsKK30KKwordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRh
dGFiYXNlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBh
dXRvSW5jcmVtZW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAg
IGlmIChkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkpIHsKICAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJBbiBvYmplY3RTdG9yZSB3aXRoIHRoYXQgbmFtZSBh
bHJlYWR5IGV4aXN0cy4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTUUxpdGVT
dGF0ZW1lbnQgaW5zZXJ0KHNxbGl0ZURhdGFiYXNlKCksICJJTlNFUlQgSU5UTyBPYmplY3RTdG9y
ZXMgKG5hbWUsIGtleVBhdGgsIGRvQXV0b0luY3JlbWVudCkgVkFMVUVTICg/LCA/LCA/KSIpOwor
ICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnQoZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCksICJJ
TlNFUlQgSU5UTyBPYmplY3RTdG9yZXMgKG5hbWUsIGtleVBhdGgsIGRvQXV0b0luY3JlbWVudCkg
VkFMVUVTICg/LCA/LCA/KSIpOwogICAgIGJvb2wgb2sgPSBpbnNlcnQucHJlcGFyZSgpID09IFNR
TFJlc3VsdE9rOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBl
cnJvciBoYW5kbGluZy4KICAgICBpbnNlcnQuYmluZFRleHQoMSwgbmFtZSk7CkBAIC0xNDAsMTEg
KzE0OSwxMSBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJgogICAgIGluc2VydC5iaW5kSW50KDMs
IHN0YXRpY19jYXN0PGludD4oYXV0b0luY3JlbWVudCkpOwogICAgIG9rID0gaW5zZXJ0LnN0ZXAo
KSA9PSBTUUxSZXN1bHREb25lOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6
IEJldHRlciBlcnJvciBoYW5kbGluZy4KLSAgICBpbnQ2NF90IGlkID0gc3FsaXRlRGF0YWJhc2Uo
KS5sYXN0SW5zZXJ0Um93SUQoKTsKKyAgICBpbnQ2NF90IGlkID0gZGF0YWJhc2UtPnNxbGl0ZURh
dGFiYXNlKCkubGFzdEluc2VydFJvd0lEKCk7CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVh
dGUodGhpcywgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpOworICAgIFJlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmNyZWF0ZShkYXRhYmFzZS5nZXQoKSwgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9J
bmNyZW1lbnQpOwogICAgIEFTU0VSVChvYmplY3RTdG9yZS0+bmFtZSgpID09IG5hbWUpOwotICAg
IG1fb2JqZWN0U3RvcmVzLnNldChuYW1lLCBvYmplY3RTdG9yZSk7CisgICAgZGF0YWJhc2UtPm1f
b2JqZWN0U3RvcmVzLnNldChuYW1lLCBvYmplY3RTdG9yZSk7CiAgICAgY2FsbGJhY2tzLT5vblN1
Y2Nlc3Mob2JqZWN0U3RvcmUuZ2V0KCkpOwogfQogCkBAIC0xNjYsMzEgKzE3NSw0NCBAQCBzdGF0
aWMgdm9pZCBkb0RlbGV0ZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IGNoYXIqIHNxbCwgaW50
NjRfdCBpZCkKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJy
b3IgaGFuZGxpbmcuCiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCit7CisgICAgUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlmICghdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlSW50ZXJuYWwsIHRoaXMsIG5hbWUsIGNhbGxiYWNr
cykpKQorICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlIsICJyZW1vdmVPYmplY3RTdG9y
ZSBtdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBhIHNldFZlcnNpb24gdHJhbnNhY3Rpb24uIikp
OworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlSW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5nZXQobmFtZSk7CisgICAgUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gZGF0YWJhc2UtPm1fb2JqZWN0
U3RvcmVzLmdldChuYW1lKTsKICAgICBpZiAoIW9iamVjdFN0b3JlKSB7CiAgICAgICAgIGNhbGxi
YWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246Ok5PVF9GT1VORF9FUlIsICJObyBvYmplY3RTdG9yZSB3aXRoIHRoYXQgbmFtZSBleGlzdHMu
IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJh
bnNhY3Rpb24oc3FsaXRlRGF0YWJhc2UoKSk7Ci0gICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKLSAg
ICBkb0RlbGV0ZShzcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVzIFdI
RVJFIGlkID0gPyIsIG9iamVjdFN0b3JlLT5pZCgpKTsKLSAgICBkb0RlbGV0ZShzcWxpdGVEYXRh
YmFzZSgpLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0b3JlSWQg
PSA/Iiwgb2JqZWN0U3RvcmUtPmlkKCkpOwotICAgIGRvRGVsZXRlKHNxbGl0ZURhdGFiYXNlKCks
ICJERUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUgaW5kZXhJZCBJTiAoU0VMRUNUIGlkIEZST00g
SW5kZXhlcyBXSEVSRSBvYmplY3RTdG9yZUlkID0gPykiLCBvYmplY3RTdG9yZS0+aWQoKSk7Ci0g
ICAgZG9EZWxldGUoc3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIEluZGV4ZXMgV0hFUkUg
b2JqZWN0U3RvcmVJZCA9ID8iLCBvYmplY3RTdG9yZS0+aWQoKSk7Ci0gICAgdHJhbnNhY3Rpb24u
Y29tbWl0KCk7CisgICAgZG9EZWxldGUoZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCksICJERUxF
VEUgRlJPTSBPYmplY3RTdG9yZXMgV0hFUkUgaWQgPSA/Iiwgb2JqZWN0U3RvcmUtPmlkKCkpOwor
ICAgIGRvRGVsZXRlKGRhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gT2Jq
ZWN0U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/Iiwgb2JqZWN0U3RvcmUtPmlkKCkp
OworICAgIGRvRGVsZXRlKGRhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00g
SW5kZXhEYXRhIFdIRVJFIGluZGV4SWQgSU4gKFNFTEVDVCBpZCBGUk9NIEluZGV4ZXMgV0hFUkUg
b2JqZWN0U3RvcmVJZCA9ID8pIiwgb2JqZWN0U3RvcmUtPmlkKCkpOworICAgIGRvRGVsZXRlKGRh
dGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gSW5kZXhlcyBXSEVSRSBvYmpl
Y3RTdG9yZUlkID0gPyIsIG9iamVjdFN0b3JlLT5pZCgpKTsKIAotICAgIG1fb2JqZWN0U3RvcmVz
LnJlbW92ZShuYW1lKTsKKyAgICBkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMucmVtb3ZlKG5hbWUp
OwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6c2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZl
cnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJw
Q2FsbGJhY2tzKQogewotICAgIG1fdmVyc2lvbiA9IHZlcnNpb247Ci0gICAgc2V0TWV0YURhdGEo
bV9zcWxpdGVEYXRhYmFzZS5nZXQoKSwgbV9uYW1lLCBtX2Rlc2NyaXB0aW9uLCBtX3ZlcnNpb24p
OwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmpl
Y3RTdG9yZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25Db29yZGlu
YXRvci0+Y3JlYXRlVHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVzLmdldCgpLCBJREJUcmFuc2FjdGlv
bjo6VkVSU0lPTl9DSEFOR0UsIDAsIHRoaXMpOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVk
dWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZl
cnNpb25JbnRlcm5hbCwgdGhpcywgdmVyc2lvbiwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQor
ICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlIsICJzZXRWZXJzaW9uIG11c3QgYmUgY2Fs
bGVkIGZyb20gd2l0aGluIGEgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbi4iKSk7Cit9CisKK3ZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBj
b25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikK
K3sKKyAgICBkYXRhYmFzZS0+bV92ZXJzaW9uID0gdmVyc2lvbjsKKyAgICBzZXRNZXRhRGF0YShk
YXRhYmFzZS0+bV9zcWxpdGVEYXRhYmFzZS5nZXQoKSwgZGF0YWJhc2UtPm1fbmFtZSwgZGF0YWJh
c2UtPm1fZGVzY3JpcHRpb24sIGRhdGFiYXNlLT5tX3ZlcnNpb24pOworICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKHRyYW5zYWN0aW9uKTsKIH0KIAogUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uKERPTVN0
cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgdW5zaWduZWQgbG9u
ZyB0aW1lb3V0KQpAQCAtMTk4LDYgKzIyMCwxMSBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24oRAog
ICAgIHJldHVybiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3ItPmNyZWF0ZVRyYW5zYWN0aW9uKG9i
amVjdFN0b3JlcywgbW9kZSwgdGltZW91dCwgdGhpcyk7CiB9CiAKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6Y2xvc2UoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKIHZv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bG9hZE9iamVjdFN0b3JlcygpCiB7CiAgICAgU1FM
aXRlU3RhdGVtZW50IG9iamVjdFN0b3Jlc1F1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1Qg
aWQsIG5hbWUsIGtleVBhdGgsIGRvQXV0b0luY3JlbWVudCBGUk9NIE9iamVjdFN0b3JlcyIpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBiL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXggN2UwOGFkNjVhZmU0
NmNhM2U0MzYzZWFlZjYwYjI1NzA1M2NlMzNiMS4uYjU3NmZhNWI4OGIxOGQzYmM5NzdjZjUxY2E2
N2RhZThmZWUwMzYyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
CkBAIC01MCwxNyArNTAsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RGVzY3JpcHRpb24oY29u
c3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7CiAgICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFi
YXNlKCkgY29uc3QgeyByZXR1cm4gKm1fc3FsaXRlRGF0YWJhc2UuZ2V0KCk7IH0KIAotICAgIC8v
IEltcGxlbWVudHMgSURCRGF0YWJhc2UKICAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9CiAgICAgdmlydHVhbCBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25z
dCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9CiAgICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigp
IGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01T
dHJpbmdMaXN0PiBvYmplY3RTdG9yZXMoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
Ym9vbCBhdXRvSW5jcmVtZW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgdW5zaWduZWQgc2hvcnQgbW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZU9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSop
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBzdG9yZU5h
bWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOworICAgIHZp
cnR1YWwgdm9pZCBjbG9zZSgpOwogCiAgICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJh
bnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGlu
YXRvci5nZXQoKTsgfQogCkBAIC02OSw2ICs2OSwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBs
b2FkT2JqZWN0U3RvcmVzKCk7CiAKKyAgICBzdGF0aWMgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUlu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9v
bCBhdXRvSW5jcmVtZW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHN0YXRpYyB2
b2lkIHJlbW92ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRWZXJzaW9uSW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4sIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworCiAgICAgT3duUHRy
PFNRTGl0ZURhdGFiYXNlPiBtX3NxbGl0ZURhdGFiYXNlOwogICAgIFN0cmluZyBtX25hbWU7CiAg
ICAgU3RyaW5nIG1fZGVzY3JpcHRpb247CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggYTJlMDQyYWUyMDAwMGE0MWMyZjZkNTA1MDlmZGE0NzVm
NzU1Mzg0NS4uYzAxZGFkZmVjZGVmNjYyMDc2OWQ5ZDhlNDY5MjdjYzFhOGI1OTgwNSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oCisrKyBi
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNTQsMTIg
KzU0LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZXMoKSBj
b25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1
dG9JbmNyZW1lbnQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKikgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgdW5zaWdu
ZWQgc2hvcnQgbW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVPYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+KSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogc3RvcmVO
YW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KSA9IDA7Ci0g
ICAgLy8gRklYTUU6IEFkZCBjbG9zZS4KKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeS5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKaW5kZXggMDZj
MDZlYTQ3MTQxZTY3MzgyOGIwNTM0MjM2ZmNjYzBlZWMwNDBiMy4uZTFjOGMwN2NlOTRkMGE1YmFh
YThiZDdhNTc5NGI0NjFjOGFlMzk3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnkuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcApAQCAtNjcsNyAr
NjcsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgUwogICAgIGlmICghZG9jdW1lbnQtPmZyYW1l
KCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRy
PElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFu
eTo6Y3JlYXRlKHRoaXMpKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJl
cXVlc3Q6OmNyZWF0ZShkb2N1bWVudCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOwogICAgIG1f
ZmFjdG9yeUJhY2tlbmQtPm9wZW4obmFtZSwgZGVzY3JpcHRpb24sIHJlcXVlc3QsIGRvY3VtZW50
LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZG9jdW1lbnQtPnBhZ2UoKS0+
Z3JvdXAoKS5ncm91cFNldHRpbmdzKCktPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsKICAgICBy
ZXR1cm4gcmVxdWVzdDsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5j
cHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwCmluZGV4IDVjZDEyZGQ0MDAzNDhiZjA1
OTM5ZjAwZDE3M2E0ZjVkNWU4YzA5N2MuLjhkNzg0NjY2Mzk3YjNjOGVjOTBhY2I3YjQ0ZmUyZjE0
YTQ4Y2JkOTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleC5jcHAKKysrIGIv
V2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmNwcApAQCAtMzMsMTIgKzMzLDE2IEBACiAjaW5jbHVk
ZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJSZXF1
ZXN0LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSURCSW5kZXg6OklEQkluZGV4KFBhc3NSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQorSURCSW5kZXg6OklEQkluZGV4KFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogICAgIDogbV9iYWNrZW5kKGJhY2tlbmQpCisgICAg
LCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogeworICAgIEFTU0VSVChtX2JhY2tlbmQpOwor
ICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKIH0KIAogSURCSW5kZXg6On5JREJJbmRleCgpCkBA
IC00NywyOSArNTEsMjkgQEAgSURCSW5kZXg6On5JREJJbmRleCgpCiAKIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCSW5kZXg6Om9wZW5PYmplY3RDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNo
b3J0IGRpcmVjdGlvbikKIHsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJl
cXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSk7Ci0gICAgbV9iYWNr
ZW5kLT5vcGVuT2JqZWN0Q3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QpOworICAg
IFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQs
IElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tl
bmQtPm9wZW5PYmplY3RDdXJzb3Ioa2V5UmFuZ2UsIGRpcmVjdGlvbiwgcmVxdWVzdCwgbV90cmFu
c2FjdGlvbi5nZXQoKSk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRp
cmVjdGlvbikKIHsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6
OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSk7Ci0gICAgbV9iYWNrZW5kLT5v
cGVuQ3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QpOworICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3Jl
YXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tlbmQtPm9wZW5DdXJz
b3Ioa2V5UmFuZ2UsIGRpcmVjdGlvbiwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAg
ICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6
OmdldE9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElE
QktleT4ga2V5KQogewotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVz
dDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpKTsKLSAgICBtX2JhY2tlbmQt
PmdldE9iamVjdChrZXksIHJlcXVlc3QpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0
ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tlbmQtPmdldE9iamVjdChrZXksIHJlcXVlc3Qs
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCiBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSkKIHsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlz
KSk7Ci0gICAgbV9iYWNrZW5kLT5nZXQoa2V5LCByZXF1ZXN0KTsKKyAgICBSZWZQdHI8SURCUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0
ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5nZXQoa2V5LCBy
ZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmggYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCSW5kZXguaAppbmRleCA0NWZjZmExODc3NGQyNWIwOWMyMDQwMDAwZWYwYzk4MmU4MWI3ODc4
Li5iMjU4MDc3MTc3YzdmNWEwN2FjZjFlMGY0OWUxYmYyMzg4YmRkYjQ5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXgu
aApAQCAtMzcsOSArMzcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkluZGV4
IDogcHVibGljIFJlZkNvdW50ZWQ8SURCSW5kZXg+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJREJJbmRleD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlPiBiYWNrZW5kKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGUoUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IElEQkluZGV4KGJhY2tlbmQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJREJJbmRleChiYWNrZW5kLCB0cmFuc2FjdGlvbikpOwogICAgIH0KICAgICB+SURCSW5kZXgo
KTsKIApAQCAtNTUsOSArNTUsMTAgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4pOwogCiBw
cml2YXRlOgotICAgIElEQkluZGV4KFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
Pik7CisgICAgSURCSW5kZXgoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKTsKIAogICAgIFJlZlB0
cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2Vu
ZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCmluZGV4
IDZmNjk4YzY0ODUzNDA3MTU2MTc1NWVkNWI0YWRkZjZhZGUxOGY0MDYuLjM5MGEzYzZkZTQ4MjY5
N2YzZjlhMzljNmM2NzM4YzY5ZDlhODc0MTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9J
REJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNr
ZW5kSW1wbC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiSURCQ2FsbGJh
Y2tzLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmgiCkBAIC01OCw3ICs1OSw3IEBAIFN0cmluZyBJREJJbmRleEJh
Y2tlbmRJbXBsOjpzdG9yZU5hbWUoKQogICAgIHJldHVybiBtX29iamVjdFN0b3JlLT5uYW1lKCk7
CiB9CiAKLXN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRlcm5hbChTUUxpdGVEYXRhYmFzZSYgZGF0
YWJhc2UsIElEQkluZGV4QmFja2VuZEltcGwqIGluZGV4LCBJREJLZXlSYW5nZSogcmFuZ2UsIHVu
c2lnbmVkIHNob3J0IHVudHlwZWREaXJlY3Rpb24sIGJvb2wgb2JqZWN0Q3Vyc29yLCBJREJDYWxs
YmFja3MqIGNhbGxiYWNrcykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcklu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hv
cnQgdW50eXBlZERpcmVjdGlvbiwgYm9vbCBvYmplY3RDdXJzb3IsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiB0cmFuc2FjdGlvbikKIHsKICAgICAvLyBTZXZlcmFsIGZpbGVzIGRlcGVuZCBvbiB0aGlz
IG9yZGVyIG9mIHNlbGVjdHMuCiAgICAgU3RyaW5nIHNxbCA9IFN0cmluZygiU0VMRUNUIEluZGV4
RGF0YS5pZCwgSW5kZXhEYXRhLmtleVN0cmluZywgSW5kZXhEYXRhLmtleURhdGUsIEluZGV4RGF0
YS5rZXlOdW1iZXIsICIpCkBAIC04MCw3ICs4MSw3IEBAIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJ
bnRlcm5hbChTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UsIElEQkluZGV4QmFja2VuZEltcGwqIGlu
CiAgICAgZWxzZQogICAgICAgICBzcWwgKz0gIkluZGV4RGF0YS5rZXlTdHJpbmcgREVTQywgSW5k
ZXhEYXRhLmtleURhdGUgREVTQywgSW5kZXhEYXRhLmtleU51bWJlciBERVNDLCBJbmRleERhdGEu
aWQgREVTQyI7CiAKLSAgICBPd25QdHI8U1FMaXRlU3RhdGVtZW50PiBxdWVyeSA9IGFkb3B0UHRy
KG5ldyBTUUxpdGVTdGF0ZW1lbnQoZGF0YWJhc2UsIHNxbCkpOworICAgIE93blB0cjxTUUxpdGVT
dGF0ZW1lbnQ+IHF1ZXJ5ID0gYWRvcHRQdHIobmV3IFNRTGl0ZVN0YXRlbWVudChpbmRleC0+c3Fs
aXRlRGF0YWJhc2UoKSwgc3FsKSk7CiAgICAgYm9vbCBvayA9IHF1ZXJ5LT5wcmVwYXJlKCkgPT0g
U1FMUmVzdWx0T2s7CiAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVy
IGVycm9yIGhhbmRsaW5nPwogCkBAIC05NiwzMiArOTcsMzggQEAgc3RhdGljIHZvaWQgb3BlbkN1
cnNvckludGVybmFsKFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSwgSURCSW5kZXhCYWNrZW5kSW1w
bCogaW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGluZGV4
LCByYW5nZSwgZGlyZWN0aW9uLCBxdWVyeS5yZWxlYXNlKCksIG9iamVjdEN1cnNvcik7CisgICAg
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGN1cnNvciA9IElEQkN1cnNvckJhY2tl
bmRJbXBsOjpjcmVhdGUoaW5kZXgsIHJhbmdlLCBkaXJlY3Rpb24sIHF1ZXJ5LnJlbGVhc2UoKSwg
b2JqZWN0Q3Vyc29yLCB0cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoY3Vyc29yLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3Bl
bk9iamVjdEN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQg
c2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9p
ZCBJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuT2JqZWN0Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IHBycEtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb24pCiB7Ci0gICAgb3BlbkN1cnNvckludGVybmFsKHNxbGl0ZURhdGFiYXNl
KCksIHRoaXMsIGtleVJhbmdlLmdldCgpLCBkaXJlY3Rpb24sIHRydWUsIGNhbGxiYWNrcy5nZXQo
KSk7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOworICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBpZiAo
IXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZvcGVuQ3Vyc29y
SW50ZXJuYWwsIHRoaXMsIGtleVJhbmdlLCBkaXJlY3Rpb24sIHRydWUsIGNhbGxiYWNrcywgdHJh
bnNhY3Rpb24pKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSLCAiR2V0IG11c3Qg
YmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIGEgdHJhbnNhY3Rpb24uIikpOwogfQogCi12b2lk
IElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcihQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9u
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewotICAgIG9wZW5DdXJzb3JJbnRlcm5hbChz
cWxpdGVEYXRhYmFzZSgpLCB0aGlzLCBrZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uLCBmYWxzZSwg
Y2FsbGJhY2tzLmdldCgpKTsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJw
S2V5UmFuZ2U7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJh
Y2tzOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rh
c2soJm9wZW5DdXJzb3JJbnRlcm5hbCwgdGhpcywga2V5UmFuZ2UsIGRpcmVjdGlvbiwgZmFsc2Us
IGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURf
RVJSLCAiR2V0IG11c3QgYmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIGEgdHJhbnNhY3Rpb24u
IikpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChTUUxpdGVEYXRhYmFzZSYgZGF0YWJh
c2UsIGludDY0IGlkLCBJREJLZXkqIGtleSwgYm9vbCBnZXRPYmplY3QsIElEQkNhbGxiYWNrcyog
Y2FsbGJhY2tzKQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwg
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgYm9vbCBnZXRPYmplY3QsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCiB7CiAgICAgU3RyaW5nIHNxbCA9IFN0cmluZygiU0VMRUNUICIp
CiAgICAgICAgICAgICAgICAgICsgKGdldE9iamVjdCA/ICJPYmplY3RTdG9yZURhdGEudmFsdWUg
IiA6ICJPYmplY3RTdG9yZURhdGEua2V5U3RyaW5nLCBPYmplY3RTdG9yZURhdGEua2V5RGF0ZSwg
T2JqZWN0U3RvcmVEYXRhLmtleU51bWJlciAiKQogICAgICAgICAgICAgICAgICArICJGUk9NIElu
ZGV4RGF0YSBJTk5FUiBKT0lOIE9iamVjdFN0b3JlRGF0YSBPTiBJbmRleERhdGEub2JqZWN0U3Rv
cmVEYXRhSWQgPSBPYmplY3RTdG9yZURhdGEuaWQgIgogICAgICAgICAgICAgICAgICArICJXSEVS
RSBJbmRleERhdGEuaW5kZXhJZCA9ID8gIEFORCAgIiArIGtleS0+d2hlcmVTeW50YXgoIkluZGV4
RGF0YS4iKQogICAgICAgICAgICAgICAgICArICJPUkRFUiBCWSBJbmRleERhdGEuaWQgTElNSVQg
MSI7IC8vIE9yZGVyIGJ5IGluc2VydGlvbiBvcmRlciB3aGVuIGFsbCBlbHNlIGZhaWxzLgotICAg
IFNRTGl0ZVN0YXRlbWVudCBxdWVyeShkYXRhYmFzZSwgc3FsKTsKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgcXVlcnkoaW5kZXgtPnNxbGl0ZURhdGFiYXNlKCksIHNxbCk7CiAgICAgYm9vbCBvayA9IHF1
ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7
IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CiAKLSAgICBxdWVyeS5iaW5kSW50NjQo
MSwgaWQpOworICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBpbmRleC0+aWQoKSk7CiAgICAga2V5LT5i
aW5kKHF1ZXJ5LCAyKTsKICAgICBpZiAocXVlcnkuc3RlcCgpICE9IFNRTFJlc3VsdFJvdykgewog
ICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCAiS2V5IGRvZXMgbm90IGV4aXN0IGluIHRo
ZSBpbmRleC4iKSk7CkBAIC0xMzUsMTQgKzE0MiwyMCBAQCBzdGF0aWMgdm9pZCBnZXRJbnRlcm5h
bChTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UsIGludDY0IGlkLCBJREJLZXkqIGtleSwgYm9vbCBn
ZQogICAgIEFTU0VSVChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KTsKIH0KIAotdm9pZCBJ
REJJbmRleEJhY2tlbmRJbXBsOjpnZXRPYmplY3QoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1w
bDo6Z2V0T2JqZWN0KFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb24pCiB7Ci0gICAgZ2V0SW50ZXJuYWwoc3FsaXRlRGF0YWJhc2UoKSwgbV9pZCwga2V5
LmdldCgpLCB0cnVlLCBjYWxsYmFja3MuZ2V0KCkpOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9
IHBycEtleTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFj
a3M7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFz
aygmZ2V0SW50ZXJuYWwsIHRoaXMsIGtleSwgdHJ1ZSwgY2FsbGJhY2tzKSkpCisgICAgICAgIGNh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246Ok5PVF9BTExPV0VEX0VSUiwgIkdldCBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgY29udGV4
dCBvZiBhIHRyYW5zYWN0aW9uLiIpKTsKIH0KIAotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpn
ZXQoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5PiBw
cnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCiB7Ci0gICAgZ2V0SW50ZXJuYWwoc3Fs
aXRlRGF0YWJhc2UoKSwgbV9pZCwga2V5LmdldCgpLCBmYWxzZSwgY2FsbGJhY2tzLmdldCgpKTsK
KyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVk
dWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmdldEludGVybmFsLCB0aGlzLCBrZXksIGZhbHNl
LCBjYWxsYmFja3MpKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSLCAiR2V0IG11
c3QgYmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIGEgdHJhbnNhY3Rpb24uIikpOwogfQogCiBz
dGF0aWMgU3RyaW5nIHdoZXJlQ2xhdXNlKElEQktleSoga2V5KQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRl
eEJhY2tlbmRJbXBsLmgKaW5kZXggYTk4ZWQyYThlM2RkMDcwYWI1Y2Q3Yzk0YjM5MjBhNTgxNDUx
OGNjMS4uMmQwNmM2OTdlYzk4YThlMThlN2VmZWY5YTlhN2QxOGE0ODk0NDYyNCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaAorKysgYi9XZWJDb3JlL3N0
b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCkBAIC0zNSw2ICszNSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIElEQktleTsKIGNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw7
CiBjbGFzcyBTUUxpdGVEYXRhYmFzZTsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAK
IGNsYXNzIElEQkluZGV4QmFja2VuZEltcGwgOiBwdWJsaWMgSURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlIHsKIHB1YmxpYzoKQEAgLTUzLDEwICs1NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBT
dHJpbmcga2V5UGF0aCgpIHsgcmV0dXJuIG1fa2V5UGF0aDsgfQogICAgIHZpcnR1YWwgYm9vbCB1
bmlxdWUoKSB7IHJldHVybiBtX3VuaXF1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIG9wZW5PYmpl
Y3RDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlv
biwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNv
cihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3QoUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHZpcnR1YWwgdm9p
ZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAg
IHZpcnR1YWwgdm9pZCBvcGVuT2JqZWN0Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3Io
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKIAogICAgIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwqIG9iamVjdFN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZS5n
ZXQoKTsgfQogCkBAIC02NSw2ICs2Niw5IEBAIHByaXZhdGU6CiAKICAgICBTUUxpdGVEYXRhYmFz
ZSYgc3FsaXRlRGF0YWJhc2UoKSBjb25zdDsKIAorICAgIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlv
biwgYm9vbCBvYmplY3RDdXJzb3IsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBib29sIGdldE9iamVjdCwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+KTsKKwogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBt
X29iamVjdFN0b3JlOwogCiAgICAgaW50NjRfdCBtX2lkOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9z
dG9yYWdlL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQklu
ZGV4QmFja2VuZEludGVyZmFjZS5oCmluZGV4IGZmMjMxNmYzNDE1YzhlNTA3NDJlZWQ4MDI3ZGJj
MWI2OGEzYWE0M2YuLmZhMzk1YTA0YTIxYmFkMGU5ZTUwZjdkMTI4MmRhMWQyMGI1MGVjOTMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAorKysg
Yi9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTM2LDYgKzM2
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCQ2FsbGJhY2tzOwogY2xhc3MgSURC
S2V5OwogY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U7CiAKIGNsYXNzIElEQkluZGV4QmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRT
YWZlU2hhcmVkPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gewogcHVibGljOgpAQCAtNDYsMTAg
KzQ3LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBrZXlQYXRoKCkgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCB1bmlxdWUoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgb3Blbk9iamVj
dEN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9u
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1
cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0
KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvcGVuT2JqZWN0Q3Vyc29yKFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9y
dCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3QoUGFzc1JlZlB0
cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5
PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3N0b3JhZ2UvSURCS2V5LmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwCmluZGV4
IDNlZWMzNmM3ODUzMzIyMzAxZjliNWNmZmI4ZjRmZjUxYTZkZmYyYmQuLmQwZjNjMmIzYzI3ZGFl
MzI0MjEzMWEzYjIyNDA1MDFlNDIyMjE2ODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9J
REJLZXkuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuY3BwCkBAIC00Niw3ICs0Niw3
IEBAIElEQktleTo6SURCS2V5KGludDMyX3QgbnVtYmVyKQogCiBJREJLZXk6OklEQktleShjb25z
dCBTdHJpbmcmIHN0cmluZykKICAgICA6IG1fdHlwZShTdHJpbmdUeXBlKQotICAgICwgbV9zdHJp
bmcoc3RyaW5nKQorICAgICwgbV9zdHJpbmcoc3RyaW5nLmNyb3NzVGhyZWFkU3RyaW5nKCkpCiB7
CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJLZXkuaCBiL1dlYkNvcmUvc3Rv
cmFnZS9JREJLZXkuaAppbmRleCAzMTc1ZTdlOGRlYjNmZGY2NDQ5NmNkMzJhZjhhODgyMWJhNDkx
ZTQ3Li4wMzAzYTM4MmE0NGI1YWZiNGY4ODQyMGVkMDczOTAxOWMyMjY4ZjdmIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5o
CkBAIC0yNiwxNyArMjYsMTggQEAKICNpZm5kZWYgSURCS2V5X2gKICNkZWZpbmUgSURCS2V5X2gK
IAorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFNRTGl0ZVN0YXRlbWVudDsKIAogLy8gRklYTUU6IEFkZCBkYXRlcy4KLWNsYXNz
IElEQktleSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQktleT4geworY2xhc3MgSURCS2V5IDogcHVi
bGljIFRocmVhZFNhZmVTaGFyZWQ8SURCS2V5PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SURCS2V5PiBjcmVhdGUoKQogICAgIHsKQEAgLTgyLDYgKzgzLDkgQEAgcHVibGljOgog
ICAgIGludCBiaW5kKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludCBjb2x1bW4pIGNvbnN0Owog
ICAgIHZvaWQgYmluZFdpdGhOdWxscyhTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBpbnQgYmFzZUNv
bHVtbikgY29uc3Q7CiAKKyAgICB1c2luZyBUaHJlYWRTYWZlU2hhcmVkPElEQktleT46OnJlZjsK
KyAgICB1c2luZyBUaHJlYWRTYWZlU2hhcmVkPElEQktleT46OmRlcmVmOworCiBwcml2YXRlOgog
ICAgIElEQktleSgpOwogICAgIGV4cGxpY2l0IElEQktleShpbnQzMl90KTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3RvcmFnZS9JREJLZXlSYW5nZS5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJh
bmdlLmgKaW5kZXggNDYyMWE1MDM1MjU1ZjYyMGMwMGY4YjdkYmRhYTU0NWI0NzQzZDhjOS4uZDI0
NmViY2MxYmM2YzkxMjY3MjFhYWQ1ZjJjMzA1MDVmMmZmZGRkYiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9zdG9yYWdlL0lEQktleVJhbmdlLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVJhbmdl
LmgKQEAgLTMwLDExICszMCwxMSBAQAogCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJLZXlS
YW5nZSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQktleVJhbmdlPiB7CitjbGFzcyBJREJLZXlSYW5n
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPElEQktleVJhbmdlPiB7CiBwdWJsaWM6CiAgICAg
Ly8gS2VlcCBpbiBzeW5jIHdpdGggd2hhdCdzIGluIHRoZSAuaWRsIGZpbGUuCiAgICAgZW51bSBG
bGFncyB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwIGIv
V2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCA0YzVjZjM0MGVkOTNkODM5
YzIxOTM2MDJhYTFkMmYyNDUzYjQ3ODI2Li5hODFlMTdmZmY2MWY4MjJmOTM1MWU1MTg2MzA5ZTVl
YmNlMDRjY2EwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3Bw
CisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTQzLDYgKzQzLDgg
QEAgSURCT2JqZWN0U3RvcmU6OklEQk9iamVjdFN0b3JlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlPiBpZGJPYmoKICAgICA6IG1fb2JqZWN0U3RvcmUoaWRiT2JqZWN0
U3RvcmUpCiAgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogeworICAgIEFTU0VSVCht
X29iamVjdFN0b3JlKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7CiAgICAgLy8gV2UgcGFz
cyBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCiAg
ICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CiB9CkBAIC03MSwyOSArNzMsMjkgQEAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFBhc3MKIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RT
dG9yZTo6YWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSkKIHsKLSAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0
LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSk7Ci0gICAgbV9vYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBr
ZXksIHRydWUsIHJlcXVlc3QpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURC
UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0
aW9uLmdldCgpKTsKKyAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgdHJ1ZSwgcmVx
dWVzdCwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXkpCiB7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVl
c3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcykpOwot
ICAgIG1fb2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBmYWxzZSwgcmVxdWVzdCk7CisgICAg
UmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
SURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fb2JqZWN0
U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBmYWxzZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi5nZXQo
KSk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6OnJlbW92ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleT4ga2V5KQogewotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0g
SURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpKTsKLSAgICBt
X29iamVjdFN0b3JlLT5yZW1vdmUoa2V5LCByZXF1ZXN0KTsKKyAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9vYmplY3RTdG9yZS0+cmVtb3ZlKGtl
eSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9
CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkKIHsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlz
KSk7Ci0gICAgbV9vYmplY3RTdG9yZS0+Y3JlYXRlSW5kZXgobmFtZSwga2V5UGF0aCwgdW5pcXVl
LCByZXF1ZXN0KTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6
OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQo
KSk7CisgICAgbV9vYmplY3RTdG9yZS0+Y3JlYXRlSW5kZXgobmFtZSwga2V5UGF0aCwgdW5pcXVl
LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0K
IApAQCAtMTAzLDIwICsxMDUsMjAgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3Rv
cmU6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBpbmRleCA9IG1fb2JqZWN0U3RvcmUtPmluZGV4KG5hbWUpOwogICAgIGlmICgh
aW5kZXgpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBJREJJbmRleDo6Y3JlYXRlKGlu
ZGV4LnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIElEQkluZGV4OjpjcmVhdGUoaW5kZXgucmVsZWFz
ZSgpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKIH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJPYmplY3RTdG9yZTo6cmVtb3ZlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0
ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpKTsKLSAg
ICBtX29iamVjdFN0b3JlLT5yZW1vdmVJbmRleChuYW1lLCByZXF1ZXN0KTsKKyAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9vYmplY3RTdG9yZS0+
cmVtb3ZlSW5kZXgobmFtZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgcmV0
dXJuIHJlcXVlc3Q7CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6
Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbikKIHsKLSAgICBSZWZQ
dHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJB
bnk6OmNyZWF0ZSh0aGlzKSk7Ci0gICAgbV9vYmplY3RTdG9yZS0+b3BlbkN1cnNvcihyYW5nZSwg
ZGlyZWN0aW9uLCByZXF1ZXN0KTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CisgICAgbV9vYmplY3RTdG9yZS0+b3BlbkN1cnNvcihyYW5nZSwgZGlyZWN0
aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICByZXR1cm4gcmVxdWVzdC5y
ZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZS5pZGwgYi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaWRsCmluZGV4IGNjZDAzMTFj
ODBiZWI1ZjBlYzg0MDcwNGQ2ZmQyZTdlOTRiNzA5NmIuLmM4YWEzNWQyODBjMDcyZDZiMWFlMTNi
Y2FlMTI4ZjBiYzA1ODQ5YWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RT
dG9yZS5pZGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbApAQCAtMjgs
MjEgKzI4LDE4IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBD
b25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCiAgICAgXSBJREJPYmplY3RTdG9yZSB7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyBrZXlQYXRoOwor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nTGlzdCBpbmRleE5hbWVzOworCiAg
ICAgICAgIC8vIEZJWE1FOiBNYW55IG9mIHRoZXNlIHNob3VsZCByYWlzZSBvbiBjZXJ0YWluIGVy
cm9ycy4KICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVl
c3QgZ2V0KGluIElEQktleSBrZXkpOyAgICAgICAgCiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRF
eGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGFkZChpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUg
dmFsdWUsIGluIFtPcHRpb25hbF0gSURCS2V5IGtleSk7CiAgICAgICAgIFtDYWxsV2l0aD1TY3Jp
cHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IHB1dChpbiBTZXJpYWxpemVkU2NyaXB0VmFs
dWUgdmFsdWUsIGluIFtPcHRpb25hbF0gSURCS2V5IGtleSk7CiAgICAgICAgIFtDYWxsV2l0aD1T
Y3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IHJlbW92ZShpbiBJREJLZXkga2V5KTsK
LSAgICAgICAgLy8gRklYTUU6IHdyaXRlIG9wZW5DdXJzb3IKICAgICAgICAgW0NhbGxXaXRoPVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgY3JlYXRlSW5kZXgoaW4gRE9NU3RyaW5n
IG5hbWUsIGluIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGtleVBhdGgsIGlu
IFtPcHRpb25hbF0gYm9vbGVhbiB1bmlxdWUpOwotICAgICAgICAvLyBGSVhNRTogVGhpcyBuZWVk
cyB0byByYWlzZSBhbiBJREJEYXRhYmFzZUV4Y2VwdGlvbiBvbiBlcnJvcnMuCiAgICAgICAgIElE
QkluZGV4IGluZGV4KGluIERPTVN0cmluZyBuYW1lKTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgcmVtb3ZlSW5kZXgoaW4gRE9NU3RyaW5nIG5h
bWUpOwotCiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1
ZXN0IG9wZW5DdXJzb3IoaW4gW09wdGlvbmFsXSBJREJLZXlSYW5nZSByYW5nZSwgaW4gW09wdGlv
bmFsXSB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24pOwotCi0gICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgbmFtZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0
TnVsbFN0cmluZ1RvPU51bGxdIERPTVN0cmluZyBrZXlQYXRoOwotICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nTGlzdCBpbmRleE5hbWVzOwogICAgIH07CiB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9XZWJDb3Jl
L3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggMThkNmIwYzI4MDZh
Mjk3Zjk2MjQ4MWQ0ZjdkNmEwM2YxMDVlNDE4Yi4uZjhkMzcyMTY2ZTQwODhlYmNiODVmZTU2OTMz
NTFjNDdmNThjYjZhYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmNwcApAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKIAorI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiRE9NU3Ry
aW5nTGlzdC5oIgogI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJ
REJDYWxsYmFja3MuaCIKQEAgLTMzLDYgKzM2LDcgQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRl
ICJJREJJbmRleEJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAi
SURCS2V5UGF0aC5oIgogI2luY2x1ZGUgIklEQktleVBhdGhCYWNrZW5kSW1wbC5oIgogI2luY2x1
ZGUgIklEQktleVJhbmdlLmgiCkBAIC00MiwzNyArNDYsOCBAQAogI2luY2x1ZGUgIlNRTGl0ZVN0
YXRlbWVudC5oIgogI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCiAKLSNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1wbGF0ZSA8Y2xh
c3MgVCwgY2xhc3MgTWV0aG9kLCBjbGFzcyBQYXJhbTEsIGNsYXNzIFBhcmFtMj4KLWNsYXNzIElE
QlRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci1wdWJsaWM6Ci0g
ICAgSURCVGFzayhUKiBvYmosIE1ldGhvZCBtZXRob2QsIGNvbnN0IFBhcmFtMSYgcGFyYW0xLCBj
b25zdCBQYXJhbTImIHBhcmFtMikKLSAgICAgICAgOiBtX29iaihvYmopLCBtX21ldGhvZChtZXRo
b2QpLCBtX3BhcmFtMShwYXJhbTEpLCBtX3BhcmFtMihwYXJhbTIpIAotICAgIHsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopIAot
ICAgIHsKLSAgICAgICAgaWYgKG1fb2JqKQotICAgICAgICAgICAgKG1fb2JqLT4qbV9tZXRob2Qp
KG1fcGFyYW0xLCBtX3BhcmFtMik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFQqIG1fb2JqOwot
ICAgIE1ldGhvZCBtX21ldGhvZDsKLSAgICBQYXJhbTEgbV9wYXJhbTE7Ci0gICAgUGFyYW0yIG1f
cGFyYW0yOwotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIE1ldGhvZCwgY2xhc3MgUGFy
YW0xLCBjbGFzcyBQYXJhbTI+Ci1QYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+IGNyZWF0ZVRhc2soVCogb2JqZWN0LCBNZXRob2QgbWV0aG9kLCBjb25zdCBQYXJhbTEmIHBh
cmFtMSwgY29uc3QgUGFyYW0yJiBwYXJhbTIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJ
REJUYXNrPFQsIE1ldGhvZCwgUGFyYW0xLCBQYXJhbTI+KG9iamVjdCwgbWV0aG9kLCBwYXJhbTEs
IHBhcmFtMikpOwotfQotCiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjp+SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbCgpCiB7CiB9CkBAIC0xMDYsMTkgKzgxLDIxIEBAIHN0YXRpYyB2b2lkIGJp
bmRXaGVyZUNsYXVzZShTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBpbnQ2NF90IGlkLCBJREJLZXkq
IGtleSkKICAgICBrZXktPmJpbmQocXVlcnksIDIpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmdldChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJ
REJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKIHsKLSAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlVGFzayh0aGlzLCAmSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwsIGtleSwgY2FsbGJhY2tzKSkpCi0gICAgICAgIGNhbGxi
YWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246Ok5PVF9BTExPV0VEX0VSUiwgIkdldCBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCBv
ZiBhIHRyYW5zYWN0aW9uLiIpKTsKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7Cisg
ICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlm
ICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsLCB0aGlzLCBrZXksIGNhbGxiYWNrcykpKQor
ICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlIsICJnZXQgbXVzdCBiZSBjYWxsZWQgaW4g
dGhlIGNvbnRleHQgb2YgYSB0cmFuc2FjdGlvbi4iKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgU1FMaXRlU3Rh
dGVtZW50IHF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1Qga2V5U3RyaW5nLCBrZXlEYXRl
LCBrZXlOdW1iZXIsIHZhbHVlIEZST00gT2JqZWN0U3RvcmVEYXRhICIgKyB3aGVyZUNsYXVzZShr
ZXkuZ2V0KCkpKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkob2JqZWN0U3RvcmUtPnNxbGl0
ZURhdGFiYXNlKCksICJTRUxFQ1Qga2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIHZhbHVl
IEZST00gT2JqZWN0U3RvcmVEYXRhICIgKyB3aGVyZUNsYXVzZShrZXkuZ2V0KCkpKTsKICAgICBi
b29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwogICAgIEFTU0VSVF9VTlVT
RUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KIAotICAgIGJpbmRX
aGVyZUNsYXVzZShxdWVyeSwgbV9pZCwga2V5LmdldCgpKTsKKyAgICBiaW5kV2hlcmVDbGF1c2Uo
cXVlcnksIG9iamVjdFN0b3JlLT5pZCgpLCBrZXkuZ2V0KCkpOwogICAgIGlmIChxdWVyeS5zdGVw
KCkgIT0gU1FMUmVzdWx0Um93KSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlIsICJL
ZXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTE4NSwxNyArMTYyLDI2IEBAIHN0YXRpYyB2b2lkIHB1dEluZGV4RGF0YShTUUxpdGVE
YXRhYmFzZSYgZGIsIElEQktleSoga2V5LCBpbnQ2NF90IGluZGV4SWQsIGludDY0CiAgICAgQVNT
RVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwogfQog
Ci12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIGJvb2wg
YWRkT25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgYm9vbCBhZGRPbmx5LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlID0gcHJwVmFsdWU7CiAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5Owor
ICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBp
ZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgdGhpcywgdmFsdWUsIGtleSwgYWRkT25s
eSwgY2FsbGJhY2tzKSkpCisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUiwgInB1dCBt
dXN0IGJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiBhIHRyYW5zYWN0aW9uLiIpKTsKK30KIAot
ICAgIGlmICghbV9rZXlQYXRoLmlzTnVsbCgpKSB7Cit2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIGJvb2wg
YWRkT25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOworICAgIFJlZlB0cjxJ
REJLZXk+IGtleSA9IHBycEtleTsKKworICAgIGlmICghb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5p
c051bGwoKSkgewogICAgICAgICBpZiAoa2V5KSB7CiAgICAgICAgICAgICBjYWxsYmFja3MtPm9u
RXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktO
T1dOX0VSUiwgIkEga2V5IHdhcyBzdXBwbGllZCBmb3IgYW4gb2JqZWN0U3RvcmUgdGhhdCBoYXMg
YSBrZXlQYXRoLiIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBr
ZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBtX2tleVBhdGgpOworICAgICAg
ICBrZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9r
ZXlQYXRoKTsKICAgICAgICAgaWYgKCFrZXkpIHsKICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05P
V05fRVJSLCAiVGhlIGtleSBjb3VsZCBub3QgYmUgZmV0Y2hlZCBmcm9tIHRoZSBrZXlQYXRoLiIp
KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTIwNiw3ICsxOTIsNyBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
cHJwVmFsdWUsCiAgICAgfQogCiAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gaW5kZXhLZXlz
OwotICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0
ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9y
IGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+
bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGZl
dGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIGl0LT5zZWNvbmQtPmtleVBhdGgoKSk7CiAg
ICAgICAgIGlmICgha2V5KSB7CiAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIlRo
ZSBrZXkgY291bGQgbm90IGJlIGZldGNoZWQgZnJvbSBhbiBpbmRleCdzIGtleVBhdGguIikpOwpA
QCAtMjE5LDExICsyMDUsMTEgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQo
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLAogICAgICAgICBpbmRl
eEtleXMuYXBwZW5kKGtleS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVu
dCBnZXRRdWVyeShzcWxpdGVEYXRhYmFzZSgpLCAiU0VMRUNUIGlkIEZST00gT2JqZWN0U3RvcmVE
YXRhICIgKyB3aGVyZUNsYXVzZShrZXkuZ2V0KCkpKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZ2V0
UXVlcnkob2JqZWN0U3RvcmUtPnNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1QgaWQgRlJPTSBPYmpl
Y3RTdG9yZURhdGEgIiArIHdoZXJlQ2xhdXNlKGtleS5nZXQoKSkpOwogICAgIGJvb2wgb2sgPSBn
ZXRRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CiAgICAgQVNTRVJUX1VOVVNFRChvaywg
b2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwogCi0gICAgYmluZFdoZXJlQ2xh
dXNlKGdldFF1ZXJ5LCBtX2lkLCBrZXkuZ2V0KCkpOworICAgIGJpbmRXaGVyZUNsYXVzZShnZXRR
dWVyeSwgb2JqZWN0U3RvcmUtPmlkKCksIGtleS5nZXQoKSk7CiAgICAgYm9vbCBpc0V4aXN0aW5n
VmFsdWUgPSBnZXRRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93OwogICAgIGlmIChhZGRPbmx5
ICYmIGlzRXhpc3RpbmdWYWx1ZSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwg
IktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKQEAgLTIzMywyMiAr
MjE5LDMwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwKICAgICAvLyBCZWZvcmUgdGhpcyBwb2lu
dCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiAgQWZ0ZXIgdGhpcyBwb2ludCwgZG9uJ3QgZXJyb3Ig
b3V0LgogCiAgICAgaW50NjRfdCBkYXRhUm93SWQgPSBpc0V4aXN0aW5nVmFsdWUgPyBnZXRRdWVy
eS5nZXRDb2x1bW5JbnQoMCkgOiAtMTsKLSAgICBwdXRPYmplY3RTdG9yZURhdGEoc3FsaXRlRGF0
YWJhc2UoKSwga2V5LmdldCgpLCB2YWx1ZS5nZXQoKSwgbV9pZCwgJmRhdGFSb3dJZCk7CisgICAg
cHV0T2JqZWN0U3RvcmVEYXRhKG9iamVjdFN0b3JlLT5zcWxpdGVEYXRhYmFzZSgpLCBrZXkuZ2V0
KCksIHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgJmRhdGFSb3dJZCk7CiAKICAgICBp
bnQgaSA9IDA7Ci0gICAgZm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVn
aW4oKTsgaXQgIT0gbV9pbmRleGVzLmVuZCgpOyArK2l0LCArK2kpCi0gICAgICAgIHB1dEluZGV4
RGF0YShzcWxpdGVEYXRhYmFzZSgpLCBpbmRleEtleXNbaV0uZ2V0KCksIGl0LT5zZWNvbmQtPmlk
KCksIGRhdGFSb3dJZCk7CisgICAgZm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RT
dG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5k
KCk7ICsraXQsICsraSkKKyAgICAgICAgcHV0SW5kZXhEYXRhKG9iamVjdFN0b3JlLT5zcWxpdGVE
YXRhYmFzZSgpLCBpbmRleEtleXNbaV0uZ2V0KCksIGl0LT5zZWNvbmQtPmlkKCksIGRhdGFSb3dJ
ZCk7CiAKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkuZ2V0KCkpOwogfQogCi12b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpyZW1vdmUoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbikKK3sKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CisgICAg
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlmICgh
dHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnJlbW92ZUludGVybmFsLCB0aGlzLCBrZXksIGNhbGxiYWNrcykpKQor
ICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlIsICJyZW1vdmUgbXVzdCBiZSBjYWxsZWQg
aW4gdGhlIGNvbnRleHQgb2YgYSB0cmFuc2FjdGlvbi4iKSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJP
TSBPYmplY3RTdG9yZURhdGEgIiArIHdoZXJlQ2xhdXNlKGtleS5nZXQoKSkpOworICAgIFNRTGl0
ZVN0YXRlbWVudCBxdWVyeShvYmplY3RTdG9yZS0+c3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBG
Uk9NIE9iamVjdFN0b3JlRGF0YSAiICsgd2hlcmVDbGF1c2Uoa2V5LmdldCgpKSk7CiAgICAgYm9v
bCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKICAgICBBU1NFUlRfVU5VU0VE
KG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CiAKLSAgICBiaW5kV2hl
cmVDbGF1c2UocXVlcnksIG1faWQsIGtleS5nZXQoKSk7CisgICAgYmluZFdoZXJlQ2xhdXNlKHF1
ZXJ5LCBvYmplY3RTdG9yZS0+aWQoKSwga2V5LmdldCgpKTsKICAgICBpZiAocXVlcnkuc3RlcCgp
ICE9IFNRTFJlc3VsdERvbmUpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUiwgIktl
eSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMjU3LDI3ICsyNTEsMzQgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpy
ZW1vdmUoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWwKICAgICBjYWxs
YmFja3MtPm9uU3VjY2VzcygpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBi
b29sIHVuaXF1ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uKQogewotICAgIGlmIChtX2luZGV4ZXMuY29udGFpbnMobmFtZSkpIHsKKyAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgaWYgKCF0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbCwgdGhpcywgbmFtZSwga2V5UGF0aCwgdW5pcXVl
LCBjYWxsYmFja3MpKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSLCAiY3JlYXRl
SW5kZXggbXVzdCBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgYSB0cmFuc2FjdGlvbi4iKSk7
Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIGJvb2wgdW5pcXVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQor
eworICAgIGlmIChvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKG5hbWUpKSB7CiAgICAg
ICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCAiSW5kZXggbmFtZSBhbHJlYWR5IGV4aXN0cy4i
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0
KHNxbGl0ZURhdGFiYXNlKCksICJJTlNFUlQgSU5UTyBJbmRleGVzIChvYmplY3RTdG9yZUlkLCBu
YW1lLCBrZXlQYXRoLCBpc1VuaXF1ZSkgVkFMVUVTICg/LCA/LCA/LCA/KSIpOworICAgIFNRTGl0
ZVN0YXRlbWVudCBpbnNlcnQob2JqZWN0U3RvcmUtPnNxbGl0ZURhdGFiYXNlKCksICJJTlNFUlQg
SU5UTyBJbmRleGVzIChvYmplY3RTdG9yZUlkLCBuYW1lLCBrZXlQYXRoLCBpc1VuaXF1ZSkgVkFM
VUVTICg/LCA/LCA/LCA/KSIpOwogICAgIGJvb2wgb2sgPSBpbnNlcnQucHJlcGFyZSgpID09IFNR
TFJlc3VsdE9rOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBl
cnJvciBoYW5kbGluZy4KLSAgICBpbnNlcnQuYmluZEludDY0KDEsIG1faWQpOworICAgIGluc2Vy
dC5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmUtPm1faWQpOwogICAgIGluc2VydC5iaW5kVGV4dCgy
LCBuYW1lKTsKICAgICBpbnNlcnQuYmluZFRleHQoMywga2V5UGF0aCk7CiAgICAgaW5zZXJ0LmJp
bmRJbnQoNCwgc3RhdGljX2Nhc3Q8aW50Pih1bmlxdWUpKTsKICAgICBvayA9IGluc2VydC5zdGVw
KCkgPT0gU1FMUmVzdWx0RG9uZTsKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1F
OiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCi0gICAgaW50NjRfdCBpZCA9IHNxbGl0ZURhdGFiYXNl
KCkubGFzdEluc2VydFJvd0lEKCk7CisgICAgaW50NjRfdCBpZCA9IG9iamVjdFN0b3JlLT5zcWxp
dGVEYXRhYmFzZSgpLmxhc3RJbnNlcnRSb3dJRCgpOwogCi0gICAgUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIGlkLCBu
YW1lLCBrZXlQYXRoLCB1bmlxdWUpOworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBp
bmRleCA9IElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShvYmplY3RTdG9yZS5nZXQoKSwgaWQs
IG5hbWUsIGtleVBhdGgsIHVuaXF1ZSk7CiAgICAgQVNTRVJUKGluZGV4LT5uYW1lKCkgPT0gbmFt
ZSk7Ci0gICAgbV9pbmRleGVzLnNldChuYW1lLCBpbmRleCk7CisgICAgb2JqZWN0U3RvcmUtPm1f
aW5kZXhlcy5zZXQobmFtZSwgaW5kZXgpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGluZGV4
LmdldCgpKTsKIH0KIApAQCAtMjk2LDI1ICsyOTcsMzcgQEAgc3RhdGljIHZvaWQgZG9EZWxldGUo
U1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBjaGFyKiBzcWwsIGludDY0X3QgaWQpCiAgICAgQVNT
RVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgogfQog
Ci12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2so
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRl
eEludGVybmFsLCB0aGlzLCBuYW1lLCBjYWxsYmFja3MpKSkKKyAgICAgICAgY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9U
X0FMTE9XRURfRVJSLCAiY3JlYXRlSW5kZXggbXVzdCBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQg
b2YgYSB0cmFuc2FjdGlvbi4iKSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6cmVtb3ZlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgY29uc3QgU3RyaW5nJiBu
YW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IG1faW5kZXhlcy5nZXQobmFtZSk7CisgICAgUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5n
ZXQobmFtZSk7CiAgICAgaWYgKCFpbmRleCkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRf
RVJSLCAiSW5kZXggbmFtZSBkb2VzIG5vdCBleGlzdC4iKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihzcWxpdGVEYXRhYmFzZSgp
KTsKLSAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwotICAgIGRvRGVsZXRlKHNxbGl0ZURhdGFiYXNl
KCksICJERUxFVEUgRlJPTSBJbmRleGVzIFdIRVJFIGlkID0gPyIsIGluZGV4LT5pZCgpKTsKLSAg
ICBkb0RlbGV0ZShzcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gSW5kZXhEYXRhIFdIRVJF
IGluZGV4SWQgPSA/IiwgaW5kZXgtPmlkKCkpOwotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwor
ICAgIGRvRGVsZXRlKG9iamVjdFN0b3JlLT5zcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00g
SW5kZXhlcyBXSEVSRSBpZCA9ID8iLCBpbmRleC0+aWQoKSk7CisgICAgZG9EZWxldGUob2JqZWN0
U3RvcmUtPnNxbGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUgaW5k
ZXhJZCA9ID8iLCBpbmRleC0+aWQoKSk7CiAKLSAgICBtX2luZGV4ZXMucmVtb3ZlKG5hbWUpOwor
ICAgIG9iamVjdFN0b3JlLT5tX2luZGV4ZXMucmVtb3ZlKG5hbWUpOwogICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKCk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1
cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgdG1wRGly
ZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBy
cFJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b24pCit7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSA9IHBycFJhbmdlOworICAgIFJl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwsIHRoaXMsIHJhbmdlLCBkaXJlY3Rpb24s
IGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURf
RVJSLCAib3BlbkN1cnNvciBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiBhIHRyYW5z
YWN0aW9uLiIpKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vy
c29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJh
bmdlLCB1bnNpZ25lZCBzaG9ydCB0bXBEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0
cmFuc2FjdGlvbikKIHsKICAgICAvLyBTZXZlcmFsIGZpbGVzIGRlcGVuZCBvbiB0aGlzIG9yZGVy
IG9mIHNlbGVjdHMuCiAgICAgU3RyaW5nIHNxbCA9ICJTRUxFQ1QgaWQsIGtleVN0cmluZywga2V5
RGF0ZSwga2V5TnVtYmVyLCB2YWx1ZSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSAiOwpAQCAt
MzMwLDcgKzM0Myw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNv
cihQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduCiAgICAgZWxzZQogICAgICAg
ICBzcWwgKz0gImtleVN0cmluZyBERVNDLCBrZXlEYXRlIERFU0MsIGtleU51bWJlciBERVNDIjsK
IAotICAgIE93blB0cjxTUUxpdGVTdGF0ZW1lbnQ+IHF1ZXJ5ID0gYWRvcHRQdHIobmV3IFNRTGl0
ZVN0YXRlbWVudChzcWxpdGVEYXRhYmFzZSgpLCBzcWwpKTsKKyAgICBPd25QdHI8U1FMaXRlU3Rh
dGVtZW50PiBxdWVyeSA9IGFkb3B0UHRyKG5ldyBTUUxpdGVTdGF0ZW1lbnQob2JqZWN0U3RvcmUt
PnNxbGl0ZURhdGFiYXNlKCksIHNxbCkpOwogICAgIGJvb2wgb2sgPSBxdWVyeS0+cHJlcGFyZSgp
ID09IFNRTFJlc3VsdE9rOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJl
dHRlciBlcnJvciBoYW5kbGluZz8KIApAQCAtMzM5LDE0ICszNTIsMTQgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJh
bmdlLCB1bnNpZ24KICAgICAgICAgY3VycmVudENvbHVtbiArPSByYW5nZS0+bGVmdCgpLT5iaW5k
KCpxdWVyeSwgY3VycmVudENvbHVtbik7CiAgICAgaWYgKHJhbmdlLT5mbGFncygpICYgSURCS2V5
UmFuZ2U6OlJJR0hUX0JPVU5EIHx8IHJhbmdlLT5mbGFncygpID09IElEQktleVJhbmdlOjpTSU5H
TEUpCiAgICAgICAgIGN1cnJlbnRDb2x1bW4gKz0gcmFuZ2UtPnJpZ2h0KCktPmJpbmQoKnF1ZXJ5
LCBjdXJyZW50Q29sdW1uKTsKLSAgICBxdWVyeS0+YmluZEludDY0KGN1cnJlbnRDb2x1bW4sIG1f
aWQpOworICAgIHF1ZXJ5LT5iaW5kSW50NjQoY3VycmVudENvbHVtbiwgb2JqZWN0U3RvcmUtPmlk
KCkpOwogCiAgICAgaWYgKHF1ZXJ5LT5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KSB7CiAgICAgICAg
IGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gY3Vyc29yID0gSURCQ3Vyc29yQmFja2Vu
ZEltcGw6OmNyZWF0ZSh0aGlzLCByYW5nZSwgZGlyZWN0aW9uLCBxdWVyeS5yZWxlYXNlKCkpOwor
ICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBjdXJzb3IgPSBJREJDdXJzb3JC
YWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVjdFN0b3JlLCByYW5nZSwgZGlyZWN0aW9uLCBxdWVyeS5y
ZWxlYXNlKCksIHRyYW5zYWN0aW9uLmdldCgpKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyhj
dXJzb3IucmVsZWFzZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmgKaW5kZXggMzZjMDAxNDRhMDdmZDQxODcxMGYxYTRkNWUwZGQ0NzRhNzk1OGFh
My4uZWQ5OTRmYjQ5ZmUzYTBlZGViNjZjYjhiZjVmOTFmMmE2NTcwNTAzMSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9XZWJDb3Jl
L3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC0zOCw2ICszOCw3IEBAIGNs
YXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CiBjbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOwog
Y2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwogY2xhc3MgU1FMaXRlRGF0YWJh
c2U7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFzcyBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsIDogcHVibGljIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZSB7CiBw
dWJsaWM6CkBAIC01MiwxNSArNTMsMTUgQEAgcHVibGljOgogICAgIFN0cmluZyBrZXlQYXRoKCkg
Y29uc3QgeyByZXR1cm4gbV9rZXlQYXRoOyB9CiAgICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0
PiBpbmRleE5hbWVzKCkgY29uc3Q7CiAKLSAgICB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleT4g
a2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24pOwotICAgIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgYm9vbCBhZGRPbmx5LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHZvaWQgcmVtb3ZlKFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBnZXQoUGFzc1Jl
ZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICB2b2lkIHB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIGJvb2wgYWRkT25seSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
KTsKKyAgICB2b2lkIHJlbW92ZShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwogCi0gICAgdm9p
ZCBjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
Ym9vbCB1bmlxdWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBjcmVhdGVJ
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlx
dWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKik7CiAgICAgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCByZW1vdmVJbmRleChjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCByZW1vdmVJbmRleChjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKik7CiAKLSAgICB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+KTsKKyAgICB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
cmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKIAogICAgIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwqIGRhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQog
CkBAIC03MCw3ICs3MSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsKICAg
ICBTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UoKSBjb25zdDsKIAotICAgIHZvaWQgZ2V0
SW50ZXJuYWwoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICBzdGF0aWMgdm9pZCBwdXRJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBib29sIGFkZE9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
Pik7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgY3Jl
YXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgdW5pcXVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHN0
YXRpYyB2b2lkIHJlbW92ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmluZyYgbmFtZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICBzdGF0aWMgdm9pZCBvcGVuQ3Vyc29ySW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9y
dCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKIAogICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiBtX2RhdGFiYXNlOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggYzE5ODU1Yzc2ZGUxZTYyNTI0Mzg1OTIxNzdlOWMw
MWY3NzIzMjE5ZC4uNTNhZGU2Mjg3MmRjN2Y2MjNiNjI5ZGYzZTM3ZDY1NjJmOGY2NTIzMiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5o
CisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaApA
QCAtNDksMTUgKzQ5LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBrZXlQYXRoKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5h
bWVzKCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktl
eT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwg
Ym9vbCBhZGRPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiwgUGFzc1JlZlB0cjxJREJLZXk+LCBib29sIGFkZE9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCByZW1vdmUoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopID0gMDsKIAotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
Ym9vbCB1bmlxdWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCwgYm9vbCB1bmlxdWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKikgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbmRleChjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5j
cHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKaW5kZXggYTc3NjBmNDliOTQ4MzY2
NzBlYzkwMTY4NDdkM2E5NTJkM2MzMzA4YS4uNzZiMWQzOGIzMWQxOTU1OTZmYjFkM2Y5Mjk0Mjcx
ZTcwM2NjNGY2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCisr
KyBiL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcApAQCAtNTQsOCArNTQsOCBAQCBJREJS
ZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCQW55PiBzb3VyYwogICAgICwgbV9hYm9ydGVkKGZhbHNlKQogICAgICwgbV9yZWFk
eVN0YXRlKExPQURJTkcpCiB7Ci0gICAgaWYgKHRyYW5zYWN0aW9uKQotICAgICAgICBJREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24odHJhbnNhY3Rp
b24pOworICAgIGlmIChtX3RyYW5zYWN0aW9uKQorICAgICAgICBJREJQZW5kaW5nVHJhbnNhY3Rp
b25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlvbi5nZXQoKSk7
CiB9CiAKIElEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKQEAgLTcyLDEyICs3MiwxNSBAQCBJREJS
ZXF1ZXN0Ojp+SURCUmVxdWVzdCgpCiAgICAgYWJvcnQoKTsKIH0KIAotYm9vbCBJREJSZXF1ZXN0
OjpyZXNldFJlYWR5U3RhdGUoKQorYm9vbCBJREJSZXF1ZXN0OjpyZXNldFJlYWR5U3RhdGUoSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKIHsKICAgICBpZiAobV9h
Ym9ydGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9
PSBET05FKTsKICAgICBtX3JlYWR5U3RhdGUgPSBMT0FESU5HOworICAgIEFTU0VSVCghbV90cmFu
c2FjdGlvbik7CisgICAgbV90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOworICAgIElEQlBlbmRp
bmdUcmFuc2FjdGlvbk1vbml0b3I6OnJlbW92ZVBlbmRpbmdUcmFuc2FjdGlvbihtX3RyYW5zYWN0
aW9uLmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTMsNyArOTYsNyBAQCB2b2lk
IElEQlJlcXVlc3Q6Om9uU3VjY2VzcygpCiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBh
c3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKIHsKLSAgICBzY2hl
ZHVsZUV2ZW50KElEQkFueTo6Y3JlYXRlKElEQkN1cnNvcjo6Y3JlYXRlKGJhY2tlbmQsIHRoaXMp
KSwgMCk7CisgICAgc2NoZWR1bGVFdmVudChJREJBbnk6OmNyZWF0ZShJREJDdXJzb3I6OmNyZWF0
ZShiYWNrZW5kLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgpKSksIDApOwogfQogCiB2b2lkIElE
QlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZT4gYmFja2VuZCkKQEAgLTEwMyw3ICsxMDYsNyBAQCB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2Vz
cyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKIAogdm9p
ZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2U+IGJhY2tlbmQpCiB7Ci0gICAgc2NoZWR1bGVFdmVudChJREJBbnk6OmNyZWF0ZShJREJJbmRl
eDo6Y3JlYXRlKGJhY2tlbmQpKSwgMCk7CisgICAgc2NoZWR1bGVFdmVudChJREJBbnk6OmNyZWF0
ZShJREJJbmRleDo6Y3JlYXRlKGJhY2tlbmQsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpKSwgMCk7CiB9
CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiBpZGJLZXkp
CkBAIC0xMTMsOSArMTE2LDIwIEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQ
dHI8SURCS2V5PiBpZGJLZXkpCiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQogewotICAgIC8vIEZJ
WE1FOiB0aGUgdHJhbnNhY3Rpb24gcG9pbnRlciBzaG91bGQgYmUgdGhlIG9uZSBvZiB0aGUgc2V0
VmVyc2lvbiB0cmFuc2FjdGlvbi4gVGhpcyBpcyBiZWNhdXNlCi0gICAgLy8gdGhpcyBjYWxsYmFj
ayBpcyBvbmx5IGV4ZWN1dGVkIGZvciBvcGVyYXRpb25zIHRoYXQgbmVlbiB0byBydW4gaW4gYSBz
ZXRWZXJzaW9uIHRyYW5zYWN0aW9uLgotICAgIHNjaGVkdWxlRXZlbnQoSURCQW55OjpjcmVhdGUo
SURCT2JqZWN0U3RvcmU6OmNyZWF0ZShiYWNrZW5kLCAwKSksIDApOworICAgIC8vIEZJWE1FOiBU
aGlzIGZ1bmN0aW9uIHNob3VsZCBnbyBhd2F5IG9uY2UgY3JlYXRlT2JqZWN0U3RvcmUgaXMgc3lu
Yy4KKyAgICBzY2hlZHVsZUV2ZW50KElEQkFueTo6Y3JlYXRlKElEQk9iamVjdFN0b3JlOjpjcmVh
dGUoYmFja2VuZCwgbV90cmFuc2FjdGlvbi5nZXQoKSkpLCAwKTsKK30KKwordm9pZCBJREJSZXF1
ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IHBycEJhY2tlbmQpCit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gYmFja2VuZCA9IHBycEJhY2tlbmQ7CisgICAgLy8gVGhpcyBpcyBvbmx5IHVzZWQgYnkgc2V0
VmVyc2lvbiB3aGljaCB3aWxsIGFsd2F5cyBoYXZlIGEgc291cmNlIHRoYXQncyBhbiBJREJEYXRh
YmFzZS4KKyAgICBtX3NvdXJjZS0+aWRiRGF0YWJhc2UoKS0+c2V0U2V0VmVyc2lvblRyYW5zYWN0
aW9uKGJhY2tlbmQuZ2V0KCkpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gZnJvbnRlbmQg
PSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYmFja2Vu
ZCwgbV9zb3VyY2UtPmlkYkRhdGFiYXNlKCkuZ2V0KCkpOworICAgIGJhY2tlbmQtPnNldENhbGxi
YWNrcyhmcm9udGVuZC5nZXQoKSk7CisgICAgbV90cmFuc2FjdGlvbiA9IGJhY2tlbmQ7CisgICAg
SURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6cmVtb3ZlUGVuZGluZ1RyYW5zYWN0aW9uKG1f
dHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIHNjaGVkdWxlRXZlbnQoSURCQW55OjpjcmVhdGUoZnJv
bnRlbmQucmVsZWFzZSgpKSwgMCk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsdWUpCkBA
IC0xNjUsNiArMTc5LDEwIEBAIHZvaWQgSURCUmVxdWVzdDo6dGltZXJGaXJlZChUaW1lcjxJREJS
ZXF1ZXN0PiopCiAgICAgLy8gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCByZXN1bWUoKSBkb2Vzbid0
IHJlLXN0YXJ0IHRoZSB0aW1lciBiYXNlZCBvbiBtX3NlbGZSZWYgYmVpbmcgc2V0LgogICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiBzZWxmUmVmID0gbV9zZWxmUmVmLnJlbGVhc2UoKTsKIAorICAgIC8v
IHJlYWR5U3RhdGVSZXNldCBjYW4gYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgd2hpbGUgd2UncmUg
ZGlzcGF0Y2hpbmcgdGhlIGV2ZW50LgorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbjsKKyAgICBtX3RyYW5zYWN0aW9u
LmNsZWFyKCk7CisKICAgICBWZWN0b3I8UGVuZGluZ0V2ZW50PiBwZW5kaW5nRXZlbnRzOwogICAg
IHBlbmRpbmdFdmVudHMuc3dhcChtX3BlbmRpbmdFdmVudHMpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcGVuZGluZ0V2ZW50cy5zaXplKCk7ICsraSkgewpAQCAtMTc2LDEyICsxOTQsMTEg
QEAgdm9pZCBJREJSZXF1ZXN0Ojp0aW1lckZpcmVkKFRpbWVyPElEQlJlcXVlc3Q+KikKICAgICAg
ICAgICAgIGRpc3BhdGNoRXZlbnQoSURCU3VjY2Vzc0V2ZW50OjpjcmVhdGUobV9zb3VyY2UsIHBl
bmRpbmdFdmVudHNbaV0ubV9yZXN1bHQpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobV90
cmFuc2FjdGlvbikgeworICAgIGlmICh0cmFuc2FjdGlvbikgewogICAgICAgICAvLyBOb3cgdGhh
dCB3ZSBwcm9jZXNzZWQgYWxsIHBlbmRpbmcgZXZlbnRzLCBsZXQgdGhlIHRyYW5zYWN0aW9uIG1v
bml0b3IgY2hlY2sgaWYKICAgICAgICAgLy8gaXQgY2FuIGNvbW1pdCB0aGUgY3VycmVudCB0cmFu
c2FjdGlvbiBvciBpZiB0aGVyZSdzIGFueXRoaW5nIG5ldyBwZW5kaW5nLgogICAgICAgICAvLyBG
SVhNRTogSGFuZGxlIHRoZSB3b3JrZXJzIGNhc2UuCi0gICAgICAgIG1fdHJhbnNhY3Rpb24tPmRp
ZENvbXBsZXRlVGFza0V2ZW50cygpOwotICAgICAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7Cisg
ICAgICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmggYi9XZWJDb3JlL3N0b3Jh
Z2UvSURCUmVxdWVzdC5oCmluZGV4IGMwNTE1YWFlMjY2MGM0NjNjYTlhODQxYTdhYzc5OTVkNGZm
Mzg5ZTguLmJhYjhkZjhmNGQ5NDBhMTI2YjE3ZWVkNjgwMjUyNmMyODViYTdmM2IgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lE
QlJlcXVlc3QuaApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U7CiAKIGNsYXNzIElEQlJlcXVlc3QgOiBwdWJsaWMgSURCQ2FsbGJhY2tzLCBwdWJs
aWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gMCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IElEQlJl
cXVlc3QoY29udGV4dCwgc291cmNlLCB0cmFuc2FjdGlvbikpOyB9CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJSZXF1ZXN0KGNvbnRleHQs
IHNvdXJjZSwgdHJhbnNhY3Rpb24pKTsgfQogICAgIHZpcnR1YWwgfklEQlJlcXVlc3QoKTsKIAog
ICAgIC8vIERlZmluZWQgaW4gdGhlIElETApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAg
REVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzdWNjZXNzKTsKICAgICBERUZJTkVfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKIAotICAgIGJvb2wgcmVzZXRSZWFkeVN0YXRl
KCk7CisgICAgYm9vbCByZXNldFJlYWR5U3RhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKik7CiAKICAgICAvLyBJREJDYWxsYmFja3MKICAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKQEAgLTY5LDYgKzY5LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRl
cmZhY2U+KTsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5Pik7
CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZT4pOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNj
ZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7CiAKICAgICAvLyBFdmVudFRh
cmdldApAQCAtNzgsOCArNzksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGNhblN1c3BlbmQoKSBjb25zdDsKIAotICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCQ2FsbGJh
Y2tzPjo6cmVmOwotICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPjo6ZGVyZWY7Cisg
ICAgdXNpbmcgVGhyZWFkU2FmZVNoYXJlZDxJREJDYWxsYmFja3M+OjpyZWY7CisgICAgdXNpbmcg
VGhyZWFkU2FmZVNoYXJlZDxJREJDYWxsYmFja3M+OjpkZXJlZjsKIAogcHJpdmF0ZToKICAgICBJ
REJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkFueT4gc291
cmNlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBiL1dl
YkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCA0ZjE4NDM3
ZjBiZTQ0ZWZjNjkyZjYxYTdjYzgyMDc2ZThjYjc0NWUxLi44NjFjNmZkN2M0Nzg2MmRlMDk3Zjcz
MmZjM2YxMThhMjYzMmY2NzNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuY3BwCkBAIC00NCw3ICs0NCw3IEBAIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVz
CiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQogICAgICwgbV9p
ZChpZCkKLSAgICAsIG1fc3RhdGUoTm90U3RhcnRlZCkKKyAgICAsIG1fc3RhdGUoVW51c2VkKQog
ICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKICAgICAsIG1fdHJhbnNhY3Rpb24obmV3IFNRTGl0
ZVRyYW5zYWN0aW9uKGRhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpKSkKICAgICAsIG1fdGltZXIo
dGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRpbWVyRmlyZWQpCkBAIC02NSw3ICs2
NSw3IEBAIGJvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1bGVUYXNrKFBhc3NP
d25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKLSAgICBpZiAobV9zdGF0ZSA9PSBOb3RTdGFy
dGVkKQorICAgIGlmIChtX3N0YXRlID09IFVudXNlZCkKICAgICAgICAgc3RhcnQoKTsKIAogICAg
IHJldHVybiB0cnVlOwpAQCAtODQsNyArODQsMTAgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjphYm9ydCgpCiAKIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZGlkQ29t
cGxldGVUYXNrRXZlbnRzKCkKIHsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGFydGVkKTsKKyAg
ICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KG1fc3RhdGUgPT0gUnVubmluZyk7CiAgICAgQVNTRVJUKG1fcGVuZGluZ0V2ZW50cyk7CiAKICAg
ICBtX3BlbmRpbmdFdmVudHMtLTsKQEAgLTEwNSw3ICsxMDgsNyBAQCB2b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmRpZENvbXBsZXRlVGFza0V2ZW50cygpCiAKIHZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6cnVuKCkKIHsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGFydGVk
KTsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGFydFBlbmRpbmcgfHwgbV9zdGF0ZSA9PSBSdW5u
aW5nKTsKICAgICBBU1NFUlQoIW1fdGltZXIuaXNBY3RpdmUoKSk7CiAKICAgICBtX3RpbWVyLnN0
YXJ0T25lU2hvdCgwKTsKQEAgLTExMywxNiArMTE2LDE1IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6cnVuKCkKIAogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzdGFy
dCgpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gTm90U3RhcnRlZCk7CisgICAgQVNTRVJUKG1f
c3RhdGUgPT0gVW51c2VkKTsKIAotICAgIG1fc3RhdGUgPSBTdGFydGVkOwotICAgIG1fdHJhbnNh
Y3Rpb24tPmJlZ2luKCk7CisgICAgbV9zdGF0ZSA9IFN0YXJ0UGVuZGluZzsKICAgICBtX2RhdGFi
YXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZFN0YXJ0VHJhbnNhY3Rpb24odGhpcyk7
CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKIHsKLSAgICBB
U1NFUlQobV9zdGF0ZSA9PSBTdGFydGVkKTsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBSdW5uaW5n
KTsKIAogICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKICAgICBtX3RyYW5zYWN0aW9uLT5jb21taXQo
KTsKQEAgLTEzMiw3ICsxMzQsMTIgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpj
b21taXQoKQogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0aW1lckZpcmVkKFRpbWVy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KikKIHsKICAgICBBU1NFUlQoIW1fdGFza1F1ZXVl
LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhcnRlZCk7CisKKyAgICBpZiAo
bV9zdGF0ZSA9PSBTdGFydFBlbmRpbmcpIHsKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+YmVnaW4o
KTsKKyAgICAgICAgbV9zdGF0ZSA9IFJ1bm5pbmc7CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VS
VChtX3N0YXRlID09IFJ1bm5pbmcpOwogCiAgICAgVGFza1F1ZXVlIHF1ZXVlOwogICAgIHF1ZXVl
LnN3YXAobV90YXNrUXVldWUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsLmgKaW5kZXggYzAzN2ExMTU2ODM4NmJmOTQyNDBhNWM1MjVlMzI0NDQ1OWZiZTIzZi4u
MDlhNmExYzZkN2UyMTAyNjJjMmIwZGNkYWFlZDkyODQ1MTc0MzlmOCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAorKysgYi9XZWJDb3JlL3N0
b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCkBAIC02MCw5ICs2MCwxMCBAQCBwcml2
YXRlOgogICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0
U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIGludCBp
ZCwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOwogCiAgICAgZW51bSBTdGF0ZSB7Ci0gICAgICAg
IE5vdFN0YXJ0ZWQsCi0gICAgICAgIFN0YXJ0ZWQsCi0gICAgICAgIEZpbmlzaGVkLAorICAgICAg
ICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCisgICAgICAgIFN0YXJ0UGVu
ZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBTUUxpdGUgdHJhbnNhY3Rpb24gbm90IHlldCBz
dGFydGVkLgorICAgICAgICBSdW5uaW5nLCAvLyBTUUxpdGUgdHJhbnNhY3Rpb24gc3RhcnRlZCBi
dXQgbm90IHlldCBmaW5pc2hlZC4KKyAgICAgICAgRmluaXNoZWQsIC8vIEVpdGhlciBhYm9ydGVk
IG9yIGNvbW1pdHRlZC4KICAgICB9OwogCiAgICAgdm9pZCBzdGFydCgpOwpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggZWI1YzJlZmE1MWJmMmFjMzEwZjUxZDgwYWZjZmE0NWQ0NWZkNGRiYy4uNTUzZmFhNThjNGZj
YTY4YzBkYzRiNTg1N2MwY2JhNWI5MTQzMTU5MSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYg
QEAKKzIwMTAtMDktMjkgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmluaXNoZWQgSURC
VHJhbnNhY3Rpb24gZm9yIEluZGV4ZWREQgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDY4MjMKKworICAgICAgICAqIHB1YmxpYy9XZWJJREJDYWxsYmFj
a3MuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCQ2FsbGJhY2tzOjpvblN1Y2Nlc3MpOgorICAg
ICAgICAqIHB1YmxpYy9XZWJJREJEYXRhYmFzZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJE
YXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRh
YmFzZTo6cmVtb3ZlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFz
ZTo6Y2xvc2UpOgorICAgICAgICAqIHB1YmxpYy9XZWJJREJJbmRleC5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJREJJbmRleDo6b3Blbk9iamVjdEN1cnNvcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YklEQkluZGV4OjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCSW5kZXg6Omdl
dE9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkluZGV4OjpnZXQpOgorICAgICAgICAq
IHB1YmxpYy9XZWJJREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmpl
Y3RTdG9yZTo6Z2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmU6OnB1dCk6
CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlOjpyZW1vdmUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJREJPYmplY3RTdG9yZTo6cmVtb3ZlSW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
REJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcik6CisgICAgICAgICogcHVibGljL1dlYklEQlRyYW5z
YWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OldlYklEQlRyYW5zYWN0aW9uOjppZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYklEQlRyYW5zYWN0aW9uOjpnZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UpOgorICAgICAgICAqIHNyYy9JREJDYWxsYmFja3NQcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJDYWxsYmFja3NQcm94eTo6b25TdWNjZXNzKToKKyAgICAgICAgKiBzcmMv
SURCQ2FsbGJhY2tzUHJveHkuaDoKKyAgICAgICAgKiBzcmMvSURCRGF0YWJhc2VQcm94eS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZVByb3h5OjpjcmVhdGVPYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZVByb3h5OjpyZW1vdmVPYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZVByb3h5OjpjbG9zZSk6CisgICAgICAgICog
c3JjL0lEQkRhdGFiYXNlUHJveHkuaDoKKyAgICAgICAgKiBzcmMvSURCSW5kZXhCYWNrZW5kUHJv
eHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kUHJveHk6Om9wZW5PYmpl
Y3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kUHJveHk6Om9wZW5D
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kUHJveHk6OmdldE9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRQcm94eTo6Z2V0KToKKyAgICAg
ICAgKiBzcmMvSURCSW5kZXhCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKiBzcmMvSURCT2JqZWN0
U3RvcmVQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZVByb3h5Ojpw
dXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVQcm94eTo6cmVtb3ZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlUHJveHk6OmNyZWF0ZUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlUHJveHk6OnJlbW92ZUluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlUHJveHk6Om9wZW5DdXJzb3IpOgorICAgICAgICAqIHNy
Yy9JREJPYmplY3RTdG9yZVByb3h5Lmg6CisgICAgICAgICogc3JjL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZFBy
b3h5OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSk6CisgICAgICAgICogc3JjL1dlYklEQkNh
bGxiYWNrc0ltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViSURCQ2FsbGJhY2tzSW1wbDo6
b25TdWNjZXNzKToKKyAgICAgICAgKiBzcmMvV2ViSURCQ2FsbGJhY2tzSW1wbC5oOgorICAgICAg
ICAqIHNyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJE
YXRhYmFzZUltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURC
RGF0YWJhc2VJbXBsOjpyZW1vdmVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYklE
QkRhdGFiYXNlSW1wbDo6Y2xvc2UpOgorICAgICAgICAqIHNyYy9XZWJJREJEYXRhYmFzZUltcGwu
aDoKKyAgICAgICAgKiBzcmMvV2ViSURCSW5kZXhJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViSURCSW5kZXhJbXBsOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCSW5k
ZXhJbXBsOjpvcGVuT2JqZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCSW5kZXhJ
bXBsOjpnZXRPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJJbmRleEltcGw6OmdldCk6
CisgICAgICAgICogc3JjL1dlYklEQkluZGV4SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJJREJP
YmplY3RTdG9yZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZUlt
cGw6OnB1dCk6CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlSW1wbDo6cmVtb3Zl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmVJbXBsOjpjcmVhdGVJbmRleCk6
CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlSW1wbDo6cmVtb3ZlSW5kZXgpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZUltcGw6Om9wZW5DdXJzb3IpOgorICAg
ICAgICAqIHNyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuaDoKKwogMjAxMC0wOS0yOCAgQW5kcmVp
IFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVy
ZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJDYWxs
YmFja3MuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCQ2FsbGJhY2tzLmgKaW5kZXgg
MmUyYzRkMjk5ZTBjOGM3ZjU3NWRhZjJiNGU4MDdmZTc3NTNjZDZkMS4uNjRmZmMwOGRlYjUxN2M2
YTdiNGExN2Q3YzQwMDg4Mzg0NzI0OWEwZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJJREJDYWxsYmFja3MuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklE
QkNhbGxiYWNrcy5oCkBAIC0zNiw2ICszNiw3IEBAIGNsYXNzIFdlYklEQkRhdGFiYXNlRXJyb3I7
CiBjbGFzcyBXZWJJREJLZXk7CiBjbGFzcyBXZWJJREJJbmRleDsKIGNsYXNzIFdlYklEQk9iamVj
dFN0b3JlOworY2xhc3MgV2ViSURCVHJhbnNhY3Rpb247CiBjbGFzcyBXZWJTZXJpYWxpemVkU2Ny
aXB0VmFsdWU7CiAKIGNsYXNzIFdlYklEQkNhbGxiYWNrcyB7CkBAIC01MSw2ICs1Miw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKGNvbnN0IFdlYklEQktleSYpIHsgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhX
ZWJJREJJbmRleCopIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVh
bCB2b2lkIG9uU3VjY2VzcyhXZWJJREJPYmplY3RTdG9yZSopIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhXZWJJREJUcmFuc2FjdGlv
biopIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIG9u
U3VjY2Vzcyhjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmKSB7IFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQogfTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJJREJEYXRhYmFzZS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFz
ZS5oCmluZGV4IDRlNWNkY2JjZDE4ZTIyMGYwNWVjZmRmMjUwNTc0YmFmNjdhZjQwZWIuLjIwMjFm
NmYyMjBjOTFkNGU5YzM5ZDFhYTMzMTFiY2FkNWZhYTA5NzYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJhc2UuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYklEQkRhdGFiYXNlLmgKQEAgLTYxLDE0ICs2MSwxNCBAQCBwdWJsaWM6CiAgICAgICAg
IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmlu
Z0xpc3QoKTsKICAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0
IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNy
ZW1lbnQsIFdlYklEQkNhbGxiYWNrcyopIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgY29uc3QgV2ViU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIFdlYklEQkNh
bGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikgeyBXRUJLSVRfQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KICAgICAvLyBUcmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSBXZWJJREJPYmpl
Y3RTdG9yZSB0byB0aGUgY2FsbGVyLgogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9i
amVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgdW5zaWduZWQgc2hvcnQgbW9kZSkKICAg
ICB7CiAgICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVPYmplY3RTdG9yZShjb25zdCBXZWJT
dHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzKSB7IFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCByZW1vdmVPYmplY3RTdG9yZShjb25z
dCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJ
REJUcmFuc2FjdGlvbiYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmly
dHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgV2ViU3RyaW5nJiB2ZXJzaW9uLCBXZWJJREJDYWxs
YmFja3MqIGNhbGxiYWNrcykgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICAv
LyBUcmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSBXZWJJREJUcmFuc2FjdGlvbiB0byB0aGUgY2Fs
bGVyLgogICAgIHZpcnR1YWwgV2ViSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKGNvbnN0IFdl
YkRPTVN0cmluZ0xpc3QmIG5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25n
IHRpbWVvdXQpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgV0VCS0lUX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KKyAgICB2aXJ0dWFs
IHZvaWQgY2xvc2UoKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YklEQkluZGV4LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkluZGV4LmgKaW5kZXgg
YjRiYTFmNDBhZmYzOTBlZGFhOGMzMzBmZTljYTIxZjIzZWVjMjEzNi4uZTUyYjQ4NzBmZmQ3ODlh
ZTNmNDNmMzg2NjA0ZmY2NjNmNTVhNTI4ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJJREJJbmRleC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCSW5k
ZXguaApAQCAtNjEsNDMgKzYxLDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIHZlcnNpb25zIHdpdGhvdXQgdHJhbnNh
Y3Rpb24gcGFyYW1ldGVycy4KLSAgICB2aXJ0dWFsIHZvaWQgb3Blbk9iamVjdEN1cnNvcihjb25z
dCBXZWJJREJLZXlSYW5nZSYgcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgV2ViSURC
Q2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikKLSAgICB7Ci0g
ICAgICAgIG9wZW5PYmplY3RDdXJzb3IocmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzKTsKLSAg
ICB9Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5PYmplY3RDdXJzb3IoY29uc3QgV2ViSURCS2V5UmFu
Z2UmIHJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyogY2Fs
bGJhY2tzKQotICAgIHsKLSAgICAgICAgV2ViSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247Ci0g
ICAgICAgIG9wZW5PYmplY3RDdXJzb3IocmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzLCB0cmFu
c2FjdGlvbik7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKGNvbnN0IFdlYklE
QktleVJhbmdlJiByYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBXZWJJREJDYWxsYmFj
a3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKQotICAgIHsKLSAgICAgICAg
b3BlbkN1cnNvcihyYW5nZSwgZGlyZWN0aW9uLCBjYWxsYmFja3MpOwotICAgIH0KLSAgICB2aXJ0
dWFsIHZvaWQgb3BlbkN1cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYgcmFuZ2UsIHVuc2lnbmVk
IHNob3J0IGRpcmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MpCi0gICAgewotICAg
ICAgICBXZWJJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbjsKLSAgICAgICAgb3BlbkN1cnNvcihy
YW5nZSwgZGlyZWN0aW9uLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKTsKLSAgICB9Ci0gICAgdmly
dHVhbCB2b2lkIGdldE9iamVjdChjb25zdCBXZWJJREJLZXkmIGtleSwgV2ViSURCQ2FsbGJhY2tz
KiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikKLSAgICB7Ci0gICAgICAgIGdl
dE9iamVjdChrZXksIGNhbGxiYWNrcyk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRPYmpl
Y3QoY29uc3QgV2ViSURCS2V5JiBrZXksIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzKQotICAg
IHsKLSAgICAgICAgV2ViSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247Ci0gICAgICAgIGdldE9i
amVjdChrZXksIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pOwotICAgIH0KLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0KGNvbnN0IFdlYklEQktleSYga2V5LCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywg
Y29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKQotICAgIHsKLSAgICAgICAgZ2V0KGtleSwgY2FsbGJh
Y2tzKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGdldChjb25zdCBXZWJJREJLZXkmIGtleSwg
V2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICBXZWJJREJUcmFuc2Fj
dGlvbiB0cmFuc2FjdGlvbjsKLSAgICAgICAgZ2V0KGtleSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlv
bik7Ci0gICAgfQorICAgIHZpcnR1YWwgdm9pZCBvcGVuT2JqZWN0Q3Vyc29yKGNvbnN0IFdlYklE
QktleVJhbmdlJiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBXZWJJREJDYWxsYmFja3MqLCBj
b25zdCBXZWJJREJUcmFuc2FjdGlvbiYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CisgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2UmLCB1bnNp
Z25lZCBzaG9ydCBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5z
YWN0aW9uJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0T2JqZWN0KGNvbnN0IFdlYklEQktleSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0KGNvbnN0IFdlYklEQktleSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0
IFdlYklEQlRyYW5zYWN0aW9uJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJJREJPYmplY3RTdG9yZS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJP
YmplY3RTdG9yZS5oCmluZGV4IDE5ZWZkNDg5Y2YxYjdkMGU4NjQzODQ1Njg4ZTM5Yjc2ZWM3ZGY5
MmUuLjUxYThkOGM4NWQ2MTJmNjRlMGFmMTI0MjgyOTU3NGIxNjBhMjQ5MzYgMTAwNzU1Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYklEQk9iamVjdFN0b3JlLmgKQEAgLTU4LDUxICs1OCwxOCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBXZWJET01TdHJpbmdMaXN0KCk7CiAgICAgfQogCi0gICAg
Ly8gRklYTUU6IFJlbW92ZSB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzIGZvciB0cmFuc2FjdGlvbklk
cy4KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0KGNvbnN0IFdlYklEQktleSYga2V5LCBXZWJJREJDYWxs
YmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKQotICAgIHsKLSAgICAg
ICAgZ2V0KGtleSwgY2FsbGJhY2tzKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGdldChjb25z
dCBXZWJJREJLZXkmIGtleSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MpCi0gICAgewotICAg
ICAgICBXZWJJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbjsKLSAgICAgICAgZ2V0KGtleSwgY2Fs
bGJhY2tzLCB0cmFuc2FjdGlvbik7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwdXQoY29uc3Qg
V2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgV2ViSURCS2V5JiBrZXksIGJv
b2wgYWRkT25seSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5z
YWN0aW9uJikKLSAgICB7Ci0gICAgICAgIHB1dCh2YWx1ZSwga2V5LCBhZGRPbmx5LCBjYWxsYmFj
a3MpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFdlYklEQktleSYga2V5LCBib29sIGFkZE9ubHksIFdlYklE
QkNhbGxiYWNrcyogY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgV2ViSURCVHJhbnNhY3Rpb24g
dHJhbnNhY3Rpb247Ci0gICAgICAgIHB1dCh2YWx1ZSwga2V5LCBhZGRPbmx5LCBjYWxsYmFja3Ms
IHRyYW5zYWN0aW9uKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZShjb25zdCBXZWJJ
REJLZXkmIGtleSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5z
YWN0aW9uJikKLSAgICB7Ci0gICAgICAgIHJlbW92ZShrZXksIGNhbGxiYWNrcyk7Ci0gICAgfQot
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmUoY29uc3QgV2ViSURCS2V5JiBrZXksIFdlYklEQkNhbGxi
YWNrcyogY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgV2ViSURCVHJhbnNhY3Rpb24gdHJhbnNh
Y3Rpb247Ci0gICAgICAgIHJlbW92ZShrZXksIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pOwotICAg
IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBj
b25zdCBXZWJTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBXZWJJREJDYWxsYmFja3MqKSB7
IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXQoY29u
c3QgV2ViSURCS2V5JiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24m
KSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXQo
Y29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgY29uc3QgV2ViSURCS2V5JiwgYm9vbCBh
ZGRPbmx5LCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpIHsgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZShjb25z
dCBXZWJJREJLZXkmLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYp
IHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGNyZWF0
ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBrZXlQYXRoLCBi
b29sIHVuaXF1ZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7
IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIC8vIFRyYW5zZmVycyBvd25lcnNo
aXAgb2YgdGhlIFdlYklEQkluZGV4IHRvIHRoZSBjYWxsZXIuCiAgICAgdmlydHVhbCBXZWJJREJJ
bmRleCogaW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lKQogICAgIHsKICAgICAgICAgV0VCS0lU
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgdmly
dHVhbCB2b2lkIHJlbW92ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJh
Y2tzKikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
b3BlbkN1cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYgcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRp
cmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJikKLSAgICB7Ci0gICAgICAgIG9wZW5DdXJzb3IocmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJh
Y2tzKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5
UmFuZ2UmIHJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyog
Y2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgV2ViSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247
Ci0gICAgICAgIG9wZW5DdXJzb3IocmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzLCB0cmFuc2Fj
dGlvbik7Ci0gICAgfQorICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbmRleChjb25zdCBXZWJTdHJp
bmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikgeyBX
RUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNv
cihjb25zdCBXZWJJREJLZXlSYW5nZSYsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgV2ViSURC
Q2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQogICAgIC8vIEZJWE1FOiBmaW5pc2guCiB9OwogCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmggYi9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmgKaW5kZXggN2I1MWI5N2UwYjM2NmFhM2I0MmNh
NWVlYWJiMzllZjBkM2IxZTVkZi4uNmE3MzljMzRkNGE5ODQ3OTdmMWI5MzI2OTliYTg1ZmNkMzI2
ZTg0ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlv
bi5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaApAQCAt
NTQsOCArNTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2
ZW50cygpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCBpbnQg
aWQoKSBjb25zdAogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFVuY29tbWVudCB0aGlzIGFmdGVy
IHRoZSBuZXh0IENocm9taXVtIFdlYktpdCByb2xsLgotICAgICAgICAvL1dFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHNldENhbGxiYWNrcyhXZWJJ
REJUcmFuc2FjdGlvbkNhbGxiYWNrcyopIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CkBAIC02Myw3ICs2Miw2IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogdGhpcyBpcyBuZXZlciBj
YWxsZWQgZnJvbSBXZWJDb3JlLiBGaW5kIGEgY2xlYW5lciBzb2x1dGlvbi4KICAgICB2aXJ0dWFs
IFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogZ2V0SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNhbGxiYWNrc1Byb3h5LmNwcCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvSURCQ2FsbGJhY2tzUHJveHkuY3BwCmluZGV4IDNlYWI2MjI0YTk3OWIwNzEzZmQ5ZmU3
YWFmYTU3NGZmODE0YzQzODEuLjY5MDUxZDBhNmRhN2M2NmMwZDA3NWYzZmI5OWNhYjlkMjkzM2Rl
YzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2FsbGJhY2tzUHJveHkuY3Bw
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2FsbGJhY2tzUHJveHkuY3BwCkBAIC0zOCw2
ICszOCw3IEBACiAjaW5jbHVkZSAiV2ViSURCSW5kZXhJbXBsLmgiCiAjaW5jbHVkZSAiV2ViSURC
S2V5LmgiCiAjaW5jbHVkZSAiV2ViSURCT2JqZWN0U3RvcmVJbXBsLmgiCisjaW5jbHVkZSAiV2Vi
SURCVHJhbnNhY3Rpb25JbXBsLmgiCiAjaW5jbHVkZSAiV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKQEAgLTEwMCw2ICsxMDEsMTIgQEAg
dm9pZCBJREJDYWxsYmFja3NQcm94eTo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlPiBiYWMKICAgICBtX2NhbGxiYWNrcy5jbGVhcigpOwogfQogCit2
b2lkIElEQkNhbGxiYWNrc1Byb3h5OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCit7CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
cyhuZXcgV2ViS2l0OjpXZWJJREJUcmFuc2FjdGlvbkltcGwoYmFja2VuZCkpOworICAgIG1fY2Fs
bGJhY2tzLmNsZWFyKCk7Cit9CisKIHZvaWQgSURCQ2FsbGJhY2tzUHJveHk6Om9uU3VjY2VzcyhQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKQog
ewogICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoV2ViS2l0OjpXZWJTZXJpYWxpemVkU2NyaXB0
VmFsdWUoc2VyaWFsaXplZFNjcmlwdFZhbHVlKSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQkNhbGxiYWNrc1Byb3h5LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNhbGxi
YWNrc1Byb3h5LmgKaW5kZXggNTA2ZGJiMGY2Y2E5OGZjNDlkNjgyZmFmY2VkNDdmOWNjYmQ0MWVi
Yy4uOGMyNjE2MTJhNDY3ZTk4ZGY0MjMzOTUxZTIzNjE0OGM2MzQyODU4MyAxMDA2NDQKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJDYWxsYmFja3NQcm94eS5oCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvSURCQ2FsbGJhY2tzUHJveHkuaApAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVy
ZmFjZT4pOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+KTsK
ICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlPik7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nl
c3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKIAogcHJpdmF0ZToKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VQcm94eS5jcHAgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlUHJveHkuY3BwCmluZGV4IGNlNWUwYTZjY2ZkMzIwYmJl
NjM3ZTNkZjdiYWMyNzlhOGJmYjM4ZDYuLjU2NGZkZGI2ZTZhYjhmZjJmNDZlNDg0NDJkNTc4Zjli
YTQ2NzRlNWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VQcm94
eS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZVByb3h5LmNwcApAQCAt
NzYsOSArNzYsMTIgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFzZVByb3h5
OjpvYmplY3RTdG9yZXMoKSBjb25zdAogICAgIHJldHVybiBtX3dlYklEQkRhdGFiYXNlLT5vYmpl
Y3RTdG9yZXMoKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZVByb3h5OjpjcmVhdGVPYmplY3RTdG9y
ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5j
cmVtZW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJEYXRh
YmFzZVByb3h5OjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
KQogewotICAgIG1fd2ViSURCRGF0YWJhc2UtPmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBh
dGgsIGF1dG9JbmNyZW1lbnQsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOwor
ICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2lu
dGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisgICAgLy8gYWxsIGlt
cGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KKyAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0
PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOworICAgIG1fd2ViSURC
RGF0YWJhc2UtPmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQs
IG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5n
ZXRXZWJJREJUcmFuc2FjdGlvbigpKTsKIH0KIAogUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlUHJveHk6Om9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgdW5zaWduZWQgc2hvcnQgbW9kZSkKQEAgLTg5LDkgKzkyLDEyIEBAIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZVByb3h5OjpvYmpl
Y3RTdG9yZShjb25zdCBTCiAgICAgcmV0dXJuIElEQk9iamVjdFN0b3JlUHJveHk6OmNyZWF0ZShv
YmplY3RTdG9yZSk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VQcm94eTo6cmVtb3ZlT2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQordm9pZCBJREJEYXRhYmFzZVByb3h5OjpyZW1vdmVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCiB7Ci0gICAgbV93ZWJJREJEYXRhYmFzZS0+
cmVtb3ZlT2JqZWN0U3RvcmUobmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tz
KSk7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBh
IHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBh
bGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgor
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGlj
X2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93
ZWJJREJEYXRhYmFzZS0+cmVtb3ZlT2JqZWN0U3RvcmUobmFtZSwgbmV3IFdlYklEQkNhbGxiYWNr
c0ltcGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9u
KCkpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlUHJveHk6OnNldFZlcnNpb24oY29uc3QgU3RyaW5n
JiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQpAQCAtMTA2LDYg
KzExMiwxMSBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURC
RGF0YWJhc2VQcm94eTo6dHJhbnNhY3Rpb24oRE9NU3RyaQogICAgIHJldHVybiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRQcm94eTo6Y3JlYXRlKHRyYW5zYWN0aW9uKTsKIH0KIAordm9pZCBJREJEYXRh
YmFzZVByb3h5OjpjbG9zZSgpCit7CisgICAgbV93ZWJJREJEYXRhYmFzZS0+Y2xvc2UoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlUHJveHku
aCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VQcm94eS5oCmluZGV4IGZmZmQyM2Vl
ODUyYTYxMzZjNDFhNWNlYmUwYTA4ZGM0ZGRhZjY1YWIuLmVhZWViMjdiNTViMzM3Njg2ZjRjOTIz
ZjE0OTE0YzNmNzYxNDkyZmEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0
YWJhc2VQcm94eS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VQcm94eS5o
CkBAIC00NywxMyArNDcsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24o
KSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3Rv
cmVzKCkgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogQWRkIHNldFZlcnNpb24uCi0KLSAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9y
ZShjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIHNob3J0IG1vZGUpOwotICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcm
IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3RyaW5n
TGlzdCogc3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgdW5zaWduZWQgbG9uZyB0aW1l
b3V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKIAogcHJpdmF0ZToKICAgICBJREJEYXRh
YmFzZVByb3h5KFBhc3NPd25QdHI8V2ViS2l0OjpXZWJJREJEYXRhYmFzZT4pOwpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJJbmRleEJhY2tlbmRQcm94eS5jcHAgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL0lEQkluZGV4QmFja2VuZFByb3h5LmNwcAppbmRleCBmOTJmNGYyYjM1NjI1
M2EzZDUwM2QyZWViM2QzNzZiNDlkZjA0MjU0Li44ZjI2YmYxOTdlMzlkN2M4ODc4ZjBiMDYwOWVh
YTRiNDg4M2ZkMzE1IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkluZGV4QmFj
a2VuZFByb3h5LmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkluZGV4QmFja2VuZFBy
b3h5LmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAj
aW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRQ
cm94eS5oIgogI2luY2x1ZGUgIldlYklEQkNhbGxiYWNrc0ltcGwuaCIKICNpbmNsdWRlICJXZWJJ
REJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiV2ViSURCSW5kZXguaCIKQEAgLTcyLDI0ICs3
MywzNiBAQCBib29sIElEQkluZGV4QmFja2VuZFByb3h5Ojp1bmlxdWUoKQogICAgIHJldHVybiBt
X3dlYklEQkluZGV4LT51bmlxdWUoKTsKIH0KIAotdm9pZCBJREJJbmRleEJhY2tlbmRQcm94eTo6
b3Blbk9iamVjdEN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWdu
ZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQor
dm9pZCBJREJJbmRleEJhY2tlbmRQcm94eTo6b3Blbk9iamVjdEN1cnNvcihQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uKQogewotICAgIG1fd2ViSURCSW5kZXgtPm9wZW5PYmplY3RDdXJzb3Ioa2V5
UmFuZ2UsIGRpcmVjdGlvbiwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSk7Cisg
ICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50
ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBhbGwgaW1w
bGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgorICAgIElE
QlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8
SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93ZWJJREJJ
bmRleC0+b3Blbk9iamVjdEN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCBuZXcgV2ViSURCQ2Fs
bGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNh
Y3Rpb24oKSk7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kUHJveHk6Om9wZW5DdXJzb3IoUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCSW5kZXhCYWNrZW5k
UHJveHk6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2ln
bmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKIHsKLSAgICBtX3dl
YklEQkluZGV4LT5vcGVuQ3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIG5ldyBXZWJJREJDYWxs
YmFja3NJbXBsKGNhbGxiYWNrcykpOworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlz
IGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUg
cmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBh
cmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNh
Y3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJh
bnNhY3Rpb24pOworICAgIG1fd2ViSURCSW5kZXgtPm9wZW5DdXJzb3Ioa2V5UmFuZ2UsIGRpcmVj
dGlvbiwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJv
eHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkpOwogfQogCi12b2lkIElEQkluZGV4QmFja2VuZFBy
b3h5OjpnZXRPYmplY3QoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kUHJveHk6OmdldE9iamVjdChQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewotICAgIG1f
d2ViSURCSW5kZXgtPmdldE9iamVjdChrZXksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxi
YWNrcykpOworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8g
YmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisgICAg
Ly8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0
cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0
YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOworICAg
IG1fd2ViSURCSW5kZXgtPmdldE9iamVjdChrZXksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNh
bGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpKTsKIH0K
IAotdm9pZCBJREJJbmRleEJhY2tlbmRQcm94eTo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5PiBrZXks
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQkluZGV4QmFja2Vu
ZFByb3h5OjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
bikKIHsKLSAgICBtX3dlYklEQkluZGV4LT5nZXQoa2V5LCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1w
bChjYWxsYmFja3MpKTsKKyAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50
ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVy
LAorICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5
IG9iamVjdHMuCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJv
eHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9u
KTsKKyAgICBtX3dlYklEQkluZGV4LT5nZXQoa2V5LCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChj
YWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCSW5kZXhCYWNrZW5kUHJveHkuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCSW5kZXhC
YWNrZW5kUHJveHkuaAppbmRleCA2YWFmZGZhYzk3ZTg4Nzg0YzQxOTkzMjUzNmIyZGM2ODQ2YmE5
ZjQ1Li4wMzFlZDQwODdjNGVkNmZmNWVhNzQxN2NhZjg5NWE1NTE1NjAzNzgzIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkluZGV4QmFja2VuZFByb3h5LmgKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJJbmRleEJhY2tlbmRQcm94eS5oCkBAIC00NiwxMCArNDYsMTAgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKTsKICAgICB2aXJ0dWFsIGJvb2wg
dW5pcXVlKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgb3Blbk9iamVjdEN1cnNvcihQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4pOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
Pik7Ci0gICAgdmlydHVhbCB2b2lkIGdldE9iamVjdChQYXNzUmVmUHRyPElEQktleT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElE
QktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIG9wZW5P
YmplY3RDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVj
dGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBnZXRP
YmplY3QoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSopOwogCiBwcml2YXRlOgogICAgIElEQkluZGV4QmFja2VuZFByb3h5KFBh
c3NPd25QdHI8V2ViS2l0OjpXZWJJREJJbmRleD4pOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JREJPYmplY3RTdG9yZVByb3h5LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
T2JqZWN0U3RvcmVQcm94eS5jcHAKaW5kZXggODJjYTVmNjZjZjA5N2ZjMzkwODZkYmU2NDNlNjNk
YWI2ZmY4ZmNmZC4uNjlhYThjYTg5NTA1MGQ1MWU3MjJiYTJlNWJiNDk4YTUwOGFhOWZhNyAxMDA3
NTUKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZVByb3h5LmNwcAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlUHJveHkuY3BwCkBAIC04MCwxOSAr
ODAsMjggQEAgdm9pZCBJREJPYmplY3RTdG9yZVByb3h5OjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGMKICAgICBtX3dlYklEQk9iamVjdFN0b3Jl
LT5nZXQoa2V5LCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rp
b25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3Rv
cmVQcm94eTo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgYm9vbCBhZGRPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQordm9pZCBJREJPYmplY3RTdG9yZVByb3h5OjpwdXQoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBib29s
IGFkZE9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCiB7Ci0gICAgbV93ZWJJREJPYmplY3RT
dG9yZS0+cHV0KHZhbHVlLCBrZXksIGFkZE9ubHksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNh
bGxiYWNrcykpOworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQg
dG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisg
ICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2Jq
ZWN0cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9
IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOwor
ICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBhZGRPbmx5LCBuZXcgV2Vi
SURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURC
VHJhbnNhY3Rpb24oKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVQcm94eTo6cmVtb3ZlKFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
Cit2b2lkIElEQk9iamVjdFN0b3JlUHJveHk6OnJlbW92ZShQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnJl
bW92ZShrZXksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOworICAgIC8vIFRo
ZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEg
cHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxlbWVudGF0
aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5z
YWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOworICAgIG1fd2ViSURCT2JqZWN0U3Rv
cmUtPnJlbW92ZShrZXksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFu
c2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpKTsKIH0KIAotdm9pZCBJREJPYmpl
Y3RTdG9yZVByb3h5OjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCit2b2lkIElEQk9iamVjdFN0b3JlUHJveHk6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvbikKIHsKLSAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5jcmVhdGVJbmRleChuYW1lLCBr
ZXlQYXRoLCB1bmlxdWUsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOworICAg
IC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVy
IHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxl
bWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJU
cmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElE
QlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOworICAgIG1fd2ViSURCT2Jq
ZWN0U3RvcmUtPmNyZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbmV3IFdlYklEQkNh
bGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5z
YWN0aW9uKCkpOwogfQogCiBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURC
T2JqZWN0U3RvcmVQcm94eTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtMTAzLDE0ICsx
MTIsMjAgQEAgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0
b3JlUHJveHk6OmluZGV4KGNvbnN0IFN0cmluZyYgbmEKICAgICByZXR1cm4gSURCSW5kZXhCYWNr
ZW5kUHJveHk6OmNyZWF0ZShpbmRleCk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVQcm94eTo6
cmVtb3ZlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQordm9pZCBJREJPYmplY3RTdG9yZVByb3h5OjpyZW1vdmVJbmRleChjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCiB7Ci0gICAgbV93ZWJJREJPYmpl
Y3RTdG9yZS0+cmVtb3ZlSW5kZXgobmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJh
Y2tzKSk7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBi
ZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAv
LyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3Rz
LgorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3Rh
dGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAg
bV93ZWJJREJPYmplY3RTdG9yZS0+cmVtb3ZlSW5kZXgobmFtZSwgbmV3IFdlYklEQkNhbGxiYWNr
c0ltcGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9u
KCkpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlUHJveHk6Om9wZW5DdXJzb3IoUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCT2JqZWN0U3RvcmVQcm94eTo6b3Bl
bkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgZGly
ZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewotICAgIG1fd2ViSURCT2JqZWN0U3Rv
cmUtPm9wZW5DdXJzb3IocmFuZ2UsIGRpcmVjdGlvbiwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwo
Y2FsbGJhY2tzKSk7CisgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVl
ZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwK
KyAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBv
YmplY3RzLgorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5
ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7
CisgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+b3BlbkN1cnNvcihyYW5nZSwgZGlyZWN0aW9uLCBu
ZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0
V2ViSURCVHJhbnNhY3Rpb24oKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVQcm94eS5oIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZVByb3h5LmgKaW5kZXggMTNkZmUyMzZkZTZlZTQ1
YzVhNWYxOGM0NjY3NjE2N2Q0NDIzMGJiMi4uODBlNDY2OGM1ZWQwNWE5MDEyZTllYWI5ZjBlN2Ux
NTc5MGFjNzhhNCAxMDA3NTUKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9y
ZVByb3h5LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZVByb3h5LmgK
QEAgLTQwLDIxICs0MCwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJREJPYmplY3RT
dG9yZVByb3h5IDogcHVibGljIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZSB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
PiBjcmVhdGUoUGFzc093blB0cjxXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlPik7Ci0gICAgfklE
Qk9iamVjdFN0b3JlUHJveHkoKTsKKyAgICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZVByb3h5KCk7
CiAKLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwotICAgIFN0cmluZyBrZXlQYXRoKCkgY29uc3Q7
Ci0gICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzKCkgY29uc3Q7CisgICAg
dmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1l
cygpIGNvbnN0OwogCi0gICAgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKLSAg
ICB2b2lkIHB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIGJvb2wgYWRkT25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
KTsKLSAgICB2b2lkIHJlbW92ZShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSop
OworICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
LCBQYXNzUmVmUHRyPElEQktleT4sIGJvb2wgYWRkT25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKIAotICAgIHZvaWQgY3JlYXRlSW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlPiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgcmVtb3ZlSW5kZXgo
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCwgYm9vbCB1bmlxdWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwogCi0gICAgdmlydHVhbCB2b2lk
IG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0
IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQg
b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0
aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSopOwogCiBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlUHJveHkoUGFzc093blB0cjxX
ZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlPik7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuY3BwCmluZGV4IDU5ZTg4ZDg5M2UxNTJlNzU5YWQx
YzA2YTFiYzBmYWE1YmU4MzhiMjguLjgxYjdjZWVhZWY3YzQ0YzZiY2VmZjA3NGNhNGUzMGZlZDI1
MWZkNjcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kUHJveHkuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kUHJveHkuY3BwCkBAIC00NSw2ICs0NSw4IEBAIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6Y3JlYXRlKFBhCiBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkoUGFz
c093blB0cjxXZWJLaXQ6OldlYklEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbikKICAgICA6IG1f
d2ViSURCVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiB7CisgICAgaWYgKCFtX3dlYklEQlRyYW5z
YWN0aW9uKQorICAgICAgICBtX3dlYklEQlRyYW5zYWN0aW9uID0gYWRvcHRQdHIobmV3IFdlYktp
dDo6V2ViSURCVHJhbnNhY3Rpb24oKSk7CiB9CiAKIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5
Ojp+SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCQ2FsbGJhY2tzSW1wbC5jcHAKaW5kZXggZmU2Nzc4OWE1MTdkZTFmYjY1ODQ2OTNlMmRjY2Y5
ZmM0YWM3MzQxYi4uMTRlZDAyZWU1ZWY4MjAyNjRhYWM2MTk1NTFmNDdiOTc4NGZhYzYyNSAxMDA2
NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkNhbGxiYWNrc0ltcGwuY3BwCkBAIC0zMywxMiAr
MzMsMTQgQEAKICNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRQcm94eS5oIgogI2luY2x1ZGUgIklE
QktleS5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlUHJveHkuaCIKKyNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oIgogI2luY2x1ZGUgIldlYklEQkNhbGxiYWNrcy5oIgog
I2luY2x1ZGUgIldlYklEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiV2ViSURCRGF0YWJhc2VFcnJv
ci5oIgogI2luY2x1ZGUgIldlYklEQkluZGV4LmgiCiAjaW5jbHVkZSAiV2ViSURCS2V5LmgiCiAj
aW5jbHVkZSAiV2ViSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJXZWJJREJUcmFuc2FjdGlv
bi5oIgogI2luY2x1ZGUgIldlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogCiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCkBAIC04OSw2ICs5MSwxMSBAQCB2b2lkIFdlYklEQkNhbGxiYWNr
c0ltcGw6Om9uU3VjY2VzcyhXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlKiB3ZWJLaXRJbnN0YW5j
ZSkKICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKElEQk9iamVjdFN0b3JlUHJveHk6OmNyZWF0
ZSh3ZWJLaXRJbnN0YW5jZSkpOwogfQogCit2b2lkIFdlYklEQkNhbGxiYWNrc0ltcGw6Om9uU3Vj
Y2VzcyhXZWJLaXQ6OldlYklEQlRyYW5zYWN0aW9uKiB3ZWJLaXRJbnN0YW5jZSkKK3sKKyAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpjcmVhdGUo
d2ViS2l0SW5zdGFuY2UpKTsKK30KKwogdm9pZCBXZWJJREJDYWxsYmFja3NJbXBsOjpvblN1Y2Nl
c3MoY29uc3QgV2ViS2l0OjpXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSkKIHsKICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkNhbGxiYWNrc0lt
cGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ2FsbGJhY2tzSW1wbC5oCmluZGV4IDE4
MzVjNjBjMmM0NWZkYzIwODFlOTlmNmQ3NDgwZGYxYWU0OTFkY2EuLjMzYTcyZjQ3MzQ2Mjg2NjRm
NDNjZjJjOGVhZTEzNmRlMGRhZDkwMjAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSURCQ2FsbGJhY2tzSW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ2Fs
bGJhY2tzSW1wbC5oCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
b25TdWNjZXNzKGNvbnN0IFdlYktpdDo6V2ViSURCS2V5Jik7CiAgICAgdmlydHVhbCB2b2lkIG9u
U3VjY2VzcyhXZWJLaXQ6OldlYklEQkluZGV4Kik7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vz
cyhXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlKik7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vz
cyhXZWJLaXQ6OldlYklEQlRyYW5zYWN0aW9uKik7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vz
cyhjb25zdCBXZWJLaXQ6OldlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYpOwogCiBwcml2YXRlOgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwCmluZGV4IDg4NzBmZjk0
Y2ViOTJlYjY5YTQyYjlmMWZhODBmNDQ2OTI1MTNkMmYuLmFiZTZmYmQwODE3ZDYxOTVlMGE5ZmMw
ZDk4ODQ3ZDFjMzFkNTRkNzYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
RGF0YWJhc2VJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNl
SW1wbC5jcHAKQEAgLTY5LDkgKzY5LDkgQEAgV2ViRE9NU3RyaW5nTGlzdCBXZWJJREJEYXRhYmFz
ZUltcGw6Om9iamVjdFN0b3JlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGF0YWJhc2VCYWNrZW5k
LT5vYmplY3RTdG9yZXMoKTsKIH0KIAotdm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmNyZWF0ZU9i
amVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBrZXlQYXRo
LCBib29sIGF1dG9JbmNyZW1lbnQsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzKQordm9pZCBX
ZWJJREJEYXRhYmFzZUltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgY29uc3QgV2ViU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIFdlYklEQkNh
bGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24p
CiB7Ci0gICAgbV9kYXRhYmFzZUJhY2tlbmQtPmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBh
dGgsIGF1dG9JbmNyZW1lbnQsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoY2FsbGJhY2tzKSk7
CisgICAgbV9kYXRhYmFzZUJhY2tlbmQtPmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgs
IGF1dG9JbmNyZW1lbnQsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoY2FsbGJhY2tzKSwgdHJh
bnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkpOwogfQogCiBXZWJJ
REJPYmplY3RTdG9yZSogV2ViSURCRGF0YWJhc2VJbXBsOjpvYmplY3RTdG9yZShjb25zdCBXZWJT
dHJpbmcmIG5hbWUsIHVuc2lnbmVkIHNob3J0IG1vZGUpCkBAIC04Miw5ICs4Miw5IEBAIFdlYklE
Qk9iamVjdFN0b3JlKiBXZWJJREJEYXRhYmFzZUltcGw6Om9iamVjdFN0b3JlKGNvbnN0IFdlYlN0
cmluZyYgbmFtZSwgdW5zaWduCiAgICAgcmV0dXJuIG5ldyBXZWJJREJPYmplY3RTdG9yZUltcGwo
b2JqZWN0U3RvcmUpOwogfQogCi12b2lkIFdlYklEQkRhdGFiYXNlSW1wbDo6cmVtb3ZlT2JqZWN0
U3RvcmUoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcykK
K3ZvaWQgV2ViSURCRGF0YWJhc2VJbXBsOjpyZW1vdmVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJp
bmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24pCiB7Ci0gICAgbV9kYXRhYmFzZUJhY2tlbmQtPnJlbW92ZU9iamVj
dFN0b3JlKG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoY2FsbGJhY2tzKSk7CisgICAg
bV9kYXRhYmFzZUJhY2tlbmQtPnJlbW92ZU9iamVjdFN0b3JlKG5hbWUsIElEQkNhbGxiYWNrc1By
b3h5OjpjcmVhdGUoY2FsbGJhY2tzKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKCkpOwogfQogCiB2b2lkIFdlYklEQkRhdGFiYXNlSW1wbDo6c2V0VmVyc2lv
bihjb25zdCBXZWJTdHJpbmcmIHZlcnNpb24sIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzKQpA
QCAtMTAxLDYgKzEwMSwxMSBAQCBXZWJJREJUcmFuc2FjdGlvbiogV2ViSURCRGF0YWJhc2VJbXBs
Ojp0cmFuc2FjdGlvbihjb25zdCBXZWJET01TdHJpbmdMaXN0JiBuYW1lcwogICAgIHJldHVybiBu
ZXcgV2ViSURCVHJhbnNhY3Rpb25JbXBsKHRyYW5zYWN0aW9uKTsKIH0KIAordm9pZCBXZWJJREJE
YXRhYmFzZUltcGw6OmNsb3NlKCkKK3sKKyAgICBtX2RhdGFiYXNlQmFja2VuZC0+Y2xvc2UoKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNl
SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuaAppbmRleCBl
MGVhYWE1OGJmOWVlMDM2YTJjZTgyNWYyYjkzNGI0ZTYxMjEyMTQ4Li4yMjc0ZTQ4Y2ZkNTk4MDU1
YTMzMTdkNTg2ODQ0ZmM0ZDFlNmJkOGI5IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYklEQkRhdGFiYXNlSW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0
YWJhc2VJbXBsLmgKQEAgLTQ5LDExICs0OSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJT
dHJpbmcgdmVyc2lvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViRE9NU3RyaW5nTGlzdCBvYmpl
Y3RTdG9yZXMoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShj
b25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRv
SW5jcmVtZW50LCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcyk7CisgICAgdmlydHVhbCB2b2lk
IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5n
JiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tz
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpOwogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3Rv
cmUqIG9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgdW5zaWduZWQgc2hvcnQgbW9k
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYg
bmFtZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MpOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2Fs
bGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRW
ZXJzaW9uKGNvbnN0IFdlYlN0cmluZyYgdmVyc2lvbiwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFj
a3MpOwogICAgIHZpcnR1YWwgV2ViSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKGNvbnN0IFdl
YkRPTVN0cmluZ0xpc3QmIG5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25n
IHRpbWVvdXQpOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogCiBwcml2YXRlOgogICAgIFdU
Rjo6UmVmUHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gbV9kYXRhYmFz
ZUJhY2tlbmQ7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkluZGV4SW1w
bC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkluZGV4SW1wbC5jcHAKaW5kZXggYzA0
OWFhYzRiOGJkMDY0OTRlNjBiNjQzNjBlNDczYjJmN2YwOTIwZi4uODc5NTc3ODFhNWJhYjYxNTU1
M2Q4OTQ5ZTY2YTlkMmYwNWI3MmVmMyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJJbmRleEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCSW5kZXhJ
bXBsLmNwcApAQCAtNjgsMjQgKzY4LDI0IEBAIGJvb2wgV2ViSURCSW5kZXhJbXBsOjp1bmlxdWUo
KSBjb25zdAogICAgIHJldHVybiBtX2JhY2tlbmQtPnVuaXF1ZSgpOwogfQogCi12b2lkIFdlYklE
QkluZGV4SW1wbDo6b3BlbkN1cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYga2V5UmFuZ2UsIHVu
c2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MpCit2b2lk
IFdlYklEQkluZGV4SW1wbDo6b3BlbkN1cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYga2V5UmFu
Z2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3Ms
IGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKLSAgICBtX2JhY2tlbmQt
Pm9wZW5DdXJzb3Ioa2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0
ZShjYWxsYmFja3MpKTsKKyAgICBtX2JhY2tlbmQtPm9wZW5DdXJzb3Ioa2V5UmFuZ2UsIGRpcmVj
dGlvbiwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShjYWxsYmFja3MpLCB0cmFuc2FjdGlvbi5n
ZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSk7CiB9CiAKLXZvaWQgV2ViSURCSW5k
ZXhJbXBsOjpvcGVuT2JqZWN0Q3Vyc29yKGNvbnN0IFdlYklEQktleVJhbmdlJiBrZXlSYW5nZSwg
dW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcykKK3Zv
aWQgV2ViSURCSW5kZXhJbXBsOjpvcGVuT2JqZWN0Q3Vyc29yKGNvbnN0IFdlYklEQktleVJhbmdl
JiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBXZWJJREJDYWxsYmFja3MqIGNh
bGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQogewotICAgIG1f
YmFja2VuZC0+b3Blbk9iamVjdEN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJDYWxsYmFj
a3NQcm94eTo6Y3JlYXRlKGNhbGxiYWNrcykpOworICAgIG1fYmFja2VuZC0+b3Blbk9iamVjdEN1
cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGNhbGxi
YWNrcyksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpKTsK
IH0KIAotdm9pZCBXZWJJREJJbmRleEltcGw6OmdldE9iamVjdChjb25zdCBXZWJJREJLZXkmIGtl
eVJhbmdlLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcykKK3ZvaWQgV2ViSURCSW5kZXhJbXBs
OjpnZXRPYmplY3QoY29uc3QgV2ViSURCS2V5JiBrZXlSYW5nZSwgV2ViSURCQ2FsbGJhY2tzKiBj
YWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKLSAgICBt
X2JhY2tlbmQtPmdldE9iamVjdChrZXlSYW5nZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShj
YWxsYmFja3MpKTsKKyAgICBtX2JhY2tlbmQtPmdldE9iamVjdChrZXlSYW5nZSwgSURCQ2FsbGJh
Y2tzUHJveHk6OmNyZWF0ZShjYWxsYmFja3MpLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UoKSk7CiB9CiAKLXZvaWQgV2ViSURCSW5kZXhJbXBsOjpnZXQoY29u
c3QgV2ViSURCS2V5JiBrZXlSYW5nZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MpCit2b2lk
IFdlYklEQkluZGV4SW1wbDo6Z2V0KGNvbnN0IFdlYklEQktleSYga2V5UmFuZ2UsIFdlYklEQkNh
bGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24p
CiB7Ci0gICAgbV9iYWNrZW5kLT5nZXQoa2V5UmFuZ2UsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVh
dGUoY2FsbGJhY2tzKSk7CisgICAgbV9iYWNrZW5kLT5nZXQoa2V5UmFuZ2UsIElEQkNhbGxiYWNr
c1Byb3h5OjpjcmVhdGUoY2FsbGJhY2tzKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkluZGV4SW1wbC5oIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJJbmRleEltcGwuaAppbmRleCAyMTA4MDAxY2NkYzJmNzk4ZWYwOGRlYmQ3
ODk4NzllMmJiMzJhOTA5Li5jYjJlZmM3NzU2YzFiOGRlOGJkYjM2YzY0YzliNjlhYmNiMjcyNDli
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkluZGV4SW1wbC5oCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCSW5kZXhJbXBsLmgKQEAgLTQ2LDEwICs0NiwxMCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJTdHJpbmcga2V5UGF0aCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCB1bmlxdWUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBvcGVuT2JqZWN0
Q3Vyc29yKGNvbnN0IFdlYklEQktleVJhbmdlJiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBX
ZWJJREJDYWxsYmFja3MqKTsgCi0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoY29uc3QgV2Vi
SURCS2V5UmFuZ2UmLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyop
OwotICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3QoY29uc3QgV2ViSURCS2V5JiwgV2ViSURCQ2Fs
bGJhY2tzKik7Ci0gICAgdmlydHVhbCB2b2lkIGdldChjb25zdCBXZWJJREJLZXkmLCBXZWJJREJD
YWxsYmFja3MqKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbk9iamVjdEN1cnNvcihjb25zdCBXZWJJ
REJLZXlSYW5nZSYsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiwg
Y29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKTsgCisgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3Io
Y29uc3QgV2ViSURCS2V5UmFuZ2UmLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFdlYklEQkNh
bGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIGdl
dE9iamVjdChjb25zdCBXZWJJREJLZXkmLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCBnZXQoY29uc3QgV2ViSURCS2V5JiwgV2Vi
SURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKTsKIAogcHJpdmF0ZToKICAg
ICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2Vu
ZDsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBs
LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcAppbmRl
eCAzNmQ4YWNlNGU5ZDJlZjA0MTEyYjRmMmMxMDA4Zjc4ZWVjYmRhYzZhLi4zY2Y3ZjI1NzllYTcz
OTZjZTUyYTFmOTA0ZDM0NDcwYjBjZWUxYTNmIDEwMDc1NQotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJPYmplY3RTdG9yZUltcGwuY3BwCkBAIC03MSwxOSArNzEsMTkgQEAgdm9pZCBXZWJJREJP
YmplY3RTdG9yZUltcGw6OmdldChjb25zdCBXZWJJREJLZXkmIGtleSwgV2ViSURCQ2FsbGJhY2tz
KiBjYWxsYmFja3MKICAgICBtX29iamVjdFN0b3JlLT5nZXQoa2V5LCBJREJDYWxsYmFja3NQcm94
eTo6Y3JlYXRlKGNhbGxiYWNrcyksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSgpKTsKIH0KIAotdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnB1dChjb25z
dCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJREJLZXkmIGtleSwg
Ym9vbCBhZGRPbmx5LCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcykKK3ZvaWQgV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsOjpwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwg
Y29uc3QgV2ViSURCS2V5JiBrZXksIGJvb2wgYWRkT25seSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKLSAgICBtX29i
amVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgYWRkT25seSwgSURCQ2FsbGJhY2tzUHJveHk6OmNy
ZWF0ZShjYWxsYmFja3MpKTsKKyAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgYWRk
T25seSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShjYWxsYmFja3MpLCB0cmFuc2FjdGlvbi5n
ZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSk7CiB9CiAKLXZvaWQgV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsOjpyZW1vdmUoY29uc3QgV2ViSURCS2V5JiBrZXksIFdlYklEQkNhbGxiYWNr
cyogY2FsbGJhY2tzKQordm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnJlbW92ZShjb25zdCBX
ZWJJREJLZXkmIGtleSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKLSAgICBtX29iamVjdFN0b3JlLT5yZW1vdmUoa2V5
LCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGNhbGxiYWNrcykpOworICAgIG1fb2JqZWN0U3Rv
cmUtPnJlbW92ZShrZXksIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoY2FsbGJhY2tzKSwgdHJh
bnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkpOwogfQogCi12b2lk
IFdlYklEQk9iamVjdFN0b3JlSW1wbDo6Y3JlYXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBjb25zdCBXZWJTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBXZWJJREJDYWxsYmFja3Mq
IGNhbGxiYWNrcykKK3ZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpjcmVhdGVJbmRleChjb25z
dCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUs
IFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24pCiB7Ci0gICAgbV9vYmplY3RTdG9yZS0+Y3JlYXRlSW5kZXgobmFtZSwga2V5UGF0
aCwgdW5pcXVlLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGNhbGxiYWNrcykpOworICAgIG1f
b2JqZWN0U3RvcmUtPmNyZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgSURCQ2FsbGJh
Y2tzUHJveHk6OmNyZWF0ZShjYWxsYmFja3MpLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UoKSk7CiB9CiAKIFdlYklEQkluZGV4KiBXZWJJREJPYmplY3RTdG9y
ZUltcGw6OmluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKQEAgLTk0LDE0ICs5NCwxNCBAQCBX
ZWJJREJJbmRleCogV2ViSURCT2JqZWN0U3RvcmVJbXBsOjppbmRleChjb25zdCBXZWJTdHJpbmcm
IG5hbWUpCiAgICAgcmV0dXJuIG5ldyBXZWJJREJJbmRleEltcGwoaW5kZXgpOwogfQogCi12b2lk
IFdlYklEQk9iamVjdFN0b3JlSW1wbDo6cmVtb3ZlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcykKK3ZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBs
OjpyZW1vdmVJbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2Fs
bGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7Ci0gICAgbV9v
YmplY3RTdG9yZS0+cmVtb3ZlSW5kZXgobmFtZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShj
YWxsYmFja3MpKTsKKyAgICBtX29iamVjdFN0b3JlLT5yZW1vdmVJbmRleChuYW1lLCBJREJDYWxs
YmFja3NQcm94eTo6Y3JlYXRlKGNhbGxiYWNrcyksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSgpKTsKIH0KIAotdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6
Om9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2UmIGtleVJhbmdlLCB1bnNpZ25lZCBzaG9y
dCBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzKQordm9pZCBXZWJJREJPYmpl
Y3RTdG9yZUltcGw6Om9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2UmIGtleVJhbmdlLCB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25z
dCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7Ci0gICAgbV9vYmplY3RTdG9yZS0+
b3BlbkN1cnNvcihJREJLZXlSYW5nZTo6Y3JlYXRlKGtleVJhbmdlLmxlZnQoKSwga2V5UmFuZ2Uu
cmlnaHQoKSwga2V5UmFuZ2UuZmxhZ3MoKSksIGRpcmVjdGlvbiwgSURCQ2FsbGJhY2tzUHJveHk6
OmNyZWF0ZShjYWxsYmFja3MpKTsKKyAgICBtX29iamVjdFN0b3JlLT5vcGVuQ3Vyc29yKElEQktl
eVJhbmdlOjpjcmVhdGUoa2V5UmFuZ2UubGVmdCgpLCBrZXlSYW5nZS5yaWdodCgpLCBrZXlSYW5n
ZS5mbGFncygpKSwgZGlyZWN0aW9uLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGNhbGxiYWNr
cyksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJREJPYmplY3RTdG9yZUltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsLmgKaW5kZXggYTlmMTIwMGM5ZmM0ZDg2MWQyZWY1Zjc5ZTk0NDIxOTYxM2U2
NDY5OS4uNzZlNDE0YjVjM2VmNTNjMWY3ZGE4MGUxOWZmZWYyOTQyNGE0N2VkZCAxMDA3NTUKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuaAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCkBAIC00OCwxNCArNDgsMTQg
QEAgcHVibGljOgogICAgIFdlYkRPTVN0cmluZ0xpc3QgaW5kZXhOYW1lcygpIGNvbnN0OwogCiAg
ICAgdm9pZCBnZXQoY29uc3QgV2ViSURCS2V5JiBrZXksIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0
IFdlYklEQlRyYW5zYWN0aW9uJik7Ci0gICAgdm9pZCBwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNj
cmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgV2ViSURCS2V5JiBrZXksIGJvb2wgYWRkT25seSwgV2Vi
SURCQ2FsbGJhY2tzKik7Ci0gICAgdm9pZCByZW1vdmUoY29uc3QgV2ViSURCS2V5JiBrZXksIFdl
YklEQkNhbGxiYWNrcyopOworICAgIHZvaWQgcHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSYsIGNvbnN0IFdlYklEQktleSYga2V5LCBib29sIGFkZE9ubHksIFdlYklEQkNhbGxiYWNr
cyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7CisgICAgdm9pZCByZW1vdmUoY29uc3QgV2Vi
SURCS2V5JiBrZXksIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7
CiAKLSAgICB2b2lkIGNyZWF0ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2Vi
U3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3Mp
OworICAgIHZvaWQgY3JlYXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJT
dHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJ
REJUcmFuc2FjdGlvbiYpOwogICAgIFdlYklEQkluZGV4KiBpbmRleChjb25zdCBXZWJTdHJpbmcm
IG5hbWUpOwotICAgIHZvaWQgcmVtb3ZlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJ
REJDYWxsYmFja3MqIGNhbGxiYWNrcyk7CisgICAgdm9pZCByZW1vdmVJbmRleChjb25zdCBXZWJT
dHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7
CiAKLSAgICB2b2lkIG9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2UmLCB1bnNpZ25lZCBz
aG9ydCBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyopOworICAgIHZvaWQgb3BlbkN1cnNvcihj
b25zdCBXZWJJREJLZXlSYW5nZSYsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgV2ViSURCQ2Fs
bGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKTsKIAogIHByaXZhdGU6CiAgICAgV1RG
OjpSZWZQdHI8V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBtX29iamVj
dFN0b3JlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69335</attachid>
            <date>2010-09-30 08:01:49 -0700</date>
            <delta_ts>2010-09-30 09:28:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46823-20100930160141.patch</filename>
            <type>text/plain</type>
            <size>177605</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5MTZmODZhMzRhZGQ1ZWE1YTQyYzVhMDVjY2ViZjYyODc1NTA3NjY2Li5kZWE3ZDFk
MWI2MjUzMWU5YjM4N2UzMjkyZDRhOWVhZmUwMTU1NjI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMTAtMDktMjkgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmluaXNoZWQgSURCVHJh
bnNhY3Rpb24gZm9yIEluZGV4ZWREQgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDY4MjMKKworICAgICAgICBBIGJpdCBvZiBjbGVhbnVwICsgdXNlIHNl
dFZlcnNpb24gdHJhbnNhY3Rpb25zIGZvciBhbGwgb2Ygb3VyIHdvcmsuCisKKyAgICAgICAgKiBz
dG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1iYXNpY3MuaHRtbDoKKyAgICAgICAgKiBzdG9yYWdl
L2luZGV4ZWRkYi9pbmRleC1iYXNpY3MuaHRtbDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRk
Yi9pbmRleC1jdXJzb3IuaHRtbDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3Rz
dG9yZS1iYXNpY3MuaHRtbDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9y
ZS1jdXJzb3IuaHRtbDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1y
ZW1vdmVvYmplY3RzdG9yZS5odG1sOgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29wZW4t
Y3Vyc29yLmh0bWw6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tYmFz
aWNzLmh0bWw6CisKIDIwMTAtMDktMjkgIFcuIEphbWVzIE1hY0xlYW4gIDx3am1hY2xlYW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZGF0YWJhc2UtYmFzaWNzLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLWJhc2ljcy1l
eHBlY3RlZC50eHQKaW5kZXggNDJjOTg3OWY3ZDhmZTdmNzM0YzY1YzNkNTE1ZjQzZWQyNzNjZmEw
YS4uOTdlYzcyMTkyODI3MDM4MGYzZjRhNGRlY2M5OTAyNTViYzFiOTA2YSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZGF0YWJhc2UtYmFzaWNzLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1iYXNpY3MtZXhw
ZWN0ZWQudHh0CkBAIC0yMSw2ICsyMSwyNiBAQCBQQVNTICdyZWFkeVN0YXRlJyBpbiBldmVudC50
YXJnZXQgaXMgdHJ1ZQogUEFTUyBldmVudC50YXJnZXQucmVhZHlTdGF0ZSBpcyBldmVudC50YXJn
ZXQuRE9ORQogCiBkYiA9IGV2ZW50LnJlc3VsdAorZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24n
KQorUEFTUyAnb25zdWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4g
cmVzdWx0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0cnVlCitBbiBl
dmVudCBzaG91bGQgZmlyZSBzaG9ydGx5Li4uCisKK3NldFZlcnNpb25TdWNjZXNzKCk6CitTdWNj
ZXNzIGV2ZW50IGZpcmVkOgorUEFTUyAncmVzdWx0JyBpbiBldmVudCBpcyB0cnVlCitQQVNTICdj
b2RlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnbWVzc2FnZScgaW4gZXZlbnQgaXMgZmFsc2UK
K1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyBldmVudC5zb3VyY2UgIT0gbnVs
bCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNT
ICdvbmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4g
ZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgaXMgZXZl
bnQudGFyZ2V0LkRPTkUKKwordHJhbnMgPSBldmVudC5yZXN1bHQKK1BBU1MgdHJhbnMgIT09IG51
bGwgaXMgdHJ1ZQogVGVzdGluZyBzZXRWZXJzaW9uLgogZGIuc2V0VmVyc2lvbigidmVyc2lvbiBh
IikKIFBBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLWJhc2ljcy5odG1sIGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvZGF0YWJhc2UtYmFzaWNzLmh0bWwKaW5kZXggYjA5OWE0OTFj
YWJhY2I0MTgyMTY4Mjg5OWZhODU1YjFiMzZhNWJhYy4uODUwZDMwZGI0NmExZjVkZGYxYzVmMTQ3
Yzk1N2E1YjAyMWNlN2EzOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvZGF0YWJhc2UtYmFzaWNzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvZGF0YWJhc2UtYmFzaWNzLmh0bWwKQEAgLTE0LDE4ICsxNCwzOCBAQCBkZXNjcmlwdGlvbigi
VGVzdCB0aGUgYmFzaWNzIG9mIEluZGV4ZWREQidzIElEQkRhdGFiYXNlLiIpOwogaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgCiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOwogCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICByZXN1bHQgPSBldmFsQW5kTG9n
KCJpbmRleGVkREIub3BlbignbmFtZScsICdkZXNjcmlwdGlvbicpIik7CisgICAgdmVyaWZ5UmVz
dWx0KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNzOworICAgIHJl
c3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKIGZ1bmN0aW9uIG9w
ZW5TdWNjZXNzKCkKIHsKICAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOworICAgIHdpbmRv
dy5kYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CisKKyAgICByZXN1bHQgPSBl
dmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpIik7CisgICAgdmVyaWZ5UmVz
dWx0KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IHNldFZlcnNpb25TdWNjZXNzOwor
ICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CiAKLSAgICB2
YXIgZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnJlc3VsdCIpOwotICAgIGRlbGV0ZUFsbE9i
amVjdFN0b3JlcyhkYik7CitmdW5jdGlvbiBzZXRWZXJzaW9uU3VjY2VzcygpCit7CisgICAgZGVi
dWcoInNldFZlcnNpb25TdWNjZXNzKCk6Iik7CisgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50
KTsKKyAgICB3aW5kb3cudHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGV2ZW50LnJlc3VsdCIp
OworICAgIHNob3VsZEJlVHJ1ZSgidHJhbnMgIT09IG51bGwiKTsKKyAgICB0cmFucy5vbmFib3J0
ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7CiAKLSAgICAvLyBXZSBtdXN0IGRvIHNvbWV0aGlu
ZyBhc3luY2hyb25vdXMgYmVmb3JlIGFueXRoaW5nIHN5bmNocm9ub3VzIHNpbmNlCi0gICAgLy8g
ZGVsZXRlQWxsT2JqZWN0U3RvcmVzIG9ubHkgc2NoZWR1bGVzIHRoZSBvYmplY3Qgc3RvcmVzIHRv
IGJlIHJlbW92ZWQuCi0gICAgLy8gV2UgZG9uJ3Qga25vdyBmb3Igc3VyZSB3aGV0aGVyIGl0J3Mg
aGFwcGVuZWQgdW50aWwgYW4gSURCUmVxdWVzdCBvYmplY3QKLSAgICAvLyB0aGF0IHdhcyBjcmVh
dGVkIGFmdGVyIHRoZSByZW1vdmVzIGZpcmVzLgorICAgIGRlbGV0ZUFsbE9iamVjdFN0b3Jlcyhk
YiwgdGVzdFNldFZlcnNpb24pOworfQogCitmdW5jdGlvbiB0ZXN0U2V0VmVyc2lvbigpCit7CiAg
ICAgZGVidWcoIlRlc3Rpbmcgc2V0VmVyc2lvbi4iKTsKICAgICByZXN1bHQgPSBldmFsQW5kTG9n
KCdkYi5zZXRWZXJzaW9uKCJ2ZXJzaW9uIGEiKScpOwogICAgIHZlcmlmeVJlc3VsdChyZXN1bHQp
OwpAQCAtNzAsMTQgKzkwLDYgQEAgZnVuY3Rpb24gY2hlY2tPYmplY3RTdG9yZSgpCiAgICAgZG9u
ZSgpOwogfQogCi1mdW5jdGlvbiB0ZXN0KCkKLXsKLSAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJp
bmRleGVkREIub3BlbignbmFtZScsICdkZXNjcmlwdGlvbicpIik7Ci0gICAgdmVyaWZ5UmVzdWx0
KHJlc3VsdCk7Ci0gICAgcmVzdWx0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNzOwotICAgIHJlc3Vs
dC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Ci19Ci0KIHRlc3QoKTsKIAogdmFy
IHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9pbmRleC1iYXNpY3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvaW5kZXgtYmFzaWNzLWV4cGVjdGVkLnR4dAppbmRleCA1NjRiZGM4N2Rk
MjA0MWE2NDE1ZjliNDY0ODZiNjU1MjgwYmQ4NGE1Li5kOGQ2ZGNjNTdiYTAyZWMyYmIwYjM4Njli
NDgyM2RiYzI4MWZjOWExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9pbmRleC1iYXNpY3MtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL2luZGV4LWJhc2ljcy1leHBlY3RlZC50eHQKQEAgLTIxLDYgKzIxLDI2IEBAIFBBU1Mg
J3JlYWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCiBQQVNTIGV2ZW50LnRhcmdldC5y
ZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCiAKIGRiID0gZXZlbnQucmVzdWx0CitkYi5z
ZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpCitQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0
cnVlCitQQVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScg
aW4gcmVzdWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHkuLi4KKworc2V0
VmVyc2lvblN1Y2Nlc3MoKToKK1N1Y2Nlc3MgZXZlbnQgZmlyZWQ6CitQQVNTICdyZXN1bHQnIGlu
IGV2ZW50IGlzIHRydWUKK1BBU1MgJ2NvZGUnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdtZXNz
YWdlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnc291cmNlJyBpbiBldmVudCBpcyB0cnVlCitQ
QVNTIGV2ZW50LnNvdXJjZSAhPSBudWxsIGlzIHRydWUKK1BBU1MgJ29uc3VjY2VzcycgaW4gZXZl
bnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIGV2ZW50LnRhcmdldCBpcyB0cnVl
CitQQVNTICdyZWFkeVN0YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyBldmVudC50
YXJnZXQucmVhZHlTdGF0ZSBpcyBldmVudC50YXJnZXQuRE9ORQorCit0cmFucyA9IGV2ZW50LnJl
c3VsdAorUEFTUyB0cmFucyAhPT0gbnVsbCBpcyB0cnVlCiBkYi5jcmVhdGVPYmplY3RTdG9yZSgn
c3RvcmVOYW1lJywgbnVsbCkKIFBBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRydWUKIFBB
U1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9pbmRleC1iYXNpY3MuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2luZGV4LWJhc2ljcy5odG1sCmluZGV4IGMyM2YxNDEwMmE5MTM0ZjhlZDY0MTFh
Yjk3NTM5NTBkNTRmODc2YWEuLjNjOGE2MDFlMzU5YTM4MGYxMzA0MmU2MTg1YTQxYjhhYTA2MTY3
MzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWJhc2lj
cy5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWJhc2ljcy5o
dG1sCkBAIC0xOCwxNyArMTgsMzQgQEAgZnVuY3Rpb24gdGVzdCgpCiB7CiAgICAgcmVzdWx0ID0g
ZXZhbEFuZExvZygiaW5kZXhlZERCLm9wZW4oJ25hbWUnLCAnZGVzY3JpcHRpb24nKSIpOwogICAg
IHZlcmlmeVJlc3VsdChyZXN1bHQpOwotICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBjcmVhdGVPYmpl
Y3RTdG9yZTsKKyAgICByZXN1bHQub25zdWNjZXNzID0gc2V0VmVyc2lvbjsKICAgICByZXN1bHQu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwogfQogCi1mdW5jdGlvbiBjcmVhdGVP
YmplY3RTdG9yZSgpCitmdW5jdGlvbiBzZXRWZXJzaW9uKCkKIHsKICAgICB2ZXJpZnlTdWNjZXNz
RXZlbnQoZXZlbnQpOwogICAgIGRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC5yZXN1bHQiKTsK
IAotICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CisgICAgcmVzdWx0ID0gZXZhbEFuZExv
ZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKSIpOworICAgIHZlcmlmeVJlc3VsdChyZXN1
bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBkZWxldGVFeGlzdGluZzsKKyAgICByZXN1bHQu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQogCitmdW5jdGlvbiBkZWxldGVF
eGlzdGluZygpCit7CisgICAgZGVidWcoInNldFZlcnNpb25TdWNjZXNzKCk6Iik7CisgICAgdmVy
aWZ5U3VjY2Vzc0V2ZW50KGV2ZW50KTsKKyAgICB3aW5kb3cudHJhbnMgPSBldmFsQW5kTG9nKCJ0
cmFucyA9IGV2ZW50LnJlc3VsdCIpOworICAgIHNob3VsZEJlVHJ1ZSgidHJhbnMgIT09IG51bGwi
KTsKKyAgICB0cmFucy5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7CisKKyAgICBk
ZWxldGVBbGxPYmplY3RTdG9yZXMoZGIsIGNyZWF0ZU9iamVjdFN0b3JlKTsKK30KKworZnVuY3Rp
b24gY3JlYXRlT2JqZWN0U3RvcmUoKQorewogICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coImRiLmNy
ZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnLCBudWxsKSIpOwogICAgIHZlcmlmeVJlc3VsdChy
ZXN1bHQpOwogICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBjcmVhdGVJbmRleDsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWN1cnNvci1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1jdXJzb3ItZXhwZWN0ZWQudHh0
CmluZGV4IDZkMTQxN2YxYWMzYjg4MzhhNjU4NDI1MjQ1MjhjODAzZWJkY2E2NzAuLjk3MjRmZDA2
NzkzODJiM2Q3ZDhlZWYyNTJjYWE1YWFhNDc2NDEwNTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWN1cnNvci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtY3Vyc29yLWV4cGVjdGVkLnR4dApAQCAtMjEs
NiArMjEsMjUgQEAgUEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKIFBB
U1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKIAogZGIgPSBl
dmVudC5yZXN1bHQKK2RiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykKK1BBU1MgJ29uc3VjY2Vz
cycgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQ
QVNTICdyZWFkeVN0YXRlJyBpbiByZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUg
c2hvcnRseS4uLgorCitTdWNjZXNzIGV2ZW50IGZpcmVkOgorUEFTUyAncmVzdWx0JyBpbiBldmVu
dCBpcyB0cnVlCitQQVNTICdjb2RlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnbWVzc2FnZScg
aW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyBl
dmVudC5zb3VyY2UgIT0gbnVsbCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50LnRh
cmdldCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFT
UyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0
LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKKwordHJhbnMgPSBldmVudC5yZXN1bHQK
K1BBU1MgdHJhbnMgIT09IG51bGwgaXMgdHJ1ZQogZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3NvbWVP
YmplY3RTdG9yZScpCiBQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCiBQQVNTICdv
bmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvaW5kZXgtY3Vyc29yLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9pbmRleC1jdXJzb3IuaHRtbAppbmRleCA5NTQxZDYwMDZhZjE4Njg2NWRkMmZkOTI0ZmY0
NjY5MTIyODE5ZDU3Li42NmI2ZGM2MzAxNWMzZDRjYTYyN2E5ZjFmNzE5NzhkNDU4NzhjNDViIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1jdXJzb3IuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1jdXJzb3IuaHRtbApA
QCAtMzEsMTcgKzMxLDMzIEBAIGZ1bmN0aW9uIG9wZW5EYXRhYmFzZSgpCiB7CiAgICAgcmVzdWx0
ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLm9wZW4oJ3NvbWVEQicsICdzb21lIGRlc2NyaXB0aW9u
JykiKTsKICAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKLSAgICByZXN1bHQub25zdWNjZXNzID0g
b3Blbk9iamVjdFN0b3JlOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBzZXRWZXJzaW9uOwogICAg
IHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CiB9CiAgCi1mdW5jdGlv
biBvcGVuT2JqZWN0U3RvcmUoKQorZnVuY3Rpb24gc2V0VmVyc2lvbigpCiB7CiAgICAgdmVyaWZ5
U3VjY2Vzc0V2ZW50KGV2ZW50KTsKICAgICB3aW5kb3cuZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2
ZW50LnJlc3VsdCIpOwogCi0gICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsKKyAgICByZXN1
bHQgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpIik7CisgICAgdmVy
aWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGRlbGV0ZUV4aXN0aW5n
OworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CiAKK2Z1
bmN0aW9uIGRlbGV0ZUV4aXN0aW5nKCkKK3sKKyAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQp
OworICAgIHdpbmRvdy50cmFucyA9IGV2YWxBbmRMb2coInRyYW5zID0gZXZlbnQucmVzdWx0Iik7
CisgICAgc2hvdWxkQmVUcnVlKCJ0cmFucyAhPT0gbnVsbCIpOworICAgIHRyYW5zLm9uYWJvcnQg
PSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKKworICAgIGRlbGV0ZUFsbE9iamVjdFN0b3Jlcyhk
YiwgY3JlYXRlT2JqZWN0U3RvcmVzKTsKK30KKworZnVuY3Rpb24gY3JlYXRlT2JqZWN0U3RvcmVz
KCkKK3sKICAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmplY3RTdG9yZSgnc29t
ZU9iamVjdFN0b3JlJykiKTsKICAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKICAgICByZXN1bHQu
b25zdWNjZXNzID0gb3BlbkluZGV4OwpAQCAtMTA1LDcgKzEyMSw3IEBAIGZ1bmN0aW9uIHNjaGVk
dWxlVGVzdHMoKQogICAgIH0KICAKICAgICBkZWJ1ZygiUnVubmluZyB0ZXN0cy4uLiIpOwotICAg
IHNldFRpbWVvdXQocnVuTmV4dFRlc3QsIDApOworICAgIHJ1bk5leHRUZXN0KCk7CiB9CiAgCiBm
dW5jdGlvbiBydW5OZXh0VGVzdCgpCkBAIC0yMTMsMTIgKzIyOSwxMiBAQCBmdW5jdGlvbiBjdXJz
b3JJdGVyYXRpb24oKQogewogICAgIGlmIChleHBlY3RlZEluZGV4ID09PSBudWxsKSB7CiAgICAg
ICAgIHNob3VsZEJlTnVsbCgiZXZlbnQucmVzdWx0Iik7Ci0gICAgICAgIHNldFRpbWVvdXQocnVu
TmV4dFRlc3QsIDApOworICAgICAgICBydW5OZXh0VGVzdCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmIChldmVudC5yZXN1bHQgPT09IG51bGwpIHsKLSAgICAgICAgdGVzdEZhaWxl
ZCgiRXZlbnQucmVzdWx0IHNob3VsZCBub3QgYmUgbnVsbC4iKQotICAgICAgICBzZXRUaW1lb3V0
KHJ1bk5leHRUZXN0LCAwKTsKKyAgICAgICAgdGVzdEZhaWxlZCgiRXZlbnQucmVzdWx0IHNob3Vs
ZCBub3QgYmUgbnVsbC4iKTsKKyAgICAgICAgcnVuTmV4dFRlc3QoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29i
amVjdHN0b3JlLWJhc2ljcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3MtZXhwZWN0ZWQudHh0CmluZGV4IDdiNTQzOWFhZTJiMmY5
NGQ4MDE4ZTc4NWE2NjM3MGUwYTI5ZDRmYzQuLjFkZjVhNGVhN2ZhZThiODVlNWFmMDQzYjUwMzRh
ZTNmNGVlY2MwOTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29i
amVjdHN0b3JlLWJhc2ljcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLWV4cGVjdGVkLnR4dApAQCAtMjIsNiArMjIsMjYg
QEAgUEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKIFBBU1MgZXZlbnQu
dGFyZ2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKIAogZGIgPSBldmVudC5yZXN1
bHQKK2RiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVz
dWx0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFk
eVN0YXRlJyBpbiByZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4u
LgorCitzZXRWZXJzaW9uU3VjY2VzcygpOgorU3VjY2VzcyBldmVudCBmaXJlZDoKK1BBU1MgJ3Jl
c3VsdCcgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyAnY29kZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BB
U1MgJ21lc3NhZ2UnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdzb3VyY2UnIGluIGV2ZW50IGlz
IHRydWUKK1BBU1MgZXZlbnQuc291cmNlICE9IG51bGwgaXMgdHJ1ZQorUEFTUyAnb25zdWNjZXNz
JyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gZXZlbnQudGFyZ2V0
IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNT
IGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCisKK3RyYW5zID0g
ZXZlbnQucmVzdWx0CitQQVNTIHRyYW5zICE9PSBudWxsIGlzIHRydWUKIGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdzdG9yZU5hbWUnLCBudWxsKQogUEFTUyAnb25zdWNjZXNzJyBpbiByZXN1bHQgaXMg
dHJ1ZQogUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy5odG1sIGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLmh0bWwKaW5kZXggYjJk
MzgzYTFiOWNmZTVhZDZmYTY1OTg1NmIzNjc2YmZiMjNiODU3Yy4uOWIwMDk0NjMyYWRhNWIxZTVh
YTBkODE1YTY0NmY0MjNkZDVhYWMzNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLmh0bWwKQEAgLTI2LDEwICsyNiwyNyBAQCBm
dW5jdGlvbiBvcGVuU3VjY2VzcygpCiB7CiAgICAgZGVidWcoIm9wZW5TdWNjZXNzKCk6Iik7CiAg
ICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50KTsKLSAgICBkYiA9IGV2YWxBbmRMb2coImRiID0g
ZXZlbnQucmVzdWx0Iik7CisgICAgd2luZG93LmRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC5y
ZXN1bHQiKTsKIAotICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CisgICAgcmVzdWx0ID0g
ZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKSIpOworICAgIHZlcmlmeVJl
c3VsdChyZXN1bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBzZXRWZXJzaW9uU3VjY2VzczsK
KyAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQogCitmdW5j
dGlvbiBzZXRWZXJzaW9uU3VjY2VzcygpCit7CisgICAgZGVidWcoInNldFZlcnNpb25TdWNjZXNz
KCk6Iik7CisgICAgdmVyaWZ5U3VjY2Vzc0V2ZW50KGV2ZW50KTsKKyAgICB3aW5kb3cudHJhbnMg
PSBldmFsQW5kTG9nKCJ0cmFucyA9IGV2ZW50LnJlc3VsdCIpOworICAgIHNob3VsZEJlVHJ1ZSgi
dHJhbnMgIT09IG51bGwiKTsKKyAgICB0cmFucy5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2Fs
bGJhY2s7CisKKyAgICBkZWxldGVBbGxPYmplY3RTdG9yZXMoZGIsIGRlbGV0ZVN1Y2Nlc3MpOwor
fQorCitmdW5jdGlvbiBkZWxldGVTdWNjZXNzKCkKK3sKICAgICByZXN1bHQgPSBldmFsQW5kTG9n
KCJkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmVOYW1lJywgbnVsbCkiKTsKICAgICB2ZXJpZnlS
ZXN1bHQocmVzdWx0KTsKICAgICByZXN1bHQub25zdWNjZXNzID0gY3JlYXRlU3VjY2VzczsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNv
ci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9y
ZS1jdXJzb3ItZXhwZWN0ZWQudHh0CmluZGV4IGU3MjExZjZkZjBlZDY5YmZhMWI4YjQ1Yjg0ZjYw
MGQ2NDA2ZjVjYzUuLmYxZjEzYWUzODYzYzRiNzBiMDE5ZmI5MjlkMWE2ZjcxYzNhZWE5ZDIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNv
ci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0
c3RvcmUtY3Vyc29yLWV4cGVjdGVkLnR4dApAQCAtMjEsNiArMjEsMjUgQEAgUEFTUyAncmVhZHlT
dGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKIFBBU1MgZXZlbnQudGFyZ2V0LnJlYWR5U3Rh
dGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKIAogZGIgPSBldmVudC5yZXN1bHQKK2RiLnNldFZlcnNp
b24oJ25ldyB2ZXJzaW9uJykKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRydWUKK1BB
U1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBpbiByZXN1
bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4uLgorCitTdWNjZXNzIGV2
ZW50IGZpcmVkOgorUEFTUyAncmVzdWx0JyBpbiBldmVudCBpcyB0cnVlCitQQVNTICdjb2RlJyBp
biBldmVudCBpcyBmYWxzZQorUEFTUyAnbWVzc2FnZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1Mg
J3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyBldmVudC5zb3VyY2UgIT0gbnVsbCBpcyB0
cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdvbmVy
cm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQu
dGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFy
Z2V0LkRPTkUKKwordHJhbnMgPSBldmVudC5yZXN1bHQKK1BBU1MgdHJhbnMgIT09IG51bGwgaXMg
dHJ1ZQogZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3NvbWVPYmplY3RTdG9yZScpCiBQQVNTICdvbnN1
Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCiBQQVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1
ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUt
Y3Vyc29yLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1j
dXJzb3IuaHRtbAppbmRleCAyNWU5NDU2YzBlMmQzMGI2YWUzN2YxMmY4NGFjMTdlZDEzZDRhNjU3
Li43MDIwNzZmNzZlN2FiYWI5OWMzMGU1YTNhZDk2ZWU4MzhhOTU1MmNkIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jdXJzb3IuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jdXJzb3IuaHRtbApA
QCAtMzAsMTcgKzMwLDMzIEBAIGZ1bmN0aW9uIG9wZW5EYXRhYmFzZSgpCiB7CiAgICAgcmVzdWx0
ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLm9wZW4oJ3NvbWVEQicsICdzb21lIGRlc2NyaXB0aW9u
JykiKTsKICAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKLSAgICByZXN1bHQub25zdWNjZXNzID0g
b3Blbk9iamVjdFN0b3JlOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBzZXRWZXJzaW9uOwogICAg
IHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CiB9CiAgCi1mdW5jdGlv
biBvcGVuT2JqZWN0U3RvcmUoKQorZnVuY3Rpb24gc2V0VmVyc2lvbigpCiB7CiAgICAgdmVyaWZ5
U3VjY2Vzc0V2ZW50KGV2ZW50KTsKICAgICB3aW5kb3cuZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2
ZW50LnJlc3VsdCIpOwogCi0gICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsKKyAgICByZXN1
bHQgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpIik7CisgICAgdmVy
aWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGRlbGV0ZUV4aXN0aW5n
OworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CiAKK2Z1
bmN0aW9uIGRlbGV0ZUV4aXN0aW5nKCkKK3sKKyAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQp
OworICAgIHdpbmRvdy50cmFucyA9IGV2YWxBbmRMb2coInRyYW5zID0gZXZlbnQucmVzdWx0Iik7
CisgICAgc2hvdWxkQmVUcnVlKCJ0cmFucyAhPT0gbnVsbCIpOworICAgIHRyYW5zLm9uYWJvcnQg
PSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKKworICAgIGRlbGV0ZUFsbE9iamVjdFN0b3Jlcyhk
Yiwgb3Blbk9iamVjdFN0b3JlKTsKK30KKworZnVuY3Rpb24gb3Blbk9iamVjdFN0b3JlKCkKK3sK
ICAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmplY3RTdG9yZSgnc29tZU9iamVj
dFN0b3JlJykiKTsKICAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKICAgICByZXN1bHQub25zdWNj
ZXNzID0gc3RhcnRBZGRpbmdEYXRhOwpAQCAtOTMsNyArMTA5LDcgQEAgZnVuY3Rpb24gc2NoZWR1
bGVUZXN0cygpCiAgICAgfQogIAogICAgIGRlYnVnKCJSdW5uaW5nIHRlc3RzLi4uIik7Ci0gICAg
c2V0VGltZW91dChydW5OZXh0VGVzdCwgMCk7CisgICAgcnVuTmV4dFRlc3QoKTsKIH0KICAKIGZ1
bmN0aW9uIHJ1bk5leHRUZXN0KCkKQEAgLTE4MiwxMiArMTk4LDEyIEBAIGZ1bmN0aW9uIGN1cnNv
ckl0ZXJhdGlvbigpCiB7CiAgICAgaWYgKGV4cGVjdGVkSW5kZXggPT09IG51bGwpIHsKICAgICAg
ICAgc2hvdWxkQmVOdWxsKCJldmVudC5yZXN1bHQiKTsKLSAgICAgICAgc2V0VGltZW91dChydW5O
ZXh0VGVzdCwgMCk7CisgICAgICAgIHJ1bk5leHRUZXN0KCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKGV2ZW50LnJlc3VsdCA9PT0gbnVsbCkgewotICAgICAgICB0ZXN0RmFpbGVk
KCJFdmVudC5yZXN1bHQgc2hvdWxkIG5vdCBiZSBudWxsLiIpCi0gICAgICAgIHNldFRpbWVvdXQo
cnVuTmV4dFRlc3QsIDApOworICAgICAgICB0ZXN0RmFpbGVkKCJFdmVudC5yZXN1bHQgc2hvdWxk
IG5vdCBiZSBudWxsLiIpOworICAgICAgICBydW5OZXh0VGVzdCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb2Jq
ZWN0c3RvcmUtcmVtb3Zlb2JqZWN0c3RvcmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtcmVtb3Zlb2JqZWN0c3RvcmUtZXhwZWN0ZWQudHh0
CmluZGV4IGI3YmE0NzNkY2FhZjlkZWVmZjNhNTk3MjY3OTQ3Mzc2YzAyNzA4NWQuLmI1M2U0N2Rj
Y2JjOTViOGVjYzg1YTA3NWYwM2Q1YzhjNTU2OGU2NTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLXJlbW92ZW9iamVjdHN0b3JlLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1yZW1v
dmVvYmplY3RzdG9yZS1leHBlY3RlZC50eHQKQEAgLTIxLDYgKzIxLDI1IEBAIFBBU1MgJ3JlYWR5
U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCiBQQVNTIGV2ZW50LnRhcmdldC5yZWFkeVN0
YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCiAKIGRiID0gZXZlbnQucmVzdWx0CitkYi5zZXRWZXJz
aW9uKCduZXcgdmVyc2lvbicpCitQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCitQ
QVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4gcmVz
dWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHkuLi4KKworU3VjY2VzcyBl
dmVudCBmaXJlZDoKK1BBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyAnY29kZScg
aW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ21lc3NhZ2UnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNT
ICdzb3VyY2UnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgZXZlbnQuc291cmNlICE9IG51bGwgaXMg
dHJ1ZQorUEFTUyAnb25zdWNjZXNzJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAnb25l
cnJvcicgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50
LnRhcmdldCBpcyB0cnVlCitQQVNTIGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRh
cmdldC5ET05FCisKK3RyYW5zID0gZXZlbnQucmVzdWx0CitQQVNTIHRyYW5zICE9PSBudWxsIGlz
IHRydWUKIGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnLCBudWxsKQogUEFTUyAnb25z
dWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQogUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRy
dWUKQEAgLTkzLDYgKzExMiwyNSBAQCBQQVNTICdyZWFkeVN0YXRlJyBpbiBldmVudC50YXJnZXQg
aXMgdHJ1ZQogUEFTUyBldmVudC50YXJnZXQucmVhZHlTdGF0ZSBpcyBldmVudC50YXJnZXQuRE9O
RQogCiBQQVNTIGV2ZW50LnNvdXJjZS5pbmRleE5hbWVzLmNvbnRhaW5zKCdpbmRleE5hbWUnKSBp
cyB0cnVlCitkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpCitQQVNTICdvbnN1Y2Nlc3MnIGlu
IHJlc3VsdCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAn
cmVhZHlTdGF0ZScgaW4gcmVzdWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0
bHkuLi4KKworU3VjY2VzcyBldmVudCBmaXJlZDoKK1BBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMg
dHJ1ZQorUEFTUyAnY29kZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ21lc3NhZ2UnIGluIGV2
ZW50IGlzIGZhbHNlCitQQVNTICdzb3VyY2UnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgZXZlbnQu
c291cmNlICE9IG51bGwgaXMgdHJ1ZQorUEFTUyAnb25zdWNjZXNzJyBpbiBldmVudC50YXJnZXQg
aXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ3Jl
YWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTIGV2ZW50LnRhcmdldC5yZWFk
eVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCisKK3RyYW5zID0gZXZlbnQucmVzdWx0CitQQVNT
IHRyYW5zICE9PSBudWxsIGlzIHRydWUKIGRiLnJlbW92ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUn
KQogUEFTUyAnb25zdWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQogUEFTUyAnb25lcnJvcicgaW4g
cmVzdWx0IGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L29iamVjdHN0b3JlLXJlbW92ZW9iamVjdHN0b3JlLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9vYmplY3RzdG9yZS1yZW1vdmVvYmplY3RzdG9yZS5odG1sCmluZGV4IDc4Nzhj
N2ZhZTFhNjY0NTI5ZTAyMjg2OGZiZmNmNDE2YmNlMmM4ODcuLjkzZGNiZjZkOWQ3YTVkZDEzYTIx
ZjgxYjNiYmQyY2JkYjNiNTBjODMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL29iamVjdHN0b3JlLXJlbW92ZW9iamVjdHN0b3JlLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtcmVtb3Zlb2JqZWN0c3RvcmUuaHRtbApA
QCAtMTgsMTcgKzE4LDMyIEBAIGZ1bmN0aW9uIHRlc3QoKQogewogICAgIHJlc3VsdCA9IGV2YWxB
bmRMb2coImluZGV4ZWREQi5vcGVuKCduYW1lJywgJ2Rlc2NyaXB0aW9uJykiKTsKICAgICB2ZXJp
ZnlSZXN1bHQocmVzdWx0KTsKLSAgICByZXN1bHQub25zdWNjZXNzID0gY3JlYXRlT2JqZWN0U3Rv
cmU7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IHN0YXJ0U2V0VmVyc2lvbjsKICAgICByZXN1bHQu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwogfQogCi1mdW5jdGlvbiBjcmVhdGVP
YmplY3RTdG9yZSgpCitmdW5jdGlvbiBzdGFydFNldFZlcnNpb24oKQogewogICAgIHZlcmlmeVN1
Y2Nlc3NFdmVudChldmVudCk7CiAgICAgZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnJlc3Vs
dCIpOwogCi0gICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsKKyAgICByZXN1bHQgPSBldmFs
QW5kTG9nKCJkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpIik7CisgICAgdmVyaWZ5UmVzdWx0
KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGRlbGV0ZUV4aXN0aW5nOworICAgIHJl
c3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGRl
bGV0ZUV4aXN0aW5nKCkKK3sKKyAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOworICAgIHdp
bmRvdy50cmFucyA9IGV2YWxBbmRMb2coInRyYW5zID0gZXZlbnQucmVzdWx0Iik7CisgICAgc2hv
dWxkQmVUcnVlKCJ0cmFucyAhPT0gbnVsbCIpOworCisgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVz
KGRiLCBjcmVhdGVPYmplY3RTdG9yZSk7Cit9CiAKK2Z1bmN0aW9uIGNyZWF0ZU9iamVjdFN0b3Jl
KCkKK3sKICAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3Rv
cmVOYW1lJywgbnVsbCkiKTsKICAgICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKICAgICByZXN1bHQu
b25zdWNjZXNzID0gYWRkVmFsdWU7CkBAIC03NSwxMSArOTAsMjQgQEAgZnVuY3Rpb24gY29tbWl0
VHJhbnNhY3Rpb24oKQogICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7CiAgICAgc2hvdWxk
QmVUcnVlKCJldmVudC5zb3VyY2UuaW5kZXhOYW1lcy5jb250YWlucygnaW5kZXhOYW1lJykiKTsK
ICAgICAvLyBMZXQgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdC4KLSAgICB3aW5kb3cuc2V0VGltZW91
dCgncmVtb3ZlT2JqZWN0U3RvcmUoKScsIDApOworICAgIHdpbmRvdy5zZXRUaW1lb3V0KCdzZWNv
bmRTZXRWZXJzaW9uKCknLCAwKTsKK30KKworZnVuY3Rpb24gc2Vjb25kU2V0VmVyc2lvbigpCit7
CisgICAgcmVzdWx0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKSIp
OworICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSByZW1v
dmVPYmplY3RTdG9yZTsKKyAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxi
YWNrOwogfQogCiBmdW5jdGlvbiByZW1vdmVPYmplY3RTdG9yZSgpCiB7CisgICAgdmVyaWZ5U3Vj
Y2Vzc0V2ZW50KGV2ZW50KTsKKyAgICB3aW5kb3cudHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9
IGV2ZW50LnJlc3VsdCIpOworICAgIHNob3VsZEJlVHJ1ZSgidHJhbnMgIT09IG51bGwiKTsKKyAg
ICB0cmFucy5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7CisKICAgICByZXN1bHQg
PSBldmFsQW5kTG9nKCJkYi5yZW1vdmVPYmplY3RTdG9yZSgnc3RvcmVOYW1lJykiKTsKICAgICB2
ZXJpZnlSZXN1bHQocmVzdWx0KTsKICAgICByZXN1bHQub25zdWNjZXNzID0gY3JlYXRlT2JqZWN0
U3RvcmVBZ2FpbjsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29w
ZW4tY3Vyc29yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29w
ZW4tY3Vyc29yLWV4cGVjdGVkLnR4dAppbmRleCBiZGExMDNmZmU0MDNkMWNjYzAwMWQ0NWNlNGNk
YTBjOThlODZmZTZlLi40OGE2ODlmMDgxYmZjOGNmMmQ0MjcyZmI0MTllZGUxODhmM2Y2MzEyIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWN1cnNvci1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jdXJzb3It
ZXhwZWN0ZWQudHh0CkBAIC0yMSw2ICsyMSwyNiBAQCBQQVNTICdyZWFkeVN0YXRlJyBpbiBldmVu
dC50YXJnZXQgaXMgdHJ1ZQogUEFTUyBldmVudC50YXJnZXQucmVhZHlTdGF0ZSBpcyBldmVudC50
YXJnZXQuRE9ORQogCiBkYiA9IGV2ZW50LnJlc3VsdAorZGIuc2V0VmVyc2lvbignbmV3IHZlcnNp
b24nKQorUEFTUyAnb25zdWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicg
aW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0cnVlCitB
biBldmVudCBzaG91bGQgZmlyZSBzaG9ydGx5Li4uCisKK3NldFZlcnNpb25TdWNjZXNzKCk6CitT
dWNjZXNzIGV2ZW50IGZpcmVkOgorUEFTUyAncmVzdWx0JyBpbiBldmVudCBpcyB0cnVlCitQQVNT
ICdjb2RlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnbWVzc2FnZScgaW4gZXZlbnQgaXMgZmFs
c2UKK1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyBldmVudC5zb3VyY2UgIT0g
bnVsbCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQ
QVNTICdvbmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScg
aW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgaXMg
ZXZlbnQudGFyZ2V0LkRPTkUKKwordHJhbnMgPSBldmVudC5yZXN1bHQKK1BBU1MgdHJhbnMgIT09
IG51bGwgaXMgdHJ1ZQogZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Rlc3QnKQogUEFTUyAnb25zdWNj
ZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQogUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY3Vyc29yLmh0
bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWN1cnNvci5odG1sCmluZGV4
IDAzZDFkYTA5OTYyZWZkM2U4MjBmNzk5ZDYxOGI5ZmFiMDcyMjgwYjguLjQ3YzdlODk3MTQ0NzUw
ZjQ2ZjJiNzlhOWY3NTIxMjI5MGE2YjNkMmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL29wZW4tY3Vyc29yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvb3Blbi1jdXJzb3IuaHRtbApAQCAtNjksMTYgKzY5LDMzIEBAIGZ1bmN0aW9uIGNy
ZWF0ZU9iamVjdFN0b3JlU3VjY2VzcygpCiAgICAgcG9wdWxhdGVPYmplY3RTdG9yZShvYmplY3RT
dG9yZSk7CiB9CiAKK2Z1bmN0aW9uIGRlbGV0ZVN1Y2Nlc3MoKQoreworICAgIHJlc3VsdCA9IGV2
YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3JlKCd0ZXN0JykiKTsKKyAgICB2ZXJpZnlSZXN1
bHQocmVzdWx0KTsKKyAgICByZXN1bHQub25zdWNjZXNzID0gY3JlYXRlT2JqZWN0U3RvcmVTdWNj
ZXNzOworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisK
K2Z1bmN0aW9uIHNldFZlcnNpb25TdWNjZXNzKCkKK3sKKyAgICBkZWJ1Zygic2V0VmVyc2lvblN1
Y2Nlc3MoKToiKTsKKyAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOworICAgIHdpbmRvdy50
cmFucyA9IGV2YWxBbmRMb2coInRyYW5zID0gZXZlbnQucmVzdWx0Iik7CisgICAgc2hvdWxkQmVU
cnVlKCJ0cmFucyAhPT0gbnVsbCIpOworICAgIHRyYW5zLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJv
cnRDYWxsYmFjazsKKworICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYiwgZGVsZXRlU3VjY2Vz
cyk7Cit9CisKIGZ1bmN0aW9uIG9wZW5TdWNjZXNzKCkKIHsKICAgICB2ZXJpZnlTdWNjZXNzRXZl
bnQoZXZlbnQpOwogICAgIHZhciBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7
CiAKLSAgICBkZWxldGVBbGxPYmplY3RTdG9yZXMoZGIpOwotCi0gICAgcmVzdWx0ID0gZXZhbEFu
ZExvZygiZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3Rlc3QnKSIpOworICAgIHJlc3VsdCA9IGV2YWxB
bmRMb2coImRiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykiKTsKICAgICB2ZXJpZnlSZXN1bHQo
cmVzdWx0KTsKLSAgICByZXN1bHQub25zdWNjZXNzID0gY3JlYXRlT2JqZWN0U3RvcmVTdWNjZXNz
OworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBzZXRWZXJzaW9uU3VjY2VzczsKICAgICByZXN1bHQu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwogfQogCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvc2hhcmVkLmpzIGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL3NoYXJlZC5qcwppbmRleCA2NWRhM2JmM2Qy
NDczYmVlNjBhMTE5NTU0NjIxZWYxZTU4YzIzYTM5Li45OGU1MjQ0OGQ5Nzg0NjQ3MWQwNTA3YWMz
YjU2Y2EwMDk1NTdmY2JjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9yZXNvdXJjZXMvc2hhcmVkLmpzCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L3Jlc291cmNlcy9zaGFyZWQuanMKQEAgLTY1LDkgKzY1LDIzIEBAIGZ1bmN0aW9uIHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrKCkKICAgICBkb25lKCk7CiB9CiAKLWZ1bmN0aW9uIGRlbGV0ZUFsbE9i
amVjdFN0b3JlcyhkYikKK2Z1bmN0aW9uIHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrKCkKK3sKKyAg
ICB0ZXN0RmFpbGVkKCJBYm9ydCBmdW5jdGlvbiBjYWxsZWQgdW5leHBlY3RlZGx5ISIpOworICAg
IGRlYnVnKCIiKTsKKyAgICB2ZXJpZnlBYm9ydEV2ZW50KGV2ZW50KTsKKyAgICBkb25lKCk7Cit9
CisKK2Z1bmN0aW9uIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYiwgb25maW5pc2hlZCkKIHsKICAg
ICBvYmplY3RTdG9yZXMgPSBkYi5vYmplY3RTdG9yZXM7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBvYmplY3RTdG9yZXMubGVuZ3RoOyArK2kpCi0gICAgICAgIGRiLnJlbW92ZU9iamVjdFN0b3Jl
KG9iamVjdFN0b3Jlc1tpXSk7CisgICAgaWYgKCFvYmplY3RTdG9yZXMubGVuZ3RoKSB7CisJICAg
IG9uZmluaXNoZWQoKTsKKwkgICAgcmV0dXJuOworCX0KKworICAgIHZhciByZXF1ZXN0ID0gZGIu
cmVtb3ZlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVzWzBdKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3Ig
PSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0
aW9uKCkgeyBkZWxldGVBbGxPYmplY3RTdG9yZXMoZGIsIG9uZmluaXNoZWQpOyB9OwogfQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tYmFzaWNz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9u
LWJhc2ljcy1leHBlY3RlZC50eHQKaW5kZXggYmJhNjJmMDlkN2MzMDIzZjhkYmVlY2ZkMmM0ZTRj
ODE5M2ExMDIxMS4uZmNlNTkzYjU5ZTBjMzVjNmY5NjgxYzc1NWI0ODdhZmJlNGYwMjE4ZiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tYmFzaWNz
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90cmFuc2Fj
dGlvbi1iYXNpY3MtZXhwZWN0ZWQudHh0CkBAIC0yNCw2ICsyNCwyNiBAQCBQQVNTICdyZWFkeVN0
YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQogUEFTUyBldmVudC50YXJnZXQucmVhZHlTdGF0
ZSBpcyBldmVudC50YXJnZXQuRE9ORQogCiBkYiA9IGV2ZW50LnJlc3VsdAorZGIuc2V0VmVyc2lv
bignbmV3IHZlcnNpb24nKQorUEFTUyAnb25zdWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFT
UyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3Vs
dCBpcyB0cnVlCitBbiBldmVudCBzaG91bGQgZmlyZSBzaG9ydGx5Li4uCisKK3NldFZlcnNpb25T
dWNjZXNzKCk6CitTdWNjZXNzIGV2ZW50IGZpcmVkOgorUEFTUyAncmVzdWx0JyBpbiBldmVudCBp
cyB0cnVlCitQQVNTICdjb2RlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnbWVzc2FnZScgaW4g
ZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyBldmVu
dC5zb3VyY2UgIT0gbnVsbCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50LnRhcmdl
dCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAn
cmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJl
YWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKKwordHJhbnMgPSBldmVudC5yZXN1bHQKK1BB
U1MgdHJhbnMgIT09IG51bGwgaXMgdHJ1ZQogZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlTmFt
ZScsIG51bGwpCiBQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCiBQQVNTICdvbmVy
cm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvdHJhbnNhY3Rpb24tYmFzaWNzLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi90cmFuc2FjdGlvbi1iYXNpY3MuaHRtbAppbmRleCBjZWE1ZDVkY2ZjZDAwYTAwOGY0
MGU1NDE5ZGYxMWQwNzRkYjE2ZDIxLi44ZmI2NDkzNjYwNDhhMDhkNWVjN2FlYTM3YWUwYjcwNGEz
ZTEwZTQyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90cmFuc2Fj
dGlvbi1iYXNpY3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90cmFu
c2FjdGlvbi1iYXNpY3MuaHRtbApAQCAtMzEsOCArMzEsMjUgQEAgZnVuY3Rpb24gb3BlblN1Y2Nl
c3MoKQogICAgIHZlcmlmeVN1Y2Nlc3NFdmVudChldmVudCk7CiAgICAgZGIgPSBldmFsQW5kTG9n
KCJkYiA9IGV2ZW50LnJlc3VsdCIpOwogCi0gICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsK
KyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpIik7
CisgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IHNldFZl
cnNpb25TdWNjZXNzOworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2s7Cit9CiAKK2Z1bmN0aW9uIHNldFZlcnNpb25TdWNjZXNzKCkKK3sKKyAgICBkZWJ1Zygic2V0
VmVyc2lvblN1Y2Nlc3MoKToiKTsKKyAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOworICAg
IHdpbmRvdy50cmFucyA9IGV2YWxBbmRMb2coInRyYW5zID0gZXZlbnQucmVzdWx0Iik7CisgICAg
c2hvdWxkQmVUcnVlKCJ0cmFucyAhPT0gbnVsbCIpOworICAgIHRyYW5zLm9uYWJvcnQgPSB1bmV4
cGVjdGVkQWJvcnRDYWxsYmFjazsKKworICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYiwgZmlu
aXNoZWREZWxldGluZyk7Cit9CisKK2Z1bmN0aW9uIGZpbmlzaGVkRGVsZXRpbmcoKQorewogICAg
IHJlc3VsdCA9IGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnLCBu
dWxsKSIpOwogICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOwogICAgIHJlc3VsdC5vbnN1Y2Nlc3Mg
PSBjcmVhdGVTdWNjZXNzOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAyMzMxODMyMmFkNjQzMTQyYzZiODAxYmVlMzg3OTYyNjYwOTdkMjEw
Li4yNWE4MGEzYTU1NzJkZDg3ZDAzYTFlOTEyOWQ3ODRiMjRmMjY0NjZhIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzOSBA
QAorMjAxMC0wOS0yOSAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaW5pc2hlZCBJREJU
cmFuc2FjdGlvbiBmb3IgSW5kZXhlZERCCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NjgyMworCisgICAgICAgIFN3aXRjaCB0aGUgcmVzdCBvZiBJbmRl
eGVkREIgdG8gdXNlIHRyYW5zYWN0aW9ucy4KKyAgICAgICAgSW1wbGVtZW50IG1vc3Qgb2Ygc2V0
VmVyc2lvbi4KKyAgICAgICAgQWRkIElEQlRyYW5zYWN0aW9ucyB0byBJREJBbnksIElEQkN1cnNv
ciwgSURCUmVxdWVzdCwgZXRjLgorICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgdGhlIHN0YW5kYXJk
IGNyb3NzIHRocmVhZCB0YXNrIHN0dWZmLgorICAgICAgICBNYWtlIGV2ZXJ5dGhpbmcgdGhyZWFk
c2FmZSBzbyBpdCB3b3JrcyB3aXRoIGNyb3NzIHRocmVhZCBjb3B5CisgICAgICAgICAgICAod2ls
bCBiZSB1c2VmdWwgaW4gdGhlIGZ1dHVyZSkuCisgICAgICAgIEZpeCBzb21lIHN1YnRsZSBidWdz
IGluIHRyYW5zYWN0aW9ucy4KKyAgICAgICAgCisgICAgICAgIFZhcmlvdXMgYml0cyBvZiBjbGVh
biB1cCAod2hlbiBJIGNvdWxkbid0IHJlc2lzdCkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0lEQkFueUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxv
Y2FsQ29udGV4dDo6TG9jYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsQ29udGV4
dDo6fkxvY2FsQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tU2Vy
aWFsaXplZFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6cmVsZWFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCQW55Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIHBsYXRmb3JtL0Nyb3Nz
VGhyZWFkQ29waWVyLmNwcDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkFueS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJBbnk6OmlkYkZhY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6SURCQW55
OjppZGJUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6OnNldCk6CisgICAg
ICAgICogc3RvcmFnZS9JREJBbnkuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkNhbGxiYWNrcy5o
OgorICAgICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QkN1cnNvcjo6SURCQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6dXBkYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnJlbW92ZSk6CisgICAgICAgICogc3RvcmFnZS9JREJD
dXJzb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6Y3JlYXRlKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbkludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpyZW1vdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OnJlbW92ZUludGVybmFsKToKKyAgICAgICAgKiBz
dG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpzZXRTZXRWZXJzaW9uVHJhbnNhY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpyZW1vdmVPYmplY3RTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZTo6Y2xvc2UpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2UuaDoK
KyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlLmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZUlu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZl
cnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVy
c2lvbkludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmNsb3NlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoKKyAg
ICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oOgorICAgICAgICAq
IHN0b3JhZ2UvSURCRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5Ojpv
cGVuKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4OjpJREJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6b3Blbk9i
amVjdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6b3BlbkN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4OjpnZXQpOgorICAgICAgICAqIHN0b3JhZ2UvSURCSW5kZXguaDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkluZGV4OjpjcmVhdGUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCSW5kZXhC
YWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpv
cGVuQ3Vyc29ySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1w
bDo6b3Blbk9iamVjdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJ
bXBsOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6
OmdldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Omdl
dE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQpOgor
ICAgICAgICAqIHN0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oOgorICAgICAgICAqIHN0b3Jh
Z2UvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJLZXku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5OjpJREJLZXkpOgorICAgICAgICAqIHN0b3Jh
Z2UvSURCS2V5Lmg6CisgICAgICAgICogc3RvcmFnZS9JREJLZXlSYW5nZS5oOgorICAgICAgICAq
IHN0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmU6OklEQk9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZTo6aW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnJlbW92ZUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKToKKyAg
ICAgICAgKiBzdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmdldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cmVtb3ZlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleEludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNv
ckludGVybmFsKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
aDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oOgor
ICAgICAgICAqIHN0b3JhZ2UvSURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpJREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnJlc2V0
UmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dGltZXJGaXJlZCk6CisgICAgICAgICogc3Rv
cmFnZS9JREJSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpjcmVhdGUp
OgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OnNjaGVkdWxlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpkaWRDb21wbGV0ZVRhc2tFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6cnVuKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjp0aW1lckZpcmVkKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuaDoKKwogMjAxMC0wOS0zMCAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJBbnlDdXN0b20uY3BwCmluZGV4IGU0MjhiZjY2YTJmNGJjYTZkYzdjMzA4MTEy
OWY2OWNjYzNkZjNlNmQuLjUwNmYxNWYyY2Q1ZDEwYWVmOTYzMzMxNDYyZTFmOWQ3YzMwMDQxMWQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCkBAIC00NCw2ICs0NCw3IEBA
CiAjaW5jbHVkZSAiSlNJREJJbmRleC5oIgogI2luY2x1ZGUgIkpTSURCS2V5LmgiCiAjaW5jbHVk
ZSAiSlNJREJPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIkpTSURCVHJhbnNhY3Rpb24uaCIKICNp
bmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
QEAgLTY0LDE0ICs2NSwxNiBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJREJBbnkqIGlkYkFueSkKICAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlkYkN1cnNvcigpKTsKICAgICBjYXNl
IElEQkFueTo6SURCRGF0YWJhc2VUeXBlOgogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIGlkYkFueS0+aWRiRGF0YWJhc2UoKSk7CisgICAgY2FzZSBJREJBbnk6OklEQkZh
Y3RvcnlUeXBlOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlkYkFu
eS0+aWRiRmFjdG9yeSgpKTsKICAgICBjYXNlIElEQkFueTo6SURCSW5kZXhUeXBlOgogICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlkYkFueS0+aWRiSW5kZXgoKSk7CiAg
ICAgY2FzZSBJREJBbnk6OklEQktleVR5cGU6CiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgaWRiQW55LT5pZGJLZXkoKSk7CiAgICAgY2FzZSBJREJBbnk6OklEQk9iamVj
dFN0b3JlVHlwZToKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJB
bnktPmlkYk9iamVjdFN0b3JlKCkpOwotICAgIGNhc2UgSURCQW55OjpJREJGYWN0b3J5VHlwZToK
LSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlkYkZhY3Rv
cnkoKSk7CisgICAgY2FzZSBJREJBbnk6OklEQlRyYW5zYWN0aW9uVHlwZToKKyAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlkYlRyYW5zYWN0aW9uKCkpOwog
ICAgIGNhc2UgSURCQW55OjpTZXJpYWxpemVkU2NyaXB0VmFsdWVUeXBlOgogICAgICAgICByZXR1
cm4gaWRiQW55LT5zZXJpYWxpemVkU2NyaXB0VmFsdWUoKS0+ZGVzZXJpYWxpemUoZXhlYywgZ2xv
YmFsT2JqZWN0KTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJp
bmRpbmdVdGlsaXRpZXMuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0
aWVzLmNwcAppbmRleCBhMDAwYTdkZTExOTQyMTE5NWE5ZTBiN2Q5MmFjZmRmYTFkNWNjNGQxLi40
YTU4ODUzNzMyMGE2OTZkYzVkZTVlZmNjOWY0MDBiNGJmNTc5YzMzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKQEAgLTU4LDkgKzU4LDI4IEBAIGJvb2wg
Z2V0VmFsdWVGcm9tKFQgaW5kZXhPck5hbWUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1
ZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorY2xhc3MgTG9jYWxDb250ZXh0IHsKK3B1YmxpYzoK
KyAgICBMb2NhbENvbnRleHQoKQorICAgICAgICA6IG1fY29udGV4dCh2ODo6Q29udGV4dDo6TmV3
KCkpCisgICAgeworICAgICAgICBtX2NvbnRleHQtPkVudGVyKCk7CisgICAgfQorCisgICAgfkxv
Y2FsQ29udGV4dCgpCisgICAgeworICAgICAgICBtX2NvbnRleHQtPkV4aXQoKTsKKyAgICAgICAg
bV9jb250ZXh0LkRpc3Bvc2UoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdjg6OkhhbmRsZVNj
b3BlIG1fc2NvcGU7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IG1fY29udGV4dDsK
K307CisKIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVl
QW5kS2V5UGF0aChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0
IFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4mIGtleVBhdGgpCiB7Ci0gICAgdjg6OkhhbmRsZVNj
b3BlIHNjb3BlOworICAgIExvY2FsQ29udGV4dCBsb2NhbENvbnRleHQ7CiAgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHY4VmFsdWUodmFsdWUtPmRlc2VyaWFsaXplKCkpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwga2V5UGF0aC5zaXplKCk7ICsraSkgewogICAgICAgICBzd2l0Y2ggKGtl
eVBhdGhbaV0udHlwZSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwCmluZGV4IDRlNTM1NGU5ODBiNDk3NmE5ZGMzNzQwYTI1YTc5ODQwOWU4M2FlYmYu
LmZmOTIxNjcyNDlhM2JjODU5NzE2MWE1M2JlMjhmNjE1MGI0OTgzYjQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTExMDUsNyArMTEwNSw3
IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFs
dWUoKQogUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6cmVsZWFzZSgpCiB7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcmVz
dWx0ID0gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShtX2RhdGEsIFdpcmVEYXRh
KSk7Ci0gICAgbV9kYXRhID0gU3RyaW5nKCk7CisgICAgbV9kYXRhID0gU3RyaW5nKCkuY3Jvc3NU
aHJlYWRTdHJpbmcoKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIApAQCAtMTEy
MywxOCArMTEyMywxOCBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wmCiAgICAgICAgIGRpZFRocm93
ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2RhdGEgPSBTdHJpbmdJbXBs
OjphZG9wdCh3cml0ZXIuZGF0YSgpKTsKKyAgICBtX2RhdGEgPSBTdHJpbmcoU3RyaW5nSW1wbDo6
YWRvcHQod3JpdGVyLmRhdGEoKSkpLmNyb3NzVGhyZWFkU3RyaW5nKCk7CiB9CiAKIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKFN0cmluZyBkYXRhLCBTdHJpbmdE
YXRhTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IFdpcmVEYXRhKQotICAgICAgICBtX2Rh
dGEgPSBkYXRhOworICAgICAgICBtX2RhdGEgPSBkYXRhLmNyb3NzVGhyZWFkU3RyaW5nKCk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChtb2RlID09IFN0cmluZ1ZhbHVlKTsKICAgICAgICAg
V3JpdGVyIHdyaXRlcjsKICAgICAgICAgd3JpdGVyLndyaXRlV2ViQ29yZVN0cmluZyhkYXRhKTsK
LSAgICAgICAgbV9kYXRhID0gU3RyaW5nSW1wbDo6YWRvcHQod3JpdGVyLmRhdGEoKSk7CisgICAg
ICAgIG1fZGF0YSA9IFN0cmluZyhTdHJpbmdJbXBsOjphZG9wdCh3cml0ZXIuZGF0YSgpKSkuY3Jv
c3NUaHJlYWRTdHJpbmcoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oCmluZGV4IDI3NWU1ZjJkZTVjYTJkNmJhYmM0Y2E0NTkyZDJiNzk4
ZmFlY2VmNTUuLmI1MzRhNTc1ZDRmOTMyYmM5ZWU0Nzg1MzAzZDI5MzcwOTdlMTUwOGMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaApAQCAtMzMsMTEgKzMz
LDExIEBACiAKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHY4Lmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlIDogcHVibGlj
IFJlZkNvdW50ZWQ8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB7CitjbGFzcyBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXNlcmlhbGl6ZUFuZFNldFByb3BlcnR5KHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ODo6UHJvcGVydHlBdHRy
aWJ1dGUsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhJREJBbnlDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhJREJBbnlDdXN0b20uY3BwCmluZGV4IDNkZmZlYjVhMmYwY2NjOGVlNGFhOGNiZDVj
MzEwM2VjODJiM2M4MzIuLmZkNmYxYTVmYTA5MWJhYjUyZTAzMmI0M2IxOWExZmY3Y2E1OTYxZmEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCQW55Q3VzdG9tLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElEQkFueUN1c3RvbS5jcHAKQEAg
LTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJWOElEQkluZGV4LmgiCiAjaW5jbHVkZSAiVjhJREJL
ZXkuaCIKICNpbmNsdWRlICJWOElEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiVjhJREJUcmFu
c2FjdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU1LDE0ICs1NiwxNiBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChJREJBbnkqIGltcGwpCiAgICAgICAgIHJldHVybiB0
b1Y4KGltcGwtPmlkYkN1cnNvcigpKTsKICAgICBjYXNlIElEQkFueTo6SURCRGF0YWJhc2VUeXBl
OgogICAgICAgICByZXR1cm4gdG9WOChpbXBsLT5pZGJEYXRhYmFzZSgpKTsKKyAgICBjYXNlIElE
QkFueTo6SURCRmFjdG9yeVR5cGU6CisgICAgICAgIHJldHVybiB0b1Y4KGltcGwtPmlkYkZhY3Rv
cnkoKSk7CiAgICAgY2FzZSBJREJBbnk6OklEQkluZGV4VHlwZToKICAgICAgICAgcmV0dXJuIHRv
VjgoaW1wbC0+aWRiSW5kZXgoKSk7CiAgICAgY2FzZSBJREJBbnk6OklEQktleVR5cGU6CiAgICAg
ICAgIHJldHVybiB0b1Y4KGltcGwtPmlkYktleSgpKTsKICAgICBjYXNlIElEQkFueTo6SURCT2Jq
ZWN0U3RvcmVUeXBlOgogICAgICAgICByZXR1cm4gdG9WOChpbXBsLT5pZGJPYmplY3RTdG9yZSgp
KTsKLSAgICBjYXNlIElEQkFueTo6SURCRmFjdG9yeVR5cGU6Ci0gICAgICAgIHJldHVybiB0b1Y4
KGltcGwtPmlkYkZhY3RvcnkoKSk7CisgICAgY2FzZSBJREJBbnk6OklEQlRyYW5zYWN0aW9uVHlw
ZToKKyAgICAgICAgcmV0dXJuIHRvVjgoaW1wbC0+aWRiVHJhbnNhY3Rpb24oKSk7CiAgICAgY2Fz
ZSBJREJBbnk6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGU6CiAgICAgICAgIHJldHVybiBpbXBs
LT5zZXJpYWxpemVkU2NyaXB0VmFsdWUoKS0+ZGVzZXJpYWxpemUoKTsKICAgICB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmluZGV4IDY4M2JhNTQzNmYyNmFmZWY0YWQwZGM0
YTA5MWE0ZTM1ZDFlZWRlOGQuLjQyODA0ODZjMjExNzY1NjBiZTc0OTg4ODhlYzZkMjQ2MmVkNzhk
ODcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCkBAIC0zNyw2ICszNyw3
IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3N0b3JhZ2UvSURCQW55LmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuY3BwCmluZGV4
IDQ1YjE2NmQ0MjIwY2E0Y2UzZDVmNDIzOTNkMmM5NGJiMzAzMTFhYTIuLjNhMDQ5YzAxOGFiYjg0
YjlhMTM4ZTQ2NWNhYjk1MThlMGU0MjkzYmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9J
REJBbnkuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuY3BwCkBAIC03MCw2ICs3MCwx
MiBAQCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlPiBJREJBbnk6OmlkYkRhdGFiYXNlKCkKICAgICBy
ZXR1cm4gbV9pZGJEYXRhYmFzZTsKIH0KIAorUGFzc1JlZlB0cjxJREJGYWN0b3J5PiBJREJBbnk6
OmlkYkZhY3RvcnkoKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCRmFjdG9yeVR5cGUpOwor
ICAgIHJldHVybiBtX2lkYkZhY3Rvcnk7Cit9CisKIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQkFu
eTo6aWRiSW5kZXgoKQogewogICAgIEFTU0VSVChtX3R5cGUgPT0gSURCSW5kZXhUeXBlKTsKQEAg
LTg4LDEwICs5NCwxMCBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJBbnk6OmlkYk9i
amVjdFN0b3JlKCkKICAgICByZXR1cm4gbV9pZGJPYmplY3RTdG9yZTsKIH0KIAotUGFzc1JlZlB0
cjxJREJGYWN0b3J5PiBJREJBbnk6OmlkYkZhY3RvcnkoKQorUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbj4gSURCQW55OjppZGJUcmFuc2FjdGlvbigpCiB7Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJ
REJGYWN0b3J5VHlwZSk7Ci0gICAgcmV0dXJuIG1faWRiRmFjdG9yeTsKKyAgICBBU1NFUlQobV90
eXBlID09IElEQlRyYW5zYWN0aW9uVHlwZSk7CisgICAgcmV0dXJuIG1faWRiVHJhbnNhY3Rpb247
CiB9CiAKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJBbnk6OnNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSgpCkBAIC0xMjAsNiArMTI2LDEzIEBAIHZvaWQgSURCQW55OjpzZXQoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZT4gdmFsdWUpCiAgICAgbV9pZGJEYXRhYmFzZSA9IHZhbHVlOwog
fQogCit2b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8SURCRmFjdG9yeT4gdmFsdWUpCit7Cisg
ICAgQVNTRVJUKG1fdHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKKyAgICBtX3R5cGUgPSBJREJGYWN0
b3J5VHlwZTsKKyAgICBtX2lkYkZhY3RvcnkgPSB2YWx1ZTsKK30KKwogdm9pZCBJREJBbnk6OnNl
dChQYXNzUmVmUHRyPElEQkluZGV4PiB2YWx1ZSkKIHsKICAgICBBU1NFUlQobV90eXBlID09IFVu
ZGVmaW5lZFR5cGUpOwpAQCAtMTM0LDE4ICsxNDcsMTggQEAgdm9pZCBJREJBbnk6OnNldChQYXNz
UmVmUHRyPElEQktleT4gdmFsdWUpCiAgICAgbV9pZGJLZXkgPSB2YWx1ZTsKIH0KIAotdm9pZCBJ
REJBbnk6OnNldChQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiB2YWx1ZSkKK3ZvaWQgSURCQW55
OjpzZXQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdmFsdWUpCiB7CiAgICAgQVNTRVJUKG1f
dHlwZSA9PSBVbmRlZmluZWRUeXBlKTsKLSAgICBtX3R5cGUgPSBJREJPYmplY3RTdG9yZVR5cGU7
Ci0gICAgbV9pZGJPYmplY3RTdG9yZSA9IHZhbHVlOworICAgIG1fdHlwZSA9IElEQlRyYW5zYWN0
aW9uVHlwZTsKKyAgICBtX2lkYlRyYW5zYWN0aW9uID0gdmFsdWU7CiB9CiAKLXZvaWQgSURCQW55
OjpzZXQoUGFzc1JlZlB0cjxJREJGYWN0b3J5PiB2YWx1ZSkKK3ZvaWQgSURCQW55OjpzZXQoUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZT4gdmFsdWUpCiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBV
bmRlZmluZWRUeXBlKTsKLSAgICBtX3R5cGUgPSBJREJGYWN0b3J5VHlwZTsKLSAgICBtX2lkYkZh
Y3RvcnkgPSB2YWx1ZTsKKyAgICBtX3R5cGUgPSBJREJPYmplY3RTdG9yZVR5cGU7CisgICAgbV9p
ZGJPYmplY3RTdG9yZSA9IHZhbHVlOwogfQogCiB2b2lkIElEQkFueTo6c2V0KFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFn
ZS9JREJBbnkuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJBbnkuaAppbmRleCA5MDY2ZTEzNzkwNzc3
ZjRhY2I3Yzg1MDA5ZGU5NDU2ZTg2ZmQ4MzViLi44ZTNmODNlOWRiZTlmN2VkMDQwN2IwZTQ5MzNj
NTk4ZmI2OGU1MTRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCQW55LmgKKysrIGIv
V2ViQ29yZS9zdG9yYWdlL0lEQkFueS5oCkBAIC0zNiwxMCArMzYsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBJREJDdXJzb3I7CiBjbGFzcyBJREJEYXRhYmFzZTsKK2NsYXNzIElE
QkZhY3Rvcnk7CiBjbGFzcyBJREJJbmRleDsKIGNsYXNzIElEQktleTsKIGNsYXNzIElEQk9iamVj
dFN0b3JlOwotY2xhc3MgSURCRmFjdG9yeTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uOwogY2xhc3Mg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOwogCiBjbGFzcyBJREJBbnkgOiBwdWJsaWMgUmVmQ291bnRl
ZDxJREJBbnk+IHsKQEAgLTcxLDYgKzcyLDcgQEAgcHVibGljOgogICAgICAgICBJREJJbmRleFR5
cGUsCiAgICAgICAgIElEQktleVR5cGUsCiAgICAgICAgIElEQk9iamVjdFN0b3JlVHlwZSwKKyAg
ICAgICAgSURCVHJhbnNhY3Rpb25UeXBlLAogICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWVU
eXBlCiAgICAgfTsKIApAQCAtODIsNiArODQsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJ
REJJbmRleD4gaWRiSW5kZXgoKTsKICAgICBQYXNzUmVmUHRyPElEQktleT4gaWRiS2V5KCk7CiAg
ICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gaWRiT2JqZWN0U3RvcmUoKTsKKyAgICBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uPiBpZGJUcmFuc2FjdGlvbigpOwogICAgIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsdWUoKTsKIAogICAgIC8v
IFNldCBjYW4gb25seSBiZSBjYWxsZWQgb25jZS4KQEAgLTkyLDYgKzk1LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCSW5kZXg+KTsKICAgICB2b2lkIHNldChQYXNzUmVm
UHRyPElEQktleT4pOwogICAgIHZvaWQgc2V0KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+KTsK
KyAgICB2b2lkIHNldChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPik7CiAgICAgdm9pZCBzZXQo
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKIAogcHJpdmF0ZToKQEAgLTEwNiw2
ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJJbmRleD4gbV9pZGJJbmRleDsKICAg
ICBSZWZQdHI8SURCS2V5PiBtX2lkYktleTsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1f
aWRiT2JqZWN0U3RvcmU7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX2lkYlRyYW5zYWN0
aW9uOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fc2VyaWFsaXplZFNjcmlw
dFZhbHVlOwogfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkNhbGxiYWNrcy5o
IGIvV2ViQ29yZS9zdG9yYWdlL0lEQkNhbGxiYWNrcy5oCmluZGV4IGJjNDg0NzdjNzcwYmVhNjMw
NTcwMzZlYmRmYWQ3OTc2YTc3ZDMzYmEuLmU2MmMwODViOTFlZjU5Y2MwNWZlNmEzYWVkZDFlZTFh
MGZjODI4Y2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJDYWxsYmFja3MuaAorKysg
Yi9XZWJDb3JlL3N0b3JhZ2UvSURCQ2FsbGJhY2tzLmgKQEAgLTM1LDE0ICszNSwxNiBAQAogI2lu
Y2x1ZGUgIklEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQktleS5oIgog
I2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgSURCQ2FsbGJhY2tzIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQ2Fs
bGJhY2tzPiB7CisvLyBGSVhNRTogQWxsIGNoaWxkIGNsYXNzZXMgbmVlZCB0byBiZSBtYWRlIHRo
cmVhZHNhZmUuCitjbGFzcyBJREJDYWxsYmFja3MgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxJ
REJDYWxsYmFja3M+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJDYWxsYmFja3MoKSB7IH0K
IApAQCAtNTMsNiArNTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4pID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBv
blN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPikgPSAwOwogfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdG9yYWdlL0lEQkN1cnNvci5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcApp
bmRleCBjMWMwNzdiMjNhMWYxM2EwM2MxNjQxMWU1NTFlMGFjMWM4YThmNDFhLi4wNzhhNTUxMTE0
ZTNjZWVlMzI3YmIyM2RiOTMwZjVhNjU1ZDk2YmYyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3Jh
Z2UvSURCQ3Vyc29yLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcApAQCAt
MzMsMTUgKzMzLDIwIEBACiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgog
I2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotSURCQ3Vyc29yOjpJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJSZXF1ZXN0KiByZXF1ZXN0KQorSURCQ3Vy
c29yOjpJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBiYWNr
ZW5kLCBJREJSZXF1ZXN0KiByZXF1ZXN0LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uKQogICAgIDogbV9iYWNrZW5kKGJhY2tlbmQpCiAgICAgLCBtX3JlcXVlc3Qo
cmVxdWVzdCkKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiB7CisgICAgQVNTRVJU
KG1fYmFja2VuZCk7CisgICAgQVNTRVJUKG1fcmVxdWVzdCk7CisgICAgQVNTRVJUKG1fdHJhbnNh
Y3Rpb24pOwogfQogCiBJREJDdXJzb3I6On5JREJDdXJzb3IoKQpAQCAtNjUsNyArNzAsNyBAQCBQ
YXNzUmVmUHRyPElEQkFueT4gSURCQ3Vyc29yOjp2YWx1ZSgpIGNvbnN0CiAKIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlKQogewotICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElE
QkFueTo6Y3JlYXRlKHRoaXMpKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CiAgICAgbV9iYWNrZW5kLT51cGRhdGUodmFsdWUsIHJlcXVlc3QpOwogICAg
IHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKIH0KQEAgLTc0LDE0ICs3OSwxNCBAQCB2b2lkIElE
QkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4ga2V5KQogewogICAg
IC8vIEZJWE1FOiBXZSdyZSBub3QgdXNpbmcgdGhlIGNvbnRleHQgZnJvbSB3aGVuIGNvbnRpbnVl
IHdhcyBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoZSBjYWxsYmFjawogICAgIC8vICAgICAgICB3aWxs
IGJlIG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IG9wZW5DdXJzb3Igd2FzIGNhbGxlZCBvbi4gSXMg
dGhpcyByaWdodD8KLSAgICBpZiAobV9yZXF1ZXN0LT5yZXNldFJlYWR5U3RhdGUoKSkKKyAgICBp
ZiAobV9yZXF1ZXN0LT5yZXNldFJlYWR5U3RhdGUobV90cmFuc2FjdGlvbi5nZXQoKSkpCiAgICAg
ICAgIG1fYmFja2VuZC0+Y29udGludWVGdW5jdGlvbihrZXksIG1fcmVxdWVzdCk7CiAgICAgLy8g
RklYTUU6IEVsc2UgdGhyb3c/CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29y
OjpyZW1vdmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSk7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1
ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24u
Z2V0KCkpOwogICAgIG1fYmFja2VuZC0+cmVtb3ZlKHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1
ZXN0LnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3Iu
aCBiL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuaAppbmRleCAwYzQzOGM0ZTY5MjU0NGIwNDU3
MzE4MzE3NDU0OGFmNTRiNDg3MmI0Li41YWQyZDYxNmRmMzFkNDdiYzgzZDE3M2ZlY2FjMGQzZjEw
MzNkOTgzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmgKKysrIGIvV2Vi
Q29yZS9zdG9yYWdlL0lEQkN1cnNvci5oCkBAIC00MSw2ICs0MSw3IEBAIGNsYXNzIElEQktleTsK
IGNsYXNzIElEQlJlcXVlc3Q7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3Mg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOworY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlOwogCiBjbGFzcyBJREJDdXJzb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJDdXJzb3I+IHsK
IHB1YmxpYzoKQEAgLTUwLDkgKzUxLDkgQEAgcHVibGljOgogICAgICAgICBQUkVWID0gMiwKICAg
ICAgICAgUFJFVl9OT19EVVBMSUNBVEUgPSAzLAogICAgIH07Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCQ3Vyc29yPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
PiBiYWNrZW5kLCBJREJSZXF1ZXN0KiByZXF1ZXN0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QkN1cnNvcj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFj
a2VuZCwgSURCUmVxdWVzdCogcmVxdWVzdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vy
c29yKGJhY2tlbmQsIHJlcXVlc3QpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJD
dXJzb3IoYmFja2VuZCwgcmVxdWVzdCwgdHJhbnNhY3Rpb24pKTsKICAgICB9CiAgICAgfklEQkN1
cnNvcigpOwogCkBAIC02NSwxMCArNjYsMTEgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gcmVtb3ZlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogcHJpdmF0ZToKLSAg
ICBleHBsaWNpdCBJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
PiwgSURCUmVxdWVzdCopOworICAgIGV4cGxpY2l0IElEQkN1cnNvcihQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U+LCBJREJSZXF1ZXN0KiwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKik7CiAKICAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gbV9i
YWNrZW5kOwogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBtX3JlcXVlc3Q7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JC
YWNrZW5kSW1wbC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
CmluZGV4IDEzZGY1ZjAyMTU0ZTU1ZDE2MjZkMDYyMmUwYmQyNWM1Y2UwYmQ5OGEuLmZhMjg1NWMz
ZjllZTAxY2RmZWRkOTAyZTIxMDczNjY3ZGM1YWY2NGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3Rv
cmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkN1
cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJJ
REJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5j
bHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgpAQCAtNDMsMjIgKzQ0LDI0IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotSURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBs
KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gaWRiT2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJl
Y3Rpb24sIFBhc3NPd25QdHI8U1FMaXRlU3RhdGVtZW50PiBxdWVyeSkKK0lEQkN1cnNvckJhY2tl
bmRJbXBsOjpJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IGlkYk9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzT3duUHRyPFNRTGl0ZVN0YXRl
bWVudD4gcXVlcnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24p
CiAgICAgOiBtX2lkYk9iamVjdFN0b3JlKGlkYk9iamVjdFN0b3JlKQogICAgICwgbV9rZXlSYW5n
ZShrZXlSYW5nZSkKICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICAsIG1fcXVlcnko
cXVlcnkpCiAgICAgLCBtX2lzU2VyaWFsaXplZFNjcmlwdFZhbHVlQ3Vyc29yKHRydWUpCisgICAg
LCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogewogICAgIGxvYWRDdXJyZW50Um93KCk7CiB9
CiAKLUlEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IGlkYkluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzT3duUHRyPFNRTGl0
ZVN0YXRlbWVudD4gcXVlcnksIGJvb2wgaXNTZXJpYWxpemVkU2NyaXB0VmFsdWVDdXJzb3IpCitJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBpZGJJbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc093blB0cjxTUUxpdGVTdGF0
ZW1lbnQ+IHF1ZXJ5LCBib29sIGlzU2VyaWFsaXplZFNjcmlwdFZhbHVlQ3Vyc29yLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogICAgIDogbV9pZGJJbmRleChp
ZGJJbmRleCkKICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCiAgICAgLCBtX2RpcmVjdGlvbihk
aXJlY3Rpb24pCiAgICAgLCBtX3F1ZXJ5KHF1ZXJ5KQogICAgICwgbV9pc1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUN1cnNvcihpc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUN1cnNvcikKKyAgICAsIG1fdHJh
bnNhY3Rpb24odHJhbnNhY3Rpb24pCiB7CiAgICAgbG9hZEN1cnJlbnRSb3coKTsKIH0KQEAgLTg1
LDcgKzg4LDE2IEBAIFBhc3NSZWZQdHI8SURCQW55PiBJREJDdXJzb3JCYWNrZW5kSW1wbDo6dmFs
dWUoKSBjb25zdAogICAgIHJldHVybiBJREJBbnk6OmNyZWF0ZShtX2N1cnJlbnRJREJLZXlWYWx1
ZS5nZXQoKSk7CiB9CiAKLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnVwZGF0ZShQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCit2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzKQoreworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4g
Y3Vyc29yID0gdGhpczsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9
IHBycFZhbHVlOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxi
YWNrczsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFj
a1Rhc2soJklEQkN1cnNvckJhY2tlbmRJbXBsOjp1cGRhdGVJbnRlcm5hbCwgY3Vyc29yLCB2YWx1
ZSwgY2FsbGJhY2tzKSkpCisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUiwgInVwZGF0
ZSBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiBhIHRyYW5zYWN0aW9uLiIpKTsKK30K
Kwordm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQogewogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBkb2Vzbid0
IHVwZGF0ZSBpbmRleGVzLiBJdCdzIGRhbmdlcm91cyB0byBjYWxsIGluIGl0cyBjdXJyZW50IHN0
YXRlLgogICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiTm90IGltcGxlbWVudGVkLiIpKTsKQEAg
LTkzLDgyICsxMDUsMTAwIEBAIHZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnVwZGF0ZShQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhCiAKICAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwogCi0gICAgaWYgKCFtX3F1
ZXJ5IHx8IG1fY3VycmVudElkID09IEludmFsaWRJZCkgeworICAgIGlmICghY3Vyc29yLT5tX3F1
ZXJ5IHx8IGN1cnNvci0+bV9jdXJyZW50SWQgPT0gSW52YWxpZElkKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBVc2UgdGhlIHByb3BlciBlcnJvciBjb2RlIHdoZW4gaXQncyBzcGVjY2VkLgogICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIk9wZXJhdGlvbiBub3QgcG9zc2libGUuIikpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgU3RyaW5nIHNxbCA9ICJVUERBVEUgT2JqZWN0U3Rv
cmVEYXRhIFNFVCB2YWx1ZSA9ID8gV0hFUkUgaWQgPSA/IjsKLSAgICBTUUxpdGVTdGF0ZW1lbnQg
dXBkYXRlUXVlcnkoZGF0YWJhc2UoKS0+c3FsaXRlRGF0YWJhc2UoKSwgc3FsKTsKKyAgICBTUUxp
dGVTdGF0ZW1lbnQgdXBkYXRlUXVlcnkoY3Vyc29yLT5kYXRhYmFzZSgpLT5zcWxpdGVEYXRhYmFz
ZSgpLCBzcWwpOwogICAgIAogICAgIGJvb2wgb2sgPSB1cGRhdGVRdWVyeS5wcmVwYXJlKCkgPT0g
U1FMUmVzdWx0T2s7CiAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVy
IGVycm9yIGhhbmRsaW5nLgogICAgIHVwZGF0ZVF1ZXJ5LmJpbmRUZXh0KDEsIHZhbHVlLT50b1dp
cmVTdHJpbmcoKSk7Ci0gICAgdXBkYXRlUXVlcnkuYmluZEludDY0KDIsIG1fY3VycmVudElkKTsK
KyAgICB1cGRhdGVRdWVyeS5iaW5kSW50NjQoMiwgY3Vyc29yLT5tX2N1cnJlbnRJZCk7CiAgICAg
b2sgPSB1cGRhdGVRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKICAgICBBU1NFUlRfVU5V
U0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCiAKLSAgICBpZiAo
bV9pc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUN1cnNvcikKLSAgICAgICAgbV9jdXJyZW50U2VyaWFs
aXplZFNjcmlwdFZhbHVlID0gdmFsdWUucmVsZWFzZSgpOworICAgIGlmIChjdXJzb3ItPm1faXNT
ZXJpYWxpemVkU2NyaXB0VmFsdWVDdXJzb3IpCisgICAgICAgIGN1cnNvci0+bV9jdXJyZW50U2Vy
aWFsaXplZFNjcmlwdFZhbHVlID0gdmFsdWUucmVsZWFzZSgpOwogICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKCk7CiB9CiAKLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rp
b24oUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rpb24oUGFz
c1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxi
YWNrcykKK3sKKyAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciA9IHRoaXM7
CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OworICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250
aW51ZUZ1bmN0aW9uSW50ZXJuYWwsIGN1cnNvciwga2V5LCBjYWxsYmFja3MpKSkKKyAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSLCAiY29udGludWUgbXVzdCBiZSBjYWxsZWQgaW4gdGhl
IGNvbnRleHQgb2YgYSB0cmFuc2FjdGlvbi4iKSk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFja2Vu
ZEltcGw6OmNvbnRpbnVlRnVuY3Rpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gcHJwQ3Vyc29yLCBQYXNzUmVmUHRyPElE
QktleT4gcHJwS2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogeworICAg
IFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yID0gcHJwQ3Vyc29yOwogICAgIFJl
ZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBp
ZiAoIW1fcXVlcnkgfHwgbV9xdWVyeS0+c3RlcCgpICE9IFNRTFJlc3VsdFJvdykgewotICAgICAg
ICAgICAgbV9xdWVyeSA9IDA7Ci0gICAgICAgICAgICBtX2N1cnJlbnRJZCA9IEludmFsaWRJZDsK
LSAgICAgICAgICAgIG1fY3VycmVudEtleSA9IDA7Ci0gICAgICAgICAgICBtX2N1cnJlbnRTZXJp
YWxpemVkU2NyaXB0VmFsdWUgPSAwOwotICAgICAgICAgICAgbV9jdXJyZW50SURCS2V5VmFsdWUg
PSAwOworICAgICAgICBpZiAoIWN1cnNvci0+bV9xdWVyeSB8fCBjdXJzb3ItPm1fcXVlcnktPnN0
ZXAoKSAhPSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgICAgIGN1cnNvci0+bV9xdWVyeSA9IDA7
CisgICAgICAgICAgICBjdXJzb3ItPm1fY3VycmVudElkID0gSW52YWxpZElkOworICAgICAgICAg
ICAgY3Vyc29yLT5tX2N1cnJlbnRLZXkgPSAwOworICAgICAgICAgICAgY3Vyc29yLT5tX2N1cnJl
bnRTZXJpYWxpemVkU2NyaXB0VmFsdWUgPSAwOworICAgICAgICAgICAgY3Vyc29yLT5tX2N1cnJl
bnRJREJLZXlWYWx1ZSA9IDA7CiAgICAgICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcygpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPElEQktleT4g
b2xkS2V5ID0gbV9jdXJyZW50S2V5OwotICAgICAgICBsb2FkQ3VycmVudFJvdygpOworICAgICAg
ICBSZWZQdHI8SURCS2V5PiBvbGRLZXkgPSBjdXJzb3ItPm1fY3VycmVudEtleTsKKyAgICAgICAg
Y3Vyc29yLT5sb2FkQ3VycmVudFJvdygpOwogCiAgICAgICAgIC8vIElmIGEga2V5IHdhcyBzdXBw
bGllZCwgd2UgbXVzdCBsb29wIHVudGlsIHdlIGZpbmQgdGhhdCBrZXkgKG9yIGhpdCB0aGUgZW5k
KS4KLSAgICAgICAgaWYgKGtleSAmJiAha2V5LT5pc0VxdWFsKG1fY3VycmVudEtleS5nZXQoKSkp
CisgICAgICAgIGlmIChrZXkgJiYgIWtleS0+aXNFcXVhbChjdXJzb3ItPm1fY3VycmVudEtleS5n
ZXQoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBJZiB3ZSBkb24ndCBo
YXZlIGEgdW5pcXVlbmVzcyBjb25zdHJhaW50LCB3ZSBjYW4gc3RvcCBub3cuCi0gICAgICAgIGlm
IChtX2RpcmVjdGlvbiA9PSBJREJDdXJzb3I6Ok5FWFQgfHwgbV9kaXJlY3Rpb24gPT0gSURCQ3Vy
c29yOjpQUkVWKQorICAgICAgICBpZiAoY3Vyc29yLT5tX2RpcmVjdGlvbiA9PSBJREJDdXJzb3I6
Ok5FWFQgfHwgY3Vyc29yLT5tX2RpcmVjdGlvbiA9PSBJREJDdXJzb3I6OlBSRVYpCiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgaWYgKCFtX2N1cnJlbnRLZXktPmlzRXF1YWwob2xkS2V5Lmdl
dCgpKSkKKyAgICAgICAgaWYgKCFjdXJzb3ItPm1fY3VycmVudEtleS0+aXNFcXVhbChvbGRLZXku
Z2V0KCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FsbGJhY2tzLT5vblN1
Y2Nlc3ModGhpcyk7CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLmdldCgpKTsKK30K
Kwordm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6cmVtb3ZlKFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBwcnBDYWxsYmFja3MpCit7CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBj
dXJzb3IgPSB0aGlzOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENh
bGxiYWNrczsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxs
YmFja1Rhc2soJklEQkN1cnNvckJhY2tlbmRJbXBsOjpyZW1vdmVJbnRlcm5hbCwgY3Vyc29yLCBj
YWxsYmFja3MpKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSLCAicmVtb3ZlIG11
c3QgYmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIGEgdHJhbnNhY3Rpb24uIikpOwogfQogCi12
b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpyZW1vdmUoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnJlbW92ZUludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBj
dXJzb3IsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7CiAgICAgLy8gRklY
TUU6IFRoaXMgbWV0aG9kIGRvZXNuJ3QgdXBkYXRlIGluZGV4ZXMuIEl0J3MgZGFuZ2Vyb3VzIHRv
IGNhbGwgaW4gaXRzIGN1cnJlbnQgc3RhdGUuCiAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJO
b3QgaW1wbGVtZW50ZWQuIikpOwogICAgIHJldHVybjsKIAotICAgIGlmICghbV9xdWVyeSB8fCBt
X2N1cnJlbnRJZCA9PSBJbnZhbGlkSWQpIHsKKyAgICBpZiAoIWN1cnNvci0+bV9xdWVyeSB8fCBj
dXJzb3ItPm1fY3VycmVudElkID09IEludmFsaWRJZCkgewogICAgICAgICAvLyBGSVhNRTogVXNl
IHRoZSBwcm9wZXIgZXJyb3IgY29kZSB3aGVuIGl0J3Mgc3BlY2NlZC4KICAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VU5LTk9XTl9FUlIsICJPcGVyYXRpb24gbm90IHBvc3NpYmxlLiIpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIFN0cmluZyBzcWwgPSAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVE
YXRhIFdIRVJFIGlkID0gPyI7Ci0gICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVF1ZXJ5KGRhdGFi
YXNlKCktPnNxbGl0ZURhdGFiYXNlKCksIHNxbCk7CisgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0
ZVF1ZXJ5KGN1cnNvci0+ZGF0YWJhc2UoKS0+c3FsaXRlRGF0YWJhc2UoKSwgc3FsKTsKICAgICAK
ICAgICBib29sIG9rID0gZGVsZXRlUXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwogICAg
IEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4K
LSAgICBkZWxldGVRdWVyeS5iaW5kSW50NjQoMSwgbV9jdXJyZW50SWQpOworICAgIGRlbGV0ZVF1
ZXJ5LmJpbmRJbnQ2NCgxLCBjdXJzb3ItPm1fY3VycmVudElkKTsKICAgICBvayA9IGRlbGV0ZVF1
ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsg
Ly8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KIAotICAgIG1fY3VycmVudElkID0gSW52
YWxpZElkOwotICAgIG1fY3VycmVudFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA9IDA7Ci0gICAgbV9j
dXJyZW50SURCS2V5VmFsdWUgPSAwOworICAgIGN1cnNvci0+bV9jdXJyZW50SWQgPSBJbnZhbGlk
SWQ7CisgICAgY3Vyc29yLT5tX2N1cnJlbnRTZXJpYWxpemVkU2NyaXB0VmFsdWUgPSAwOworICAg
IGN1cnNvci0+bV9jdXJyZW50SURCS2V5VmFsdWUgPSAwOwogICAgIGNhbGxiYWNrcy0+b25TdWNj
ZXNzKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5k
SW1wbC5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKaW5kZXggYjY3
ZWM3MGJjOTMzNTkwYjcwNDlmNjRkN2E2MmU5ZDk0MTQ1MmM1Zi4uMjExZDM4ZDBhZTA2NTMzMThm
ZGE4ZWUwYWU1MzdlOWIwZWU0OGFmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkN1
cnNvckJhY2tlbmRJbXBsLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJ
bXBsLmgKQEAgLTQxLDE4ICs0MSwxOSBAQCBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOwog
Y2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbDsKIGNsYXNzIElEQktleVJhbmdlOwogY2xhc3MgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZTsKIGNsYXNzIFNRTGl0ZVN0YXRlbWVudDsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTsKIAogY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGwgOiBwdWJsaWMgSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSURCQ3Vyc29yOjpE
aXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzT3duUHRyPFNRTGl0ZVN0YXRlbWVudD4gcXVlcnkpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNyZWF0ZShQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNz
T3duUHRyPFNRTGl0ZVN0YXRlbWVudD4gcXVlcnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElE
QkN1cnNvckJhY2tlbmRJbXBsKG9iamVjdFN0b3JlLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBxdWVy
eSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKG9i
amVjdFN0b3JlLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBxdWVyeSwgdHJhbnNhY3Rpb24pKTsKICAg
ICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzT3duUHRy
PFNRTGl0ZVN0YXRlbWVudD4gcXVlcnksIGJvb2wgaXNTZXJpYWxpemVkU2NyaXB0VmFsdWVDdXJz
b3IpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzT3duUHRy
PFNRTGl0ZVN0YXRlbWVudD4gcXVlcnksIGJvb2wgaXNTZXJpYWxpemVkU2NyaXB0VmFsdWVDdXJz
b3IsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKGluZGV4LCBr
ZXlSYW5nZSwgZGlyZWN0aW9uLCBxdWVyeSwgaXNTZXJpYWxpemVkU2NyaXB0VmFsdWVDdXJzb3Ip
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJDdXJzb3JCYWNrZW5kSW1wbChpbmRl
eCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgcXVlcnksIGlzU2VyaWFsaXplZFNjcmlwdFZhbHVlQ3Vy
c29yLCB0cmFuc2FjdGlvbikpOwogICAgIH0KICAgICB2aXJ0dWFsIH5JREJDdXJzb3JCYWNrZW5k
SW1wbCgpOwogCkBAIC02NCwxMiArNjUsMTYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmUoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogcHJpdmF0ZToKLSAgICBJREJDdXJz
b3JCYWNrZW5kSW1wbChQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NPd25QdHI8U1FM
aXRlU3RhdGVtZW50PiBxdWVyeSk7Ci0gICAgSURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1cnNv
cjo6RGlyZWN0aW9uLCBQYXNzT3duUHRyPFNRTGl0ZVN0YXRlbWVudD4gcXVlcnksIGJvb2wgaXNT
ZXJpYWxpemVkU2NyaXB0VmFsdWVDdXJzb3IpOworICAgIElEQkN1cnNvckJhY2tlbmRJbXBsKFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc093blB0cjxTUUxpdGVTdGF0ZW1lbnQ+IHF1
ZXJ5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICBJREJDdXJzb3JCYWNr
ZW5kSW1wbChQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NPd25QdHI8U1FMaXRlU3RhdGVtZW50
PiBxdWVyeSwgYm9vbCBpc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUN1cnNvciwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKik7CiAKICAgICB2b2lkIGxvYWRDdXJyZW50Um93KCk7CiAgICAg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UoKSBjb25zdDsKIAorICAgIHN0YXRpYyB2
b2lkIHVwZGF0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QkN1cnNvckJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHN0YXRpYyB2b2lkIGNvbnRpbnVlRnVuY3Rp
b25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
KTsKKyAgICBzdGF0aWMgdm9pZCByZW1vdmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPik7CisKICAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAtMTsKIAogICAg
IC8vIE9ubHkgb25lIG9yIHRoZSBvdGhlciBzaG91bGQgYmUgdXNlZC4KQEAgLTg2LDYgKzkxLDgg
QEAgcHJpdmF0ZToKICAgICAvLyBPbmx5IG9uZSBvZiB0aGVzZSB3aWxsIGV2ZXIgYmUgdXNlZCBm
b3IgZWFjaCBpbnN0YW5jZS4gV2hpY2ggZGVwZW5kcyBvbiBtX2lzU2VyaWFsaXplZFNjcmlwdFZh
bHVlQ3Vyc29yLgogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fY3VycmVudFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTsKICAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRJREJLZXlW
YWx1ZTsKKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJh
bnNhY3Rpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
LmNwcAppbmRleCAwZWE3YWMyOTI2NzRjZWE2MDk3MDM1ZmE1ZmU1Yzg5N2Y0NGRiNmI3Li40ZDMy
MjEzOGY3YjE1MzBkZWQwYzM4NDg0ZGRjZGY1YWZlZDhhNWFmIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZS5jcHAKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgogCiAjaW5j
bHVkZSAiSURCQW55LmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgorI2luY2x1ZGUg
IklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgogI2luY2x1ZGUgIklEQlJlcXVl
c3QuaCIKQEAgLTQ4LDMxICs1MCwzNiBAQCBJREJEYXRhYmFzZTo6fklEQkRhdGFiYXNlKCkKIHsK
IH0KIAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3Rv
cmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKK3ZvaWQgSURCRGF0YWJh
c2U6OnNldFNldFZlcnNpb25UcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uKQogewotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURC
UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpKTsKLSAgICBtX2Jh
Y2tlbmQtPmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIHJl
cXVlc3QpOwotICAgIHJldHVybiByZXF1ZXN0OworICAgIG1fc2V0VmVyc2lvblRyYW5zYWN0aW9u
ID0gdHJhbnNhY3Rpb247CiB9CiAKLS8vIEZJWE1FOiByZW1vdmUgdGhpcyBtZXRob2QuCi1QYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQorLy8gRklYTUU6IFNob3VsZCBiZSBzeW5j
aHJvbm91cy4KK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVj
dFN0b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCiB7Ci0gICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUgPSBtX2JhY2tl
bmQtPm9iamVjdFN0b3JlKG5hbWUsIG1vZGUpOwotICAgIEFTU0VSVChvYmplY3RTdG9yZSk7IC8v
IEZJWE1FOiBJZiB0aGlzIGlzIG51bGwsIHdlIHNob3VsZCByYWlzZSBhIE5PVF9GT1VORF9FUlIu
Ci0gICAgcmV0dXJuIElEQk9iamVjdFN0b3JlOjpjcmVhdGUob2JqZWN0U3RvcmUucmVsZWFzZSgp
LCAwKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0
ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV9zZXRWZXJzaW9uVHJhbnNhY3Rpb24u
Z2V0KCkpOworICAgIGlmICghbV9zZXRWZXJzaW9uVHJhbnNhY3Rpb24pCisgICAgICAgIHJlcXVl
c3QtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpOT1RfQUxMT1dFRF9FUlIsICJjcmVhdGVPYmplY3RTdG9yZSBtdXN0IGJlIGNhbGxlZCBmcm9t
IHdpdGhpbiBhIHNldFZlcnNpb24gdHJhbnNhY3Rpb24uIikpOworICAgIGVsc2UKKyAgICAgICAg
bV9iYWNrZW5kLT5jcmVhdGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50
LCByZXF1ZXN0LCBtX3NldFZlcnNpb25UcmFuc2FjdGlvbi5nZXQoKSk7CisgICAgcmV0dXJuIHJl
cXVlc3Q7CiB9CiAKKy8vIEZJWE1FOiBTaG91bGQgYmUgc3luY2hyb25vdXMuCiBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQkRhdGFiYXNlOjpyZW1vdmVPYmplY3RTdG9yZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgUmVmUHRyPElE
QlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55Ojpj
cmVhdGUodGhpcykpOwotICAgIG1fYmFja2VuZC0+cmVtb3ZlT2JqZWN0U3RvcmUobmFtZSwgcmVx
dWVzdCk7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVh
dGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fc2V0VmVyc2lvblRyYW5zYWN0aW9u
LmdldCgpKTsKKyAgICBpZiAoIW1fc2V0VmVyc2lvblRyYW5zYWN0aW9uKQorICAgICAgICByZXF1
ZXN0LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Tk9UX0FMTE9XRURfRVJSLCAicmVtb3ZlT2JqZWN0U3RvcmUgbXVzdCBiZSBjYWxsZWQgZnJv
bSB3aXRoaW4gYSBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uLiIpKTsKKyAgICBlbHNlCisgICAgICAg
IG1fYmFja2VuZC0+cmVtb3ZlT2JqZWN0U3RvcmUobmFtZSwgcmVxdWVzdCwgbV9zZXRWZXJzaW9u
VHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCiBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQkRhdGFiYXNlOjpzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsKLSAgICBSZWZQdHI8SURCUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0
ZSh0aGlzKSk7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0Ojpj
cmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOwogICAgIG1fYmFja2VuZC0+
c2V0VmVyc2lvbih2ZXJzaW9uLCByZXF1ZXN0KTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KQEAg
LTg5LDYgKzk2LDExIEBAIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0
cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250CiAgICAgcmV0dXJuIHRyYW5z
YWN0aW9uLnJlbGVhc2UoKTsKIH0KIAordm9pZCBJREJEYXRhYmFzZTo6Y2xvc2UoKQoreworICAg
IG1fYmFja2VuZC0+Y2xvc2UoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2UuaCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5oCmluZGV4IGRj
NzAxMTQ0OWIxODRmZmM1Njg1OTRiZTBkZTExNGU2ODJiYTZjYjUuLmNmOTUzMTdhN2Y0M2VhMDJh
YmIxYTRhNWFhYjZmYjFiNWEwY2ViYzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJE
YXRhYmFzZS5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5oCkBAIC01MCwyMiAr
NTAsMjUgQEAgcHVibGljOgogICAgIH0KICAgICB+SURCRGF0YWJhc2UoKTsKIAorICAgIHZvaWQg
c2V0U2V0VmVyc2lvblRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSop
OworCiAgICAgLy8gSW1wbGVtZW50IHRoZSBJREwKICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZC0+bmFtZSgpOyB9CiAgICAgU3RyaW5nIHZlcnNpb24oKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmQtPnZlcnNpb24oKTsgfQogICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5n
TGlzdD4gb2JqZWN0U3RvcmVzKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT5vYmplY3RTdG9y
ZXMoKTsgfQogCiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjcmVhdGVPYmplY3RTdG9yZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGggPSBTdHJpbmcoKSwgYm9vbCBhdXRvSW5jcmVtZW50ID0gZmFsc2UpOwotICAgIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
dW5zaWduZWQgc2hvcnQgbW9kZSA9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwogICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gcmVtb3ZlT2JqZWN0U3RvcmUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBz
ZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHZlcnNpb24p
OwogICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBET01TdHJpbmdMaXN0KiBzdG9yZU5hbWVzID0gMCwgdW5zaWduZWQgc2hv
cnQgbW9kZSA9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMCk7IC8vIEZJ
WE1FOiB3aGF0IHNob3VsZCB0aGUgZGVmYXVsdCB0aW1lb3V0IGJlPworICAgIHZvaWQgY2xvc2Uo
KTsKIAogcHJpdmF0ZToKICAgICBJREJEYXRhYmFzZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZT4pOwogCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZT4gbV9iYWNrZW5kOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IG1fc2V0VmVyc2lvblRyYW5zYWN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbCBiL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZS5pZGwKaW5kZXggMzQ3YjNhN2M4NDFmOTdkNWFiNDFlZGE2MjVmMjRi
ZTNhMTE5MWNkYy4uMzBjZGYzMDNlNTVlNzllMmEwYzBjZTlhMWI1ODllMGRhNDY3MTQ2NSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbAorKysgYi9XZWJDb3JlL3N0
b3JhZ2UvSURCRGF0YWJhc2UuaWRsCkBAIC0zMiwxNCArMzIsMTEgQEAgbW9kdWxlIHN0b3JhZ2Ug
ewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZlcnNpb247CiAgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmdMaXN0IG9iamVjdFN0b3JlczsKIAotCiAgICAg
ICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGNyZWF0ZU9i
amVjdFN0b3JlKGluIERPTVN0cmluZyBuYW1lLCBpbiBbT3B0aW9uYWwsIENvbnZlcnROdWxsVG9O
dWxsU3RyaW5nXSBET01TdHJpbmcga2V5UGF0aCwgaW4gW09wdGlvbmFsXSBib29sZWFuIGF1dG9J
bmNyZW1lbnQpOwotICAgICAgICAvLyBGSVhNRTogb2JqZWN0U3RvcmUgbmVlZHMgdG8gYmUgYWJs
ZSB0byByYWlzZSBhbiBJREJEYXRhYmFzZUV4Y2VwdGlvbi4KLSAgICAgICAgSURCT2JqZWN0U3Rv
cmUgb2JqZWN0U3RvcmUoaW4gRE9NU3RyaW5nIG5hbWUsIGluIFtPcHRpb25hbF0gdW5zaWduZWQg
c2hvcnQgbW9kZSk7CiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJ
REJSZXF1ZXN0IHJlbW92ZU9iamVjdFN0b3JlKGluIERPTVN0cmluZyBuYW1lKTsKICAgICAgICAg
W0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qgc2V0VmVyc2lvbihp
biBET01TdHJpbmcgdmVyc2lvbik7CiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25D
b250ZXh0XSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbiAoaW4gW09wdGlvbmFsXSBET01TdHJp
bmdMaXN0IHN0b3JlTmFtZXMsIGluIFtPcHRpb25hbF0gdW5zaWduZWQgc2hvcnQgbW9kZSwgaW4g
W09wdGlvbmFsXSB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwotICAgICAgICAvLyBGSVhNRTogQWRk
IGNsb3NlLgorICAgICAgICB2b2lkIGNsb3NlKCk7CiAgICAgfTsKIAogfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9y
YWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IGI4ZmU5YjUwNjJmNmQ2MDMwNWJj
MWQ1YzYwMTVkZDAwMjJmYzc1NDEuLjQ1M2Y4NWQxOTgwYzVkMThkODg3OTc5NWMyOTVmYjI4MDM4
ODdiNmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAg
LTI2LDE2ICsyNiwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklEQkRhdGFi
YXNlQmFja2VuZEltcGwuaCIKIAorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5j
bHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5o
IgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTUUxp
dGVEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNR
TGl0ZVRyYW5zYWN0aW9uLmgiCiAKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgYm9vbCBleHRyYWN0TWV0YURhdGEoU1FMaXRlRGF0
YWJhc2UqIHNxbGl0ZURhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkTmFtZSwgU3RyaW5n
JiBmb3VuZERlc2NyaXB0aW9uLCBTdHJpbmcmIGZvdW5kVmVyc2lvbikKQEAgLTEyNSwxNCArMTI3
LDIyIEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
b2JqZWN0U3RvcmVzKCkgY29uc3QKICAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lcy5yZWxlYXNl
KCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3Jl
bWVudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvbikKIHsKLSAgICBpZiAobV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkpIHsKKyAg
ICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOworICAgIFJl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsLCBkYXRhYmFzZSwgbmFtZSwga2V5
UGF0aCwgYXV0b0luY3JlbWVudCwgY2FsbGJhY2tzKSkpCisgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9B
TExPV0VEX0VSUiwgImNyZWF0ZU9iamVjdFN0b3JlIG11c3QgYmUgY2FsbGVkIGZyb20gd2l0aGlu
IGEgc2V0VmVyc2lvbiB0cmFuc2FjdGlvbi4iKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBpZiAoZGF0YWJhc2UtPm1f
b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUpKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJ
TlRfRVJSLCAiQW4gb2JqZWN0U3RvcmUgd2l0aCB0aGF0IG5hbWUgYWxyZWFkeSBleGlzdHMuIikp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IGluc2VydChz
cWxpdGVEYXRhYmFzZSgpLCAiSU5TRVJUIElOVE8gT2JqZWN0U3RvcmVzIChuYW1lLCBrZXlQYXRo
LCBkb0F1dG9JbmNyZW1lbnQpIFZBTFVFUyAoPywgPywgPykiKTsKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgaW5zZXJ0KGRhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLCAiSU5TRVJUIElOVE8gT2JqZWN0
U3RvcmVzIChuYW1lLCBrZXlQYXRoLCBkb0F1dG9JbmNyZW1lbnQpIFZBTFVFUyAoPywgPywgPyki
KTsKICAgICBib29sIG9rID0gaW5zZXJ0LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKICAgICBB
U1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCiAg
ICAgaW5zZXJ0LmJpbmRUZXh0KDEsIG5hbWUpOwpAQCAtMTQwLDExICsxNTAsMTEgQEAgdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYKICAgICBpbnNlcnQuYmluZEludCgzLCBzdGF0aWNfY2FzdDxpbnQ+
KGF1dG9JbmNyZW1lbnQpKTsKICAgICBvayA9IGluc2VydC5zdGVwKCkgPT0gU1FMUmVzdWx0RG9u
ZTsKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFu
ZGxpbmcuCi0gICAgaW50NjRfdCBpZCA9IHNxbGl0ZURhdGFiYXNlKCkubGFzdEluc2VydFJvd0lE
KCk7CisgICAgaW50NjRfdCBpZCA9IGRhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLmxhc3RJbnNl
cnRSb3dJRCgpOwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIGlkLCBuYW1l
LCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUo
ZGF0YWJhc2UuZ2V0KCksIGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKICAgICBB
U1NFUlQob2JqZWN0U3RvcmUtPm5hbWUoKSA9PSBuYW1lKTsKLSAgICBtX29iamVjdFN0b3Jlcy5z
ZXQobmFtZSwgb2JqZWN0U3RvcmUpOworICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5zZXQo
bmFtZSwgb2JqZWN0U3RvcmUpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKG9iamVjdFN0b3Jl
LmdldCgpKTsKIH0KIApAQCAtMTY2LDMxICsxNzYsNDYgQEAgc3RhdGljIHZvaWQgZG9EZWxldGUo
U1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBjaGFyKiBzcWwsIGludDY0X3QgaWQpCiAgICAgQVNT
RVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgogfQog
Ci12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
ayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVj
dFN0b3JlSW50ZXJuYWwsIGRhdGFiYXNlLCBuYW1lLCBjYWxsYmFja3MpKSkKKyAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Tk9UX0FMTE9XRURfRVJSLCAicmVtb3ZlT2JqZWN0U3RvcmUgbXVzdCBiZSBjYWxsZWQg
ZnJvbSB3aXRoaW4gYSBzZXRWZXJzaW9uIHRyYW5zYWN0aW9uLiIpKTsKK30KKwordm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
CiB7Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0g
bV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSA9IGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5nZXQobmFtZSk7
CiAgICAgaWYgKCFvYmplY3RTdG9yZSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJS
LCAiTm8gb2JqZWN0U3RvcmUgd2l0aCB0aGF0IG5hbWUgZXhpc3RzLiIpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKHNxbGl0ZURh
dGFiYXNlKCkpOwotICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7Ci0gICAgZG9EZWxldGUoc3FsaXRl
RGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIE9iamVjdFN0b3JlcyBXSEVSRSBpZCA9ID8iLCBvYmpl
Y3RTdG9yZS0+aWQoKSk7Ci0gICAgZG9EZWxldGUoc3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBG
Uk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIsIG9iamVjdFN0b3Jl
LT5pZCgpKTsKLSAgICBkb0RlbGV0ZShzcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gSW5k
ZXhEYXRhIFdIRVJFIGluZGV4SWQgSU4gKFNFTEVDVCBpZCBGUk9NIEluZGV4ZXMgV0hFUkUgb2Jq
ZWN0U3RvcmVJZCA9ID8pIiwgb2JqZWN0U3RvcmUtPmlkKCkpOwotICAgIGRvRGVsZXRlKHNxbGl0
ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBJbmRleGVzIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/
Iiwgb2JqZWN0U3RvcmUtPmlkKCkpOwotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIGRv
RGVsZXRlKGRhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLCAiREVMRVRFIEZST00gT2JqZWN0U3Rv
cmVzIFdIRVJFIGlkID0gPyIsIG9iamVjdFN0b3JlLT5pZCgpKTsKKyAgICBkb0RlbGV0ZShkYXRh
YmFzZS0+c3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVS
RSBvYmplY3RTdG9yZUlkID0gPyIsIG9iamVjdFN0b3JlLT5pZCgpKTsKKyAgICBkb0RlbGV0ZShk
YXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVSRSBp
bmRleElkIElOIChTRUxFQ1QgaWQgRlJPTSBJbmRleGVzIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/
KSIsIG9iamVjdFN0b3JlLT5pZCgpKTsKKyAgICBkb0RlbGV0ZShkYXRhYmFzZS0+c3FsaXRlRGF0
YWJhc2UoKSwgIkRFTEVURSBGUk9NIEluZGV4ZXMgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8iLCBv
YmplY3RTdG9yZS0+aWQoKSk7CiAKLSAgICBtX29iamVjdFN0b3Jlcy5yZW1vdmUobmFtZSk7Cisg
ICAgZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLnJlbW92ZShuYW1lKTsKICAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcygpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNp
b24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKIHsKLSAg
ICBtX3ZlcnNpb24gPSB2ZXJzaW9uOwotICAgIHNldE1ldGFEYXRhKG1fc3FsaXRlRGF0YWJhc2Uu
Z2V0KCksIG1fbmFtZSwgbV9kZXNjcmlwdGlvbiwgbV92ZXJzaW9uKTsKLSAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcygpOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFz
ZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJh
Y2tzOworICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZXMgPSBET01TdHJpbmdM
aXN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci0+Y3JlYXRlVHJhbnNhY3Rp
b24ob2JqZWN0U3RvcmVzLmdldCgpLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIDAs
IHRoaXMpOworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFj
a1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbCwgZGF0YWJh
c2UsIHZlcnNpb24sIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tk9UX0FMTE9XRURfRVJSLCAic2V0VmVyc2lvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBh
IHNldFZlcnNpb24gdHJhbnNhY3Rpb24uIikpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiB2ZXJz
aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit7CisgICAgZGF0YWJhc2Ut
Pm1fdmVyc2lvbiA9IHZlcnNpb247CisgICAgc2V0TWV0YURhdGEoZGF0YWJhc2UtPm1fc3FsaXRl
RGF0YWJhc2UuZ2V0KCksIGRhdGFiYXNlLT5tX25hbWUsIGRhdGFiYXNlLT5tX2Rlc2NyaXB0aW9u
LCBkYXRhYmFzZS0+bV92ZXJzaW9uKTsKKyAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0cmFuc2Fj
dGlvbik7CiB9CiAKIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBvYmplY3RT
dG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKQEAgLTE5
OCw2ICsyMjMsMTEgQEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0aW9uKEQKICAgICByZXR1cm4gbV90cmFu
c2FjdGlvbkNvb3JkaW5hdG9yLT5jcmVhdGVUcmFuc2FjdGlvbihvYmplY3RTdG9yZXMsIG1vZGUs
IHRpbWVvdXQsIHRoaXMpOwogfQogCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsb3Nl
KCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCiB2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmxvYWRPYmplY3RTdG9yZXMoKQogewogICAgIFNRTGl0ZVN0YXRlbWVudCBvYmpl
Y3RTdG9yZXNRdWVyeShzcWxpdGVEYXRhYmFzZSgpLCAiU0VMRUNUIGlkLCBuYW1lLCBrZXlQYXRo
LCBkb0F1dG9JbmNyZW1lbnQgRlJPTSBPYmplY3RTdG9yZXMiKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5oCmluZGV4IDdlMDhhZDY1YWZlNDZjYTNlNDM2M2VhZWY2MGIy
NTcwNTNjZTMzYjEuLmI1NzZmYTViODhiMThkM2JjOTc3Y2Y1MWNhNjdkYWU4ZmVlMDM2MjkgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKKysrIGIv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNTAsMTcgKzUwLDE3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgZGVzY3Jp
cHRpb24pOwogICAgIFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSgpIGNvbnN0IHsgcmV0
dXJuICptX3NxbGl0ZURhdGFiYXNlLmdldCgpOyB9CiAKLSAgICAvLyBJbXBsZW1lbnRzIElEQkRh
dGFiYXNlCiAgICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQogICAgIHZpcnR1YWwgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNj
cmlwdGlvbjsgfQogICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBt
X3ZlcnNpb247IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0
U3RvcmVzKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVu
dCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wg
YXV0b0luY3JlbWVudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVk
IHNob3J0IG1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVPYmplY3RTdG9yZShjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogc3RvcmVOYW1lcywgdW5zaWduZWQgc2hv
cnQgbW9kZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2Uo
KTsKIAogICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KIApA
QCAtNjksNiArNjksMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgbG9hZE9iamVjdFN0b3Jlcygp
OwogCisgICAgc3RhdGljIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICBzdGF0aWMgdm9pZCByZW1vdmVPYmplY3RT
dG9yZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPik7CisgICAgc3RhdGljIHZvaWQgc2V0VmVyc2lvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBjb25zdCBTdHJp
bmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKwogICAgIE93blB0cjxTUUxpdGVEYXRhYmFzZT4g
bV9zcWxpdGVEYXRhYmFzZTsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFN0cmluZyBtX2Rlc2Ny
aXB0aW9uOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZS5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5o
CmluZGV4IGEyZTA0MmFlMjAwMDBhNDFjMmY2ZDUwNTA5ZmRhNDc1Zjc1NTM4NDUuLmMwMWRhZGZl
Y2RlZjY2MjA3NjlkOWQ4ZTQ2OTI3Y2MxYThiNTk4MDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU0LDEyICs1NCwxMiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVzKCkgY29uc3QgPSAwOwogCi0gICAg
dmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopID0g
MDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
PiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIHNob3J0IG1vZGUpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
T2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PikgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IHRyYW5zYWN0aW9uKERPTVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNo
b3J0IG1vZGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkgPSAwOwotICAgIC8vIEZJWE1FOiBBZGQg
Y2xvc2UuCisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwIGIv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCmluZGV4IDA2YzA2ZWE0NzE0MWU2NzM4Mjhi
MDUzNDIzNmZjY2MwZWVjMDQwYjMuLmUxYzhjMDdjZTk0ZDBhNWJhYWE4YmQ3YTU3OTRiNDYxYzhh
ZTM5N2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAorKysgYi9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFMKICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+
cGFnZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1
ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSk7
CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoZG9j
dW1lbnQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKICAgICBtX2ZhY3RvcnlCYWNrZW5kLT5v
cGVuKG5hbWUsIGRlc2NyaXB0aW9uLCByZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4o
KSwgZG9jdW1lbnQtPmZyYW1lKCksIGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0
aW5ncygpLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwIGIvV2ViQ29yZS9zdG9y
YWdlL0lEQkluZGV4LmNwcAppbmRleCA1Y2QxMmRkNDAwMzQ4YmYwNTkzOWYwMGQxNzNhNGY1ZDVl
OGMwOTdjLi44ZDc4NDY2NjM5N2IzYzhlYzkwYWNiN2I0NGZlMmYxNGE0OGNiZDkyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9J
REJJbmRleC5jcHAKQEAgLTMzLDEyICszMywxNiBAQAogI2luY2x1ZGUgIklEQktleS5oIgogI2lu
Y2x1ZGUgIklEQktleVJhbmdlLmgiCiAjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgorI2luY2x1ZGUg
IklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUlEQkluZGV4OjpJREJJbmRleChQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFj
ZT4gYmFja2VuZCkKK0lEQkluZGV4OjpJREJJbmRleChQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gYmFja2VuZCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvbikKICAgICA6IG1fYmFja2VuZChiYWNrZW5kKQorICAgICwgbV90cmFuc2FjdGlvbih0
cmFuc2FjdGlvbikKIHsKKyAgICBBU1NFUlQobV9iYWNrZW5kKTsKKyAgICBBU1NFUlQobV90cmFu
c2FjdGlvbik7CiB9CiAKIElEQkluZGV4Ojp+SURCSW5kZXgoKQpAQCAtNDcsMjkgKzUxLDI5IEBA
IElEQkluZGV4Ojp+SURCSW5kZXgoKQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4
OjpvcGVuT2JqZWN0Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24pCiB7
Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29u
dGV4dCwgSURCQW55OjpjcmVhdGUodGhpcykpOwotICAgIG1fYmFja2VuZC0+b3Blbk9iamVjdEN1
cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0KTsKKyAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5vcGVuT2JqZWN0Q3Vy
c29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwog
ICAgIHJldHVybiByZXF1ZXN0OwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4
OjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24pCiB7Ci0gICAg
UmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
SURCQW55OjpjcmVhdGUodGhpcykpOwotICAgIG1fYmFja2VuZC0+b3BlbkN1cnNvcihrZXlSYW5n
ZSwgZGlyZWN0aW9uLCByZXF1ZXN0KTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9
IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFu
c2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKGtleVJhbmdlLCBkaXJl
Y3Rpb24sIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIHJldHVybiByZXF1ZXN0
OwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXRPYmplY3QoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSkKIHsKLSAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0
LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSk7Ci0gICAgbV9iYWNrZW5kLT5nZXRPYmplY3Qoa2V5LCBy
ZXF1ZXN0KTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNy
ZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7
CisgICAgbV9iYWNrZW5kLT5nZXRPYmplY3Qoa2V5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLmdl
dCgpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8
SURCS2V5PiBrZXkpCiB7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1
ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcykpOwotICAgIG1fYmFja2Vu
ZC0+Z2V0KGtleSwgcmVxdWVzdCk7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJ
REJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNh
Y3Rpb24uZ2V0KCkpOworICAgIG1fYmFja2VuZC0+Z2V0KGtleSwgcmVxdWVzdCwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvc3RvcmFnZS9JREJJbmRleC5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmgKaW5kZXgg
NDVmY2ZhMTg3NzRkMjViMDljMjA0MDAwMGVmMGM5ODJlODFiNzg3OC4uYjI1ODA3NzE3N2M3ZjVh
MDdhY2YxZTBmNDllMWJmMjM4OGJkZGI0OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lE
QkluZGV4LmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4LmgKQEAgLTM3LDkgKzM3LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJJbmRleCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPElEQkluZGV4PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXg+
IGNyZWF0ZShQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRl
eChiYWNrZW5kKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXgoYmFja2Vu
ZCwgdHJhbnNhY3Rpb24pKTsKICAgICB9CiAgICAgfklEQkluZGV4KCk7CiAKQEAgLTU1LDkgKzU1
LDEwIEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+KTsKIAogcHJpdmF0ZToKLSAgICBJREJJ
bmRleChQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4pOworICAgIElEQkluZGV4
KFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbik7CiAKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBtX2JhY2tlbmQ7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gbV90cmFuc2FjdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcCBiL1dlYkNv
cmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCA2ZjY5OGM2NDg1MzQwNzE1
NjE3NTVlZDViNGFkZGY2YWRlMThmNDA2Li4xOGUyNGIyMDlkYzcwYmRiZDRkMTVkZmZiNjFkMjE1
NWI0ZWMwZDU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1w
bC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUg
IkNyb3NzVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgogI2luY2x1ZGUg
IklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5oIgpAQCAtNTgsNyArNTksNyBAQCBTdHJpbmcgSURCSW5kZXhCYWNrZW5kSW1wbDo6c3RvcmVO
YW1lKCkKICAgICByZXR1cm4gbV9vYmplY3RTdG9yZS0+bmFtZSgpOwogfQogCi1zdGF0aWMgdm9p
ZCBvcGVuQ3Vyc29ySW50ZXJuYWwoU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlLCBJREJJbmRleEJh
Y2tlbmRJbXBsKiBpbmRleCwgSURCS2V5UmFuZ2UqIHJhbmdlLCB1bnNpZ25lZCBzaG9ydCB1bnR5
cGVkRGlyZWN0aW9uLCBib29sIG9iamVjdEN1cnNvciwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3Mp
Cit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IHVudHlwZWREaXJlY3Rp
b24sIGJvb2wgb2JqZWN0Q3Vyc29yLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24p
CiB7CiAgICAgLy8gU2V2ZXJhbCBmaWxlcyBkZXBlbmQgb24gdGhpcyBvcmRlciBvZiBzZWxlY3Rz
LgogICAgIFN0cmluZyBzcWwgPSBTdHJpbmcoIlNFTEVDVCBJbmRleERhdGEuaWQsIEluZGV4RGF0
YS5rZXlTdHJpbmcsIEluZGV4RGF0YS5rZXlEYXRlLCBJbmRleERhdGEua2V5TnVtYmVyLCAiKQpA
QCAtODAsNyArODEsNyBAQCBzdGF0aWMgdm9pZCBvcGVuQ3Vyc29ySW50ZXJuYWwoU1FMaXRlRGF0
YWJhc2UmIGRhdGFiYXNlLCBJREJJbmRleEJhY2tlbmRJbXBsKiBpbgogICAgIGVsc2UKICAgICAg
ICAgc3FsICs9ICJJbmRleERhdGEua2V5U3RyaW5nIERFU0MsIEluZGV4RGF0YS5rZXlEYXRlIERF
U0MsIEluZGV4RGF0YS5rZXlOdW1iZXIgREVTQywgSW5kZXhEYXRhLmlkIERFU0MiOwogCi0gICAg
T3duUHRyPFNRTGl0ZVN0YXRlbWVudD4gcXVlcnkgPSBhZG9wdFB0cihuZXcgU1FMaXRlU3RhdGVt
ZW50KGRhdGFiYXNlLCBzcWwpKTsKKyAgICBPd25QdHI8U1FMaXRlU3RhdGVtZW50PiBxdWVyeSA9
IGFkb3B0UHRyKG5ldyBTUUxpdGVTdGF0ZW1lbnQoaW5kZXgtPnNxbGl0ZURhdGFiYXNlKCksIHNx
bCkpOwogICAgIGJvb2wgb2sgPSBxdWVyeS0+cHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwogICAg
IEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8K
IApAQCAtOTYsMzIgKzk3LDQyIEBAIHN0YXRpYyB2b2lkIG9wZW5DdXJzb3JJbnRlcm5hbChTUUxp
dGVEYXRhYmFzZSYgZGF0YWJhc2UsIElEQkluZGV4QmFja2VuZEltcGwqIGluCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gY3Vy
c29yID0gSURCQ3Vyc29yQmFja2VuZEltcGw6OmNyZWF0ZShpbmRleCwgcmFuZ2UsIGRpcmVjdGlv
biwgcXVlcnkucmVsZWFzZSgpLCBvYmplY3RDdXJzb3IpOworICAgIFJlZlB0cjxJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGlu
ZGV4LCByYW5nZSwgZGlyZWN0aW9uLCBxdWVyeS5yZWxlYXNlKCksIG9iamVjdEN1cnNvciwgdHJh
bnNhY3Rpb24uZ2V0KCkpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvci5yZWxlYXNl
KCkpOwogfQogCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5PYmplY3RDdXJzb3IoUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCSW5kZXhCYWNrZW5k
SW1wbDo6b3Blbk9iamVjdEN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5n
ZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJw
Q2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRy
KQogewotICAgIG9wZW5DdXJzb3JJbnRlcm5hbChzcWxpdGVEYXRhYmFzZSgpLCB0aGlzLCBrZXlS
YW5nZS5nZXQoKSwgZGlyZWN0aW9uLCB0cnVlLCBjYWxsYmFja3MuZ2V0KCkpOworICAgIFJlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IHRoaXM7CisgICAgUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uUHRyOworICAgIGlmICghdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm9wZW5DdXJzb3JJbnRlcm5h
bCwgaW5kZXgsIGtleVJhbmdlLCBkaXJlY3Rpb24sIHRydWUsIGNhbGxiYWNrcywgdHJhbnNhY3Rp
b24pKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSLCAiR2V0IG11c3QgYmUgY2Fs
bGVkIGluIHRoZSBjb250ZXh0IG9mIGEgdHJhbnNhY3Rpb24uIikpOwogfQogCi12b2lkIElEQklu
ZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcihQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyKQogewotICAgIG9wZW5DdXJzb3JJbnRlcm5hbChzcWxp
dGVEYXRhYmFzZSgpLCB0aGlzLCBrZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uLCBmYWxzZSwgY2Fs
bGJhY2tzLmdldCgpKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0
aGlzOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBLZXlSYW5nZTsKKyAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2Fj
dGlvblB0cjsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZvcGVuQ3Vyc29ySW50ZXJuYWwsIGluZGV4LCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBm
YWxzZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQorICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxM
T1dFRF9FUlIsICJHZXQgbXVzdCBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgYSB0cmFuc2Fj
dGlvbi4iKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldEludGVybmFsKFNRTGl0ZURhdGFiYXNlJiBk
YXRhYmFzZSwgaW50NjQgaWQsIElEQktleSoga2V5LCBib29sIGdldE9iamVjdCwgSURCQ2FsbGJh
Y2tzKiBjYWxsYmFja3MpCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBib29sIGdldE9iamVjdCwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKICAgICBTdHJpbmcgc3FsID0gU3RyaW5nKCJTRUxF
Q1QgIikKICAgICAgICAgICAgICAgICAgKyAoZ2V0T2JqZWN0ID8gIk9iamVjdFN0b3JlRGF0YS52
YWx1ZSAiIDogIk9iamVjdFN0b3JlRGF0YS5rZXlTdHJpbmcsIE9iamVjdFN0b3JlRGF0YS5rZXlE
YXRlLCBPYmplY3RTdG9yZURhdGEua2V5TnVtYmVyICIpCiAgICAgICAgICAgICAgICAgICsgIkZS
T00gSW5kZXhEYXRhIElOTkVSIEpPSU4gT2JqZWN0U3RvcmVEYXRhIE9OIEluZGV4RGF0YS5vYmpl
Y3RTdG9yZURhdGFJZCA9IE9iamVjdFN0b3JlRGF0YS5pZCAiCiAgICAgICAgICAgICAgICAgICsg
IldIRVJFIEluZGV4RGF0YS5pbmRleElkID0gPyAgQU5EICAiICsga2V5LT53aGVyZVN5bnRheCgi
SW5kZXhEYXRhLiIpCiAgICAgICAgICAgICAgICAgICsgIk9SREVSIEJZIEluZGV4RGF0YS5pZCBM
SU1JVCAxIjsgLy8gT3JkZXIgYnkgaW5zZXJ0aW9uIG9yZGVyIHdoZW4gYWxsIGVsc2UgZmFpbHMu
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KGRhdGFiYXNlLCBzcWwpOworICAgIFNRTGl0ZVN0
YXRlbWVudCBxdWVyeShpbmRleC0+c3FsaXRlRGF0YWJhc2UoKSwgc3FsKTsKICAgICBib29sIG9r
ID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwogICAgIEFTU0VSVF9VTlVTRUQob2ss
IG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KIAotICAgIHF1ZXJ5LmJpbmRJ
bnQ2NCgxLCBpZCk7CisgICAgcXVlcnkuYmluZEludDY0KDEsIGluZGV4LT5pZCgpKTsKICAgICBr
ZXktPmJpbmQocXVlcnksIDIpOwogICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93
KSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlIsICJLZXkgZG9lcyBub3QgZXhpc3Qg
aW4gdGhlIGluZGV4LiIpKTsKQEAgLTEzNSwxNCArMTQ2LDIyIEBAIHN0YXRpYyB2b2lkIGdldElu
dGVybmFsKFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSwgaW50NjQgaWQsIElEQktleSoga2V5LCBi
b29sIGdlCiAgICAgQVNTRVJUKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpOwogfQogCi12
b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldE9iamVjdChQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJJbmRleEJhY2tl
bmRJbXBsOjpnZXRPYmplY3QoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbikKIHsKLSAgICBnZXRJbnRlcm5hbChzcWxpdGVEYXRhYmFzZSgpLCBtX2lk
LCBrZXkuZ2V0KCksIHRydWUsIGNhbGxiYWNrcy5nZXQoKSk7CisgICAgUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+IGluZGV4ID0gdGhpczsKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBL
ZXk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwor
ICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmdl
dEludGVybmFsLCBpbmRleCwga2V5LCB0cnVlLCBjYWxsYmFja3MpKSkKKyAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Tk9UX0FMTE9XRURfRVJSLCAiR2V0IG11c3QgYmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9m
IGEgdHJhbnNhY3Rpb24uIikpOwogfQogCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldChQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtl
eSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKIHsKLSAgICBnZXRJbnRlcm5hbChzcWxpdGVE
YXRhYmFzZSgpLCBtX2lkLCBrZXkuZ2V0KCksIGZhbHNlLCBjYWxsYmFja3MuZ2V0KCkpOworICAg
IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IHRoaXM7CisgICAgUmVmUHRyPElE
QktleT4ga2V5ID0gcHJwS2V5OworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9
IHBycENhbGxiYWNrczsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRl
Q2FsbGJhY2tUYXNrKCZnZXRJbnRlcm5hbCwgaW5kZXgsIGtleSwgZmFsc2UsIGNhbGxiYWNrcykp
KQorICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlIsICJHZXQgbXVzdCBiZSBjYWxsZWQg
aW4gdGhlIGNvbnRleHQgb2YgYSB0cmFuc2FjdGlvbi4iKSk7CiB9CiAKIHN0YXRpYyBTdHJpbmcg
d2hlcmVDbGF1c2UoSURCS2V5KiBrZXkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURC
SW5kZXhCYWNrZW5kSW1wbC5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwu
aAppbmRleCBhOThlZDJhOGUzZGQwNzBhYjVjZDdjOTRiMzkyMGE1ODE0NTE4Y2MxLi4yZDA2YzY5
N2VjOThhOGUxOGU3ZWZlZjlhOWE3ZDE4YTQ4OTQ0NjI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0
b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRl
eEJhY2tlbmRJbXBsLmgKQEAgLTM1LDYgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgSURCS2V5OwogY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIGNsYXNzIFNRTGl0
ZURhdGFiYXNlOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURCSW5k
ZXhCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UgewogcHVibGlj
OgpAQCAtNTMsMTAgKzU0LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBrZXlQYXRo
KCkgeyByZXR1cm4gbV9rZXlQYXRoOyB9CiAgICAgdmlydHVhbCBib29sIHVuaXF1ZSgpIHsgcmV0
dXJuIG1fdW5pcXVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgb3Blbk9iamVjdEN1cnNvcihQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4pOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPik7Ci0gICAgdmlydHVhbCB2b2lkIGdldE9iamVjdChQYXNzUmVmUHRyPElEQktleT4s
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVm
UHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lk
IG9wZW5PYmplY3RDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0
IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9p
ZCBnZXRPYmplY3QoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBnZXQo
UGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSopOwogCiAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCog
b2JqZWN0U3RvcmUoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlLmdldCgpOyB9CiAKQEAg
LTY1LDYgKzY2LDkgQEAgcHJpdmF0ZToKIAogICAgIFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRh
YmFzZSgpIGNvbnN0OwogCisgICAgc3RhdGljIHZvaWQgb3BlbkN1cnNvckludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBib29sIG9iamVj
dEN1cnNvciwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQktleT4sIGJvb2wgZ2V0T2JqZWN0LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4p
OworCiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7
CiAKICAgICBpbnQ2NF90IG1faWQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5k
ZXhCYWNrZW5kSW50ZXJmYWNlLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlLmgKaW5kZXggZmYyMzE2ZjM0MTVjOGU1MDc0MmVlZDgwMjdkYmMxYjY4YTNhYTQzZi4u
ZmEzOTVhMDRhMjFiYWQwZTllNTBmN2QxMjgyZGExZDIwYjUwZWM5MyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oCisrKyBiL1dlYkNvcmUvc3Rv
cmFnZS9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaApAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBJREJDYWxsYmFja3M7CiBjbGFzcyBJREJLZXk7CiBjbGFzcyBJ
REJLZXlSYW5nZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKIAogY2xh
c3MgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8SURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlPiB7CiBwdWJsaWM6CkBAIC00NiwxMCArNDcsMTAgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKSA9IDA7CiAgICAgdmlydHVhbCBib29s
IHVuaXF1ZSgpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBvcGVuT2JqZWN0Q3Vyc29yKFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3QoUGFzc1JlZlB0cjxJ
REJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Z2V0KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIG9wZW5PYmplY3RDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4s
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9wZW5D
dXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdChQYXNzUmVmUHRyPElEQktleT4sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopID0gMDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9J
REJLZXkuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5jcHAKaW5kZXggM2VlYzM2Yzc4NTMz
MjIzMDFmOWI1Y2ZmYjhmNGZmNTFhNmRmZjJiZC4uZDBmM2MyYjNjMjdkYWUzMjQyMTMxYTNiMjI0
MDUwMWU0MjIyMTY4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5jcHAKKysr
IGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgSURCS2V5OjpJ
REJLZXkoaW50MzJfdCBudW1iZXIpCiAKIElEQktleTo6SURCS2V5KGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQogICAgIDogbV90eXBlKFN0cmluZ1R5cGUpCi0gICAgLCBtX3N0cmluZyhzdHJpbmcpCisg
ICAgLCBtX3N0cmluZyhzdHJpbmcuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKIHsKIH0KIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleS5o
CmluZGV4IDMxNzVlN2U4ZGViM2ZkZjY0NDk2Y2QzMmFmOGE4ODIxYmE0OTFlNDcuLjAzMDNhMzgy
YTQ0YjVhZmI0Zjg4NDIwZWQwNzM5MDE5YzIyNjhmN2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3Rv
cmFnZS9JREJLZXkuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5LmgKQEAgLTI2LDE3ICsy
NiwxOCBAQAogI2lmbmRlZiBJREJLZXlfaAogI2RlZmluZSBJREJLZXlfaAogCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU1FM
aXRlU3RhdGVtZW50OwogCiAvLyBGSVhNRTogQWRkIGRhdGVzLgotY2xhc3MgSURCS2V5IDogcHVi
bGljIFJlZkNvdW50ZWQ8SURCS2V5PiB7CitjbGFzcyBJREJLZXkgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVNoYXJlZDxJREJLZXk+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+
IGNyZWF0ZSgpCiAgICAgewpAQCAtODIsNiArODMsOSBAQCBwdWJsaWM6CiAgICAgaW50IGJpbmQo
U1FMaXRlU3RhdGVtZW50JiBxdWVyeSwgaW50IGNvbHVtbikgY29uc3Q7CiAgICAgdm9pZCBiaW5k
V2l0aE51bGxzKFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludCBiYXNlQ29sdW1uKSBjb25zdDsK
IAorICAgIHVzaW5nIFRocmVhZFNhZmVTaGFyZWQ8SURCS2V5Pjo6cmVmOworICAgIHVzaW5nIFRo
cmVhZFNhZmVTaGFyZWQ8SURCS2V5Pjo6ZGVyZWY7CisKIHByaXZhdGU6CiAgICAgSURCS2V5KCk7
CiAgICAgZXhwbGljaXQgSURCS2V5KGludDMyX3QpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9y
YWdlL0lEQktleVJhbmdlLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UmFuZ2UuaAppbmRleCA0
NjIxYTUwMzUyNTVmNjIwYzAwZjhiN2RiZGFhNTQ1YjQ3NDNkOGM5Li5kMjQ2ZWJjYzFiYzZjOTEy
NjcyMWFhZDVmMmMzMDUwNWYyZmZkZGRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5UmFuZ2UuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UmFuZ2UuaApAQCAtMzAsMTEg
KzMwLDExIEBACiAKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElEQktleVJhbmdlIDogcHVibGlj
IFJlZkNvdW50ZWQ8SURCS2V5UmFuZ2U+IHsKK2NsYXNzIElEQktleVJhbmdlIDogcHVibGljIFRo
cmVhZFNhZmVTaGFyZWQ8SURCS2V5UmFuZ2U+IHsKIHB1YmxpYzoKICAgICAvLyBLZWVwIGluIHN5
bmMgd2l0aCB3aGF0J3MgaW4gdGhlIC5pZGwgZmlsZS4KICAgICBlbnVtIEZsYWdzIHsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAgYi9XZWJDb3JlL3N0b3Jh
Z2UvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDRjNWNmMzQwZWQ5M2Q4MzljMjE5MzYwMmFhMWQy
ZjI0NTNiNDc4MjYuLmE4MWUxN2ZmZjYxZjgyMmY5MzUxZTUxODYzMDllNWViY2UwNGNjYTAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvV2ViQ29y
ZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtNDMsNiArNDMsOCBAQCBJREJPYmplY3RT
dG9yZTo6SURCT2JqZWN0U3RvcmUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U+IGlkYk9iagogICAgIDogbV9vYmplY3RTdG9yZShpZGJPYmplY3RTdG9yZSkKICAgICAs
IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiB7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmUp
OworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKICAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNl
IHRvIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRlZC4KICAgICByZWxheEFkb3B0
aW9uUmVxdWlyZW1lbnQoKTsKIH0KQEAgLTcxLDI5ICs3MywyOSBAQCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzcwogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5KQogewotICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3Jl
YXRlKHRoaXMpKTsKLSAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgdHJ1ZSwgcmVx
dWVzdCk7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVh
dGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwor
ICAgIG1fb2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCB0cnVlLCByZXF1ZXN0LCBtX3RyYW5z
YWN0aW9uLmdldCgpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIAogUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSkKIHsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSk7Ci0gICAgbV9vYmplY3RT
dG9yZS0+cHV0KHZhbHVlLCBrZXksIGZhbHNlLCByZXF1ZXN0KTsKKyAgICBSZWZQdHI8SURCUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0
ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9vYmplY3RTdG9yZS0+cHV0KHZh
bHVlLCBrZXksIGZhbHNlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICByZXR1
cm4gcmVxdWVzdDsKIH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
cmVtb3ZlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXkpCiB7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0Ojpj
cmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcykpOwotICAgIG1fb2JqZWN0U3RvcmUt
PnJlbW92ZShrZXksIHJlcXVlc3QpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0g
SURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5z
YWN0aW9uLmdldCgpKTsKKyAgICBtX29iamVjdFN0b3JlLT5yZW1vdmUoa2V5LCByZXF1ZXN0LCBt
X3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIAogUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgsIGJvb2wgdW5pcXVlKQogewotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURC
UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpKTsKLSAgICBtX29i
amVjdFN0b3JlLT5jcmVhdGVJbmRleChuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIHJlcXVlc3QpOwor
ICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRl
eHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX29i
amVjdFN0b3JlLT5jcmVhdGVJbmRleChuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIHJlcXVlc3QsIG1f
dHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCkBAIC0xMDMsMjAg
KzEwNSwyMCBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lKQogICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGlu
ZGV4ID0gbV9vYmplY3RTdG9yZS0+aW5kZXgobmFtZSk7CiAgICAgaWYgKCFpbmRleCkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIElEQkluZGV4OjpjcmVhdGUoaW5kZXgucmVsZWFzZSgp
KTsKKyAgICByZXR1cm4gSURCSW5kZXg6OmNyZWF0ZShpbmRleC5yZWxlYXNlKCksIG1fdHJhbnNh
Y3Rpb24uZ2V0KCkpOwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3Jl
OjpyZW1vdmVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIG5hbWUpCiB7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0
OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcykpOwotICAgIG1fb2JqZWN0U3Rv
cmUtPnJlbW92ZUluZGV4KG5hbWUsIHJlcXVlc3QpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBy
ZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMp
LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX29iamVjdFN0b3JlLT5yZW1vdmVJbmRleChu
YW1lLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICByZXR1cm4gcmVxdWVzdDsK
IH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBy
YW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uKQogewotICAgIFJlZlB0cjxJREJSZXF1ZXN0
PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRo
aXMpKTsKLSAgICBtX29iamVjdFN0b3JlLT5vcGVuQ3Vyc29yKHJhbmdlLCBkaXJlY3Rpb24sIHJl
cXVlc3QpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3Jl
YXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsK
KyAgICBtX29iamVjdFN0b3JlLT5vcGVuQ3Vyc29yKHJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3Qs
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbCBiL1dlYkNv
cmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5pZGwKaW5kZXggY2NkMDMxMWM4MGJlYjVmMGVjODQw
NzA0ZDZmZDJlN2U5NGI3MDk2Yi4uYzhhYTM1ZDI4MGMwNzJkNmIxYWUxM2JjYWUxMjhmMGJjMDU4
NDlhYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbAorKysg
Yi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaWRsCkBAIC0yOCwyMSArMjgsMTggQEAg
bW9kdWxlIHN0b3JhZ2UgewogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPUlO
REVYRURfREFUQUJBU0UKICAgICBdIElEQk9iamVjdFN0b3JlIHsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBuYW1lOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0Nv
bnZlcnROdWxsU3RyaW5nVG89TnVsbF0gRE9NU3RyaW5nIGtleVBhdGg7CisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBET01TdHJpbmdMaXN0IGluZGV4TmFtZXM7CisKICAgICAgICAgLy8gRklY
TUU6IE1hbnkgb2YgdGhlc2Ugc2hvdWxkIHJhaXNlIG9uIGNlcnRhaW4gZXJyb3JzLgogICAgICAg
ICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBnZXQoaW4gSURC
S2V5IGtleSk7ICAgICAgICAKICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRdIElEQlJlcXVlc3QgYWRkKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09w
dGlvbmFsXSBJREJLZXkga2V5KTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRdIElEQlJlcXVlc3QgcHV0KGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4g
W09wdGlvbmFsXSBJREJLZXkga2V5KTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRdIElEQlJlcXVlc3QgcmVtb3ZlKGluIElEQktleSBrZXkpOwotICAgICAgICAvLyBG
SVhNRTogd3JpdGUgb3BlbkN1cnNvcgogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9u
Q29udGV4dF0gSURCUmVxdWVzdCBjcmVhdGVJbmRleChpbiBET01TdHJpbmcgbmFtZSwgaW4gW0Nv
bnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcga2V5UGF0aCwgaW4gW09wdGlvbmFsXSBi
b29sZWFuIHVuaXF1ZSk7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIHJhaXNlIGFu
IElEQkRhdGFiYXNlRXhjZXB0aW9uIG9uIGVycm9ycy4KICAgICAgICAgSURCSW5kZXggaW5kZXgo
aW4gRE9NU3RyaW5nIG5hbWUpOwogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dF0gSURCUmVxdWVzdCByZW1vdmVJbmRleChpbiBET01TdHJpbmcgbmFtZSk7Ci0KICAgICAg
ICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qgb3BlbkN1cnNv
cihpbiBbT3B0aW9uYWxdIElEQktleVJhbmdlIHJhbmdlLCBpbiBbT3B0aW9uYWxdIHVuc2lnbmVk
IHNob3J0IGRpcmVjdGlvbik7Ci0KLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyBuYW1lOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsU3RyaW5nVG89
TnVsbF0gRE9NU3RyaW5nIGtleVBhdGg7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmdMaXN0IGluZGV4TmFtZXM7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCAxOGQ2YjBjMjgwNmEyOTdmOTYyNDgxZDRm
N2Q2YTAzZjEwNWU0MThiLi41MGEyZGVjMjdjZTk3MzVkMjMwOGNlNmJmNjNhMmY3ODU5MjRlODdm
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBA
IC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5oIgogCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNp
bmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAj
aW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5o
IgpAQCAtMzMsNiArMzYsNyBAQAogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIK
ICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkluZGV4QmFj
a2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgi
CiAjaW5jbHVkZSAiSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFu
Z2UuaCIKQEAgLTQyLDM3ICs0Niw4IEBACiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAj
aW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKIAotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBN
ZXRob2QsIGNsYXNzIFBhcmFtMSwgY2xhc3MgUGFyYW0yPgotY2xhc3MgSURCVGFzayA6IHB1Ymxp
YyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKLXB1YmxpYzoKLSAgICBJREJUYXNrKFQq
IG9iaiwgTWV0aG9kIG1ldGhvZCwgY29uc3QgUGFyYW0xJiBwYXJhbTEsIGNvbnN0IFBhcmFtMiYg
cGFyYW0yKQotICAgICAgICA6IG1fb2JqKG9iaiksIG1fbWV0aG9kKG1ldGhvZCksIG1fcGFyYW0x
KHBhcmFtMSksIG1fcGFyYW0yKHBhcmFtMikgCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgCi0gICAgewotICAgICAg
ICBpZiAobV9vYmopCi0gICAgICAgICAgICAobV9vYmotPiptX21ldGhvZCkobV9wYXJhbTEsIG1f
cGFyYW0yKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgVCogbV9vYmo7Ci0gICAgTWV0aG9kIG1f
bWV0aG9kOwotICAgIFBhcmFtMSBtX3BhcmFtMTsKLSAgICBQYXJhbTIgbV9wYXJhbTI7Ci19Owot
Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgTWV0aG9kLCBjbGFzcyBQYXJhbTEsIGNsYXNzIFBh
cmFtMj4KLVBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlVGFz
ayhUKiBvYmplY3QsIE1ldGhvZCBtZXRob2QsIGNvbnN0IFBhcmFtMSYgcGFyYW0xLCBjb25zdCBQ
YXJhbTImIHBhcmFtMikKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IElEQlRhc2s8VCwgTWV0
aG9kLCBQYXJhbTEsIFBhcmFtMj4ob2JqZWN0LCBtZXRob2QsIHBhcmFtMSwgcGFyYW0yKSk7Ci19
Ci0KIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6On5JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
KCkKIHsKIH0KQEAgLTEwNiwxOSArODEsMjIgQEAgc3RhdGljIHZvaWQgYmluZFdoZXJlQ2xhdXNl
KFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludDY0X3QgaWQsIElEQktleSoga2V5KQogICAgIGtl
eS0+YmluZChxdWVyeSwgMik7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Z2V0KFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCit2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldChQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewotICAgIGlmICghdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhjcmVhdGVUYXNrKHRoaXMsICZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpn
ZXRJbnRlcm5hbCwga2V5LCBjYWxsYmFja3MpKSkKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9X
RURfRVJSLCAiR2V0IG11c3QgYmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIGEgdHJhbnNhY3Rp
b24uIikpOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OworICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBpZiAoIXRyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGtleSwgY2FsbGJhY2tzKSkpCisgICAg
ICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUiwgImdldCBtdXN0IGJlIGNhbGxlZCBpbiB0aGUg
Y29udGV4dCBvZiBhIHRyYW5zYWN0aW9uLiIpKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpnZXRJbnRlcm5hbChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgcXVlcnkoc3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCBrZXlTdHJpbmcsIGtleURhdGUsIGtl
eU51bWJlciwgdmFsdWUgRlJPTSBPYmplY3RTdG9yZURhdGEgIiArIHdoZXJlQ2xhdXNlKGtleS5n
ZXQoKSkpOworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShvYmplY3RTdG9yZS0+c3FsaXRlRGF0
YWJhc2UoKSwgIlNFTEVDVCBrZXlTdHJpbmcsIGtleURhdGUsIGtleU51bWJlciwgdmFsdWUgRlJP
TSBPYmplY3RTdG9yZURhdGEgIiArIHdoZXJlQ2xhdXNlKGtleS5nZXQoKSkpOwogICAgIGJvb2wg
b2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CiAgICAgQVNTRVJUX1VOVVNFRChv
aywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nPwogCi0gICAgYmluZFdoZXJl
Q2xhdXNlKHF1ZXJ5LCBtX2lkLCBrZXkuZ2V0KCkpOworICAgIGJpbmRXaGVyZUNsYXVzZShxdWVy
eSwgb2JqZWN0U3RvcmUtPmlkKCksIGtleS5nZXQoKSk7CiAgICAgaWYgKHF1ZXJ5LnN0ZXAoKSAh
PSBTUUxSZXN1bHRSb3cpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUiwgIktleSBk
b2VzIG5vdCBleGlzdCBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMTg1LDE3ICsxNjMsMjcgQEAgc3RhdGljIHZvaWQgcHV0SW5kZXhEYXRhKFNRTGl0ZURhdGFi
YXNlJiBkYiwgSURCS2V5KiBrZXksIGludDY0X3QgaW5kZXhJZCwgaW50NjQKICAgICBBU1NFUlRf
VU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CiB9CiAKLXZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgYm9vbCBhZGRP
bmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBy
cFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBib29sIGFkZE9ubHksIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24pCiB7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlID0gdGhpczsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZSA9IHBycFZhbHVlOwogICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKyAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgaWYg
KCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBh
ZGRPbmx5LCBjYWxsYmFja3MpKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSLCAi
cHV0IG11c3QgYmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIGEgdHJhbnNhY3Rpb24uIikpOwor
fQogCi0gICAgaWYgKCFtX2tleVBhdGguaXNOdWxsKCkpIHsKK3ZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwg
Ym9vbCBhZGRPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAg
IFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7CisgICAgUmVm
UHRyPElEQktleT4ga2V5ID0gcHJwS2V5OworCisgICAgaWYgKCFvYmplY3RTdG9yZS0+bV9rZXlQ
YXRoLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChrZXkpIHsKICAgICAgICAgICAgIGNhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVOS05PV05fRVJSLCAiQSBrZXkgd2FzIHN1cHBsaWVkIGZvciBhbiBvYmplY3RTdG9yZSB0aGF0
IGhhcyBhIGtleVBhdGguIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIGtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIG1fa2V5UGF0aCk7Cisg
ICAgICAgIGtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIG9iamVjdFN0b3Jl
LT5tX2tleVBhdGgpOwogICAgICAgICBpZiAoIWtleSkgewogICAgICAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VU5LTk9XTl9FUlIsICJUaGUga2V5IGNvdWxkIG5vdCBiZSBmZXRjaGVkIGZyb20gdGhlIGtleVBh
dGguIikpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjA2LDcgKzE5NCw3IEBAIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBwcnBWYWx1ZSwKICAgICB9CiAKICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRl
eEtleXM7Ci0gICAgZm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4o
KTsgaXQgIT0gbV9pbmRleGVzLmVuZCgpOyArK2l0KSB7CisgICAgZm9yIChJbmRleE1hcDo6aXRl
cmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0
b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5
ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgaXQtPnNlY29uZC0+a2V5UGF0aCgp
KTsKICAgICAgICAgaWYgKCFrZXkpIHsKICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJS
LCAiVGhlIGtleSBjb3VsZCBub3QgYmUgZmV0Y2hlZCBmcm9tIGFuIGluZGV4J3Mga2V5UGF0aC4i
KSk7CkBAIC0yMTksMTEgKzIwNywxMSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsCiAgICAgICAg
IGluZGV4S2V5cy5hcHBlbmQoa2V5LnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IGdldFF1ZXJ5KHNxbGl0ZURhdGFiYXNlKCksICJTRUxFQ1QgaWQgRlJPTSBPYmplY3RT
dG9yZURhdGEgIiArIHdoZXJlQ2xhdXNlKGtleS5nZXQoKSkpOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBnZXRRdWVyeShvYmplY3RTdG9yZS0+c3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCBpZCBGUk9N
IE9iamVjdFN0b3JlRGF0YSAiICsgd2hlcmVDbGF1c2Uoa2V5LmdldCgpKSk7CiAgICAgYm9vbCBv
ayA9IGdldFF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKICAgICBBU1NFUlRfVU5VU0VE
KG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CiAKLSAgICBiaW5kV2hl
cmVDbGF1c2UoZ2V0UXVlcnksIG1faWQsIGtleS5nZXQoKSk7CisgICAgYmluZFdoZXJlQ2xhdXNl
KGdldFF1ZXJ5LCBvYmplY3RTdG9yZS0+aWQoKSwga2V5LmdldCgpKTsKICAgICBib29sIGlzRXhp
c3RpbmdWYWx1ZSA9IGdldFF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3c7CiAgICAgaWYgKGFk
ZE9ubHkgJiYgaXNFeGlzdGluZ1ZhbHVlKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRf
RVJSLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwpAQCAtMjMz
LDIyICsyMjEsMzEgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLAogICAgIC8vIEJlZm9yZSB0aGlz
IHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uICBBZnRlciB0aGlzIHBvaW50LCBkb24ndCBl
cnJvciBvdXQuCiAKICAgICBpbnQ2NF90IGRhdGFSb3dJZCA9IGlzRXhpc3RpbmdWYWx1ZSA/IGdl
dFF1ZXJ5LmdldENvbHVtbkludCgwKSA6IC0xOwotICAgIHB1dE9iamVjdFN0b3JlRGF0YShzcWxp
dGVEYXRhYmFzZSgpLCBrZXkuZ2V0KCksIHZhbHVlLmdldCgpLCBtX2lkLCAmZGF0YVJvd0lkKTsK
KyAgICBwdXRPYmplY3RTdG9yZURhdGEob2JqZWN0U3RvcmUtPnNxbGl0ZURhdGFiYXNlKCksIGtl
eS5nZXQoKSwgdmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlLT5pZCgpLCAmZGF0YVJvd0lkKTsKIAog
ICAgIGludCBpID0gMDsKLSAgICBmb3IgKEluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhl
cy5iZWdpbigpOyBpdCAhPSBtX2luZGV4ZXMuZW5kKCk7ICsraXQsICsraSkKLSAgICAgICAgcHV0
SW5kZXhEYXRhKHNxbGl0ZURhdGFiYXNlKCksIGluZGV4S2V5c1tpXS5nZXQoKSwgaXQtPnNlY29u
ZC0+aWQoKSwgZGF0YVJvd0lkKTsKKyAgICBmb3IgKEluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9i
amVjdFN0b3JlLT5tX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUtPm1faW5kZXhl
cy5lbmQoKTsgKytpdCwgKytpKQorICAgICAgICBwdXRJbmRleERhdGEob2JqZWN0U3RvcmUtPnNx
bGl0ZURhdGFiYXNlKCksIGluZGV4S2V5c1tpXS5nZXQoKSwgaXQtPnNlY29uZC0+aWQoKSwgZGF0
YVJvd0lkKTsKIAogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGtleS5nZXQoKSk7CiB9CiAKLXZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlKFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnJlbW92ZShQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5
OworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAg
ICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGtleSwg
Y2FsbGJhY2tzKSkpCisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUiwgInJlbW92ZSBt
dXN0IGJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiBhIHRyYW5zYWN0aW9uLiIpKTsKK30KKwor
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkoc3FsaXRlRGF0YWJhc2Uo
KSwgIkRFTEVURSBGUk9NIE9iamVjdFN0b3JlRGF0YSAiICsgd2hlcmVDbGF1c2Uoa2V5LmdldCgp
KSk7CisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG9iamVjdFN0b3JlLT5zcWxpdGVEYXRhYmFz
ZSgpLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRhICIgKyB3aGVyZUNsYXVzZShrZXkuZ2V0
KCkpKTsKICAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwogICAg
IEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8K
IAotICAgIGJpbmRXaGVyZUNsYXVzZShxdWVyeSwgbV9pZCwga2V5LmdldCgpKTsKKyAgICBiaW5k
V2hlcmVDbGF1c2UocXVlcnksIG9iamVjdFN0b3JlLT5pZCgpLCBrZXkuZ2V0KCkpOwogICAgIGlm
IChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkgewogICAgICAgICBjYWxsYmFja3MtPm9u
RXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1Rf
Rk9VTkRfRVJSLCAiS2V5IGRvZXMgbm90IGV4aXN0IGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwog
ICAgICAgICByZXR1cm47CkBAIC0yNTcsMjcgKzI1NCwzNSBAQCB2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnJlbW92ZShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElE
QkNhbAogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24pCiB7Ci0gICAgaWYgKG1faW5kZXhlcy5jb250YWlucyhuYW1lKSkg
eworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRo
aXM7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwor
ICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwsIG9iamVjdFN0b3Jl
LCBuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIGNhbGxiYWNrcykpKQorICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpO
T1RfQUxMT1dFRF9FUlIsICJjcmVhdGVJbmRleCBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgY29udGV4
dCBvZiBhIHRyYW5zYWN0aW9uLiIpKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpjcmVhdGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgaWYgKG9iamVjdFN0b3JlLT5tX2luZGV4ZXMu
Y29udGFpbnMobmFtZSkpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJJbmRl
eCBuYW1lIGFscmVhZHkgZXhpc3RzLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IFNRTGl0ZVN0YXRlbWVudCBpbnNlcnQoc3FsaXRlRGF0YWJhc2UoKSwgIklOU0VSVCBJTlRPIElu
ZGV4ZXMgKG9iamVjdFN0b3JlSWQsIG5hbWUsIGtleVBhdGgsIGlzVW5pcXVlKSBWQUxVRVMgKD8s
ID8sID8sID8pIik7CisgICAgU1FMaXRlU3RhdGVtZW50IGluc2VydChvYmplY3RTdG9yZS0+c3Fs
aXRlRGF0YWJhc2UoKSwgIklOU0VSVCBJTlRPIEluZGV4ZXMgKG9iamVjdFN0b3JlSWQsIG5hbWUs
IGtleVBhdGgsIGlzVW5pcXVlKSBWQUxVRVMgKD8sID8sID8sID8pIik7CiAgICAgYm9vbCBvayA9
IGluc2VydC5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CiAgICAgQVNTRVJUX1VOVVNFRChvaywg
b2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgotICAgIGluc2VydC5iaW5kSW50
NjQoMSwgbV9pZCk7CisgICAgaW5zZXJ0LmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZS0+bV9pZCk7
CiAgICAgaW5zZXJ0LmJpbmRUZXh0KDIsIG5hbWUpOwogICAgIGluc2VydC5iaW5kVGV4dCgzLCBr
ZXlQYXRoKTsKICAgICBpbnNlcnQuYmluZEludCg0LCBzdGF0aWNfY2FzdDxpbnQ+KHVuaXF1ZSkp
OwogICAgIG9rID0gaW5zZXJ0LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwogICAgIEFTU0VSVF9V
TlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KLSAgICBpbnQ2
NF90IGlkID0gc3FsaXRlRGF0YWJhc2UoKS5sYXN0SW5zZXJ0Um93SUQoKTsKKyAgICBpbnQ2NF90
IGlkID0gb2JqZWN0U3RvcmUtPnNxbGl0ZURhdGFiYXNlKCkubGFzdEluc2VydFJvd0lEKCk7CiAK
LSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJ
bXBsOjpjcmVhdGUodGhpcywgaWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSk7CisgICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRl
KG9iamVjdFN0b3JlLmdldCgpLCBpZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlKTsKICAgICBBU1NF
UlQoaW5kZXgtPm5hbWUoKSA9PSBuYW1lKTsKLSAgICBtX2luZGV4ZXMuc2V0KG5hbWUsIGluZGV4
KTsKKyAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnNldChuYW1lLCBpbmRleCk7CiAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoaW5kZXguZ2V0KCkpOwogfQogCkBAIC0yOTYsMjUgKzMwMSw0MCBA
QCBzdGF0aWMgdm9pZCBkb0RlbGV0ZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IGNoYXIqIHNx
bCwgaW50NjRfdCBpZCkKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0
ZXIgZXJyb3IgaGFuZGxpbmcuCiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cmVtb3ZlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleChj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCit7CisgICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKKyAgICBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgaWYgKCF0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXhJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIG5hbWUsIGNh
bGxiYWNrcykpKQorICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlIsICJjcmVhdGVJbmRl
eCBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiBhIHRyYW5zYWN0aW9uLiIpKTsKK30K
Kwordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlLCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
ID0gbV9pbmRleGVzLmdldChuYW1lKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXggPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmdldChuYW1lKTsKICAgICBpZiAoIWluZGV4
KSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9GT1VORF9FUlIsICJJbmRleCBuYW1lIGRvZXMgbm90
IGV4aXN0LiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFNRTGl0ZVRyYW5zYWN0
aW9uIHRyYW5zYWN0aW9uKHNxbGl0ZURhdGFiYXNlKCkpOwotICAgIHRyYW5zYWN0aW9uLmJlZ2lu
KCk7Ci0gICAgZG9EZWxldGUoc3FsaXRlRGF0YWJhc2UoKSwgIkRFTEVURSBGUk9NIEluZGV4ZXMg
V0hFUkUgaWQgPSA/IiwgaW5kZXgtPmlkKCkpOwotICAgIGRvRGVsZXRlKHNxbGl0ZURhdGFiYXNl
KCksICJERUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUgaW5kZXhJZCA9ID8iLCBpbmRleC0+aWQo
KSk7Ci0gICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgZG9EZWxldGUob2JqZWN0U3RvcmUt
PnNxbGl0ZURhdGFiYXNlKCksICJERUxFVEUgRlJPTSBJbmRleGVzIFdIRVJFIGlkID0gPyIsIGlu
ZGV4LT5pZCgpKTsKKyAgICBkb0RlbGV0ZShvYmplY3RTdG9yZS0+c3FsaXRlRGF0YWJhc2UoKSwg
IkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVSRSBpbmRleElkID0gPyIsIGluZGV4LT5pZCgpKTsK
IAotICAgIG1faW5kZXhlcy5yZW1vdmUobmFtZSk7CisgICAgb2JqZWN0U3RvcmUtPm1faW5kZXhl
cy5yZW1vdmUobmFtZSk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKIH0KIAotdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCB0bXBEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5D
dXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwUmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRp
cmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0cikKK3sKKyAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOworICAgIFJlZlB0cjxJ
REJLZXlSYW5nZT4gcmFuZ2UgPSBwcnBSYW5nZTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblB0cjsKKyAgICBpZiAoIXRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwsIG9iamVjdFN0b3JlLCByYW5nZSwgZGlyZWN0
aW9uLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExP
V0VEX0VSUiwgIm9wZW5DdXJzb3IgbXVzdCBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgYSB0
cmFuc2FjdGlvbi4iKSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3Bl
bkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiByYW5nZSwgdW5zaWduZWQgc2hvcnQgdG1wRGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gdHJhbnNhY3Rpb24pCiB7CiAgICAgLy8gU2V2ZXJhbCBmaWxlcyBkZXBlbmQgb24gdGhpcyBv
cmRlciBvZiBzZWxlY3RzLgogICAgIFN0cmluZyBzcWwgPSAiU0VMRUNUIGlkLCBrZXlTdHJpbmcs
IGtleURhdGUsIGtleU51bWJlciwgdmFsdWUgRlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgIjsK
QEAgLTMzMCw3ICszNTAsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5D
dXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbgogICAgIGVsc2UKICAg
ICAgICAgc3FsICs9ICJrZXlTdHJpbmcgREVTQywga2V5RGF0ZSBERVNDLCBrZXlOdW1iZXIgREVT
QyI7CiAKLSAgICBPd25QdHI8U1FMaXRlU3RhdGVtZW50PiBxdWVyeSA9IGFkb3B0UHRyKG5ldyBT
UUxpdGVTdGF0ZW1lbnQoc3FsaXRlRGF0YWJhc2UoKSwgc3FsKSk7CisgICAgT3duUHRyPFNRTGl0
ZVN0YXRlbWVudD4gcXVlcnkgPSBhZG9wdFB0cihuZXcgU1FMaXRlU3RhdGVtZW50KG9iamVjdFN0
b3JlLT5zcWxpdGVEYXRhYmFzZSgpLCBzcWwpKTsKICAgICBib29sIG9rID0gcXVlcnktPnByZXBh
cmUoKSA9PSBTUUxSZXN1bHRPazsKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1F
OiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmc/CiAKQEAgLTMzOSwxNCArMzU5LDE0IEBAIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdl
PiByYW5nZSwgdW5zaWduCiAgICAgICAgIGN1cnJlbnRDb2x1bW4gKz0gcmFuZ2UtPmxlZnQoKS0+
YmluZCgqcXVlcnksIGN1cnJlbnRDb2x1bW4pOwogICAgIGlmIChyYW5nZS0+ZmxhZ3MoKSAmIElE
QktleVJhbmdlOjpSSUdIVF9CT1VORCB8fCByYW5nZS0+ZmxhZ3MoKSA9PSBJREJLZXlSYW5nZTo6
U0lOR0xFKQogICAgICAgICBjdXJyZW50Q29sdW1uICs9IHJhbmdlLT5yaWdodCgpLT5iaW5kKCpx
dWVyeSwgY3VycmVudENvbHVtbik7Ci0gICAgcXVlcnktPmJpbmRJbnQ2NChjdXJyZW50Q29sdW1u
LCBtX2lkKTsKKyAgICBxdWVyeS0+YmluZEludDY0KGN1cnJlbnRDb2x1bW4sIG9iamVjdFN0b3Jl
LT5pZCgpKTsKIAogICAgIGlmIChxdWVyeS0+c3RlcCgpICE9IFNRTFJlc3VsdFJvdykgewogICAg
ICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGN1cnNvciA9IElEQkN1cnNvckJh
Y2tlbmRJbXBsOjpjcmVhdGUodGhpcywgcmFuZ2UsIGRpcmVjdGlvbiwgcXVlcnkucmVsZWFzZSgp
KTsKKyAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gY3Vyc29yID0gSURCQ3Vy
c29yQmFja2VuZEltcGw6OmNyZWF0ZShvYmplY3RTdG9yZSwgcmFuZ2UsIGRpcmVjdGlvbiwgcXVl
cnkucmVsZWFzZSgpLCB0cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoY3Vyc29yLnJlbGVhc2UoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5oCmluZGV4IDM2YzAwMTQ0YTA3ZmQ0MTg3MTBmMWE0ZDVlMGRkNDc0YTc5
NThhYTMuLmVkOTk0ZmI0OWZlM2EwZWRlYjY2Y2I4YmY1ZjkxZjJhNjU3MDUwMzEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvV2Vi
Q29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAtMzgsNiArMzgsNyBA
QCBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOwogY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1w
bDsKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKIGNsYXNzIFNRTGl0ZURh
dGFiYXNlOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2Ug
ewogcHVibGljOgpAQCAtNTIsMTUgKzUzLDE1IEBAIHB1YmxpYzoKICAgICBTdHJpbmcga2V5UGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5UGF0aDsgfQogICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5n
TGlzdD4gaW5kZXhOYW1lcygpIGNvbnN0OwogCi0gICAgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uKTsKLSAgICB2b2lkIHB1dChQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIGJvb2wgYWRkT25s
eSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2b2lkIHJlbW92ZShQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHZvaWQgZ2V0KFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CisgICAgdm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBib29sIGFkZE9u
bHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKik7CisgICAgdm9pZCByZW1vdmUoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKIAotICAg
IHZvaWQgY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgsIGJvb2wgdW5pcXVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHZvaWQgY3Jl
YXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wg
dW5pcXVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSopOwogICAgIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRl
eChjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgcmVtb3ZlSW5kZXgoY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHZvaWQgcmVtb3ZlSW5kZXgo
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSopOwogCi0gICAgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAKICAgICBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7
IH0KIApAQCAtNzAsNyArNzEsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxvYWRJbmRleGVzKCk7
CiAgICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgY29uc3Q7CiAKLSAgICB2b2lk
IGdldEludGVybmFsKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPik7CisgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgcHV0
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwg
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgYm9vbCBhZGRPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4pOworICAgIHN0YXRpYyB2b2lkIHJlbW92ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHN0YXRpYyB2b2lk
IGNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAg
ICBzdGF0aWMgdm9pZCByZW1vdmVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgc3RhdGljIHZvaWQgb3BlbkN1cnNv
ckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQg
c2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CiAKICAgICBSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZS5oCmluZGV4IGMxOTg1NWM3NmRlMWU2MjUyNDM4NTkyMTc3
ZTljMDFmNzcyMzIxOWQuLjUzYWRlNjI4NzJkYzdmNjIzYjYyOWRmM2UzN2Q2NTYyZjhmNjUyMzIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2UuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
LmgKQEAgLTQ5LDE1ICs0OSwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcga2V5UGF0
aCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5k
ZXhOYW1lcygpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIGJvb2wgYWRkT25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlbW92ZShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5Piwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgYm9vbCBhZGRPbmx5LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgsIGJvb2wgdW5pcXVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIGJvb2wgdW5pcXVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSopID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSopID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVl
c3QuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCmluZGV4IGM2NzI2NDIxNDFi
NjNkZWFkYmQ2MTRiNTc3NGYzYjZmZDI4YWU4YzcuLmM2N2UzNzkxNDRmYzBmNjYzMzkyZjlhNmE4
NmMzMjg2MDhhZGNjZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNw
cAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKQEAgLTUzLDggKzUzLDggQEAg
SURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPElEQkFueT4gc291cmMKICAgICAsIG1fdGltZXIodGhpcywgJklEQlJlcXVlc3Q6
OnRpbWVyRmlyZWQpCiAgICAgLCBtX3JlYWR5U3RhdGUoTE9BRElORykKIHsKLSAgICBpZiAodHJh
bnNhY3Rpb24pCi0gICAgICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OnJlbW92ZVBl
bmRpbmdUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7CisgICAgaWYgKG1fdHJhbnNhY3Rpb24pCisg
ICAgICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OnJlbW92ZVBlbmRpbmdUcmFuc2Fj
dGlvbihtX3RyYW5zYWN0aW9uLmdldCgpKTsKIH0KIAogSURCUmVxdWVzdDo6fklEQlJlcXVlc3Qo
KQpAQCAtNzAsMTAgKzcwLDEzIEBAIElEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKICAgICBBU1NF
UlQoIW1fdHJhbnNhY3Rpb24pOwogfQogCi1ib29sIElEQlJlcXVlc3Q6OnJlc2V0UmVhZHlTdGF0
ZSgpCitib29sIElEQlJlcXVlc3Q6OnJlc2V0UmVhZHlTdGF0ZShJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewogICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0g
RE9ORSk7CiAgICAgbV9yZWFkeVN0YXRlID0gTE9BRElORzsKKyAgICBBU1NFUlQoIW1fdHJhbnNh
Y3Rpb24pOworICAgIG1fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKKyAgICBJREJQZW5kaW5n
VHJhbnNhY3Rpb25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlv
bi5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTg5LDcgKzkyLDcgQEAgdm9pZCBJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MoKQogCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCiB7Ci0gICAgc2NoZWR1
bGVFdmVudChJREJBbnk6OmNyZWF0ZShJREJDdXJzb3I6OmNyZWF0ZShiYWNrZW5kLCB0aGlzKSks
IDApOworICAgIHNjaGVkdWxlRXZlbnQoSURCQW55OjpjcmVhdGUoSURCQ3Vyc29yOjpjcmVhdGUo
YmFja2VuZCwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSkpLCAwKTsKIH0KIAogdm9pZCBJREJS
ZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+
IGJhY2tlbmQpCkBAIC05OSw3ICsxMDIsNyBAQCB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKIAogdm9pZCBJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGJhY2tlbmQpCiB7Ci0gICAgc2NoZWR1bGVFdmVudChJREJBbnk6OmNyZWF0ZShJREJJbmRleDo6
Y3JlYXRlKGJhY2tlbmQpKSwgMCk7CisgICAgc2NoZWR1bGVFdmVudChJREJBbnk6OmNyZWF0ZShJ
REJJbmRleDo6Y3JlYXRlKGJhY2tlbmQsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpKSwgMCk7CiB9CiAK
IHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiBpZGJLZXkpCkBA
IC0xMDksOSArMTEyLDIwIEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8
SURCS2V5PiBpZGJLZXkpCiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQogewotICAgIC8vIEZJWE1F
OiB0aGUgdHJhbnNhY3Rpb24gcG9pbnRlciBzaG91bGQgYmUgdGhlIG9uZSBvZiB0aGUgc2V0VmVy
c2lvbiB0cmFuc2FjdGlvbi4gVGhpcyBpcyBiZWNhdXNlCi0gICAgLy8gdGhpcyBjYWxsYmFjayBp
cyBvbmx5IGV4ZWN1dGVkIGZvciBvcGVyYXRpb25zIHRoYXQgbmVlbiB0byBydW4gaW4gYSBzZXRW
ZXJzaW9uIHRyYW5zYWN0aW9uLgotICAgIHNjaGVkdWxlRXZlbnQoSURCQW55OjpjcmVhdGUoSURC
T2JqZWN0U3RvcmU6OmNyZWF0ZShiYWNrZW5kLCAwKSksIDApOworICAgIC8vIEZJWE1FOiBUaGlz
IGZ1bmN0aW9uIHNob3VsZCBnbyBhd2F5IG9uY2UgY3JlYXRlT2JqZWN0U3RvcmUgaXMgc3luYy4K
KyAgICBzY2hlZHVsZUV2ZW50KElEQkFueTo6Y3JlYXRlKElEQk9iamVjdFN0b3JlOjpjcmVhdGUo
YmFja2VuZCwgbV90cmFuc2FjdGlvbi5nZXQoKSkpLCAwKTsKK30KKwordm9pZCBJREJSZXF1ZXN0
OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHBy
cEJhY2tlbmQpCit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
YmFja2VuZCA9IHBycEJhY2tlbmQ7CisgICAgLy8gVGhpcyBpcyBvbmx5IHVzZWQgYnkgc2V0VmVy
c2lvbiB3aGljaCB3aWxsIGFsd2F5cyBoYXZlIGEgc291cmNlIHRoYXQncyBhbiBJREJEYXRhYmFz
ZS4KKyAgICBtX3NvdXJjZS0+aWRiRGF0YWJhc2UoKS0+c2V0U2V0VmVyc2lvblRyYW5zYWN0aW9u
KGJhY2tlbmQuZ2V0KCkpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gZnJvbnRlbmQgPSBJ
REJUcmFuc2FjdGlvbjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYmFja2VuZCwg
bV9zb3VyY2UtPmlkYkRhdGFiYXNlKCkuZ2V0KCkpOworICAgIGJhY2tlbmQtPnNldENhbGxiYWNr
cyhmcm9udGVuZC5nZXQoKSk7CisgICAgbV90cmFuc2FjdGlvbiA9IGJhY2tlbmQ7CisgICAgSURC
UGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6cmVtb3ZlUGVuZGluZ1RyYW5zYWN0aW9uKG1fdHJh
bnNhY3Rpb24uZ2V0KCkpOworICAgIHNjaGVkdWxlRXZlbnQoSURCQW55OjpjcmVhdGUoZnJvbnRl
bmQucmVsZWFzZSgpKSwgMCk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsdWUpCkBAIC0x
NTEsNiArMTY1LDEwIEBAIHZvaWQgSURCUmVxdWVzdDo6dGltZXJGaXJlZChUaW1lcjxJREJSZXF1
ZXN0PiopCiAgICAgLy8gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCByZXN1bWUoKSBkb2Vzbid0IHJl
LXN0YXJ0IHRoZSB0aW1lciBiYXNlZCBvbiBtX3NlbGZSZWYgYmVpbmcgc2V0LgogICAgIFJlZlB0
cjxJREJSZXF1ZXN0PiBzZWxmUmVmID0gbV9zZWxmUmVmLnJlbGVhc2UoKTsKIAorICAgIC8vIHJl
YWR5U3RhdGVSZXNldCBjYW4gYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkgd2hpbGUgd2UncmUgZGlz
cGF0Y2hpbmcgdGhlIGV2ZW50LgorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbjsKKyAgICBtX3RyYW5zYWN0aW9uLmNs
ZWFyKCk7CisKICAgICBWZWN0b3I8UGVuZGluZ0V2ZW50PiBwZW5kaW5nRXZlbnRzOwogICAgIHBl
bmRpbmdFdmVudHMuc3dhcChtX3BlbmRpbmdFdmVudHMpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcGVuZGluZ0V2ZW50cy5zaXplKCk7ICsraSkgewpAQCAtMTYyLDEyICsxODAsMTEgQEAg
dm9pZCBJREJSZXF1ZXN0Ojp0aW1lckZpcmVkKFRpbWVyPElEQlJlcXVlc3Q+KikKICAgICAgICAg
ICAgIGRpc3BhdGNoRXZlbnQoSURCU3VjY2Vzc0V2ZW50OjpjcmVhdGUobV9zb3VyY2UsIHBlbmRp
bmdFdmVudHNbaV0ubV9yZXN1bHQpKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobV90cmFu
c2FjdGlvbikgeworICAgIGlmICh0cmFuc2FjdGlvbikgewogICAgICAgICAvLyBOb3cgdGhhdCB3
ZSBwcm9jZXNzZWQgYWxsIHBlbmRpbmcgZXZlbnRzLCBsZXQgdGhlIHRyYW5zYWN0aW9uIG1vbml0
b3IgY2hlY2sgaWYKICAgICAgICAgLy8gaXQgY2FuIGNvbW1pdCB0aGUgY3VycmVudCB0cmFuc2Fj
dGlvbiBvciBpZiB0aGVyZSdzIGFueXRoaW5nIG5ldyBwZW5kaW5nLgogICAgICAgICAvLyBGSVhN
RTogSGFuZGxlIHRoZSB3b3JrZXJzIGNhc2UuCi0gICAgICAgIG1fdHJhbnNhY3Rpb24tPmRpZENv
bXBsZXRlVGFza0V2ZW50cygpOwotICAgICAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAg
ICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmggYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCUmVxdWVzdC5oCmluZGV4IDc1Y2Q5YThjZTliOGQ4MjdhMjcxNDM5YjgyOTU5OWFiYjBhOWY2
YzQuLmZhNjgyMDhjYzU4NTkxZGJmNzYzMzFlYTNjMTA0ZmMxZDM2ZDRlNjIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlJl
cXVlc3QuaApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U7CiAKIGNsYXNzIElEQlJlcXVlc3QgOiBwdWJsaWMgSURCQ2FsbGJhY2tzLCBwdWJsaWMg
RXZlbnRUYXJnZXQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uID0gMCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IElEQlJlcXVl
c3QoY29udGV4dCwgc291cmNlLCB0cmFuc2FjdGlvbikpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIHNv
dXJjZSwgdHJhbnNhY3Rpb24pKTsgfQogICAgIHZpcnR1YWwgfklEQlJlcXVlc3QoKTsKIAogICAg
IC8vIERlZmluZWQgaW4gdGhlIElETApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgREVG
SU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzdWNjZXNzKTsKICAgICBERUZJTkVfQVRUUklC
VVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKIAotICAgIGJvb2wgcmVzZXRSZWFkeVN0YXRlKCk7
CisgICAgYm9vbCByZXNldFJlYWR5U3RhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
Kik7CiAKICAgICAvLyBJREJDYWxsYmFja3MKICAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihQYXNz
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKQEAgLTY4LDYgKzY4LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZh
Y2U+KTsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5Pik7CiAg
ICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZT4pOworICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNz
KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7CiAKICAgICAvLyBFdmVudFRhcmdl
dApAQCAtNzcsOCArNzgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGNhblN1c3BlbmQoKSBjb25zdDsKIAotICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tz
Pjo6cmVmOwotICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPjo6ZGVyZWY7CisgICAg
dXNpbmcgVGhyZWFkU2FmZVNoYXJlZDxJREJDYWxsYmFja3M+OjpyZWY7CisgICAgdXNpbmcgVGhy
ZWFkU2FmZVNoYXJlZDxJREJDYWxsYmFja3M+OjpkZXJlZjsKIAogcHJpdmF0ZToKICAgICBJREJS
ZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNl
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBiL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCA0ZjE4NDM3ZjBi
ZTQ0ZWZjNjkyZjYxYTdjYzgyMDc2ZThjYjc0NWUxLi4xNzU3Mjk1M2QyNDE5YzYyYzU3MDAyMjVh
OWRiMjM5ZGViNWNjZmM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuY3BwCkBAIC00NCw3ICs0NCw3IEBAIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzCiAg
ICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fdGltZW91dCh0aW1lb3V0KQogICAgICwgbV9pZChp
ZCkKLSAgICAsIG1fc3RhdGUoTm90U3RhcnRlZCkKKyAgICAsIG1fc3RhdGUoVW51c2VkKQogICAg
ICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKICAgICAsIG1fdHJhbnNhY3Rpb24obmV3IFNRTGl0ZVRy
YW5zYWN0aW9uKGRhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpKSkKICAgICAsIG1fdGltZXIodGhp
cywgJklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRpbWVyRmlyZWQpCkBAIC02NSw3ICs2NSw3
IEBAIGJvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1bGVUYXNrKFBhc3NPd25Q
dHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKLSAgICBpZiAobV9zdGF0ZSA9PSBOb3RTdGFydGVk
KQorICAgIGlmIChtX3N0YXRlID09IFVudXNlZCkKICAgICAgICAgc3RhcnQoKTsKIAogICAgIHJl
dHVybiB0cnVlOwpAQCAtNzcsNiArNzcsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmFib3J0KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zdGF0ZSA9IEZpbmlzaGVkOwor
ICAgIG1fdGltZXIuc3RvcCgpOwogICAgIG1fdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CiAgICAg
bV9jYWxsYmFja3MtPm9uQWJvcnQoKTsKICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOwpAQCAtODQsNyArODUsMTAgQEAg
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCgpCiAKIHZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkKIHsKLSAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBTdGFydGVkKTsKKyAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7CiAgICAgQVNTRVJU
KG1fcGVuZGluZ0V2ZW50cyk7CiAKICAgICBtX3BlbmRpbmdFdmVudHMtLTsKQEAgLTEwNSw3ICsx
MDksNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmRpZENvbXBsZXRlVGFza0V2
ZW50cygpCiAKIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6cnVuKCkKIHsKLSAgICBB
U1NFUlQobV9zdGF0ZSA9PSBTdGFydGVkKTsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGFydFBl
bmRpbmcgfHwgbV9zdGF0ZSA9PSBSdW5uaW5nKTsKICAgICBBU1NFUlQoIW1fdGltZXIuaXNBY3Rp
dmUoKSk7CiAKICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKQEAgLTExMywxNiArMTE3LDE1
IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6cnVuKCkKIAogdm9pZCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpzdGFydCgpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gTm90
U3RhcnRlZCk7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkKTsKIAotICAgIG1fc3RhdGUg
PSBTdGFydGVkOwotICAgIG1fdHJhbnNhY3Rpb24tPmJlZ2luKCk7CisgICAgbV9zdGF0ZSA9IFN0
YXJ0UGVuZGluZzsKICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRp
ZFN0YXJ0VHJhbnNhY3Rpb24odGhpcyk7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6Y29tbWl0KCkKIHsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGFydGVkKTsKKyAgICBB
U1NFUlQobV9zdGF0ZSA9PSBSdW5uaW5nKTsKIAogICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKICAg
ICBtX3RyYW5zYWN0aW9uLT5jb21taXQoKTsKQEAgLTEzMiw3ICsxMzUsMTIgQEAgdm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjp0aW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KikKIHsK
ICAgICBBU1NFUlQoIW1fdGFza1F1ZXVlLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fc3RhdGUg
PT0gU3RhcnRlZCk7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGFydFBlbmRpbmcpIHsKKyAgICAg
ICAgbV90cmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICAgICAgbV9zdGF0ZSA9IFJ1bm5pbmc7Cisg
ICAgfSBlbHNlCisgICAgICAgIEFTU0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOwogCiAgICAgVGFz
a1F1ZXVlIHF1ZXVlOwogICAgIHF1ZXVlLnN3YXAobV90YXNrUXVldWUpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBiL1dlYkNvcmUvc3Rv
cmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggYzAzN2ExMTU2ODM4NmJmOTQy
NDBhNWM1MjVlMzI0NDQ1OWZiZTIzZi4uMDlhNmExYzZkN2UyMTAyNjJjMmIwZGNkYWFlZDkyODQ1
MTc0MzlmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5o
CkBAIC02MCw5ICs2MCwxMCBAQCBwcml2YXRlOgogICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNp
Z25lZCBsb25nIHRpbWVvdXQsIGludCBpZCwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOwogCiAg
ICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIE5vdFN0YXJ0ZWQsCi0gICAgICAgIFN0YXJ0ZWQsCi0g
ICAgICAgIEZpbmlzaGVkLAorICAgICAgICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNr
cyB5ZXQuCisgICAgICAgIFN0YXJ0UGVuZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBTUUxp
dGUgdHJhbnNhY3Rpb24gbm90IHlldCBzdGFydGVkLgorICAgICAgICBSdW5uaW5nLCAvLyBTUUxp
dGUgdHJhbnNhY3Rpb24gc3RhcnRlZCBidXQgbm90IHlldCBmaW5pc2hlZC4KKyAgICAgICAgRmlu
aXNoZWQsIC8vIEVpdGhlciBhYm9ydGVkIG9yIGNvbW1pdHRlZC4KICAgICB9OwogCiAgICAgdm9p
ZCBzdGFydCgpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggM2JhZGZmYWNmMjcxMDhjMjlmZDVlOTI2ZjY3MTFi
MDUxZjBjYjc3Mi4uNDg1MWNhOGJjMTAxNTNhMmEwNzdiOWIzZGEwMDMzYTUyN2VhNWY4NSAxMDA2
NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNzggQEAKKzIwMTAtMDktMjkgIEplcmVteSBPcmxvdyAgPGpv
cmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRmluaXNoZWQgSURCVHJhbnNhY3Rpb24gZm9yIEluZGV4ZWREQgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY4MjMKKworICAgICAg
ICBQbHVtYmluZy4KKworICAgICAgICAqIHB1YmxpYy9XZWJJREJDYWxsYmFja3MuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViSURCQ2FsbGJhY2tzOjpvblN1Y2Nlc3MpOgorICAgICAgICAqIHB1Ymxp
Yy9XZWJJREJEYXRhYmFzZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZTo6Y3Jl
YXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZTo6cmVtb3Zl
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZTo6Y2xvc2UpOgor
ICAgICAgICAqIHB1YmxpYy9XZWJJREJJbmRleC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJJ
bmRleDo6b3Blbk9iamVjdEN1cnNvcik6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkluZGV4Ojpv
cGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCSW5kZXg6OmdldE9iamVjdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYklEQkluZGV4OjpnZXQpOgorICAgICAgICAqIHB1YmxpYy9XZWJJ
REJPYmplY3RTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZTo6Z2V0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmU6OnB1dCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlOjpyZW1vdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
REJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmpl
Y3RTdG9yZTo6cmVtb3ZlSW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9y
ZTo6b3BlbkN1cnNvcik6CisgICAgICAgICogcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmg6Cisg
ICAgICAgIChXZWJLaXQ6OldlYklEQlRyYW5zYWN0aW9uOjppZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYklEQlRyYW5zYWN0aW9uOjpnZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UpOgor
ICAgICAgICAqIHNyYy9JREJDYWxsYmFja3NQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDYWxsYmFja3NQcm94eTo6b25TdWNjZXNzKToKKyAgICAgICAgKiBzcmMvSURCQ2FsbGJhY2tz
UHJveHkuaDoKKyAgICAgICAgKiBzcmMvSURCRGF0YWJhc2VQcm94eS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZVByb3h5OjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZVByb3h5OjpyZW1vdmVPYmplY3RTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZVByb3h5OjpjbG9zZSk6CisgICAgICAgICogc3JjL0lEQkRhdGFi
YXNlUHJveHkuaDoKKyAgICAgICAgKiBzcmMvSURCSW5kZXhCYWNrZW5kUHJveHkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kUHJveHk6Om9wZW5PYmplY3RDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kUHJveHk6Om9wZW5DdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kUHJveHk6OmdldE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRQcm94eTo6Z2V0KToKKyAgICAgICAgKiBzcmMvSURC
SW5kZXhCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKiBzcmMvSURCT2JqZWN0U3RvcmVQcm94eS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZVByb3h5OjpwdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVQcm94eTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlUHJveHk6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlUHJveHk6OnJlbW92ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlUHJveHk6Om9wZW5DdXJzb3IpOgorICAgICAgICAqIHNyYy9JREJPYmplY3RT
dG9yZVByb3h5Lmg6CisgICAgICAgICogc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRQcm94eSk6CisgICAgICAgICogc3JjL1dlYklEQkNhbGxiYWNrc0ltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViSURCQ2FsbGJhY2tzSW1wbDo6b25TdWNjZXNzKToK
KyAgICAgICAgKiBzcmMvV2ViSURCQ2FsbGJhY2tzSW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJJ
REJEYXRhYmFzZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZUltcGw6
OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRGF0YWJhc2VJbXBs
OjpyZW1vdmVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkRhdGFiYXNlSW1w
bDo6Y2xvc2UpOgorICAgICAgICAqIHNyYy9XZWJJREJEYXRhYmFzZUltcGwuaDoKKyAgICAgICAg
KiBzcmMvV2ViSURCSW5kZXhJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCSW5kZXhJ
bXBsOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCSW5kZXhJbXBsOjpvcGVu
T2JqZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCSW5kZXhJbXBsOjpnZXRPYmpl
Y3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJJbmRleEltcGw6OmdldCk6CisgICAgICAgICog
c3JjL1dlYklEQkluZGV4SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJJREJPYmplY3RTdG9yZUlt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZUltcGw6OnB1dCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlSW1wbDo6cmVtb3ZlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmVJbXBsOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlSW1wbDo6cmVtb3ZlSW5kZXgpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJREJPYmplY3RTdG9yZUltcGw6Om9wZW5DdXJzb3IpOgorICAgICAgICAqIHNyYy9X
ZWJJREJPYmplY3RTdG9yZUltcGwuaDoKKwogMjAxMC0wOS0zMCAgQXZpIERyaXNzbWFuICA8YXZp
QGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJDYWxsYmFja3MuaCBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCQ2FsbGJhY2tzLmgKaW5kZXggMmUyYzRkMjk5ZTBjOGM3
ZjU3NWRhZjJiNGU4MDdmZTc3NTNjZDZkMS4uNjRmZmMwOGRlYjUxN2M2YTdiNGExN2Q3YzQwMDg4
Mzg0NzI0OWEwZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJDYWxs
YmFja3MuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkNhbGxiYWNrcy5oCkBA
IC0zNiw2ICszNiw3IEBAIGNsYXNzIFdlYklEQkRhdGFiYXNlRXJyb3I7CiBjbGFzcyBXZWJJREJL
ZXk7CiBjbGFzcyBXZWJJREJJbmRleDsKIGNsYXNzIFdlYklEQk9iamVjdFN0b3JlOworY2xhc3Mg
V2ViSURCVHJhbnNhY3Rpb247CiBjbGFzcyBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKIGNs
YXNzIFdlYklEQkNhbGxiYWNrcyB7CkBAIC01MSw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgb25TdWNjZXNzKGNvbnN0IFdlYklEQktleSYpIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhXZWJJREJJbmRleCopIHsg
V0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vz
cyhXZWJJREJPYmplY3RTdG9yZSopIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhXZWJJREJUcmFuc2FjdGlvbiopIHsgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzcyhjb25zdCBX
ZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogfTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFz
ZS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oCmluZGV4IDRlNWNk
Y2JjZDE4ZTIyMGYwNWVjZmRmMjUwNTc0YmFmNjdhZjQwZWIuLjIwMjFmNmYyMjBjOTFkNGU5YzM5
ZDFhYTMzMTFiY2FkNWZhYTA5NzYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViSURCRGF0YWJhc2UuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkRhdGFi
YXNlLmgKQEAgLTYxLDE0ICs2MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIFdlYkRPTVN0cmluZ0xpc3QoKTsKICAgICB9
Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgY29uc3QgV2ViU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIFdlYklEQkNh
bGxiYWNrcyopIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0
IFdlYklEQlRyYW5zYWN0aW9uJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAg
ICAvLyBUcmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSBXZWJJREJPYmplY3RTdG9yZSB0byB0aGUg
Y2FsbGVyLgogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlKGNvbnN0
IFdlYlN0cmluZyYgbmFtZSwgdW5zaWduZWQgc2hvcnQgbW9kZSkKICAgICB7CiAgICAgICAgIFdF
QktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdl
YklEQkNhbGxiYWNrcyogY2FsbGJhY2tzKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQorICAgIHZpcnR1YWwgdm9pZCByZW1vdmVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYp
IHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZl
cnNpb24oY29uc3QgV2ViU3RyaW5nJiB2ZXJzaW9uLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNr
cykgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICAvLyBUcmFuc2ZlcnMgb3du
ZXJzaGlwIG9mIHRoZSBXZWJJREJUcmFuc2FjdGlvbiB0byB0aGUgY2FsbGVyLgogICAgIHZpcnR1
YWwgV2ViSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKGNvbnN0IFdlYkRPTVN0cmluZ0xpc3Qm
IG5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCkBAIC03
Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7
IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkluZGV4LmggYi9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkluZGV4LmgKaW5kZXggYjRiYTFmNDBhZmYzOTBl
ZGFhOGMzMzBmZTljYTIxZjIzZWVjMjEzNi4uZTUyYjQ4NzBmZmQ3ODlhZTNmNDNmMzg2NjA0ZmY2
NjNmNTVhNTI4ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJJbmRl
eC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCSW5kZXguaApAQCAtNjEsNDMg
KzYxLDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhlIHZlcnNpb25zIHdpdGhvdXQgdHJhbnNhY3Rpb24gcGFyYW1ldGVy
cy4KLSAgICB2aXJ0dWFsIHZvaWQgb3Blbk9iamVjdEN1cnNvcihjb25zdCBXZWJJREJLZXlSYW5n
ZSYgcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikKLSAgICB7Ci0gICAgICAgIG9wZW5PYmpl
Y3RDdXJzb3IocmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzKTsKLSAgICB9Ci0gICAgdmlydHVh
bCB2b2lkIG9wZW5PYmplY3RDdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2UmIHJhbmdlLCB1bnNp
Z25lZCBzaG9ydCBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzKQotICAgIHsK
LSAgICAgICAgV2ViSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247Ci0gICAgICAgIG9wZW5PYmpl
Y3RDdXJzb3IocmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7Ci0gICAg
fQotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKGNvbnN0IFdlYklEQktleVJhbmdlJiByYW5n
ZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywg
Y29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKQotICAgIHsKLSAgICAgICAgb3BlbkN1cnNvcihyYW5n
ZSwgZGlyZWN0aW9uLCBjYWxsYmFja3MpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1
cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYgcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlv
biwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICBXZWJJREJUcmFu
c2FjdGlvbiB0cmFuc2FjdGlvbjsKLSAgICAgICAgb3BlbkN1cnNvcihyYW5nZSwgZGlyZWN0aW9u
LCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGdldE9i
amVjdChjb25zdCBXZWJJREJLZXkmIGtleSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNv
bnN0IFdlYklEQlRyYW5zYWN0aW9uJikKLSAgICB7Ci0gICAgICAgIGdldE9iamVjdChrZXksIGNh
bGxiYWNrcyk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3QoY29uc3QgV2ViSURC
S2V5JiBrZXksIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgV2Vi
SURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247Ci0gICAgICAgIGdldE9iamVjdChrZXksIGNhbGxi
YWNrcywgdHJhbnNhY3Rpb24pOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0KGNvbnN0IFdl
YklEQktleSYga2V5LCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJh
bnNhY3Rpb24mKQotICAgIHsKLSAgICAgICAgZ2V0KGtleSwgY2FsbGJhY2tzKTsKLSAgICB9Ci0g
ICAgdmlydHVhbCB2b2lkIGdldChjb25zdCBXZWJJREJLZXkmIGtleSwgV2ViSURCQ2FsbGJhY2tz
KiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICBXZWJJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlv
bjsKLSAgICAgICAgZ2V0KGtleSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7Ci0gICAgfQorICAg
IHZpcnR1YWwgdm9pZCBvcGVuT2JqZWN0Q3Vyc29yKGNvbnN0IFdlYklEQktleVJhbmdlJiwgdW5z
aWduZWQgc2hvcnQgZGlyZWN0aW9uLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2
b2lkIG9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2UmLCB1bnNpZ25lZCBzaG9ydCBkaXJl
Y3Rpb24sIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikgeyBXRUJL
SVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0KGNv
bnN0IFdlYklEQktleSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9u
JikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
KGNvbnN0IFdlYklEQktleSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJPYmpl
Y3RTdG9yZS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJPYmplY3RTdG9yZS5oCmlu
ZGV4IDE5ZWZkNDg5Y2YxYjdkMGU4NjQzODQ1Njg4ZTM5Yjc2ZWM3ZGY5MmUuLjUxYThkOGM4NWQ2
MTJmNjRlMGFmMTI0MjgyOTU3NGIxNjBhMjQ5MzYgMTAwNzU1Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYklEQk9iamVjdFN0b3JlLmgKQEAgLTU4LDUxICs1OCwxOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBXZWJET01TdHJpbmdMaXN0KCk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFJlbW92
ZSB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzIGZvciB0cmFuc2FjdGlvbklkcy4KLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0KGNvbnN0IFdlYklEQktleSYga2V5LCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNr
cywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKQotICAgIHsKLSAgICAgICAgZ2V0KGtleSwgY2Fs
bGJhY2tzKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGdldChjb25zdCBXZWJJREJLZXkmIGtl
eSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICBXZWJJREJUcmFu
c2FjdGlvbiB0cmFuc2FjdGlvbjsKLSAgICAgICAgZ2V0KGtleSwgY2FsbGJhY2tzLCB0cmFuc2Fj
dGlvbik7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNj
cmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgV2ViSURCS2V5JiBrZXksIGJvb2wgYWRkT25seSwgV2Vi
SURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikKLSAgICB7
Ci0gICAgICAgIHB1dCh2YWx1ZSwga2V5LCBhZGRPbmx5LCBjYWxsYmFja3MpOwotICAgIH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUs
IGNvbnN0IFdlYklEQktleSYga2V5LCBib29sIGFkZE9ubHksIFdlYklEQkNhbGxiYWNrcyogY2Fs
bGJhY2tzKQotICAgIHsKLSAgICAgICAgV2ViSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247Ci0g
ICAgICAgIHB1dCh2YWx1ZSwga2V5LCBhZGRPbmx5LCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKTsK
LSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZShjb25zdCBXZWJJREJLZXkmIGtleSwgV2Vi
SURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikKLSAgICB7
Ci0gICAgICAgIHJlbW92ZShrZXksIGNhbGxiYWNrcyk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmUoY29uc3QgV2ViSURCS2V5JiBrZXksIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tz
KQotICAgIHsKLSAgICAgICAgV2ViSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247Ci0gICAgICAg
IHJlbW92ZShrZXksIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pOwotICAgIH0KLSAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcm
IGtleVBhdGgsIGJvb2wgdW5pcXVlLCBXZWJJREJDYWxsYmFja3MqKSB7IFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBnZXQoY29uc3QgV2ViSURCS2V5Jiwg
V2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXQoY29uc3QgV2ViU2VyaWFs
aXplZFNjcmlwdFZhbHVlJiwgY29uc3QgV2ViSURCS2V5JiwgYm9vbCBhZGRPbmx5LCBXZWJJREJD
YWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZShjb25zdCBXZWJJREJLZXkmLCBX
ZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpIHsgV0VCS0lUX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUluZGV4KGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgV2Vi
SURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQogICAgIC8vIFRyYW5zZmVycyBvd25lcnNoaXAgb2YgdGhlIFdlYklE
QkluZGV4IHRvIHRoZSBjYWxsZXIuCiAgICAgdmlydHVhbCBXZWJJREJJbmRleCogaW5kZXgoY29u
c3QgV2ViU3RyaW5nJiBuYW1lKQogICAgIHsKICAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92
ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKikgeyBXRUJLSVRf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihjb25z
dCBXZWJJREJLZXlSYW5nZSYgcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgV2ViSURC
Q2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikKLSAgICB7Ci0g
ICAgICAgIG9wZW5DdXJzb3IocmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzKTsKLSAgICB9Ci0g
ICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2UmIHJhbmdlLCB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzKQotICAg
IHsKLSAgICAgICAgV2ViSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247Ci0gICAgICAgIG9wZW5D
dXJzb3IocmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7Ci0gICAgfQor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklE
QkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJikgeyBXRUJLSVRfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihjb25zdCBXZWJJREJL
ZXlSYW5nZSYsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiwgY29u
c3QgV2ViSURCVHJhbnNhY3Rpb24mKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQog
ICAgIC8vIEZJWE1FOiBmaW5pc2guCiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklE
QlRyYW5zYWN0aW9uLmgKaW5kZXggN2I1MWI5N2UwYjM2NmFhM2I0MmNhNWVlYWJiMzllZjBkM2Ix
ZTVkZi4uNmE3MzljMzRkNGE5ODQ3OTdmMWI5MzI2OTliYTg1ZmNkMzI2ZTg0ZSAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5oCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaApAQCAtNTQsOCArNTQsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50cygpIHsgV0VCS0lU
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdAogICAg
IHsKLSAgICAgICAgLy8gRklYTUU6IFVuY29tbWVudCB0aGlzIGFmdGVyIHRoZSBuZXh0IENocm9t
aXVtIFdlYktpdCByb2xsLgotICAgICAgICAvL1dFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHNldENhbGxiYWNrcyhXZWJJREJUcmFuc2FjdGlvbkNh
bGxiYWNrcyopIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CkBAIC02Myw3ICs2Miw2
IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogdGhpcyBpcyBuZXZlciBjYWxsZWQgZnJvbSBXZWJD
b3JlLiBGaW5kIGEgY2xlYW5lciBzb2x1dGlvbi4KICAgICB2aXJ0dWFsIFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQkNhbGxiYWNrc1Byb3h5LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2FsbGJh
Y2tzUHJveHkuY3BwCmluZGV4IDNlYWI2MjI0YTk3OWIwNzEzZmQ5ZmU3YWFmYTU3NGZmODE0YzQz
ODEuLjY5MDUxZDBhNmRhN2M2NmMwZDA3NWYzZmI5OWNhYjlkMjkzM2RlYzIgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2FsbGJhY2tzUHJveHkuY3BwCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvSURCQ2FsbGJhY2tzUHJveHkuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5j
bHVkZSAiV2ViSURCSW5kZXhJbXBsLmgiCiAjaW5jbHVkZSAiV2ViSURCS2V5LmgiCiAjaW5jbHVk
ZSAiV2ViSURCT2JqZWN0U3RvcmVJbXBsLmgiCisjaW5jbHVkZSAiV2ViSURCVHJhbnNhY3Rpb25J
bXBsLmgiCiAjaW5jbHVkZSAiV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKICNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKQEAgLTEwMCw2ICsxMDEsMTIgQEAgdm9pZCBJREJDYWxsYmFj
a3NQcm94eTo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBiYWMKICAgICBtX2NhbGxiYWNrcy5jbGVhcigpOwogfQogCit2b2lkIElEQkNhbGxiYWNr
c1Byb3h5OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IGJhY2tlbmQpCit7CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhuZXcgV2ViS2l0OjpX
ZWJJREJUcmFuc2FjdGlvbkltcGwoYmFja2VuZCkpOworICAgIG1fY2FsbGJhY2tzLmNsZWFyKCk7
Cit9CisKIHZvaWQgSURCQ2FsbGJhY2tzUHJveHk6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKQogewogICAgIG1fY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoV2ViS2l0OjpXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUoc2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNhbGxi
YWNrc1Byb3h5LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNhbGxiYWNrc1Byb3h5LmgKaW5k
ZXggNTA2ZGJiMGY2Y2E5OGZjNDlkNjgyZmFmY2VkNDdmOWNjYmQ0MWViYy4uOGMyNjE2MTJhNDY3
ZTk4ZGY0MjMzOTUxZTIzNjE0OGM2MzQyODU4MyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9JREJDYWxsYmFja3NQcm94eS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2Fs
bGJhY2tzUHJveHkuaApAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4pOwogICAgIHZp
cnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+KTsKICAgICB2aXJ0dWFsIHZv
aWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPik7
CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4pOwogICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvSURCRGF0YWJhc2VQcm94eS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lE
QkRhdGFiYXNlUHJveHkuY3BwCmluZGV4IGNlNWUwYTZjY2ZkMzIwYmJlNjM3ZTNkZjdiYWMyNzlh
OGJmYjM4ZDYuLjU2NGZkZGI2ZTZhYjhmZjJmNDZlNDg0NDJkNTc4ZjliYTQ2NzRlNWIgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VQcm94eS5jcHAKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZVByb3h5LmNwcApAQCAtNzYsOSArNzYsMTIgQEAg
UGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFzZVByb3h5OjpvYmplY3RTdG9yZXMo
KSBjb25zdAogICAgIHJldHVybiBtX3dlYklEQkRhdGFiYXNlLT5vYmplY3RTdG9yZXMoKTsKIH0K
IAotdm9pZCBJREJEYXRhYmFzZVByb3h5OjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJEYXRhYmFzZVByb3h5OjpjcmVh
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
Ym9vbCBhdXRvSW5jcmVtZW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewotICAgIG1fd2Vi
SURCRGF0YWJhc2UtPmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1l
bnQsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOworICAgIC8vIFRoZSB0cmFu
c2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkg
b2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBv
ZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9u
QmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOworICAgIG1fd2ViSURCRGF0YWJhc2UtPmNyZWF0
ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG5ldyBXZWJJREJDYWxs
YmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2Fj
dGlvbigpKTsKIH0KIAogUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+
IElEQkRhdGFiYXNlUHJveHk6Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgdW5zaWdu
ZWQgc2hvcnQgbW9kZSkKQEAgLTg5LDkgKzkyLDEyIEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZVByb3h5OjpvYmplY3RTdG9yZShjb25zdCBT
CiAgICAgcmV0dXJuIElEQk9iamVjdFN0b3JlUHJveHk6OmNyZWF0ZShvYmplY3RTdG9yZSk7CiB9
CiAKLXZvaWQgSURCRGF0YWJhc2VQcm94eTo6cmVtb3ZlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJEYXRh
YmFzZVByb3h5OjpyZW1vdmVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb24pCiB7Ci0gICAgbV93ZWJJREJEYXRhYmFzZS0+cmVtb3ZlT2JqZWN0U3Rv
cmUobmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSk7CisgICAgLy8gVGhl
IHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBw
cm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBhbGwgaW1wbGVtZW50YXRp
b25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgorICAgIElEQlRyYW5zYWN0
aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93ZWJJREJEYXRhYmFzZS0+
cmVtb3ZlT2JqZWN0U3RvcmUobmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tz
KSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkpOwogfQogCiB2b2lk
IElEQkRhdGFiYXNlUHJveHk6OnNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQpAQCAtMTA2LDYgKzExMiwxMSBAQCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VQcm94eTo6
dHJhbnNhY3Rpb24oRE9NU3RyaQogICAgIHJldHVybiBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94
eTo6Y3JlYXRlKHRyYW5zYWN0aW9uKTsKIH0KIAordm9pZCBJREJEYXRhYmFzZVByb3h5OjpjbG9z
ZSgpCit7CisgICAgbV93ZWJJREJEYXRhYmFzZS0+Y2xvc2UoKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlUHJveHkuaCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvSURCRGF0YWJhc2VQcm94eS5oCmluZGV4IGZmZmQyM2VlODUyYTYxMzZjNDFhNWNl
YmUwYTA4ZGM0ZGRhZjY1YWIuLmVhZWViMjdiNTViMzM3Njg2ZjRjOTIzZjE0OTE0YzNmNzYxNDky
ZmEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VQcm94eS5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VQcm94eS5oCkBAIC00NywxMyArNDcs
MTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVzKCkgY29uc3Q7CiAK
LSAgICAvLyBGSVhNRTogQWRkIHNldFZlcnNpb24uCi0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
T2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJv
b2wgYXV0b0luY3JlbWVudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIHVuc2lnbmVkIHNob3J0IG1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVPYmpl
Y3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCogc3RvcmVOYW1l
cywgdW5zaWduZWQgc2hvcnQgbW9kZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKKyAgICB2aXJ0
dWFsIHZvaWQgY2xvc2UoKTsKIAogcHJpdmF0ZToKICAgICBJREJEYXRhYmFzZVByb3h5KFBhc3NP
d25QdHI8V2ViS2l0OjpXZWJJREJEYXRhYmFzZT4pOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JREJJbmRleEJhY2tlbmRQcm94eS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lE
QkluZGV4QmFja2VuZFByb3h5LmNwcAppbmRleCBmOTJmNGYyYjM1NjI1M2EzZDUwM2QyZWViM2Qz
NzZiNDlkZjA0MjU0Li44ZjI2YmYxOTdlMzlkN2M4ODc4ZjBiMDYwOWVhYTRiNDg4M2ZkMzE1IDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkluZGV4QmFja2VuZFByb3h5LmNwcAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkluZGV4QmFja2VuZFByb3h5LmNwcApAQCAtMzAs
NiArMzAsNyBAQAogCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiSURCS2V5
UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oIgogI2luY2x1
ZGUgIldlYklEQkNhbGxiYWNrc0ltcGwuaCIKICNpbmNsdWRlICJXZWJJREJEYXRhYmFzZUVycm9y
LmgiCiAjaW5jbHVkZSAiV2ViSURCSW5kZXguaCIKQEAgLTcyLDI0ICs3MywzNiBAQCBib29sIElE
QkluZGV4QmFja2VuZFByb3h5Ojp1bmlxdWUoKQogICAgIHJldHVybiBtX3dlYklEQkluZGV4LT51
bmlxdWUoKTsKIH0KIAotdm9pZCBJREJJbmRleEJhY2tlbmRQcm94eTo6b3Blbk9iamVjdEN1cnNv
cihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0
aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJJbmRleEJh
Y2tlbmRQcm94eTo6b3Blbk9iamVjdEN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQog
ewotICAgIG1fd2ViSURCSW5kZXgtPm9wZW5PYmplY3RDdXJzb3Ioa2V5UmFuZ2UsIGRpcmVjdGlv
biwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSk7CisgICAgLy8gVGhlIHRyYW5z
YWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBv
YmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9m
IElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgorICAgIElEQlRyYW5zYWN0aW9uQmFj
a2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25C
YWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93ZWJJREJJbmRleC0+b3Blbk9iamVj
dEN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxs
YmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7CiB9CiAK
LXZvaWQgSURCSW5kZXhCYWNrZW5kUHJveHk6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kUHJveHk6Om9wZW5DdXJz
b3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVj
dGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKIHsKLSAgICBtX3dlYklEQkluZGV4LT5vcGVu
Q3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxi
YWNrcykpOworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8g
YmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisgICAg
Ly8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0
cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0
YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOworICAg
IG1fd2ViSURCSW5kZXgtPm9wZW5DdXJzb3Ioa2V5UmFuZ2UsIGRpcmVjdGlvbiwgbmV3IFdlYklE
QkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRy
YW5zYWN0aW9uKCkpOwogfQogCi12b2lkIElEQkluZGV4QmFja2VuZFByb3h5OjpnZXRPYmplY3Qo
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKK3ZvaWQgSURCSW5kZXhCYWNrZW5kUHJveHk6OmdldE9iamVjdChQYXNzUmVmUHRyPElEQktl
eT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewotICAgIG1fd2ViSURCSW5kZXgtPmdl
dE9iamVjdChrZXksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOworICAgIC8v
IFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRv
IGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxlbWVu
dGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJUcmFu
c2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRy
YW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOworICAgIG1fd2ViSURCSW5kZXgt
PmdldE9iamVjdChrZXksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFu
c2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpKTsKIH0KIAotdm9pZCBJREJJbmRl
eEJhY2tlbmRQcm94eTo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQkluZGV4QmFja2VuZFByb3h5OjpnZXQoUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKIHsKLSAgICBtX3dl
YklEQkluZGV4LT5nZXQoa2V5LCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpKTsK
KyAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9p
bnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAorICAgIC8vIGFsbCBp
bXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCisgICAg
SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNfY2Fz
dDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsKKyAgICBtX3dlYklE
QkluZGV4LT5nZXQoa2V5LCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJh
bnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCSW5kZXhCYWNr
ZW5kUHJveHkuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCSW5kZXhCYWNrZW5kUHJveHkuaApp
bmRleCA2YWFmZGZhYzk3ZTg4Nzg0YzQxOTkzMjUzNmIyZGM2ODQ2YmE5ZjQ1Li4wMzFlZDQwODdj
NGVkNmZmNWVhNzQxN2NhZjg5NWE1NTE1NjAzNzgzIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQkluZGV4QmFja2VuZFByb3h5LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJJbmRleEJhY2tlbmRQcm94eS5oCkBAIC00NiwxMCArNDYsMTAgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgU3RyaW5nIGtleVBhdGgoKTsKICAgICB2aXJ0dWFsIGJvb2wgdW5pcXVlKCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgb3Blbk9iamVjdEN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
dW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAg
IHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25l
ZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgdmlydHVh
bCB2b2lkIGdldE9iamVjdChQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPik7Ci0gICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPik7CisgICAgdmlydHVhbCB2b2lkIG9wZW5PYmplY3RDdXJzb3IoUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQg
c2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3QoUGFzc1JlZlB0
cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSopOworICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSop
OwogCiBwcml2YXRlOgogICAgIElEQkluZGV4QmFja2VuZFByb3h5KFBhc3NPd25QdHI8V2ViS2l0
OjpXZWJJREJJbmRleD4pOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmpl
Y3RTdG9yZVByb3h5LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVQcm94
eS5jcHAKaW5kZXggODJjYTVmNjZjZjA5N2ZjMzkwODZkYmU2NDNlNjNkYWI2ZmY4ZmNmZC4uNjlh
YThjYTg5NTA1MGQ1MWU3MjJiYTJlNWJiNDk4YTUwOGFhOWZhNyAxMDA3NTUKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZVByb3h5LmNwcAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQk9iamVjdFN0b3JlUHJveHkuY3BwCkBAIC04MCwxOSArODAsMjggQEAgdm9pZCBJ
REJPYmplY3RTdG9yZVByb3h5OjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGMKICAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5nZXQoa2V5LCBuZXcg
V2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2Vi
SURCVHJhbnNhY3Rpb24oKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVQcm94eTo6cHV0KFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgYm9vbCBhZGRPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQor
dm9pZCBJREJPYmplY3RTdG9yZVByb3h5OjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBib29sIGFkZE9ubHksIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24pCiB7Ci0gICAgbV93ZWJJREJPYmplY3RTdG9yZS0+cHV0KHZhbHVl
LCBrZXksIGFkZE9ubHksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOworICAg
IC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVy
IHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxl
bWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJU
cmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElE
QlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOworICAgIG1fd2ViSURCT2Jq
ZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBhZGRPbmx5LCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1w
bChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7
CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVQcm94eTo6cmVtb3ZlKFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQk9iamVj
dFN0b3JlUHJveHk6OnJlbW92ZShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRy
YW5zYWN0aW9uKQogewotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnJlbW92ZShrZXksIG5ldyBX
ZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBw
b2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFz
LCBpbiB0aGUgcmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50
ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94
eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFBy
b3h5Kj4odHJhbnNhY3Rpb24pOworICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnJlbW92ZShrZXks
IG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5n
ZXRXZWJJREJUcmFuc2FjdGlvbigpKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZVByb3h5Ojpj
cmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9v
bCB1bmlxdWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQk9i
amVjdFN0b3JlUHJveHk6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKIHsKLSAg
ICBtX3dlYklEQk9iamVjdFN0b3JlLT5jcmVhdGVJbmRleChuYW1lLCBrZXlQYXRoLCB1bmlxdWUs
IG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOworICAgIC8vIFRoZSB0cmFuc2Fj
dGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2Jq
ZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJ
REIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tl
bmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFj
a2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOworICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPmNyZWF0
ZUluZGV4KG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2Fs
bGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkpOwogfQog
CiBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVQcm94
eTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtMTAzLDE0ICsxMTIsMjAgQEAgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlUHJveHk6OmluZGV4
KGNvbnN0IFN0cmluZyYgbmEKICAgICByZXR1cm4gSURCSW5kZXhCYWNrZW5kUHJveHk6OmNyZWF0
ZShpbmRleCk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVQcm94eTo6cmVtb3ZlSW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9p
ZCBJREJPYmplY3RTdG9yZVByb3h5OjpyZW1vdmVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb24pCiB7Ci0gICAgbV93ZWJJREJPYmplY3RTdG9yZS0+cmVtb3Zl
SW5kZXgobmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSk7CisgICAgLy8g
VGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8g
YSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBhbGwgaW1wbGVtZW50
YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgorICAgIElEQlRyYW5z
YWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJh
bnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93ZWJJREJPYmplY3RT
dG9yZS0+cmVtb3ZlSW5kZXgobmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tz
KSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkpOwogfQogCi12b2lk
IElEQk9iamVjdFN0b3JlUHJveHk6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
cmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKK3ZvaWQgSURCT2JqZWN0U3RvcmVQcm94eTo6b3BlbkN1cnNvcihQYXNzUmVm
UHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uKQogewotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPm9wZW5DdXJzb3Io
cmFuZ2UsIGRpcmVjdGlvbiwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSk7Cisg
ICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50
ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKKyAgICAvLyBhbGwgaW1w
bGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgorICAgIElE
QlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8
SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7CisgICAgbV93ZWJJREJP
YmplY3RTdG9yZS0+b3BlbkN1cnNvcihyYW5nZSwgZGlyZWN0aW9uLCBuZXcgV2ViSURCQ2FsbGJh
Y2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rp
b24oKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVQcm94eS5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJPYmplY3RTdG9yZVByb3h5LmgKaW5kZXggMTNkZmUyMzZkZTZlZTQ1YzVhNWYxOGM0NjY3NjE2
N2Q0NDIzMGJiMi4uODBlNDY2OGM1ZWQwNWE5MDEyZTllYWI5ZjBlN2UxNTc5MGFjNzhhNCAxMDA3
NTUKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZVByb3h5LmgKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZVByb3h5LmgKQEAgLTQwLDIxICs0MCwy
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJREJPYmplY3RTdG9yZVByb3h5IDogcHVi
bGljIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGUoUGFzc093
blB0cjxXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlPik7Ci0gICAgfklEQk9iamVjdFN0b3JlUHJv
eHkoKTsKKyAgICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZVByb3h5KCk7CiAKLSAgICBTdHJpbmcg
bmFtZSgpIGNvbnN0OwotICAgIFN0cmluZyBrZXlQYXRoKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcg
bmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcygpIGNvbnN0OwogCi0g
ICAgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKLSAgICB2b2lkIHB1dChQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIGJvb2wgYWRkT25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2b2lkIHJl
bW92ZShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwor
ICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOworICAgIHZpcnR1YWwg
dm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElE
QktleT4sIGJvb2wgYWRkT25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKFBhc3NSZWZQ
dHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqKTsKIAotICAgIHZvaWQgY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4pOwotICAgIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChj
b25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgcmVtb3ZlSW5kZXgoY29uc3QgU3RyaW5nJiBu
YW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJ
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlx
dWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4g
aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW5kZXgo
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSopOwogCi0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwogCiBwcml2
YXRlOgogICAgIElEQk9iamVjdFN0b3JlUHJveHkoUGFzc093blB0cjxXZWJLaXQ6OldlYklEQk9i
amVjdFN0b3JlPik7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0
aW9uQmFja2VuZFByb3h5LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25C
YWNrZW5kUHJveHkuY3BwCmluZGV4IDU5ZTg4ZDg5M2UxNTJlNzU5YWQxYzA2YTFiYzBmYWE1YmU4
MzhiMjguLjgxYjdjZWVhZWY3YzQ0YzZiY2VmZjA3NGNhNGUzMGZlZDI1MWZkNjcgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuY3BwCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuY3BwCkBA
IC00NSw2ICs0NSw4IEBAIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6Y3JlYXRlKFBhCiBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRQcm94eTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkoUGFzc093blB0cjxXZWJLaXQ6
OldlYklEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbikKICAgICA6IG1fd2ViSURCVHJhbnNhY3Rp
b24odHJhbnNhY3Rpb24pCiB7CisgICAgaWYgKCFtX3dlYklEQlRyYW5zYWN0aW9uKQorICAgICAg
ICBtX3dlYklEQlRyYW5zYWN0aW9uID0gYWRvcHRQdHIobmV3IFdlYktpdDo6V2ViSURCVHJhbnNh
Y3Rpb24oKSk7CiB9CiAKIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Ojp+SURCVHJhbnNhY3Rp
b25CYWNrZW5kUHJveHkoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJD
YWxsYmFja3NJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ2FsbGJhY2tzSW1w
bC5jcHAKaW5kZXggZmU2Nzc4OWE1MTdkZTFmYjY1ODQ2OTNlMmRjY2Y5ZmM0YWM3MzQxYi4uMTRl
ZDAyZWU1ZWY4MjAyNjRhYWM2MTk1NTFmNDdiOTc4NGZhYzYyNSAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJDYWxsYmFja3NJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQkNhbGxiYWNrc0ltcGwuY3BwCkBAIC0zMywxMiArMzMsMTQgQEAKICNpbmNs
dWRlICJJREJJbmRleEJhY2tlbmRQcm94eS5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1
ZGUgIklEQk9iamVjdFN0b3JlUHJveHkuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tl
bmRQcm94eS5oIgogI2luY2x1ZGUgIldlYklEQkNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIldlYklE
QkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiV2ViSURCRGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUg
IldlYklEQkluZGV4LmgiCiAjaW5jbHVkZSAiV2ViSURCS2V5LmgiCiAjaW5jbHVkZSAiV2ViSURC
T2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJXZWJJREJUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUg
IldlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCkBAIC04OSw2ICs5MSwxMSBAQCB2b2lkIFdlYklEQkNhbGxiYWNrc0ltcGw6Om9uU3VjY2Vz
cyhXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlKiB3ZWJLaXRJbnN0YW5jZSkKICAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKElEQk9iamVjdFN0b3JlUHJveHk6OmNyZWF0ZSh3ZWJLaXRJbnN0YW5j
ZSkpOwogfQogCit2b2lkIFdlYklEQkNhbGxiYWNrc0ltcGw6Om9uU3VjY2VzcyhXZWJLaXQ6Oldl
YklEQlRyYW5zYWN0aW9uKiB3ZWJLaXRJbnN0YW5jZSkKK3sKKyAgICBtX2NhbGxiYWNrcy0+b25T
dWNjZXNzKElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpjcmVhdGUod2ViS2l0SW5zdGFuY2Up
KTsKK30KKwogdm9pZCBXZWJJREJDYWxsYmFja3NJbXBsOjpvblN1Y2Nlc3MoY29uc3QgV2ViS2l0
OjpXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkKIHsKICAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk7CmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkNhbGxiYWNrc0ltcGwuaCBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCQ2FsbGJhY2tzSW1wbC5oCmluZGV4IDE4MzVjNjBjMmM0NWZkYzIw
ODFlOTlmNmQ3NDgwZGYxYWU0OTFkY2EuLjMzYTcyZjQ3MzQ2Mjg2NjRmNDNjZjJjOGVhZTEzNmRl
MGRhZDkwMjAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ2FsbGJhY2tz
SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCQ2FsbGJhY2tzSW1wbC5oCkBA
IC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKGNvbnN0
IFdlYktpdDo6V2ViSURCS2V5Jik7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhXZWJLaXQ6
OldlYklEQkluZGV4Kik7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhXZWJLaXQ6OldlYklE
Qk9iamVjdFN0b3JlKik7CisgICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhXZWJLaXQ6OldlYklE
QlRyYW5zYWN0aW9uKik7CiAgICAgdmlydHVhbCB2b2lkIG9uU3VjY2Vzcyhjb25zdCBXZWJLaXQ6
OldlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwCmluZGV4IDg4NzBmZjk0Y2ViOTJlYjY5YTQyYjlm
MWZhODBmNDQ2OTI1MTNkMmYuLmFiZTZmYmQwODE3ZDYxOTVlMGE5ZmMwZDk4ODQ3ZDFjMzFkNTRk
NzYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNw
cAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKQEAgLTY5
LDkgKzY5LDkgQEAgV2ViRE9NU3RyaW5nTGlzdCBXZWJJREJEYXRhYmFzZUltcGw6Om9iamVjdFN0
b3JlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGF0YWJhc2VCYWNrZW5kLT5vYmplY3RTdG9yZXMo
KTsKIH0KIAotdm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0
IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNy
ZW1lbnQsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzKQordm9pZCBXZWJJREJEYXRhYmFzZUlt
cGw6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJh
Y2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7Ci0gICAgbV9kYXRh
YmFzZUJhY2tlbmQtPmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1l
bnQsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoY2FsbGJhY2tzKSk7CisgICAgbV9kYXRhYmFz
ZUJhY2tlbmQtPmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQs
IElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoY2FsbGJhY2tzKSwgdHJhbnNhY3Rpb24uZ2V0SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkpOwogfQogCiBXZWJJREJPYmplY3RTdG9yZSog
V2ViSURCRGF0YWJhc2VJbXBsOjpvYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIHVu
c2lnbmVkIHNob3J0IG1vZGUpCkBAIC04Miw5ICs4Miw5IEBAIFdlYklEQk9iamVjdFN0b3JlKiBX
ZWJJREJEYXRhYmFzZUltcGw6Om9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgdW5z
aWduCiAgICAgcmV0dXJuIG5ldyBXZWJJREJPYmplY3RTdG9yZUltcGwob2JqZWN0U3RvcmUpOwog
fQogCi12b2lkIFdlYklEQkRhdGFiYXNlSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmUoY29uc3QgV2Vi
U3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcykKK3ZvaWQgV2ViSURCRGF0
YWJhc2VJbXBsOjpyZW1vdmVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklE
QkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24pCiB7Ci0gICAgbV9kYXRhYmFzZUJhY2tlbmQtPnJlbW92ZU9iamVjdFN0b3JlKG5hbWUsIElE
QkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoY2FsbGJhY2tzKSk7CisgICAgbV9kYXRhYmFzZUJhY2tl
bmQtPnJlbW92ZU9iamVjdFN0b3JlKG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoY2Fs
bGJhY2tzKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkp
OwogfQogCiB2b2lkIFdlYklEQkRhdGFiYXNlSW1wbDo6c2V0VmVyc2lvbihjb25zdCBXZWJTdHJp
bmcmIHZlcnNpb24sIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzKQpAQCAtMTAxLDYgKzEwMSwx
MSBAQCBXZWJJREJUcmFuc2FjdGlvbiogV2ViSURCRGF0YWJhc2VJbXBsOjp0cmFuc2FjdGlvbihj
b25zdCBXZWJET01TdHJpbmdMaXN0JiBuYW1lcwogICAgIHJldHVybiBuZXcgV2ViSURCVHJhbnNh
Y3Rpb25JbXBsKHRyYW5zYWN0aW9uKTsKIH0KIAordm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OmNs
b3NlKCkKK3sKKyAgICBtX2RhdGFiYXNlQmFja2VuZC0+Y2xvc2UoKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5oIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuaAppbmRleCBlMGVhYWE1OGJmOWVlMDM2
YTJjZTgyNWYyYjkzNGI0ZTYxMjEyMTQ4Li4yMjc0ZTQ4Y2ZkNTk4MDU1YTMzMTdkNTg2ODQ0ZmM0
ZDFlNmJkOGI5IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNl
SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmgKQEAg
LTQ5LDExICs0OSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJTdHJpbmcgdmVyc2lvbigp
IGNvbnN0OwogICAgIHZpcnR1YWwgV2ViRE9NU3RyaW5nTGlzdCBvYmplY3RTdG9yZXMoKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcm
IG5hbWUsIGNvbnN0IFdlYlN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBXZWJJ
REJDYWxsYmFja3MqIGNhbGxiYWNrcyk7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0
b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBrZXlQYXRoLCBib29s
IGF1dG9JbmNyZW1lbnQsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYpOwogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3Jl
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgdW5zaWduZWQgc2hvcnQgbW9kZSk7Ci0gICAgdmlydHVh
bCB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2Fs
bGJhY2tzKiBjYWxsYmFja3MpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVPYmplY3RTdG9yZShj
b25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBX
ZWJJREJUcmFuc2FjdGlvbiYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFdl
YlN0cmluZyYgdmVyc2lvbiwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MpOwogICAgIHZpcnR1
YWwgV2ViSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKGNvbnN0IFdlYkRPTVN0cmluZ0xpc3Qm
IG5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOworICAg
IHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogCiBwcml2YXRlOgogICAgIFdURjo6UmVmUHRyPFdlYkNv
cmU6OklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gbV9kYXRhYmFzZUJhY2tlbmQ7CmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkluZGV4SW1wbC5jcHAgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQkluZGV4SW1wbC5jcHAKaW5kZXggYzA0OWFhYzRiOGJkMDY0OTRl
NjBiNjQzNjBlNDczYjJmN2YwOTIwZi4uODc5NTc3ODFhNWJhYjYxNTU1M2Q4OTQ5ZTY2YTlkMmYw
NWI3MmVmMyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJJbmRleEltcGwu
Y3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCSW5kZXhJbXBsLmNwcApAQCAtNjgs
MjQgKzY4LDI0IEBAIGJvb2wgV2ViSURCSW5kZXhJbXBsOjp1bmlxdWUoKSBjb25zdAogICAgIHJl
dHVybiBtX2JhY2tlbmQtPnVuaXF1ZSgpOwogfQogCi12b2lkIFdlYklEQkluZGV4SW1wbDo6b3Bl
bkN1cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRp
cmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MpCit2b2lkIFdlYklEQkluZGV4SW1w
bDo6b3BlbkN1cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYga2V5UmFuZ2UsIHVuc2lnbmVkIHNo
b3J0IGRpcmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKLSAgICBtX2JhY2tlbmQtPm9wZW5DdXJzb3Ioa2V5
UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShjYWxsYmFja3MpKTsK
KyAgICBtX2JhY2tlbmQtPm9wZW5DdXJzb3Ioa2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ2FsbGJh
Y2tzUHJveHk6OmNyZWF0ZShjYWxsYmFja3MpLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UoKSk7CiB9CiAKLXZvaWQgV2ViSURCSW5kZXhJbXBsOjpvcGVuT2Jq
ZWN0Q3Vyc29yKGNvbnN0IFdlYklEQktleVJhbmdlJiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQg
ZGlyZWN0aW9uLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcykKK3ZvaWQgV2ViSURCSW5kZXhJ
bXBsOjpvcGVuT2JqZWN0Q3Vyc29yKGNvbnN0IFdlYklEQktleVJhbmdlJiBrZXlSYW5nZSwgdW5z
aWduZWQgc2hvcnQgZGlyZWN0aW9uLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3Qg
V2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQogewotICAgIG1fYmFja2VuZC0+b3Blbk9i
amVjdEN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRl
KGNhbGxiYWNrcykpOworICAgIG1fYmFja2VuZC0+b3Blbk9iamVjdEN1cnNvcihrZXlSYW5nZSwg
ZGlyZWN0aW9uLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGNhbGxiYWNrcyksIHRyYW5zYWN0
aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpKTsKIH0KIAotdm9pZCBXZWJJ
REJJbmRleEltcGw6OmdldE9iamVjdChjb25zdCBXZWJJREJLZXkmIGtleVJhbmdlLCBXZWJJREJD
YWxsYmFja3MqIGNhbGxiYWNrcykKK3ZvaWQgV2ViSURCSW5kZXhJbXBsOjpnZXRPYmplY3QoY29u
c3QgV2ViSURCS2V5JiBrZXlSYW5nZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0
IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKLSAgICBtX2JhY2tlbmQtPmdldE9i
amVjdChrZXlSYW5nZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShjYWxsYmFja3MpKTsKKyAg
ICBtX2JhY2tlbmQtPmdldE9iamVjdChrZXlSYW5nZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0
ZShjYWxsYmFja3MpLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UoKSk7CiB9CiAKLXZvaWQgV2ViSURCSW5kZXhJbXBsOjpnZXQoY29uc3QgV2ViSURCS2V5JiBr
ZXlSYW5nZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MpCit2b2lkIFdlYklEQkluZGV4SW1w
bDo6Z2V0KGNvbnN0IFdlYklEQktleSYga2V5UmFuZ2UsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJh
Y2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7Ci0gICAgbV9iYWNr
ZW5kLT5nZXQoa2V5UmFuZ2UsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoY2FsbGJhY2tzKSk7
CisgICAgbV9iYWNrZW5kLT5nZXQoa2V5UmFuZ2UsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUo
Y2FsbGJhY2tzKSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklEQkluZGV4SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJJ
bmRleEltcGwuaAppbmRleCAyMTA4MDAxY2NkYzJmNzk4ZWYwOGRlYmQ3ODk4NzllMmJiMzJhOTA5
Li5jYjJlZmM3NzU2YzFiOGRlOGJkYjM2YzY0YzliNjlhYmNiMjcyNDliIDEwMDY0NAotLS0gYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkluZGV4SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCSW5kZXhJbXBsLmgKQEAgLTQ2LDEwICs0NiwxMCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBXZWJTdHJpbmcga2V5UGF0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCB1bmlx
dWUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBvcGVuT2JqZWN0Q3Vyc29yKGNvbnN0IFdl
YklEQktleVJhbmdlJiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBXZWJJREJDYWxsYmFja3Mq
KTsgCi0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2UmLCB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyopOwotICAgIHZpcnR1YWwg
dm9pZCBnZXRPYmplY3QoY29uc3QgV2ViSURCS2V5JiwgV2ViSURCQ2FsbGJhY2tzKik7Ci0gICAg
dmlydHVhbCB2b2lkIGdldChjb25zdCBXZWJJREJLZXkmLCBXZWJJREJDYWxsYmFja3MqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgb3Blbk9iamVjdEN1cnNvcihjb25zdCBXZWJJREJLZXlSYW5nZSYsIHVu
c2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJh
bnNhY3Rpb24mKTsgCisgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5
UmFuZ2UmLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0
IFdlYklEQlRyYW5zYWN0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdChjb25zdCBX
ZWJJREJLZXkmLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpOwor
ICAgIHZpcnR1YWwgdm9pZCBnZXQoY29uc3QgV2ViSURCS2V5JiwgV2ViSURCQ2FsbGJhY2tzKiwg
Y29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKTsKIAogcHJpdmF0ZToKICAgICBXVEY6OlJlZlB0cjxX
ZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcAppbmRleCAzNmQ4YWNlNGU5ZDJl
ZjA0MTEyYjRmMmMxMDA4Zjc4ZWVjYmRhYzZhLi4zY2Y3ZjI1NzllYTczOTZjZTUyYTFmOTA0ZDM0
NDcwYjBjZWUxYTNmIDEwMDc1NQotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVj
dFN0b3JlSW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9y
ZUltcGwuY3BwCkBAIC03MSwxOSArNzEsMTkgQEAgdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6
OmdldChjb25zdCBXZWJJREJLZXkmIGtleSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MKICAg
ICBtX29iamVjdFN0b3JlLT5nZXQoa2V5LCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGNhbGxi
YWNrcyksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpKTsK
IH0KIAotdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnB1dChjb25zdCBXZWJTZXJpYWxpemVk
U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJREJLZXkmIGtleSwgYm9vbCBhZGRPbmx5LCBX
ZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcykKK3ZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpw
dXQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgV2ViSURCS2V5
JiBrZXksIGJvb2wgYWRkT25seSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKLSAgICBtX29iamVjdFN0b3JlLT5wdXQo
dmFsdWUsIGtleSwgYWRkT25seSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShjYWxsYmFja3Mp
KTsKKyAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgYWRkT25seSwgSURCQ2FsbGJh
Y2tzUHJveHk6OmNyZWF0ZShjYWxsYmFja3MpLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UoKSk7CiB9CiAKLXZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpy
ZW1vdmUoY29uc3QgV2ViSURCS2V5JiBrZXksIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzKQor
dm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnJlbW92ZShjb25zdCBXZWJJREJLZXkmIGtleSwg
V2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbikKIHsKLSAgICBtX29iamVjdFN0b3JlLT5yZW1vdmUoa2V5LCBJREJDYWxsYmFja3NQ
cm94eTo6Y3JlYXRlKGNhbGxiYWNrcykpOworICAgIG1fb2JqZWN0U3RvcmUtPnJlbW92ZShrZXks
IElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoY2FsbGJhY2tzKSwgdHJhbnNhY3Rpb24uZ2V0SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkpOwogfQogCi12b2lkIFdlYklEQk9iamVjdFN0
b3JlSW1wbDo6Y3JlYXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJp
bmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcykKK3Zv
aWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpjcmVhdGVJbmRleChjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIGNvbnN0IFdlYlN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIFdlYklEQkNhbGxiYWNr
cyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7Ci0g
ICAgbV9vYmplY3RTdG9yZS0+Y3JlYXRlSW5kZXgobmFtZSwga2V5UGF0aCwgdW5pcXVlLCBJREJD
YWxsYmFja3NQcm94eTo6Y3JlYXRlKGNhbGxiYWNrcykpOworICAgIG1fb2JqZWN0U3RvcmUtPmNy
ZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0
ZShjYWxsYmFja3MpLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UoKSk7CiB9CiAKIFdlYklEQkluZGV4KiBXZWJJREJPYmplY3RTdG9yZUltcGw6OmluZGV4KGNv
bnN0IFdlYlN0cmluZyYgbmFtZSkKQEAgLTk0LDE0ICs5NCwxNCBAQCBXZWJJREJJbmRleCogV2Vi
SURCT2JqZWN0U3RvcmVJbXBsOjppbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUpCiAgICAgcmV0
dXJuIG5ldyBXZWJJREJJbmRleEltcGwoaW5kZXgpOwogfQogCi12b2lkIFdlYklEQk9iamVjdFN0
b3JlSW1wbDo6cmVtb3ZlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFj
a3MqIGNhbGxiYWNrcykKK3ZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpyZW1vdmVJbmRleChj
b25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBX
ZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7Ci0gICAgbV9vYmplY3RTdG9yZS0+cmVt
b3ZlSW5kZXgobmFtZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShjYWxsYmFja3MpKTsKKyAg
ICBtX29iamVjdFN0b3JlLT5yZW1vdmVJbmRleChuYW1lLCBJREJDYWxsYmFja3NQcm94eTo6Y3Jl
YXRlKGNhbGxiYWNrcyksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSgpKTsKIH0KIAotdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6Om9wZW5DdXJzb3IoY29u
c3QgV2ViSURCS2V5UmFuZ2UmIGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFdl
YklEQkNhbGxiYWNrcyogY2FsbGJhY2tzKQordm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6Om9w
ZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2UmIGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBk
aXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24pCiB7Ci0gICAgbV9vYmplY3RTdG9yZS0+b3BlbkN1cnNvcihJREJL
ZXlSYW5nZTo6Y3JlYXRlKGtleVJhbmdlLmxlZnQoKSwga2V5UmFuZ2UucmlnaHQoKSwga2V5UmFu
Z2UuZmxhZ3MoKSksIGRpcmVjdGlvbiwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShjYWxsYmFj
a3MpKTsKKyAgICBtX29iamVjdFN0b3JlLT5vcGVuQ3Vyc29yKElEQktleVJhbmdlOjpjcmVhdGUo
a2V5UmFuZ2UubGVmdCgpLCBrZXlSYW5nZS5yaWdodCgpLCBrZXlSYW5nZS5mbGFncygpKSwgZGly
ZWN0aW9uLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGNhbGxiYWNrcyksIHRyYW5zYWN0aW9u
LmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RT
dG9yZUltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmgK
aW5kZXggYTlmMTIwMGM5ZmM0ZDg2MWQyZWY1Zjc5ZTk0NDIxOTYxM2U2NDY5OS4uNzZlNDE0YjVj
M2VmNTNjMWY3ZGE4MGUxOWZmZWYyOTQyNGE0N2VkZCAxMDA3NTUKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCkBAIC00OCwxNCArNDgsMTQgQEAgcHVibGljOgogICAg
IFdlYkRPTVN0cmluZ0xpc3QgaW5kZXhOYW1lcygpIGNvbnN0OwogCiAgICAgdm9pZCBnZXQoY29u
c3QgV2ViSURCS2V5JiBrZXksIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJik7Ci0gICAgdm9pZCBwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1
ZSwgY29uc3QgV2ViSURCS2V5JiBrZXksIGJvb2wgYWRkT25seSwgV2ViSURCQ2FsbGJhY2tzKik7
Ci0gICAgdm9pZCByZW1vdmUoY29uc3QgV2ViSURCS2V5JiBrZXksIFdlYklEQkNhbGxiYWNrcyop
OworICAgIHZvaWQgcHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIGNvbnN0IFdl
YklEQktleSYga2V5LCBib29sIGFkZE9ubHksIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklE
QlRyYW5zYWN0aW9uJik7CisgICAgdm9pZCByZW1vdmUoY29uc3QgV2ViSURCS2V5JiBrZXksIFdl
YklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7CiAKLSAgICB2b2lkIGNy
ZWF0ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBrZXlQYXRo
LCBib29sIHVuaXF1ZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MpOworICAgIHZvaWQgY3Jl
YXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGtleVBhdGgs
IGJvb2wgdW5pcXVlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYp
OwogICAgIFdlYklEQkluZGV4KiBpbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUpOwotICAgIHZv
aWQgcmVtb3ZlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqIGNh
bGxiYWNrcyk7CisgICAgdm9pZCByZW1vdmVJbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdl
YklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7CiAKLSAgICB2b2lkIG9w
ZW5DdXJzb3IoY29uc3QgV2ViSURCS2V5UmFuZ2UmLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24s
IFdlYklEQkNhbGxiYWNrcyopOworICAgIHZvaWQgb3BlbkN1cnNvcihjb25zdCBXZWJJREJLZXlS
YW5nZSYsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3Qg
V2ViSURCVHJhbnNhY3Rpb24mKTsKIAogIHByaXZhdGU6CiAgICAgV1RGOjpSZWZQdHI8V2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBtX29iamVjdFN0b3JlOwo=
</data>
<flag name="review"
          id="59009"
          type_id="1"
          status="+"
          setter="steveblock"
    />
          </attachment>
      

    </bug>

</bugzilla>