<?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>203971</bug_id>
          
          <creation_ts>2019-11-07 11:30:52 -0800</creation_ts>
          <short_desc>Cross-thread version StorageQuotaManager</short_desc>
          <delta_ts>2019-12-03 10:15:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>204379</dependson>
    
    <dependson>204553</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1588315</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-07 11:30:52 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1588316</commentid>
    <comment_count>1</comment_count>
      <attachid>383062</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-07 11:31:28 -0800</bug_when>
    <thetext>Created attachment 383062
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589575</commentid>
    <comment_count>2</comment_count>
      <attachid>383365</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-12 10:50:21 -0800</bug_when>
    <thetext>Created attachment 383365
WIP2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589611</commentid>
    <comment_count>3</comment_count>
      <attachid>383374</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-12 13:31:54 -0800</bug_when>
    <thetext>Created attachment 383374
WIP3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589701</commentid>
    <comment_count>4</comment_count>
      <attachid>383406</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-12 16:45:52 -0800</bug_when>
    <thetext>Created attachment 383406
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589724</commentid>
    <comment_count>5</comment_count>
      <attachid>383414</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-12 17:50:15 -0800</bug_when>
    <thetext>Created attachment 383414
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1589997</commentid>
    <comment_count>6</comment_count>
      <attachid>383482</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-13 12:49:47 -0800</bug_when>
    <thetext>Created attachment 383482
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590002</commentid>
    <comment_count>7</comment_count>
      <attachid>383483</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-13 12:53:26 -0800</bug_when>
    <thetext>Created attachment 383483
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590011</commentid>
    <comment_count>8</comment_count>
      <attachid>383486</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-13 13:21:10 -0800</bug_when>
    <thetext>Created attachment 383486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590256</commentid>
    <comment_count>9</comment_count>
      <attachid>383557</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-14 09:18:48 -0800</bug_when>
    <thetext>Created attachment 383557
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591131</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-18 11:17:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/57290349&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591352</commentid>
    <comment_count>11</comment_count>
      <attachid>383557</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-11-18 17:29:43 -0800</bug_when>
    <thetext>Comment on attachment 383557
Patch

Didn&apos;t have the time to fully review the patch.
Below some feedback.
It seems this patch is fixing some existing bugs, maybe they should be fixed as their own patch.

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

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:694
&gt; +    RefPtr&lt;StorageQuotaManager&gt; storageQuotaManager = m_quotaManagerGetter(origin);

auto I guess.
But why do we need to have a ref it?
Can we simply get a StorageQuotaManager&amp;
Or could we just write something like:
return m_quotaManagerGetter(origin, taskSize)
And default implementation of the lambda would return Deny.

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.h:60
&gt; +    using StorageQuotaManagerGetter = WTF::Function&lt;RefPtr&lt;StorageQuotaManager&gt;(const ClientOrigin&amp;)&gt;;

No need for WTF::?

&gt; Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.cpp:198
&gt; +    m_objectStoresByName.set(newName, objectStore);

This probably deserves its own patch. Can we split it?

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:811
&gt; +    auto decision = m_server-&gt;requestSpace(origin, taskSize);

Could be a one-liner with if

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:936
&gt; +    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::performClearObjectStore, m_identifier.origin(), callbackID, transaction.info().identifier(), objectStoreIdentifier));

UniqueIDBDatabase origin is never changing so we should not need to pass it cross thread every time we need to do a hop.
Can we store it somewhere so that we can use it directly in database thread?

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:-1517
&gt; -    uint64_t count;

Can we keep count here?

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:50
&gt; +void StorageQuotaManager::requestSpaceOnMainThread(uint64_t spaceRequested, RequestCallback&amp;&amp; callback)

I am not sure we want one version of the API that is main thread and callback based and another version that is background thread but blocking.
We already have the infrastructure
Can we expose a single requestSpace method?
I guess this would mean that the background thread version would not block and would use a callback version as well.

&gt; Source/WebKit/UIProcess/API/C/WKContextPrivate.h:129
&gt; +WK_EXPORT void WKContextResetQuota(WKContextRef);

You can talk with Alex but I guess he might prefer that this API goes through WebsiteDataStore.

&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:556
&gt; +        parameters.defaultDataStoreParameters.cacheStorageDirectory = cacheStorageDirectory;

WTFMove

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:2088
&gt; +        parameters.cacheStorageDirectory = cacheStorageDirectory;

WTFMove() I guess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591726</commentid>
    <comment_count>12</comment_count>
      <attachid>383557</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-19 15:41:16 -0800</bug_when>
    <thetext>Comment on attachment 383557
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:694
&gt;&gt; +    RefPtr&lt;StorageQuotaManager&gt; storageQuotaManager = m_quotaManagerGetter(origin);
&gt; 
&gt; auto I guess.
&gt; But why do we need to have a ref it?
&gt; Can we simply get a StorageQuotaManager&amp;
&gt; Or could we just write something like:
&gt; return m_quotaManagerGetter(origin, taskSize)
&gt; And default implementation of the lambda would return Deny.

ref is used to make sure storageQuotaManager is not destroyed when we use it, since we may create/destroy it from different threads.

We can probably replace this m_quotaManagerGetter with some m_spaceRequester I think.

&gt;&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.h:60
&gt;&gt; +    using StorageQuotaManagerGetter = WTF::Function&lt;RefPtr&lt;StorageQuotaManager&gt;(const ClientOrigin&amp;)&gt;;
&gt; 
&gt; No need for WTF::?

Will remove.

&gt;&gt; Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.cpp:198
&gt;&gt; +    m_objectStoresByName.set(newName, objectStore);
&gt; 
&gt; This probably deserves its own patch. Can we split it?

Yes, will remove.

&gt;&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:811
&gt;&gt; +    auto decision = m_server-&gt;requestSpace(origin, taskSize);
&gt; 
&gt; Could be a one-liner with if

Okay.

&gt;&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:936
&gt;&gt; +    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::performClearObjectStore, m_identifier.origin(), callbackID, transaction.info().identifier(), objectStoreIdentifier));
&gt; 
&gt; UniqueIDBDatabase origin is never changing so we should not need to pass it cross thread every time we need to do a hop.
&gt; Can we store it somewhere so that we can use it directly in database thread?

Sure. Will change this.

&gt;&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:-1517
&gt;&gt; -    uint64_t count;
&gt; 
&gt; Can we keep count here?

Sure.

&gt;&gt; Source/WebCore/storage/StorageQuotaManager.cpp:50
&gt;&gt; +void StorageQuotaManager::requestSpaceOnMainThread(uint64_t spaceRequested, RequestCallback&amp;&amp; callback)
&gt; 
&gt; I am not sure we want one version of the API that is main thread and callback based and another version that is background thread but blocking.
&gt; We already have the infrastructure
&gt; Can we expose a single requestSpace method?
&gt; I guess this would mean that the background thread version would not block and would use a callback version as well.

Basically the main-thread case is just a special case of the background thread case. The WorkQueue of StorageQuotaManager is requesting on behalf the main thread.

Our idea here is to synchronously getting the request decision: simply holding the StorageQuotaManager lock until one request is done. 

The reason I didn&apos;t use the callback version for requestSpace on background thread is it&apos;s making the code much cleaner: we don&apos;t need all this *AfterQuotaCheck functions or ref-ing objects to make sure they are alive when we do the callback. Also we don&apos;t need to maintain the StorageQuotaManager states (e.g. WaitingForUIResponse).

We can expose one requestSpace method and choose which internal function to use based on isMainThread();

&gt;&gt; Source/WebKit/UIProcess/API/C/WKContextPrivate.h:129
&gt;&gt; +WK_EXPORT void WKContextResetQuota(WKContextRef);
&gt; 
&gt; You can talk with Alex but I guess he might prefer that this API goes through WebsiteDataStore.

Sure.

&gt;&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:556
&gt;&gt; +        parameters.defaultDataStoreParameters.cacheStorageDirectory = cacheStorageDirectory;
&gt; 
&gt; WTFMove

cacheStorageDirectory is used on the line below... but I guess I can move it forward

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:2088
&gt;&gt; +        parameters.cacheStorageDirectory = cacheStorageDirectory;
&gt; 
&gt; WTFMove() I guess

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592057</commentid>
    <comment_count>13</comment_count>
      <attachid>383972</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-20 10:43:57 -0800</bug_when>
    <thetext>Created attachment 383972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592106</commentid>
    <comment_count>14</comment_count>
      <attachid>383972</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-20 12:45:18 -0800</bug_when>
    <thetext>Comment on attachment 383972
Patch

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

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:856
&gt; +    if (m_server-&gt;requestSpace(m_origin, 0) == StorageQuotaManager::Decision::Deny) {

What is this for? Why are we requesting 0 space for deleting something? Shouldn&apos;t deleting something always succeed no matter the quota?

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:940
&gt; +    if (m_server-&gt;requestSpace(m_origin, 0) == StorageQuotaManager::Decision::Deny) {

Same question.

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:1263
&gt; +    if (m_server-&gt;requestSpace(m_origin, 0) == StorageQuotaManager::Decision::Deny) {

Ditto.

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:1280
&gt; +    if (m_server-&gt;requestSpace(m_origin, 0) == StorageQuotaManager::Decision::Deny) {

Ditto.

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:1305
&gt; +    if (m_server-&gt;requestSpace(m_origin, 0) == StorageQuotaManager::Decision::Deny) {

Ditto.

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:1340
&gt; +    if (m_server-&gt;requestSpace(m_origin, 0) == StorageQuotaManager::Decision::Deny) {

Ditto.

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:1378
&gt; +    if (m_server-&gt;requestSpace(m_origin, 0) == StorageQuotaManager::Decision::Deny) {

Ditto.

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:1412
&gt; +    if (m_server-&gt;requestSpace(m_origin, 0) == StorageQuotaManager::Decision::Deny) {

Ditto.

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:1446
&gt; +    if (m_server-&gt;requestSpace(m_origin, 0) == StorageQuotaManager::Decision::Deny) {

Ditto.

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:1605
&gt; +    if (m_server-&gt;requestSpace(m_origin, 0) == StorageQuotaManager::Decision::Deny) {

Ditto.

&gt; Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp:86
&gt; +        storageQuotaManager-&gt;requestSpace(spaceRequested, [&amp;result](auto decision) mutable {

This code looks dangerous, it looks like you&apos;re doing an asynchronous operation to populate result, but then use result synchronously. Even worse, result is not even initialized. I am assuming requestSpace() works synchronously here? But I assume it is sometimes async since it takes a lambda instead of returning the decision synchronously?

&gt; Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp:104
&gt; +        storageQuotaManager-&gt;requestSpace(spaceRequested, [&amp;result](auto decision) mutable {

Ditto.

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:50
&gt; +void StorageQuotaManager::requestSpace(uint64_t spaceRequested, RequestCallback&amp;&amp; callback)

I think this may look clearer if we had 2 versions of this. One that should only be called from the main thread and another that should only be called from background threads.
Then the one that is called from a background thread would return the decision synchronously (via a method return value) and not take in a lambda.

Having a callback that may or may not get called synchronously, and having some call sites relying on the fact that it gets called synchronously is a foot-gun and it WILL bite us at some point.

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:64
&gt; +    if (m_quotaCountDownLock.tryLock()) {

What&apos;s the reasoning behind this? We do we tryLock and fall back to an async dispatch. Why is it better that simply lock() with no fallback? Or better than always dispatch without locking?

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:73
&gt; +    m_callbacks.append(WTFMove(callback));

What is m_callbacks for? Why cannot we pipe the callback though by capturing it it through the lambdas below?

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:74
&gt; +    m_workQueue-&gt;dispatch([this, protectedThis = makeRef(*this), spaceRequested] {

mutable.

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:76
&gt; +        callOnMainThread([this, protectedThis = makeRef(*this), decision] {

protectedThis = WTFMove(protectedThis)

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:101
&gt; +    callOnMainThread([this, protectedThis = makeRef(*this), spaceRequested, &amp;semaphore] {

mutable

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:103
&gt; +        m_quotaIncreaseRequester(m_quota, m_usage, spaceRequested, [this, protectedThis = makeRef(*this), &amp;semaphore](Optional&lt;uint64_t&gt; newQuota) {

WTFMove(protectedThis)

&gt; Source/WebCore/storage/StorageQuotaManager.h:40
&gt; +    using UsageGetter = WTF::Function&lt;uint64_t()&gt;;

WTF:: should not be needed.

&gt; Source/WebCore/storage/StorageQuotaManager.h:41
&gt; +    using QuotaIncreaseRequester = WTF::Function&lt;void(uint64_t currentQuota, uint64_t currentUsage, uint64_t requestedIncrease, CompletionHandler&lt;void(Optional&lt;uint64_t&gt;)&gt;&amp;&amp;)&gt;;

WTF:: should not be needed.

&gt; Source/WebCore/storage/StorageQuotaManager.h:53
&gt; +    WEBCORE_EXPORT void resetQuotaUpdatedBasedOnUsage();

Can it be named &quot;ForTesting&quot; then?

&gt; Source/WebCore/storage/StorageQuotaManager.h:54
&gt; +    WEBCORE_EXPORT void resetQuota();

ditto?

Then we would not need a comment.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:461
&gt; +    auto[iter, isNewEntry] = m_sessionStorageQuotaManagers.add(sessionID, nullptr);

I think ensure() with a lambda looks a lot better than adding null and then retro-actively modify the iterator value.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2222
&gt; +        storageQuotaManager-&gt;requestSpace(spaceRequested, [&amp;result](auto decision) mutable {

Again, this looks unsafe.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2344
&gt; +void NetworkProcess::resetQuota(PAL::SessionID sessionID, CompletionHandler&lt;void()&gt;&amp;&amp; completionHandler)

Why is this taking a completion handler? it is synchronous.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2437
&gt; +    idbRootPath = sessionStorageQuotaManager-&gt;idbRootPath();

Are we on the main thread here? It would help to have an assertion to document which thread this is expected to run on. 

My main concern is that you are capturing this string in a lambda below, and that lambda uses that same thing on a background thread. Our strings are not thread safe so it would not be safe if we were not on the same background thread here.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2443
&gt; +        usage += CacheStorage::Engine::diskUsage(cacheRootPath, origin);

Why the += ? We can initialize usage here.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.h:479
&gt; +            auto[iter, isNewEntry] = m_storageQuotaManagers.add(origin, nullptr);

ensure()

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp:201
&gt; +    uint64_t directorySize = 0;

We should assert that we are not on the main thread here.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp:248
&gt; +    if (!m_networkProcess)

We should add a threading assertion here. I assume we should be on the main thread since you&apos;re using m_networkProcess.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:408
&gt; +    int64_t spaceRequired = 0;

Why? It seems like an unsigned value would be nicer. And the code below should make sure we don&apos;t underflow.

&gt; Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp:1372
&gt; +    if (!canSendMessage()) {

Not needed. sendWithAsyncReply() will do the right thing.

&gt; Tools/TestWebKitAPI/Tests/WebCore/StorageQuotaManager.cpp:-69
&gt; -TEST(StorageQuotaManagerTest, Basic)

So we&apos;re losing all API test coverage for quota?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592133</commentid>
    <comment_count>15</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-20 14:27:07 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #14)
&gt; Comment on attachment 383972 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=383972&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:856
&gt; &gt; +    if (m_server-&gt;requestSpace(m_origin, 0) == StorageQuotaManager::Decision::Deny) {
&gt; 
&gt; What is this for? Why are we requesting 0 space for deleting something?
&gt; Shouldn&apos;t deleting something always succeed no matter the quota?
&gt; 
Request 0 space is a way to protect the order of the tasks. If we don&apos;t do this, when a delete task is scheduled after a put task, the delete task would run before the put because it does not need to wait until space request finishes.

I should probably give this a better name.

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp:86
&gt; &gt; +        storageQuotaManager-&gt;requestSpace(spaceRequested, [&amp;result](auto decision) mutable {
&gt; 
&gt; This code looks dangerous, it looks like you&apos;re doing an asynchronous
&gt; operation to populate result, but then use result synchronously. Even worse,
&gt; result is not even initialized. I am assuming requestSpace() works
&gt; synchronously here? But I assume it is sometimes async since it takes a
&gt; lambda instead of returning the decision synchronously?
&gt; 

Will change to use requestSpaceOnMainThread which returns result asynchronously and requestSpaceOnBackground which returns result synchronously. I was trying to provide one unified interface requestSpace() as comment above suggested.

&gt; 
&gt; &gt; Source/WebCore/storage/StorageQuotaManager.cpp:50
&gt; &gt; +void StorageQuotaManager::requestSpace(uint64_t spaceRequested, RequestCallback&amp;&amp; callback)
&gt; 
&gt; I think this may look clearer if we had 2 versions of this. One that should
&gt; only be called from the main thread and another that should only be called
&gt; from background threads.
&gt; Then the one that is called from a background thread would return the
&gt; decision synchronously (via a method return value) and not take in a lambda.
&gt; 
&gt; Having a callback that may or may not get called synchronously, and having
&gt; some call sites relying on the fact that it gets called synchronously is a
&gt; foot-gun and it WILL bite us at some point.
&gt; 
Got it.

&gt; &gt; Source/WebCore/storage/StorageQuotaManager.cpp:64
&gt; &gt; +    if (m_quotaCountDownLock.tryLock()) {
&gt; 
&gt; What&apos;s the reasoning behind this? We do we tryLock and fall back to an async
&gt; dispatch. Why is it better that simply lock() with no fallback? Or better
&gt; than always dispatch without locking?
&gt; 

1. requestSpaceOnBackgroundThread would schedule a task to main thread(to ask UI process for quota increase) and wait for callback of the task. This would be a deadlock if requestSpaceOnMainThread holds the lock. 

2. we don&apos;t want to the main thread to wait on the lock when the lock can be held by a background thread for a long time (e.g. waiting for response of UI process about quota increase). tryLock will let the main thread give up as soon as possible.

3. we can grant space request on main thread if m_quotaCountDown(estimated space available) allows, because then we don&apos;t need to stat file system for disk usage or wait for UI process&apos;s response for quota increase.


&gt; &gt; Source/WebCore/storage/StorageQuotaManager.cpp:73
&gt; &gt; +    m_callbacks.append(WTFMove(callback));
&gt; 
&gt; What is m_callbacks for? Why cannot we pipe the callback though by capturing
&gt; it it through the lambdas below?
&gt; 

We can pipe the callback. I was thinking that since we are passing the call back from main to work queue, and then to main, it may be enough just store it. Will change this.

&gt; &gt; Source/WebCore/storage/StorageQuotaManager.cpp:74
&gt; &gt; +    m_workQueue-&gt;dispatch([this, protectedThis = makeRef(*this), spaceRequested] {
&gt; 
&gt; mutable.
&gt; 
Will add.

&gt; &gt; Source/WebCore/storage/StorageQuotaManager.cpp:76
&gt; &gt; +        callOnMainThread([this, protectedThis = makeRef(*this), decision] {
&gt; 
&gt; protectedThis = WTFMove(protectedThis)
&gt; 
&gt; &gt; Source/WebCore/storage/StorageQuotaManager.cpp:101
&gt; &gt; +    callOnMainThread([this, protectedThis = makeRef(*this), spaceRequested, &amp;semaphore] {
&gt; 
&gt; mutable
&gt; 
Will add.

&gt; &gt; Source/WebCore/storage/StorageQuotaManager.cpp:103
&gt; &gt; +        m_quotaIncreaseRequester(m_quota, m_usage, spaceRequested, [this, protectedThis = makeRef(*this), &amp;semaphore](Optional&lt;uint64_t&gt; newQuota) {
&gt; 
&gt; WTFMove(protectedThis)
&gt; 
&gt; &gt; Source/WebCore/storage/StorageQuotaManager.h:40
&gt; &gt; +    using UsageGetter = WTF::Function&lt;uint64_t()&gt;;
&gt; 
&gt; WTF:: should not be needed.
&gt; 
Will remove.

&gt; &gt; Source/WebCore/storage/StorageQuotaManager.h:41
&gt; &gt; +    using QuotaIncreaseRequester = WTF::Function&lt;void(uint64_t currentQuota, uint64_t currentUsage, uint64_t requestedIncrease, CompletionHandler&lt;void(Optional&lt;uint64_t&gt;)&gt;&amp;&amp;)&gt;;
&gt; 
&gt; WTF:: should not be needed.
&gt; 
Will remove.

&gt; &gt; Source/WebCore/storage/StorageQuotaManager.h:53
&gt; &gt; +    WEBCORE_EXPORT void resetQuotaUpdatedBasedOnUsage();
&gt; 
&gt; Can it be named &quot;ForTesting&quot; then?
&gt; 
Will change.

&gt; &gt; Source/WebCore/storage/StorageQuotaManager.h:54
&gt; &gt; +    WEBCORE_EXPORT void resetQuota();
&gt; 
&gt; ditto?
&gt; 
&gt; Then we would not need a comment.
&gt; 
Will change.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:461
&gt; &gt; +    auto[iter, isNewEntry] = m_sessionStorageQuotaManagers.add(sessionID, nullptr);
&gt; 
&gt; I think ensure() with a lambda looks a lot better than adding null and then
&gt; retro-actively modify the iterator value.
&gt; 
Will change.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2222
&gt; &gt; +        storageQuotaManager-&gt;requestSpace(spaceRequested, [&amp;result](auto decision) mutable {
&gt; 
&gt; Again, this looks unsafe.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2344
&gt; &gt; +void NetworkProcess::resetQuota(PAL::SessionID sessionID, CompletionHandler&lt;void()&gt;&amp;&amp; completionHandler)
&gt; 
&gt; Why is this taking a completion handler? it is synchronous.
&gt; 
Will change.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2437
&gt; &gt; +    idbRootPath = sessionStorageQuotaManager-&gt;idbRootPath();
&gt; 
&gt; Are we on the main thread here? It would help to have an assertion to
&gt; document which thread this is expected to run on. 
&gt; 
&gt; My main concern is that you are capturing this string in a lambda below, and
&gt; that lambda uses that same thing on a background thread. Our strings are not
&gt; thread safe so it would not be safe if we were not on the same background
&gt; thread here.
&gt; 
We are not necessarily on the main thread here. isolatedCopy?

&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2443
&gt; &gt; +        usage += CacheStorage::Engine::diskUsage(cacheRootPath, origin);
&gt; 
&gt; Why the += ? We can initialize usage here.
&gt; 
True.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.h:479
&gt; &gt; +            auto[iter, isNewEntry] = m_storageQuotaManagers.add(origin, nullptr);
&gt; 
&gt; ensure()
&gt; 
Okay.

&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp:201
&gt; &gt; +    uint64_t directorySize = 0;
&gt; 
&gt; We should assert that we are not on the main thread here.
&gt; 
Will add.

&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp:248
&gt; &gt; +    if (!m_networkProcess)
&gt; 
&gt; We should add a threading assertion here. I assume we should be on the main
&gt; thread since you&apos;re using m_networkProcess.
&gt; 
Will add.

&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:408
&gt; &gt; +    int64_t spaceRequired = 0;
&gt; 
&gt; Why? It seems like an unsigned value would be nicer. And the code below
&gt; should make sure we don&apos;t underflow.
&gt; 
A layout test (forgot which one..) shows we have an underflow and spaceRequired becomes max value of uint64_t in that case. I probably should file another bug for this. 

&gt; &gt; Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp:1372
&gt; &gt; +    if (!canSendMessage()) {
&gt; 
&gt; Not needed. sendWithAsyncReply() will do the right thing.
&gt; 
Will remove.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/StorageQuotaManager.cpp:-69
&gt; &gt; -TEST(StorageQuotaManagerTest, Basic)
&gt; 
&gt; So we&apos;re losing all API test coverage for quota?
This one is a unit test to ensure correct internal behavior (correct state change on different cases) of StorageQuotaManager. Since StorageQuotaManager does not maintain any state know, we don&apos;t need this test.

For correct quota behavior, we have layout tests like:
LayoutTests/storage/indexeddb/storage-limit.html
LayoutTests/http/wpt/cache-storage/cache-quota.any.html
or API test in StorageQuota.mm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592165</commentid>
    <comment_count>16</comment_count>
      <attachid>383990</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-20 15:22:12 -0800</bug_when>
    <thetext>Created attachment 383990
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592174</commentid>
    <comment_count>17</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-20 15:29:33 -0800</bug_when>
    <thetext>(In reply to Sihui Liu from comment #15)
&gt; (In reply to Chris Dumez from comment #14)
&gt; &gt; Comment on attachment 383972 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=383972&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:856
&gt; &gt; &gt; +    if (m_server-&gt;requestSpace(m_origin, 0) == StorageQuotaManager::Decision::Deny) {
&gt; &gt; 
&gt; &gt; What is this for? Why are we requesting 0 space for deleting something?
&gt; &gt; Shouldn&apos;t deleting something always succeed no matter the quota?
&gt; &gt; 
&gt; Request 0 space is a way to protect the order of the tasks. If we don&apos;t do
&gt; this, when a delete task is scheduled after a put task, the delete task
&gt; would run before the put because it does not need to wait until space
&gt; request finishes.
&gt; 
&gt; I should probably give this a better name.
&gt; 

Never mind. We need this because requestSpace was on the main thread. Now the requestSpace and task are performed on the same thread, so there will be no ordering issue. Removed.

&gt; A layout test (forgot which one..) shows we have an underflow and
&gt; spaceRequired becomes max value of uint64_t in that case. I probably should
&gt; file another bug for this. 
&gt; 

Looks like the estimated space increase could be less than 0 (usage decreases); code added to handle the underflow case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592403</commentid>
    <comment_count>18</comment_count>
      <attachid>384062</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-21 09:36:56 -0800</bug_when>
    <thetext>Created attachment 384062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592419</commentid>
    <comment_count>19</comment_count>
      <attachid>384064</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-21 10:06:51 -0800</bug_when>
    <thetext>Created attachment 384064
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592497</commentid>
    <comment_count>20</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-21 12:32:25 -0800</bug_when>
    <thetext>Ok, taking another look</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592505</commentid>
    <comment_count>21</comment_count>
      <attachid>384064</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-11-21 12:53:53 -0800</bug_when>
    <thetext>Comment on attachment 384064
Patch

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

r=me with changes

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:701
&gt; +    auto oldVersionOriginDirectory = IDBDatabaseIdentifier::databaseDirectoryRelativeToRoot(origin.topOrigin, origin.clientOrigin, rootDirectory, &quot;v0&quot;);

&quot;v0&quot;_str

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:702
&gt; +    auto newVersionOriginDirectory = IDBDatabaseIdentifier::databaseDirectoryRelativeToRoot(origin.topOrigin, origin.clientOrigin, rootDirectory, &quot;v1&quot;);

&quot;v1&quot;_str

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.h:114
&gt; +    WEBCORE_EXPORT static uint64_t diskUsage(const String&amp;, const ClientOrigin&amp;);

I don&apos;t think we should omit the name of the first parameter since it is not obvious (to me at least).

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:1278
&gt; +    

Should probably not add spaces.

&gt; Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp:64
&gt; +RefPtr&lt;StorageQuotaManager&gt; InProcessIDBServer::quotaManager(const ClientOrigin&amp; origin)

Why this change? It does not look like you are transferring ownership to the caller. The caller can always ref it if it needs to but I don&apos;t think there is any need to return a RefPtr&lt;&gt; here.

&gt; Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp:80
&gt; +    m_server = IDBServer::IDBServer::create(sessionID, [this, weakThis = makeWeakPtr(*this)](const ClientOrigin&amp; origin, uint64_t spaceRequested) mutable {

I think this should stay in the initializer list to that the member can stay a Ref&lt;&gt;. You can always add a utility function to construct the IDBServer and call it in the initializer list so that it looks nice.

&gt; Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp:91
&gt; +    m_server = IDBServer::IDBServer::create(sessionID, databaseDirectoryPath, [this, weakThis = makeWeakPtr(*this)](const ClientOrigin&amp; origin, uint64_t spaceRequested) mutable {

ditto.

&gt; Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h:66
&gt; +    IDBServer::IDBServer&amp; server() { return *m_server; }

This does not looks super safe.

&gt; Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h:67
&gt; +    IDBServer::IDBServer&amp; idbServer() { return *m_server; }

Not quite sure why we have 2 differently named methods returning the same thing but technically this is not new in your patch. Seems very odd though...

&gt; Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h:133
&gt; +    RefPtr&lt;IDBServer::IDBServer&gt; m_server;

I think this should stay a Ref&lt;&gt; since it cannot be null. It would make your getters look safer above.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:461
&gt; +    auto [iter, isNewEntry] = m_sessionStorageQuotaManagers.ensure(sessionID, [defaultQuota, defaultThirdPartyQuota, cacheRootPath] {

&amp;cacheRootPath

&gt; Source/WebKit/NetworkProcess/NetworkProcess.h:477
&gt; +        RefPtr&lt;WebCore::StorageQuotaManager&gt; ensureOriginStorageQuotaManager(WebCore::ClientOrigin origin, uint64_t quota, WebCore::StorageQuotaManager::UsageGetter&amp;&amp; usageGetter, WebCore::StorageQuotaManager::QuotaIncreaseRequester&amp;&amp; quotaIncreaseRequester)

Seems like this should return a Ref&lt;&gt;, not a RefPtr&lt;&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592989</commentid>
    <comment_count>22</comment_count>
      <attachid>384192</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-22 14:03:14 -0800</bug_when>
    <thetext>Created attachment 384192
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593021</commentid>
    <comment_count>23</comment_count>
      <attachid>384192</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-22 14:43:08 -0800</bug_when>
    <thetext>Comment on attachment 384192
Patch for landing

Clearing flags on attachment: 384192

Committed r252805: &lt;https://trac.webkit.org/changeset/252805&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593022</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-22 14:43:10 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593250</commentid>
    <comment_count>25</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2019-11-23 18:27:58 -0800</bug_when>
    <thetext>This caused flaky failures on several tests.

http/wpt/cache-storage/cache-quota-add.any.html
http/wpt/cache-storage/cache-quota-after-restart.any.html
http/wpt/cache-storage/cache-quota.any.html

https://build.webkit.org/results/Apple%20iPadOS%2013%20Simulator%20Release%20WK2%20(Tests)/r252835%20(816)/results.html

This also caused ASan crashes on what most or all cache storage tests.

==34492==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000019091 at pc 0x000107dbf668 bp 0x70000afd9790 sp 0x70000afd8f50
READ of size 2 at 0x602000019091 thread T8
    #0 0x107dbf667 in wrap_strlen (libclang_rt.asan_iossim_dynamic.dylib:x86_64+0x14667)
    #1 0x119684f39 in WTF::String::fromUTF8(unsigned char const*) (JavaScriptCore:x86_64+0x192f39)
    #2 0x110be4514 in WebKit::CacheStorage::Engine::readSizeFile(WTF::String const&amp;) (WebKit:x86_64+0x638514)
    #3 0x110be3ff9 in WebKit::CacheStorage::Engine::diskUsage(WTF::String const&amp;, WebCore::ClientOrigin const&amp;) (WebKit:x86_64+0x637ff9)
    #4 0x110a56888 in WebKit::NetworkProcess::storageQuotaManager(PAL::SessionID, WebCore::ClientOrigin const&amp;)::$_68::operator()() const (WebKit:x86_64+0x4aa888)
    #5 0x122f08076 in WebCore::StorageQuotaManager::requestSpaceOnBackgroundThread(unsigned long long) (WebCore:x86_64+0x49ae076)
    #6 0x122f0f2e2 in WebCore::StorageQuotaManager::requestSpaceOnMainThread(unsigned long long, WTF::CompletionHandler&lt;void (WebCore::StorageQuotaManager::Decision)&gt;&amp;&amp;)::$_0::operator()() (WebCore:x86_64+0x49b52e2)
    #7 0x107deb65a in __wrap_dispatch_async_block_invoke (libclang_rt.asan_iossim_dynamic.dylib:x86_64+0x4065a)
    #8 0x7fff53ad0950 in _dispatch_call_block_and_release (libdispatch.dylib:x86_64+0x1950)
    #9 0x7fff53ad18ca in _dispatch_client_callout (libdispatch.dylib:x86_64+0x28ca)
    #10 0x7fff53ad760b in _dispatch_lane_serial_drain (libdispatch.dylib:x86_64+0x860b)
    #11 0x7fff53ad8043 in _dispatch_lane_invoke (libdispatch.dylib:x86_64+0x9043)
    #12 0x7fff53ae20c3 in _dispatch_workloop_worker_thread (libdispatch.dylib:x86_64+0x130c3)
    #13 0x7fff53cf671a in _pthread_wqthread (libsystem_pthread.dylib:x86_64+0x271a)
    #14 0x7fff53cf657a in start_wqthread (libsystem_pthread.dylib:x86_64+0x257a)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593252</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-23 18:28:50 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 204553</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593258</commentid>
    <comment_count>27</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2019-11-23 19:05:21 -0800</bug_when>
    <thetext>Rolled back in r252839.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594839</commentid>
    <comment_count>28</comment_count>
      <attachid>384667</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-12-02 16:03:04 -0800</bug_when>
    <thetext>Created attachment 384667
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594848</commentid>
    <comment_count>29</comment_count>
      <attachid>384667</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-12-02 16:19:24 -0800</bug_when>
    <thetext>Comment on attachment 384667
Patch

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

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp:579
&gt; +    return String::fromUTF8(buffer.data(), totalBytesRead).toUInt64Strict();

Why construct a String? Could we use charactersToUInt64(buffer.data(), totalBytesRead) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594855</commentid>
    <comment_count>30</comment_count>
      <attachid>384667</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-12-02 16:33:12 -0800</bug_when>
    <thetext>Comment on attachment 384667
Patch

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

&gt;&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp:579
&gt;&gt; +    return String::fromUTF8(buffer.data(), totalBytesRead).toUInt64Strict();
&gt; 
&gt; Why construct a String? Could we use charactersToUInt64(buffer.data(), totalBytesRead) ?

Yes, will change to charactersToUInt64Strict.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594856</commentid>
    <comment_count>31</comment_count>
      <attachid>384671</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-12-02 16:36:01 -0800</bug_when>
    <thetext>Created attachment 384671
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594922</commentid>
    <comment_count>32</comment_count>
      <attachid>384671</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-02 22:53:51 -0800</bug_when>
    <thetext>Comment on attachment 384671
Patch

Clearing flags on attachment: 384671

Committed r253025: &lt;https://trac.webkit.org/changeset/253025&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594923</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-02 22:53:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383062</attachid>
            <date>2019-11-07 11:31:28 -0800</date>
            <delta_ts>2019-11-12 10:50:21 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>WIP</filename>
            <type>text/plain</type>
            <size>132470</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvSW5kZXhlZERCL3N0b3JhZ2UtbGlt
aXQtMS5odHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9JbmRleGVkREIvc3RvcmFn
ZS1saW1pdC0xLmh0dHBzLmh0bWwKaW5kZXggMzUwZTNlM2EzY2QuLjk0MTE2NDRkMWZlIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9zdG9yYWdlLWxpbWl0LTEu
aHR0cHMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL0luZGV4ZWREQi9zdG9yYWdl
LWxpbWl0LTEuaHR0cHMuaHRtbApAQCAtMTEsNyArMTEsNyBAQCBpZiAod2luZG93LnRlc3RSdW5u
ZXIpCiBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBzdG9yYWdlIG9mIGlu
ZGV4ZWREQiAgYW5kIENhY2hlIEFQSSBkbyBub3QgZ3JvdyB1bmJvdW5kZWRseS4iKTsKIAogd2lu
ZG93LmNhY2hlcy5vcGVuKCJ0ZXN0IikudGhlbihjYWNoZSA9PiB7Ci0gICAgcmV0dXJuIGNhY2hl
LnB1dChuZXcgUmVxdWVzdCgiL3Rlc3QiKSwgbmV3IFJlc3BvbnNlKG5ldyBVaW50OEFycmF5KDIw
MCAqIDEwMjQpKSk7CisgICAgcmV0dXJuIGNhY2hlLnB1dChuZXcgUmVxdWVzdCgiL3Rlc3QiKSwg
bmV3IFJlc3BvbnNlKG5ldyBVaW50OEFycmF5KDEwMCAqIDEwMjQpKSk7CiB9KS50aGVuKGFzeW5j
KCkgPT4gewogICAgIC8vIExldCdzIHRlcm1pbmF0ZSB0aGUgbmV0d29yayBwcm9jZXNzIHNvIHRo
YXQgYWxsIHRoZSBvcGVuZWQgcXVvdGEgdXNlcnMgYXJlIGdvbmUgZm9yIElEQiBxdW90YSBjaGVj
ay4KICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4IGE4ZTg1NjcwMDg3
Li5kYzFkN2U1NmVlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTQ2LDI0ICs0NiwyNCBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKLVJlZjxJREJTZXJ2ZXI+IElEQlNl
cnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgUXVvdGFNYW5hZ2VyR2V0dGVy
JiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyJiYgcXVv
dGFNYW5hZ2VyR2V0dGVyKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlNlcnZlcihz
ZXNzaW9uSUQsIFdURk1vdmUocXVvdGFNYW5hZ2VyR2V0dGVyKSkpOwogfQogCi1SZWY8SURCU2Vy
dmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1h
bmFnZXJHZXR0ZXIpCitSZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9y
YWdlUXVvdGFNYW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQogewogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IElEQlNlcnZlcihzZXNzaW9uSUQsIGRhdGFiYXNlRGlyZWN0b3J5UGF0
aCwgV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKSk7CiB9CiAKLUlEQlNlcnZlcjo6SURCU2Vy
dmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYgcXVvdGFN
YW5hZ2VyR2V0dGVyKQorSURCU2VydmVyOjpJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQogICAg
IDogQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlcigiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIsIEF1dG9k
cmFpbmVkUG9vbEZvclJ1bkxvb3A6OlVzZSkKICAgICAsIG1fc2Vzc2lvbklEKHNlc3Npb25JRCkK
ICAgICAsIG1fcXVvdGFNYW5hZ2VyR2V0dGVyKFdURk1vdmUocXVvdGFNYW5hZ2VyR2V0dGVyKSkK
IHsKIH0KIAotSURCU2VydmVyOjpJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYg
cXVvdGFNYW5hZ2VyR2V0dGVyKQorSURCU2VydmVyOjpJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgU3RvcmFnZVF1
b3RhTWFuYWdlckdldHRlciYmIHF1b3RhTWFuYWdlckdldHRlcikKICAgICA6IENyb3NzVGhyZWFk
VGFza0hhbmRsZXIoIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIiLCBBdXRvZHJhaW5lZFBvb2xGb3JS
dW5Mb29wOjpVc2UpCiAgICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAgLCBtX2RhdGFi
YXNlRGlyZWN0b3J5UGF0aChkYXRhYmFzZURpcmVjdG9yeVBhdGgpCkBAIC02ODMsMTU3ICs2ODMs
MTkgQEAgdm9pZCBJREJTZXJ2ZXI6OnBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9y
aWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3IKIAogdm9pZCBJREJTZXJ2ZXI6OmRpZFBlcmZv
cm1DbG9zZUFuZERlbGV0ZURhdGFiYXNlcyh1aW50NjRfdCBjYWxsYmFja0lEKQogewotICAgIGZv
ciAoYXV0byYgdXNlciA6IG1fcXVvdGFVc2Vycy52YWx1ZXMoKSkKLSAgICAgICAgdXNlci0+cmVz
ZXRTcGFjZVVzZWQoKTsKLQogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2RlbGV0ZURhdGFiYXNlQ29t
cGxldGlvbkhhbmRsZXJzLnRha2UoY2FsbGJhY2tJRCk7CiAgICAgQVNTRVJUKGNhbGxiYWNrKTsK
ICAgICBjYWxsYmFjaygpOwogfQogCi1JREJTZXJ2ZXI6OlF1b3RhVXNlcjo6UXVvdGFVc2VyKElE
QlNlcnZlciYgc2VydmVyLCBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBtYW5hZ2VyLCBDbGllbnRPcmln
aW4mJiBvcmlnaW4pCi0gICAgOiBtX3NlcnZlcihzZXJ2ZXIpCi0gICAgLCBtX21hbmFnZXIobWFr
ZVdlYWtQdHIobWFuYWdlcikpCi0gICAgLCBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAg
LCBtX2lzSW5pdGlhbGl6ZWQobV9zZXJ2ZXIubV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKLXsK
LSAgICBpZiAobWFuYWdlcikKLSAgICAgICAgbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7Ci19Ci0K
LUlEQlNlcnZlcjo6UXVvdGFVc2VyOjp+UXVvdGFVc2VyKCkKLXsKLSAgICBpZiAobV9tYW5hZ2Vy
KQotICAgICAgICBtX21hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotfQotCi12b2lkIElEQlNl
cnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCgpCi17Ci0gICAgbV9zcGFjZVVzZWQgPSAw
OwotCi0gICAgaWYgKCFtX21hbmFnZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3Nl
cnZlci5tX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIW1faXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFtX2lu
aXRpYWxpemF0aW9uQ2FsbGJhY2spOwotCi0gICAgbV9pc0luaXRpYWxpemVkID0gZmFsc2U7Ci0K
LSAgICAvLyBEbyBhZGQvcmVtb3ZlIHRvIHRyaWdnZXIgY2FsbCB0byB3aGVuSW5pdGlhbGl6ZWQu
Ci0gICAgbV9tYW5hZ2VyLT5yZW1vdmVVc2VyKCp0aGlzKTsKLSAgICBtX21hbmFnZXItPmFkZFVz
ZXIoKnRoaXMpOwotfQotCi12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRlU3BhY2VV
c2VkKCkKLXsKLSAgICByZXNldFNwYWNlVXNlZCgpOwotfQotCi12b2lkIElEQlNlcnZlcjo6UXVv
dGFVc2VyOjppbmNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKQotewotICAgIGlmICghbV9p
c0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fc3BhY2VVc2VkICsg
c2l6ZSA+IG1fc3BhY2VVc2VkKTsKLSAgICBtX3NwYWNlVXNlZCArPSBzaXplOwotfQotdm9pZCBJ
REJTZXJ2ZXI6OlF1b3RhVXNlcjo6ZGVjcmVhc2VTcGFjZVVzZWQodWludDY0X3Qgc2l6ZSkKLXsK
LSAgICBpZiAoIW1faXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCht
X3NwYWNlVXNlZCA+PSBzaXplKTsKLSAgICBtX3NwYWNlVXNlZCAtPSBzaXplOwotfQotCi12b2lk
IElEQlNlcnZlcjo6UXVvdGFVc2VyOjp3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAgIGlmIChtX2lzSW5pdGlhbGl6ZWQpIHsKLSAgICAg
ICAgY2FsbGJhY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2luaXRpYWxpemF0
aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKLSAgICBtX3NlcnZlci5zdGFydENvbXB1
dGluZ1NwYWNlVXNlZEZvck9yaWdpbihtX29yaWdpbik7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpR
dW90YVVzZXI6OmluaXRpYWxpemVTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKQotewotICAg
IEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQgfHwgIW1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSk7Ci0g
ICAgbV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7Ci0gICAgbV9pc0luaXRpYWxpemVkID0gdHJ1ZTsK
LQotICAgIGlmIChhdXRvIGNhbGxiYWNrID0gV1RGTW92ZShtX2luaXRpYWxpemF0aW9uQ2FsbGJh
Y2spKQotICAgICAgICBjYWxsYmFjaygpOwotfQotCi1JREJTZXJ2ZXI6OlF1b3RhVXNlciYgSURC
U2VydmVyOjplbnN1cmVRdW90YVVzZXIoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0g
ICAgcmV0dXJuICptX3F1b3RhVXNlcnMuZW5zdXJlKG9yaWdpbiwgW3RoaXMsICZvcmlnaW5dIHsK
LSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UXVvdGFVc2VyPigqdGhpcywgbV9xdW90YU1hbmFn
ZXJHZXR0ZXIobV9zZXNzaW9uSUQsIG9yaWdpbiksIENsaWVudE9yaWdpbiB7IG9yaWdpbiB9KTsK
LSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpzdGFydENvbXB1
dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAg
ICBBU1NFUlQoIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpOwotICAgIHBvc3REYXRhYmFzZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpjb21wdXRlU3BhY2VV
c2VkRm9yT3JpZ2luLCBvcmlnaW4pKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OmNvbXB1dGVTcGFj
ZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCisgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6RGVjaXNpb24gSURCU2VydmVyOjpyZXF1ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3Jp
Z2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplKQogewogICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOworICAgIFJlZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBzdG9yYWdlUXVvdGFNYW5h
Z2VyID0gbV9xdW90YU1hbmFnZXJHZXR0ZXIob3JpZ2luKTsKKyAgICBpZiAoIXN0b3JhZ2VRdW90
YU1hbmFnZXIpCisgICAgICAgIHJldHVybiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6
RGVueTsKIAotICAgIGF1dG8gZGF0YWJhc2VEaXJlY3RvcnlQYXRoID0gdGhpcy0+ZGF0YWJhc2VE
aXJlY3RvcnlQYXRoSXNvbGF0ZWRDb3B5KCk7Ci0gICAgYXV0byBvbGRWZXJzaW9uT3JpZ2luRGly
ZWN0b3J5ID0gSURCRGF0YWJhc2VJZGVudGlmaWVyOjpkYXRhYmFzZURpcmVjdG9yeVJlbGF0aXZl
VG9Sb290KG9yaWdpbi50b3BPcmlnaW4sIG9yaWdpbi5jbGllbnRPcmlnaW4sIGRhdGFiYXNlRGly
ZWN0b3J5UGF0aCwgInYwIik7Ci0gICAgYXV0byBuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5ID0g
SURCRGF0YWJhc2VJZGVudGlmaWVyOjpkYXRhYmFzZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290KG9y
aWdpbi50b3BPcmlnaW4sIG9yaWdpbi5jbGllbnRPcmlnaW4sIGRhdGFiYXNlRGlyZWN0b3J5UGF0
aCwgInYxIik7Ci0gICAgYXV0byBzaXplID0gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFz
ZXNTaXplRm9yRGlyZWN0b3J5KG9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkpICsgU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpkYXRhYmFzZXNTaXplRm9yRGlyZWN0b3J5KG5ld1ZlcnNpb25PcmlnaW5E
aXJlY3RvcnkpOwotCi0gICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJklEQlNlcnZlcjo6ZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2lu
LCBvcmlnaW4sIHNpemUpKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1Nw
YWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3Bh
Y2VVc2VkKQotewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmluaXRpYWxpemVTcGFjZVVz
ZWQoc3BhY2VVc2VkKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OnJlcXVlc3RTcGFjZShjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgdGFza1NpemUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmIGNhbGxiYWNrKQotewotICAg
IGF1dG8qIHF1b3RhTWFuYWdlciA9IGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLm1hbmFnZXIoKTsK
LSAgICBpZiAoIXF1b3RhTWFuYWdlcikgewotICAgICAgICBjYWxsYmFjayhTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpEZWNpc2lvbjo6RGVueSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBx
dW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZSh0YXNrU2l6ZSwgV1RGTW92ZShjYWxsYmFjaykpOwot
fQotCi12b2lkIElEQlNlcnZlcjo6cmVzZXRTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4pCi17Ci0gICAgaWYgKGF1dG8qIHVzZXIgPSBtX3F1b3RhVXNlcnMuZ2V0KG9yaWdpbikp
Ci0gICAgICAgIHVzZXItPnJlc2V0U3BhY2VVc2VkKCk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpp
bmNyZWFzZVNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc2l6
ZSkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbmNyZWFzZVNwYWNlVXNlZChzaXpl
KTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OmRlY3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVudE9y
aWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzaXplKQotewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmln
aW4pLmRlY3JlYXNlU3BhY2VVc2VkKHNpemUpOwotfQotCi12b2lkIElEQlNlcnZlcjo6aW5jcmVh
c2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90
IHRhc2tTaXplKQotewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmluY3JlYXNlUG90ZW50
aWFsU3BhY2VVc2VkKHRhc2tTaXplKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OmRlY3JlYXNlUG90
ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFj
ZVVzZWQpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuZGVjcmVhc2VQb3RlbnRpYWxT
cGFjZVVzZWQoc3BhY2VVc2VkKTsKKyAgICByZXR1cm4gc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVx
dWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHRhc2tTaXplKTsKIH0KIAogdm9pZCBJREJTZXJ2
ZXI6OnVwZ3JhZGVGaWxlc0lmTmVjZXNzYXJ5KCkKQEAgLTg3MSw2ICs3MzMsMTUgQEAgdm9pZCBJ
REJTZXJ2ZXI6OnJlc3VtZSgpCiAgICAgQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlcjo6cmVzdW1lKCk7
CiB9CiAKK3VpbnQ2NF90IElEQlNlcnZlcjo6ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdERp
cmVjdG9yeSwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCit7CisgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CisKKyAgICBhdXRvIG9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJE
YXRhYmFzZUlkZW50aWZpZXI6OmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2lu
LnRvcE9yaWdpbiwgb3JpZ2luLmNsaWVudE9yaWdpbiwgcm9vdERpcmVjdG9yeSwgInYwIik7Cisg
ICAgYXV0byBuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5ID0gSURCRGF0YWJhc2VJZGVudGlmaWVy
OjpkYXRhYmFzZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290KG9yaWdpbi50b3BPcmlnaW4sIG9yaWdp
bi5jbGllbnRPcmlnaW4sIHJvb3REaXJlY3RvcnksICJ2MSIpOworICAgIHJldHVybiBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JEaXJlY3Rvcnkob2xkVmVyc2lvbk9yaWdp
bkRpcmVjdG9yeSkgKyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JEaXJl
Y3RvcnkobmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElE
QlNlcnZlcgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKaW5kZXggMDc1NWVkOWY5Yzcu
LjZlYmI1YjMwMThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiSURCQ29u
bmVjdGlvblRvQ2xpZW50LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCiAj
aW5jbHVkZSAiU3RvcmFnZVF1b3RhTWFuYWdlci5oIgotI2luY2x1ZGUgIlN0b3JhZ2VRdW90YVVz
ZXIuaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlVuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0aXZpdHku
aD4KQEAgLTU4LDkgKzU3LDkgQEAgZW51bSBjbGFzcyBTaG91bGRGb3JjZVN0b3AgOiBib29sIHsg
Tm8sIFllcyB9OwogCiBjbGFzcyBJREJTZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2
ZXI+LCBwdWJsaWMgQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlciwgcHVibGljIENhbk1ha2VXZWFrUHRy
PElEQlNlcnZlcj4gewogcHVibGljOgotICAgIHVzaW5nIFF1b3RhTWFuYWdlckdldHRlciA9IFdU
Rjo6RnVuY3Rpb248U3RvcmFnZVF1b3RhTWFuYWdlciooUEFMOjpTZXNzaW9uSUQsIGNvbnN0IENs
aWVudE9yaWdpbiYpPjsKLSAgICBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKFBBTDo6U2Vz
c2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKKyAgICB1c2luZyBTdG9y
YWdlUXVvdGFNYW5hZ2VyR2V0dGVyID0gV1RGOjpGdW5jdGlvbjxSZWZQdHI8U3RvcmFnZVF1b3Rh
TWFuYWdlcj4oY29uc3QgQ2xpZW50T3JpZ2luJik+OworICAgIHN0YXRpYyBSZWY8SURCU2VydmVy
PiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXImJik7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6OlNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VRdW90YU1h
bmFnZXJHZXR0ZXImJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZ2lzdGVyQ29ubmVj
dGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVu
cmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwpAQCAtMTExLDIxICsx
MTAsMTYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVE
YXRhYmFzZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0
YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0
aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgdm9pZCByZXF1ZXN0U3Bh
Y2UoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKLSAgICB2b2lkIGlu
Y3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRh
c2tTaXplKTsKLSAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVu
dE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGluY3JlYXNlU3BhY2VVc2Vk
KGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNpemUpOwotICAgIHZvaWQgZGVjcmVhc2VT
cGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6ZSk7Ci0gICAgdm9pZCBy
ZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6
ZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikgeyBlbnN1cmVRdW90YVVzZXIo
b3JpZ2luKTsgfQorICAgIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIHJlcXVlc3RTcGFj
ZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHRyeVN0b3AoU2hvdWxkRm9yY2VTdG9wKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlc3VtZSgpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHVpbnQ2NF90IGRp
c2tVc2FnZShjb25zdCBTdHJpbmcmLCBjb25zdCBDbGllbnRPcmlnaW4mKTsKKwogcHJpdmF0ZToK
LSAgICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKLSAg
ICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3Rv
cnlQYXRoLCBRdW90YU1hbmFnZXJHZXR0ZXImJik7CisgICAgSURCU2VydmVyKFBBTDo6U2Vzc2lv
bklELCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOworICAgIElEQlNlcnZlcihQQUw6OlNl
c3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VRdW90
YU1hbmFnZXJHZXR0ZXImJik7CiAKICAgICBVbmlxdWVJREJEYXRhYmFzZSYgZ2V0T3JDcmVhdGVV
bmlxdWVJREJEYXRhYmFzZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKICAgICAKQEAg
LTE0Miw1MSArMTM2LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZURhdGFiYXNlc01vZGlm
aWVkU2luY2VGb3JWZXJzaW9uKFdhbGxUaW1lLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHJl
bW92ZURhdGFiYXNlc1dpdGhPcmlnaW5zRm9yVmVyc2lvbihjb25zdCBWZWN0b3I8U2VjdXJpdHlP
cmlnaW5EYXRhPiYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgY2xhc3MgUXVvdGFVc2VyIGZpbmFs
IDogcHVibGljIFN0b3JhZ2VRdW90YVVzZXIgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFF1b3RhVXNlcihJREJTZXJ2ZXImLCBTdG9yYWdl
UXVvdGFNYW5hZ2VyKiwgQ2xpZW50T3JpZ2luJiYpOwotICAgICAgICB+UXVvdGFVc2VyKCk7Ci0K
LSAgICAgICAgU3RvcmFnZVF1b3RhTWFuYWdlciogbWFuYWdlcigpIHsgcmV0dXJuIG1fbWFuYWdl
ci5nZXQoKTsgfQotCi0gICAgICAgIHZvaWQgc2V0U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNl
ZCkgeyBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsgfQotICAgICAgICB2b2lkIHJlc2V0U3BhY2VV
c2VkKCk7Ci0KLSAgICAgICAgdm9pZCBpbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRf
dCBpbmNyZWFzZSkgeyBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgKz0gaW5jcmVhc2U7IH0KLSAg
ICAgICAgdm9pZCBkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRfdCBkZWNyZWFzZSkK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSA+
PSBkZWNyZWFzZSk7Ci0gICAgICAgICAgICBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgLT0gZGVj
cmVhc2U7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBpbmNyZWFzZVNwYWNlVXNlZCh1aW50NjRf
dCBzaXplKTsKLSAgICAgICAgdm9pZCBkZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKTsK
LQotICAgICAgICB2b2lkIGluaXRpYWxpemVTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKTsK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFs
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOwotICAgICAg
ICAgICAgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlOwotICAg
ICAgICB9Ci0gICAgICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgpIGZpbmFsOwotICAgICAgICB2
b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwot
Ci0gICAgICAgIElEQlNlcnZlciYgbV9zZXJ2ZXI7Ci0gICAgICAgIFdlYWtQdHI8U3RvcmFnZVF1
b3RhTWFuYWdlcj4gbV9tYW5hZ2VyOwotICAgICAgICBDbGllbnRPcmlnaW4gbV9vcmlnaW47Ci0g
ICAgICAgIGJvb2wgbV9pc0luaXRpYWxpemVkIHsgZmFsc2UgfTsKLSAgICAgICAgdWludDY0X3Qg
bV9zcGFjZVVzZWQgeyAwIH07Ci0gICAgICAgIHVpbnQ2NF90IG1fZXN0aW1hdGVkU3BhY2VJbmNy
ZWFzZSB7IDAgfTsKLSAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2luaXRpYWxp
emF0aW9uQ2FsbGJhY2s7Ci0gICAgfTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIFF1b3RhVXNlciYg
ZW5zdXJlUXVvdGFVc2VyKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZvaWQgc3RhcnRDb21w
dXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJik7Ci0gICAgdm9pZCBj
b21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZvaWQg
ZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYsIHVp
bnQ2NF90IHNwYWNlVXNlZCk7Ci0KICAgICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKICAg
ICBIYXNoTWFwPElEQkNvbm5lY3Rpb25JZGVudGlmaWVyLCBSZWZQdHI8SURCQ29ubmVjdGlvblRv
Q2xpZW50Pj4gbV9jb25uZWN0aW9uTWFwOwogICAgIEhhc2hNYXA8SURCRGF0YWJhc2VJZGVudGlm
aWVyLCBzdGQ6OnVuaXF1ZV9wdHI8VW5pcXVlSURCRGF0YWJhc2U+PiBtX3VuaXF1ZUlEQkRhdGFi
YXNlTWFwOwpAQCAtMTk4LDggKzE0Nyw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgbV9kYXRh
YmFzZURpcmVjdG9yeVBhdGg7CiAKLSAgICBIYXNoTWFwPENsaWVudE9yaWdpbiwgc3RkOjp1bmlx
dWVfcHRyPFF1b3RhVXNlcj4+IG1fcXVvdGFVc2VyczsKLSAgICBRdW90YU1hbmFnZXJHZXR0ZXIg
bV9xdW90YU1hbmFnZXJHZXR0ZXI7CisgICAgU3RvcmFnZVF1b3RhTWFuYWdlckdldHRlciBtX3F1
b3RhTWFuYWdlckdldHRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9Vbmlx
dWVJREJEYXRhYmFzZS5jcHAKaW5kZXggNTI1YWRlOWNjMDAuLjBhYWZhNzEzMjkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTE4Niw1NiArMTg2LDYgQEAgc3RhdGljIGlubGluZSBT
dHJpbmcgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKGNvbnN0IGNoYXIqIHRhc2tOYW1lKQogICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJGYWlsZWQgdG8gIiwgdGFza05hbWUsICIgaW4gZGF0YWJhc2UgYmVj
YXVzZSBub3QgZW5vdWdoIHNwYWNlIGZvciBkb21haW4iKTsKIH0KIAotdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cmVxdWVzdFNwYWNlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCB1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgY2hhciogdGFza05hbWUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYgY2FsbGJhY2spCi17Ci0gICAgbV9zZXJ2ZXIt
PnJlcXVlc3RTcGFjZShtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplLCBbd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cih0aGlzKSwgdGhpcywgd2Vha1RyYW5zYWN0aW9uID0gbWFrZVdlYWtQdHIo
dHJhbnNhY3Rpb24pLCB0YXNrTmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0
byBkZWNpc2lvbikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpIHsKLSAgICAgICAg
ICAgIGNhbGxiYWNrKElEQkVycm9yIHsgVW5rbm93bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF3ZWFrVHJhbnNhY3Rpb24pIHsKLSAgICAg
ICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgVW5rbm93bkVycm9yIH0pOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX293bmluZ1BvaW50ZXJGb3JDbG9zZSkg
ewotICAgICAgICAgICAgLy8gV2UgYXJlIGNsb3NpbmcgdGhlIGRhdGFiYXNlLCB0aGVyZSBpcyBu
byBwb2ludCBpbiB0cnlpbmcgdG8gbW9kaWZ5IHRoZSBkYXRhYmFzZSBhdCB0aGF0IHBvaW50Lgot
ICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3duRXJyb3IgfSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7Ci0g
ICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk6Ci0gICAgICAg
ICAgICBjYWxsYmFjayhJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1l
c3NhZ2VOYW1lKHRhc2tOYW1lKSB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2Fz
ZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQ6Ci0gICAgICAgICAgICBjYWxs
YmFjayhJREJFcnJvciB7IH0pOwotICAgICAgICB9OwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjp3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJF
cnJvciYmKT4mJiBjYWxsYmFjaykKLXsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIDAs
ICIiLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnN0
YXJ0U3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgdGFza1Np
emUpCi17Ci0gICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRp
Zmllci5vcmlnaW4oKSwgdGFza1NpemUpOwotICAgIEFTU0VSVCghbV9wZW5kaW5nU3BhY2VJbmNy
ZWFzZVRhc2tzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKLSAgICBtX3BlbmRpbmdTcGFjZUluY3Jl
YXNlVGFza3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKLX0KLQotdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgYm9v
bCBpc1Rhc2tTdWNjZXNzZnVsKQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX3BlbmRpbmdTcGFj
ZUluY3JlYXNlVGFza3MuZmluZChpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0g
bV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmVuZCgpKTsKLSAgICBtX3NlcnZlci0+ZGVjcmVh
c2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+dmFs
dWUpOwotICAgIGlmIChpc1Rhc2tTdWNjZXNzZnVsKQotICAgICAgICBtX3NlcnZlci0+aW5jcmVh
c2VTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+dmFsdWUpOwotICAg
IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5yZW1vdmUoaXRlcmF0b3IpOwotfQotCiB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24oKQogewogICAg
IExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50
T3Blbk9wZXJhdGlvbiAoJXApIiwgdGhpcyk7CkBAIC0yNDYsMjkgKzE5Niw3IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiAgICAgaWYgKCFt
X2RhdGFiYXNlSW5mbykgewogICAgICAgICBpZiAoIW1faXNPcGVuaW5nQmFja2luZ1N0b3JlKSB7
CiAgICAgICAgICAgICBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSA9IHRydWU7Ci0gICAgICAgICAg
ICAvLyBXZSBkbyBub3Qga25vdyB3aGV0aGVyIHRoaXMgaXMgYW4gZXhpc3Rpbmcgb3IgYSBuZXcg
ZGF0YWJhc2UuCi0gICAgICAgICAgICAvLyBXZSBzZXQgYSBzbWFsbCBjb3N0IHNvIHRoYXQgaXQg
aXMgbm90IHBvc3NpYmxlIHRvIG9wZW4gYW4gaW5maW5pdGUgbnVtYmVyIG9mIGRhdGFiYXNlLgot
ICAgICAgICAgICAgbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX2lkZW50aWZpZXIub3JpZ2luKCks
IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KHRoaXMpXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXdl
YWtUaGlzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBp
ZiAobV9vd25pbmdQb2ludGVyRm9yQ2xvc2UpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAgICAgICAgIHN3aXRjaCAoZGVjaXNpb24pIHsKLSAgICAgICAgICAgICAgICBj
YXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OiB7Ci0gICAgICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gSURCUmVzdWx0RGF0YTo6ZXJyb3IobV9jdXJyZW50T3BlbkRC
UmVxdWVzdC0+cmVxdWVzdERhdGEoKS5yZXF1ZXN0SWRlbnRpZmllcigpLCBJREJFcnJvciB7IFF1
b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJvcGVuRGF0YWJhc2UiKSB9
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdC0+Y29ubmVjdGlv
bigpLmRpZE9wZW5EYXRhYmFzZShyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRPcGVuREJSZXF1ZXN0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgbV9pc09wZW5p
bmdCYWNraW5nU3RvcmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
RGVjaXNpb246OkdyYW50OgotICAgICAgICAgICAgICAgICAgICBhdXRvIGNhbGxiYWNrSUQgPSB0
aGlzLT5nZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAg
ICAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIGRlZmF1bHRXcml0ZU9wZXJh
dGlvbkNvc3QpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLT5wb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2lu
Z1N0b3JlLCBtX2lkZW50aWZpZXIsIGNhbGxiYWNrSUQpKTsKLSAgICAgICAgICAgICAgICB9Owot
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBt
X2lkZW50aWZpZXIpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzky
LDEyICs3MjAsMjAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWRkT3BlbkRhdGFiYXNlQ29u
bmVjdGlvbihSZWY8VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW8KICAgICBtX29wZW5EYXRhYmFz
ZUNvbm5lY3Rpb25zLmFkZChhZG9wdFJlZihjb25uZWN0aW9uLmxlYWtSZWYoKSkpOwogfQogCi12
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNl
SWRlbnRpZmllciYgaWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpCit2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRp
ZmllciYgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSAo
JXApIiwgdGhpcyk7CiAKICAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlKTsKKworICAgIC8vIFF1
b3RhIGNoZWNrLgorICAgIGF1dG8gZGVjaXNpb24gPSBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKGlk
ZW50aWZpZXIub3JpZ2luKCksIGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QpOworICAgIGlmIChk
ZWNpc29uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBJREJFcnJv
cihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiT3BlbkJhY2tpbmdT
dG9yZSIpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAogICAgIG1fYmFja2lu
Z1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShpZGVudGlmaWVyKTsKICAgICBt
X2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gbV9iYWNraW5n
U3RvcmUtPnN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zKCk7CiAgICAgbV9iYWNraW5n
U3RvcmVJc0VwaGVtZXJhbCA9IG1fYmFja2luZ1N0b3JlLT5pc0VwaGVtZXJhbCgpOwpAQCAtODA1
LDEwICs3NDEsMTAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShj
b25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIKICAgICBJREJEYXRhYmFzZUlu
Zm8gZGF0YWJhc2VJbmZvOwogICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T3JF
c3RhYmxpc2hEYXRhYmFzZUluZm8oZGF0YWJhc2VJbmZvKTsKIAotICAgIHBvc3REYXRhYmFzZVRh
c2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvciwgIHRhc2tJZGVudGlmaWVy
KSk7CisgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8s
IGVycm9yKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3Rv
cmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIHVp
bnQ2NF90IHRhc2tJZGVudGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJh
Y2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBl
cnJvcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIs
ICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUiKTsKQEAgLTgx
OSw4ICs3NTUsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3Jl
KGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSQogICAgIEFTU0VSVChtX2lzT3Bl
bmluZ0JhY2tpbmdTdG9yZSk7CiAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSBmYWxzZTsK
IAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHRhc2tJZGVudGlmaWVyLCBlcnJvci5pc051
bGwoKSk7Ci0KICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC04MzIsMzMgKzc2NiwyNCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVh
dGVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlx
dWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKIAotICAgIGF1dG8gdGFza1NpemUg
PSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGluZm8pOwotICAgIHJl
cXVlc3RTcGFjZSh0cmFuc2FjdGlvbiwgdGFza1NpemUsICJjcmVhdGVPYmplY3RTdG9yZSIsIFt0
aGlzLCB0YXNrU2l6ZSwgJnRyYW5zYWN0aW9uLCBpbmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwo
KSAmJiAqZXJyb3IuY29kZSgpICE9IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAg
Y2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIHRoaXMtPmNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXpl
LCB0cmFuc2FjdGlvbiwgaW5mbywgV1RGTW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3Rh
Q2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sg
Y2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNh
bGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwog
ICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RhcnRTcGFjZUlu
Y3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNy
ZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmll
cigpLCBpbmZvLCAgcXVvdGFFcnJvcikpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmpl
Y3RTdG9yZSwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBtX2NhbGxiYWNrSUQsIHRyYW5zYWN0aW9u
LmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0
IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCisK
K3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZShjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVJbmZvJiBpbmZvKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2Jq
ZWN0U3RvcmUiKTsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwoKSkgewotICAgICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlm
aWVyLCBxdW90YUVycm9yLCBpbmZvKSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0
YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5mbyk7
CisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCB0YXNr
U2l6ZSk7CisgICAgaWYgKGRlY2lzb24gPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246
OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3Rv
cmUsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90
YUVycm9yTWVzc2FnZU5hbWUoIkNyZWF0ZU9iamVjdFN0b3JlIikpLCBpbmZvKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTg3NCw3ICs3OTksNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIiht
YWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlIik7CiAK
LSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlz
TnVsbCgpKTsKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fZGF0YWJhc2VJbmZv
LT5hZGRFeGlzdGluZ09iamVjdFN0b3JlKGluZm8pOwogCkBAIC04ODYsMTcgKzgxMCw2IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9y
ZSIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0
aGlzLCAmdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051
bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZU9iamVjdFN0b3JlQWZ0
ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU5hbWUsIFdURk1vdmUoY2FsbGJh
Y2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0
U3RvcmVBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxi
YWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJy
b3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0
dXJuOwpAQCAtOTA3LDE0ICs4MjAsMTkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRl
T2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2EKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9y
ZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mby0+aWRl
bnRpZmllcigpKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlLCBtX2lk
ZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlm
aWVyKCksIGluZm8tPmlkZW50aWZpZXIoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bURlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpCiB7CiAgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSIpOwogCisgICAgaWYgKG1fc2VydmVy
LT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lv
bjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVPYmplY3RT
dG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1
b3RhRXJyb3JNZXNzYWdlTmFtZSgiRGVsZXRlT2JqZWN0U3RvcmUiKSksIG9iamVjdFN0b3JlSWRl
bnRpZmllcikpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQVNTRVJUKG1fYmFja2lu
Z1N0b3JlKTsKICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogCkBAIC05MzgsMzggKzg1Niwy
OSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZShVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2Jq
ZWN0U3RvcmUiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25D
b3N0ICsgbmV3TmFtZS5zaXplSW5CeXRlcygpOwotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2FjdGlv
biwgdGFza1NpemUsICJyZW5hbWVPYmplY3RTdG9yZSIsIFt0aGlzLCB0YXNrU2l6ZSwgJnRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlz
TnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgdGhpcy0+cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodGFz
a1NpemUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIFdURk1v
dmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2Fs
bGJhY2ssIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAg
IGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSURCRXJyb3IgZXJyb3Ig
PSBxdW90YUVycm9yOworICAgIElEQkVycm9yIGVycm9yOwogICAgIGF1dG8qIGluZm8gPSBtX2Rh
dGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlm
aWVyKTsKICAgICBpZiAoIWluZm8pCiAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3du
RXJyb3IsICJBdHRlbXB0IHRvIHJlbmFtZSBub24tZXhpc3RhbnQgb2JqZWN0IHN0b3JlIl9zIH07
Ci0KLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKLSAg
ICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0
aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSwg
ZXJyb3IpKTsKKyAgICAKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUsIG1f
aWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50
aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBlcnJvcikpOworICAgIH0p
OwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElEQkVycm9yJiBlcnJvcikKK3ZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZShjb25zdCBDbGllbnRPcmlnaW4m
IG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElEQkVycm9yJiBlcnJvcikKIHsK
ICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlIik7CiAKLSAgICBpZiAo
IWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFt
ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIG5ld05hbWUpKTsKKyAgICAvLyBRdW90YSBjaGVjay4KKyAgICBhdXRvIHRhc2tTaXpl
ID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKKyAg
ICBhdXRvIGRlY2lzb24gPSBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgdGFza1NpemUp
OworICAgIGlmIChkZWNpc29uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55
KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBj
YWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJv
ck1lc3NhZ2VOYW1lKCJSZW5hbWVPYmplY3RTdG9yZSIpKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBuZXdOYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk4NCw3ICs4OTMsNiBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWlu
dDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJl
bmFtZU9iamVjdFN0b3JlIik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAg
ICAgICAgIG1fZGF0YWJhc2VJbmZvLT5yZW5hbWVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50
aWZpZXIsIG5ld05hbWUpOwogCkBAIC05OTYsMjggKzkwNCwyMiBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpjbGVhck9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZSIpOwogCi0gICAgd2Fp
dEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rp
b24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0o
YXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewot
ICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNsZWFyT2JqZWN0U3RvcmVBZmV0UXVvdGFDaGVj
ayh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmVB
ZmV0UXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQot
ewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RG
TW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwot
ICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1DbGVhck9iamVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpKTsKKyAgICBw
b3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBj
YWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNsZWFyT2Jq
ZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUo
Y29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNs
ZWFyT2JqZWN0U3RvcmUiKTsKIAorICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdp
biwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAg
cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlm
aWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgi
Q2xlYXJPYmplY3RTdG9yZSIpKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQVNT
RVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBtX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9y
ZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAKQEAgLTEw
MzgsMzMgKzk0MCwyMiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleChVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgYwogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6Y3JlYXRlSW5kZXgiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVy
YXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGluZm8pOwotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2Fj
dGlvbiwgdGFza1NpemUsICJjcmVhdGVJbmRleCIsIFt0aGlzLCB0YXNrU2l6ZSwgJnRyYW5zYWN0
aW9uLCBpbmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBtdXRh
YmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9IFF1
b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNyZWF0ZUlu
ZGV4QWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgaW5mbywgV1RGTW92ZShj
YWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8s
IEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQotewog
ICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92
ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7Ci0gICAgcG9z
dERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCku
aWRlbnRpZmllcigpLCBpbmZvLCBxdW90YUVycm9yKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNy
ZWF0ZUluZGV4LCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9u
LmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8sIHF1b3RhRXJyb3IpKTsKIH0KIAotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCit2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgoY29uc3QgQ2xpZW50T3Jp
Z2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYg
aW5mbykKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4Iik7CiAKLSAgICBp
ZiAoIXF1b3RhRXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgcXVvdGFFcnJvciwgaW5mbykpOwor
ICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVT
aXplKGluZm8pOworICAgIGF1dG8gZGVjaXNvbiA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3Jp
Z2luLCB0YXNrU2l6ZSk7CisgICAgaWYgKGRlY2lzb24gPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6
RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRl
SW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBx
dW90YUVycm9yTWVzc2FnZU5hbWUoIkNyZWF0ZUluZGV4IikpLCBpbmZvKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTEwODYsOCArOTc3LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFp
bikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCIpOwogCi0gICAgZmlu
aXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7
Ci0KICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2VJ
bmZvKTsKICAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmlu
Zm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKGluZm8ub2JqZWN0U3RvcmVJZGVudGlmaWVyKCkpOwpA
QCAtMTEwMywxNyArOTkyLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXgo
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0
YWJhc2U6OmRlbGV0ZUluZGV4Iik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlv
bih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleE5hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikg
bXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNh
bGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICB0aGlzLT5kZWxldGVJbmRleEFmdGVyUXVvdGFDaGVjayh0cmFuc2FjdGlvbiwgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9
KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hl
Y2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIEVycm9yQ2FsbGJh
Y2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tP
ckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAg
ICAgICByZXR1cm47CkBAIC0xMTMwLDE0ICsxMDA4LDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRl
SW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVj
dFN0b3JlSWRlbnRpZmllciwgaW5kZXhJbmZvLT5pZGVudGlmaWVyKCkpKTsKKyAgICBwb3N0RGF0
YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtRGVsZXRlSW5kZXgsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwg
dHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBp
bmRleEluZm8tPmlkZW50aWZpZXIoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtRGVsZXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIpCit2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgoY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgY29uc3QgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtRGVsZXRlSW5kZXgiKTsKIAorICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNl
KG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAg
ICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRp
ZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUo
IkRlbGV0ZUluZGV4IikpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllcikp
OworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsK
ICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlSW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllcik7CiAKQEAgLTExNjQsMTggKzEw
NDcsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleChVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdQogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1l
SW5kZXgiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0
ICsgbmV3TmFtZS5zaXplSW5CeXRlcygpOwotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2FjdGlvbiwg
dGFza1NpemUsICJyZW5hbWVJbmRleCIsIFt0aGlzLCB0YXNrU2l6ZSwgJnRyYW5zYWN0aW9uLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICgh
ZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsK
LSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5yZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh0
YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlm
aWVyLCBuZXdOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwotICAgIH0pOwotfQotCi12
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRf
dCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVy
cm9yJiBxdW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxi
YWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTE4OCwxOCArMTA1OSwyMCBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5p
cXVlSURCRAogICAgIGF1dG8qIGluZGV4SW5mbyA9IG9iamVjdFN0b3JlSW5mby0+aW5mb0ZvckV4
aXN0aW5nSW5kZXgoaW5kZXhJZGVudGlmaWVyKTsKICAgICBpZiAoIWluZGV4SW5mbykKICAgICAg
ICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkF0dGVtcHQgdG8gcmVuYW1lIG5v
bi1leGlzdGFudCBpbmRleCJfcyB9OwotCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxs
YmFja0lELCB0YXNrU2l6ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4LCBjYWxs
YmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKKyAgICAKKyAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJ
RCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGVycm9yKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCit2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4s
IHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
dWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpCiB7CiAgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCIpOwogCi0gICAgaWYgKCFlcnJvci5pc051
bGwoKSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCwgY2Fs
bGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50
aWZpZXIsIG5ld05hbWUpKTsKKyAgICAvLyBRdW90YSBjaGVjay4KKyAgICBhdXRvIHRhc2tTaXpl
ID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKKyAg
ICBhdXRvIGRlY2lzb24gPSBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgdGFza1NpemUp
OworICAgIGlmIChkZWNpc29uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55
KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFj
a0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3Nh
Z2VOYW1lKCJSZW5hbWVJbmRleCIpKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50
aWZpZXIsIG5ld05hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTIxNCw3ICsx
MDg3LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1SZW5hbWVJbmRleCIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7
CiAgICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9y
RXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgICAgICBBU1NF
UlQob2JqZWN0U3RvcmVJbmZvKTsKQEAgLTEyMzMsNDIgKzExMDUsMzYgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cHV0T3JBZGQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIGNvbnMKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkIik7CiAKLSAgICBhdXRvIHRh
c2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShrZXlEYXRh
KSArIGVzdGltYXRlU2l6ZSh2YWx1ZSk7Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKLSAg
ICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmpl
Y3RTdG9yZShyZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7Ci0gICAgaWYgKG9i
amVjdFN0b3JlKQotICAgICAgICB0YXNrU2l6ZSArPSBvYmplY3RTdG9yZS0+aW5kZXhOYW1lcygp
LnNpemUoKSAqIHRhc2tTaXplOwotCi0gICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNr
U2l6ZSwgInB1dE9yQWRkIiwgW3RoaXMsIHRhc2tTaXplLCByZXF1ZXN0RGF0YSwga2V5RGF0YSwg
dmFsdWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIG92ZXJ3cml0ZU1vZGVdKGF1dG8g
ZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5j
b2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZN
b3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICB0aGlzLT5wdXRPckFkZEFmdGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgcmVxdWVzdERhdGEsIGtl
eURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwot
ICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZEFmdGVyUXVvdGFD
aGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
LCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgdmFsdWUsIEluZGV4
ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxs
YmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCi17CiAgICAgdWludDY0
X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNr
KSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47Ci0KLSAgICBzdGFydFNw
YWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmll
cigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwga2V5RGF0YSwgdmFsdWUs
IG92ZXJ3cml0ZU1vZGUsIHF1b3RhRXJyb3IpKTsKKyAgICAKKyAgICBwb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
UHV0T3JBZGQsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEu
dHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmll
cigpLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSkpOwogfQogCi12b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25z
dCBJREJWYWx1ZSYgb3JpZ2luYWxSZWNvcmRWYWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCit2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoY29uc3QgQ2xpZW50T3JpZ2lu
JiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIG9yaWdp
bmFsUmVjb3JkVmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3
cml0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCIpOwogCi0gICAg
QVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVy
KTsKLQogICAgIElEQktleURhdGEgdXNlZEtleTsKICAgICBJREJFcnJvciBlcnJvcjsKIAorICAg
IC8vIFF1b3RhIGNoZWNrLgorICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRp
b25Db3N0ICsgZXN0aW1hdGVTaXplKGtleURhdGEpICsgZXN0aW1hdGVTaXplKHZhbHVlKTsKKyAg
ICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOworICAgIGF1dG8qIG9iamVjdFN0b3JlID0gbV9kYXRh
YmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKHJlcXVlc3REYXRhLm9iamVjdFN0
b3JlSWRlbnRpZmllcigpKTsKKyAgICBpZiAob2JqZWN0U3RvcmUpCisgICAgICAgIHRhc2tTaXpl
ICs9IG9iamVjdFN0b3JlLT5pbmRleE5hbWVzKCkuc2l6ZSgpICogdGFza1NpemU7CisgICAgYXV0
byBkZWNpc29uID0gbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIHRhc2tTaXplKTsKKyAg
ICBpZiAoZGVjaXNvbiA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgewor
ICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlm
aWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgi
UHV0T3JBZGQiKSksIHVzZWRLZXkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFT
U0VSVChtX2JhY2tpbmdTdG9yZSk7CisgICAgQVNTRVJUKG9iamVjdFN0b3JlSWRlbnRpZmllcik7
CisKICAgICBpZiAoIXF1b3RhRXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgcXVvdGFFcnJvciwgdXNl
ZEtleSkpOwogICAgICAgICByZXR1cm47CkBAIC0xMzQ3LDcgKzEyMTMsNiBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJRAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkIik7CiAK
LSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlz
TnVsbCgpKTsKICAgICBwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IsIHJlc3VsdEtleSk7CiB9CiAKQEAgLTEzNTYsMjUgKzEyMjEsMTQgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBjb24KICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZCIpOwogCi0gICAgd2Fp
dEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0
YSwgZ2V0UmVjb3JkRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVy
cm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAg
ICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgdGhpcy0+Z2V0UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3RE
YXRhLCBnZXRSZWNvcmREYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJS
ZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldFJlY29yZERhdGEmIGdldFJlY29y
ZERhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAg
IGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHVpbnQ2NF90IGlu
ZGV4SWRlbnRpZmllciA9IHJlcXVlc3REYXRhLmluZGV4SWRlbnRpZmllcigpKQotICAgICAgICBw
b3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRy
YW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIo
KSwgaW5kZXhJZGVudGlmaWVyLCByZXF1ZXN0RGF0YS5pbmRleFJlY29yZFR5cGUoKSwgZ2V0UmVj
b3JkRGF0YS5rZXlSYW5nZURhdGEpKTsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEluZGV4
UmVjb3JkLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRy
YW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIo
KSwgaW5kZXhJZGVudGlmaWVyLCByZXF1ZXN0RGF0YS5pbmRleFJlY29yZFR5cGUoKSwgZ2V0UmVj
b3JkRGF0YS5rZXlSYW5nZURhdGEpKTsKICAgICBlbHNlCi0gICAgICAgIHBvc3REYXRhYmFzZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1HZXRSZWNvcmQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmll
cigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwgZ2V0UmVjb3JkRGF0YS5r
ZXlSYW5nZURhdGEsIGdldFJlY29yZERhdGEudHlwZSkpOworICAgICAgICBwb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtR2V0UmVjb3JkLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3RE
YXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50
aWZpZXIoKSwgZ2V0UmVjb3JkRGF0YS5rZXlSYW5nZURhdGEsIGdldFJlY29yZERhdGEudHlwZSkp
OwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzKFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVx
dWVzdERhdGEsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSwg
R2V0QWxsUmVzdWx0c0NhbGxiYWNrIGNhbGxiYWNrKQpAQCAtMTM4Miw0NSArMTIzNiw0NCBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3JkcyIp
OwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlz
LCByZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jkc0RhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxs
KCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmdldEFsbFJlY29yZHNBZnRl
clF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBXVEZNb3ZlKGNhbGxi
YWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29y
ZHNBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25z
dCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIEdldEFsbFJlc3VsdHND
YWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRzLCBj
YWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgZ2V0QWxsUmVj
b3Jkc0RhdGEpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3JkcywgbV9pZGVudGlm
aWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZp
ZXIoKSwgZ2V0QWxsUmVjb3Jkc0RhdGEpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUdldFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBJREJH
ZXRSZWNvcmREYXRhVHlwZSB0eXBlKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdl
dFJlY29yZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
IGtleVJhbmdlRGF0YSwgSURCR2V0UmVjb3JkRGF0YVR5cGUgdHlwZSkKIHsKICAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUdldFJlY29yZCIpOwogCisgICAgSURCR2V0UmVzdWx0IHJlc3VsdDsKKyAg
ICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1h
bmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bUdldFJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJy
b3IpLCByZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVChtX2Jh
Y2tpbmdTdG9yZSk7CiAKLSAgICBJREJHZXRSZXN1bHQgcmVzdWx0OwogICAgIElEQkVycm9yIGVy
cm9yID0gbV9iYWNraW5nU3RvcmUtPmdldFJlY29yZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9i
amVjdFN0b3JlSWRlbnRpZmllciwga2V5UmFuZ2VEYXRhLCB0eXBlLCByZXN1bHQpOwogCiAgICAg
cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yLCByZXN1bHQpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldElu
ZGV4UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3Jk
VHlwZSByZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQordm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkKGNvbnN0IENsaWVudE9yaWdpbiYg
b3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5
cGUgcmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKIHsKICAgICBBU1NF
UlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkIik7CiAKKyAgICBJREJHZXRSZXN1bHQgcmVz
dWx0OworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhj
ZWVkZWRFcnJvciksIHJlc3VsdCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQVNT
RVJUKG1fYmFja2luZ1N0b3JlKTsKIAotICAgIElEQkdldFJlc3VsdCByZXN1bHQ7CiAgICAgSURC
RXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0SW5kZXhSZWNvcmQodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgcmVjb3Jk
VHlwZSwgcmFuZ2UsIHJlc3VsdCk7CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRS
ZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCkpOwpAQCAtMTQzNCwxMSAr
MTI4NywxNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSQogICAgIHBlcmZvcm1HZXRSZXN1bHRD
YWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpOwogfQogCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEpCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3Jkcyhjb25zdCBDbGllbnRPcmln
aW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCR2V0QWxsUmVjb3Jk
c0RhdGEmIGdldEFsbFJlY29yZHNEYXRhKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0
QWxsUmVjb3JkcyIpOwogCisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAw
KSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRBbGxSZWNvcmRzLCBjYWxsYmFja0lkZW50aWZpZXIsIElE
QkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIFdURk1vdmUocmVzdWx0KSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKIAogICAgIElEQkdl
dEFsbFJlc3VsdCByZXN1bHQ7CkBAIC0xNDYwLDMyICsxMzE4LDI2IEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmdldENvdW50KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0
aW9uLCBjb25zCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudCIpOwogCi0gICAgd2FpdEZvclJl
cXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgcmFu
Z2UsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7
Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdU
Rk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIHRoaXMtPmdldENvdW50QWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCByYW5nZSwgV1RG
TW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpn
ZXRDb3VudEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIENvdW50Q2FsbGJhY2sgY2FsbGJhY2spCi17
CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZN
b3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47Ci0g
ICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUdldENvdW50LCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFu
c2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCks
IHJlcXVlc3REYXRhLmluZGV4SWRlbnRpZmllcigpLCByYW5nZSkpOworICAgIHBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1HZXRDb3VudCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0
RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVu
dGlmaWVyKCksIHJlcXVlc3REYXRhLmluZGV4SWRlbnRpZmllcigpLCByYW5nZSkpOwogfQogCi12
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50
aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhKQordm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUdldENvdW50KGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVp
bnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURh
dGEpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCIpOwogCisgICAgdWludDY0
X3QgY291bnQ7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1HZXRDb3VudCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90
YUV4Y2VlZGVkRXJyb3IpLCBjb3VudCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
QVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVy
KTsKIAotICAgIHVpbnQ2NF90IGNvdW50OwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5n
U3RvcmUtPmdldENvdW50KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBpbmRleElkZW50aWZpZXIsIGtleVJhbmdlRGF0YSwgY291bnQpOwogCiAgICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtR2V0Q291bnQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGNv
dW50KSk7CkBAIC0xNTA0LDMwICsxMzU2LDIzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRl
bGV0ZVJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZCIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFj
ZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRh
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewot
ICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZN
b3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhp
cy0+ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEs
IFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1
ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEsIEVycm9yQ2FsbGJh
Y2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tP
ckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAg
ICAgICByZXR1cm47Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCwgY2FsbGJhY2tJ
RCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVj
dFN0b3JlSWRlbnRpZmllcigpLCBrZXlSYW5nZURhdGEpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
RGVsZXRlUmVjb3JkLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3RE
YXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50
aWZpZXIoKSwga2V5UmFuZ2VEYXRhKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1EZWxldGVSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQordm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZChjb25zdCBDbGllbnRPcmlnaW4mIG9y
aWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQogewogICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtRGVsZXRlUmVjb3JkIik7CiAKLSAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0
b3JlLT5kZWxldGVSYW5nZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgcmFuZ2UpOworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkg
PT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlUmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKFF1b3RhRXhjZWVkZWRFcnJvcikpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAg
IElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJhbmdlKHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCByYW5nZSk7CiAgICAgcG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtRGVsZXRlUmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKSk7
CiB9CiAKQEAgLTE1NDQsMjkgKzEzODksMjMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3Bl
bkN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY28KICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3IiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VD
b21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGluZm8sIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlm
ICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3Ip
LCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPm9w
ZW5DdXJzb3JBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGluZm8sIFdURk1vdmUoY2FsbGJh
Y2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvckFm
dGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElE
QkN1cnNvckluZm8mIGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxs
YmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3RE
YXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1PcGVuQ3Vyc29yLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlv
bklkZW50aWZpZXIoKSwgaW5mbykpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1PcGVuQ3Vyc29yLCBt
X2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9u
SWRlbnRpZmllcigpLCBpbmZvKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1PcGVuQ3Vyc29yKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkN1cnNvckluZm8m
IGluZm8pCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtT3BlbkN1cnNvcihjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCQ3Vy
c29ySW5mbyYgaW5mbykKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0co
SW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJzb3IiKTsK
IAogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3Bh
Y2Uob3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgewor
ICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1PcGVuQ3Vyc29yLCBjYWxsYmFja0lkZW50
aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIHJlc3VsdCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Bl
bkN1cnNvcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGluZm8sIHJlc3VsdCk7CiAKICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1PcGVuQ3Vyc29yLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
LCByZXN1bHQpKTsKQEAgLTE1ODUsMjkgKzE0MjQsMjMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6aXRlcmF0ZUN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFp
bikgVW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IiKTsKIAotICAgIHdhaXRGb3JSZXF1
ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGRhdGEs
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0g
ICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1v
dmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IHRoaXMtPml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGRhdGEsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
aXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhLCBHZXRSZXN1bHRDYWxsYmFj
ayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAg
ICAgIHJldHVybjsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvciwgY2FsbGJhY2tJ
RCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLmN1cnNv
cklkZW50aWZpZXIoKSwgZGF0YSkpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29y
LCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0
aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5jdXJzb3JJZGVudGlmaWVyKCksIGRhdGEpKTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBjdXJzb3JJZGVu
dGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSkKK3ZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29yKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2lu
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1
cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhKQogewogICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvciIpOwogCiAgICAgSURCR2V0UmVzdWx0
IHJlc3VsdDsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0
b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUl0ZXJhdGVDdXJzb3IsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3Io
UXVvdGFFeGNlZWRlZEVycm9yKSwgcmVzdWx0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5pdGVyYXRlQ3Vyc29yKHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY3Vyc29ySWRlbnRpZmllciwgZGF0YSwgcmVzdWx0KTsKIAogICAg
IGlmIChlcnJvci5pc051bGwoKSkgewpAQCAtMTY1OSwxNyArMTQ5Miw2IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0CiAKICAgICBBU1NFUlQodHJhbnNhY3Rpb24uZGF0YWJhc2VDb25uZWN0aW9u
KCkuZGF0YWJhc2UoKSA9PSB0aGlzKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0
aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Y29tbWl0VHJhbnNhY3Rpb25B
ZnRlclF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3Rh
Q2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIEVycm9yQ2Fs
bGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJh
Y2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQog
ICAgICAgICByZXR1cm47CkBAIC0xNjg1LDE0ICsxNTA3LDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uQWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29t
bWl0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVy
KCkpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24sIG1faWRlbnRpZmll
ci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSkp
OwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24o
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1D
b21taXRUcmFuc2FjdGlvbihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5k
ZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9u
IC0gJXMiLCB0cmFuc2FjdGlvbklkZW50aWZpZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwogCisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VU
YXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJv
cihRdW90YUV4Y2VlZGVkRXJyb3IpLCB0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmNv
bW1pdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Is
IHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwogfQpAQCAtMTcyMywyNCArMTU1MCwxMyBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLAogICAgIHRyYW5zYWN0aW9uQ29tcGxldGVkKG1fZmluaXNoaW5n
VHJhbnNhY3Rpb25zLnRha2UodHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiB9CiAKLXZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIFdhaXRGb3JQZW5kaW5nVGFza3Mgd2FpdEZvclBlbmRpbmdUYXNr
cywgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmFib3J0
VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIEVy
cm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5zYWN0
aW9uIC0gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKIAogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5l
Y3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwogCi0gICAgaWYgKHdhaXRGb3JQZW5kaW5nVGFz
a3MgPT0gV2FpdEZvclBlbmRpbmdUYXNrczo6WWVzKSB7Ci0gICAgICAgIHdhaXRGb3JSZXF1ZXN0
U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICAg
ICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1v
dmUoZXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB0aGlzLT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBXYWl0Rm9yUGVuZGlu
Z1Rhc2tzOjpObywgV1RGTW92ZShjYWxsYmFjaykpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTc1Niw3ICsxNTcyLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
YWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1BYm9ydFRyYW5z
YWN0aW9uLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7Cisg
ICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24sIG1faWRlbnRpZmllci5vcmlnaW4o
KSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSkpOwogfQogCiB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoVW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikKQEAgLTE3NzgsMTEgKzE1OTQsMTYgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRmluaXNoSGFuZGxpbmdWZXJzaW9uQ2hhbmdlKFVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGkKICAgICBpbnZva2VPcGVyYXRpb25BbmRUcmFuc2FjdGlv
blRpbWVyKCk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1BYm9ydFRyYW5z
YWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtQWJvcnRUcmFuc2FjdGlvbihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNh
Y3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uSWRlbnRpZmllci5sb2dnaW5nU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CiAKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybUFib3J0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSWRlbnRpZmllciwgSURC
RXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgcG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJv
ciwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4
IGNhYzI3MDgxMTdhLi5iNDQ4ZTEwNGYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTQ0
LDYgKzQ0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQ2xpZW50T3JpZ2lu
OwogY2xhc3MgSURCRXJyb3I7CiBjbGFzcyBJREJHZXRBbGxSZXN1bHQ7CiBzdHJ1Y3QgSURCR2V0
UmVjb3JkRGF0YTsKQEAgLTEzOSw0NCArMTQwLDI3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNj
aGVkdWxlU2h1dGRvd25Gb3JDbG9zZSgpOwogCi0gICAgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUFm
dGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIEVycm9yQ2FsbGJhY2ssIGNvbnN0IElE
QkVycm9yJik7Ci0gICAgdm9pZCByZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50
NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNr
LCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgY3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2so
dWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJ
REJJbmRleEluZm8mLCBFcnJvckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQg
cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2
NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNr
LCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgcHV0T3JBZGRBZnRlclF1b3RhQ2hlY2sodWlu
dDY0X3QgdGFza1NpemUsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYs
IGNvbnN0IElEQlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUsIEtl
eURhdGFDYWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIGRlbGV0ZVJlY29yZEFm
dGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYsIEVycm9yQ2FsbGJhY2spOwotCi0gICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZUFmdGVyUXVv
dGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RTdG9yZU5hbWUsIEVycm9yQ2FsbGJhY2spOwotICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZUFm
ZXRRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIEVycm9yQ2FsbGJhY2spOwotICAgIHZvaWQgZGVsZXRlSW5kZXhB
ZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiwgRXJyb3JDYWxsYmFjayk7Ci0gICAg
dm9pZCBnZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25z
dCBJREJHZXRSZWNvcmREYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2spOwotICAgIHZvaWQgZ2V0QWxs
UmVjb3Jkc0FmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdl
dEFsbFJlY29yZHNEYXRhJiwgR2V0QWxsUmVzdWx0c0NhbGxiYWNrKTsKLSAgICB2b2lkIGdldENv
dW50QWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiwgQ291bnRDYWxsYmFjayk7Ci0gICAgdm9pZCBvcGVuQ3Vyc29yQWZ0ZXJRdW90YUNo
ZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCQ3Vyc29ySW5mbyYsIEdldFJlc3Vs
dENhbGxiYWNrKTsKLSAgICB2b2lkIGl0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hlY2soY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYsIEdldFJlc3VsdENh
bGxiYWNrKTsKLSAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uQWZ0ZXJRdW90YUNoZWNrKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBFcnJvckNhbGxiYWNrKTsKLQogICAgIC8vIERhdGFi
YXNlIHRocmVhZCBvcGVyYXRpb25zCiAgICAgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoY29uc3Qg
SURCRGF0YWJhc2VJZGVudGlmaWVyJik7Ci0gICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlKGNvbnN0
IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKTsKLSAgICB2
b2lkIHBlcmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKLSAg
ICB2b2lkIHBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwor
ICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBDbGllbnRPcmlnaW4mLCBjb25zdCBJREJE
YXRhYmFzZUlkZW50aWZpZXImKTsKKyAgICB2b2lkIHBlcmZvcm1Db21taXRUcmFuc2FjdGlvbihj
b25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICB2b2lkIHBl
cmZvcm1BYm9ydFRyYW5zYWN0aW9uKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIpOwogICAgIHZvaWQgYmVnaW5UcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKGNvbnN0
IElEQlRyYW5zYWN0aW9uSW5mbyYpOwotICAgIHZvaWQgcGVyZm9ybUNyZWF0ZU9iamVjdFN0b3Jl
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIGNvbnN0
IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKLSAgICB2b2lk
IHBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURC
RXJyb3ImKTsKLSAgICB2b2lkIHBlcmZvcm1DbGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJm
b3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZv
JiwgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHBlcmZvcm1EZWxldGVJbmRleCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90
IGluZGV4SWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBp
bmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImKTsK
LSAgICB2b2lkIHBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1
ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBjb25zdCBJREJFcnJvciYp
OwotICAgIHZvaWQgcGVyZm9ybUdldFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElEQkdl
dFJlY29yZERhdGFUeXBlKTsKLSAgICB2b2lkIHBlcmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJik7Ci0gICAgdm9pZCBw
ZXJmb3JtR2V0SW5kZXhSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6
SW5kZXhSZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKLSAgICB2b2lkIHBlcmZv
cm1HZXRDb3VudCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRh
Jik7Ci0gICAgdm9pZCBwZXJmb3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7
Ci0gICAgdm9pZCBwZXJmb3JtT3BlbkN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25z
dCBJREJDdXJzb3JJbmZvJik7Ci0gICAgdm9pZCBwZXJmb3JtSXRlcmF0ZUN1cnNvcih1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1cnNvcklkZW50
aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJik7CisgICAgdm9pZCBwZXJmb3JtQ3Jl
YXRlT2JqZWN0U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKKyAgICB2b2lk
IHBlcmZvcm1EZWxldGVPYmplY3RTdG9yZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIHZvaWQg
cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgcGVyZm9ybUNsZWFyT2JqZWN0
U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICB2b2lkIHBlcmZvcm1DcmVhdGVJbmRleChj
b25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRl
eEluZm8mLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgcGVyZm9ybURlbGV0ZUluZGV4KGNv
bnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyKTsKKyAgICB2b2lkIHBl
cmZvcm1SZW5hbWVJbmRleChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQg
cGVyZm9ybVB1dE9yQWRkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGNv
bnN0IElEQlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUsIGNvbnN0
IElEQkVycm9yJik7CisgICAgdm9pZCBwZXJmb3JtR2V0UmVjb3JkKGNvbnN0IENsaWVudE9yaWdp
biYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSURCR2V0UmVjb3JkRGF0YVR5cGUpOworICAgIHZv
aWQgcGVyZm9ybUdldEFsbFJlY29yZHMoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmKTsKKyAgICB2b2lkIHBlcmZv
cm1HZXRJbmRleFJlY29yZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRp
ZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYp
OworICAgIHZvaWQgcGVyZm9ybUdldENvdW50KGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3Qg
aW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKKyAgICB2b2lkIHBlcmZv
cm1EZWxldGVSZWNvcmRjb25zdCBDbGllbnRPcmlnaW4mLCAodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
KTsKKyAgICB2b2lkIHBlcmZvcm1PcGVuQ3Vyc29yKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkN1cnNvckluZm8mKTsKKyAgICB2b2lkIHBlcmZv
cm1JdGVyYXRlQ3Vyc29yKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3Qg
SURCSXRlcmF0ZUN1cnNvckRhdGEmKTsKICAgICB2b2lkIHBlcmZvcm1QcmVmZXRjaEN1cnNvcihj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyKTsKIAogICAgIHZvaWQgcGVy
Zm9ybVN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5m
byYpOwpAQCAtMTg2LDcgKzE3MCw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBNYWluIHRocmVhZCBj
YWxsYmFja3MKICAgICB2b2lkIGRpZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVk
VmVyc2lvbik7Ci0gICAgdm9pZCBkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNl
SW5mbyYsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpOworICAgIHZv
aWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJF
cnJvciYpOwogICAgIHZvaWQgZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJPYmplY3RTdG9yZUlu
Zm8mKTsKICAgICB2b2lkIGRpZFBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyKTsKICAgICB2b2lkIGRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpOwpAQCAtMjQ3LDggKzIzMSw2IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHJlcXVlc3RTcGFjZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJik7CiAgICAgdm9pZCB3YWl0Rm9yUmVxdWVz
dFNwYWNlQ29tcGxldGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJik7Ci0gICAgdm9pZCBzdGFydFNwYWNlSW5jcmVh
c2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lk
IGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIGJvb2wgaXNUYXNr
U3VjY2Vzc2Z1bCk7CiAKICAgICBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVVbmlxdWVDYWxsYmFj
a0lkZW50aWZpZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAppbmRleCBhYTQ4MjNj
OTM0Zi4uNzFhN2ZhMjAzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC02MSwx
OCArNjEsMjAgQEAgUmVmPEluUHJvY2Vzc0lEQlNlcnZlcj4gSW5Qcm9jZXNzSURCU2VydmVyOjpj
cmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb24KIAogSW5Qcm9jZXNzSURCU2VydmVy
Ojp+SW5Qcm9jZXNzSURCU2VydmVyKCkgPSBkZWZhdWx0OwogCi1TdG9yYWdlUXVvdGFNYW5hZ2Vy
KiBJblByb2Nlc3NJREJTZXJ2ZXI6OnF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mIG9y
aWdpbikKK1JlZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBJblByb2Nlc3NJREJTZXJ2ZXI6OnF1
b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKICAgICByZXR1cm4gbV9x
dW90YU1hbmFnZXJzLmVuc3VyZShvcmlnaW4sIFtdIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlx
dWU8U3RvcmFnZVF1b3RhTWFuYWdlcj4oU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3Rh
KCksIFtdKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNw
YWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKKyAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90
YU1hbmFnZXI6OmNyZWF0ZShTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSwgW10g
eworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0sIFtdKHVpbnQ2NF90IHF1b3RhLCB1
aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJh
Y2spIHsKICAgICAgICAgICAgIGNhbGxiYWNrKHF1b3RhICsgY3VycmVudFNwYWNlICsgc3BhY2VJ
bmNyZWFzZSk7CiAgICAgICAgIH0pOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAg
ICB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSURCU2VydmVyOjpJREJT
ZXJ2ZXI6OlF1b3RhTWFuYWdlckdldHRlciBzdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyKEluUHJv
Y2Vzc0lEQlNlcnZlciYgc2VydmVyKQorc3RhdGljIGlubGluZSBJREJTZXJ2ZXI6OklEQlNlcnZl
cjo6U3RvcmFnZVF1b3RhTWFuYWdlckdldHRlciBzdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyKElu
UHJvY2Vzc0lEQlNlcnZlciYgc2VydmVyKQogewotICAgIHJldHVybiBbd2Vha1NlcnZlciA9IG1h
a2VXZWFrUHRyKHNlcnZlcildKFBBTDo6U2Vzc2lvbklELCBjb25zdCBhdXRvJiBvcmlnaW4pIHsK
KyAgICByZXR1cm4gW3dlYWtTZXJ2ZXIgPSBtYWtlV2Vha1B0cihzZXJ2ZXIpXShjb25zdCBhdXRv
JiBvcmlnaW4pIHsKICAgICAgICAgcmV0dXJuIHdlYWtTZXJ2ZXIgPyB3ZWFrU2VydmVyLT5xdW90
YU1hbmFnZXIob3JpZ2luKSA6IG51bGxwdHI7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2
ZXIuaAppbmRleCBjYWRjODEyYTM5OS4uNGIyNzUyMGZhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2Vy
dmVyLmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKSBvdmVycmlk
ZSB7IFJlZkNvdW50ZWQ8SW5Qcm9jZXNzSURCU2VydmVyPjo6cmVmKCk7IH0KICAgICB2b2lkIGRl
cmVmKCkgb3ZlcnJpZGUgeyBSZWZDb3VudGVkPEluUHJvY2Vzc0lEQlNlcnZlcj46OmRlcmVmKCk7
IH0KIAotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIHF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRP
cmlnaW4mKTsKKyAgICBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyKGNv
bnN0IENsaWVudE9yaWdpbiYpOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEluUHJvY2Vzc0lE
QlNlcnZlcihQQUw6OlNlc3Npb25JRCk7CkBAIC0xMzUsNyArMTM1LDcgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI+IG1fY29ubmVjdGlvblRv
U2VydmVyOwogICAgIFJlZlB0cjxJREJTZXJ2ZXI6OklEQkNvbm5lY3Rpb25Ub0NsaWVudD4gbV9j
b25uZWN0aW9uVG9DbGllbnQ7CiAKLSAgICBIYXNoTWFwPENsaWVudE9yaWdpbiwgc3RkOjp1bmlx
dWVfcHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3F1b3RhTWFuYWdlcnM7CisgICAgSGFzaE1h
cDxDbGllbnRPcmlnaW4sIFJlZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9xdW90YU1hbmFn
ZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKaW5kZXggODUyNTc1MmU2MzMuLjVlZGMzMWVh
YWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5j
cHAKQEAgLTI3LDIxMyArMjcsODggQEAKICNpbmNsdWRlICJTdG9yYWdlUXVvdGFNYW5hZ2VyLmgi
CiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU3RvcmFnZVF1b3RhVXNlci5oIgor
I2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVN0b3JhZ2VRdW90YU1hbmFnZXI6On5TdG9yYWdlUXVvdGFNYW5hZ2VyKCkKK1Jl
ZjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUodWludDY0
X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYgdXNhZ2VHZXR0ZXIsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0
ZXImJiBxdW90YUluY3JlYXNlUmVxdWVzdGVyKQogewotICAgIHdoaWxlICghbV9wZW5kaW5nUmVx
dWVzdHMuaXNFbXB0eSgpKQotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy50YWtlRmlyc3QoKS5j
YWxsYmFjayhEZWNpc2lvbjo6RGVueSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFn
ZVF1b3RhTWFuYWdlcihxdW90YSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdURk1vdmUocXVvdGFJ
bmNyZWFzZVJlcXVlc3RlcikpKTsKIH0KIAotdWludDY0X3QgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
c3BhY2VVc2FnZSgpIGNvbnN0CitTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmIHVzYWdlR2V0dGVyLCBRdW90YUluY3Jl
YXNlUmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3RlcikKKyAgICA6IG1fcXVvdGEocXVv
dGEpCisgICAgLCBtX3VzYWdlR2V0dGVyKFdURk1vdmUodXNhZ2VHZXR0ZXIpKQorICAgICwgbV9x
dW90YUluY3JlYXNlUmVxdWVzdGVyKFdURk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3RlcikpCisg
ICAgLCBtX3dvcmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiU3RvcmFnZVF1b3RhTWFuYWdlciBC
YWNrZ3JvdW5kIFF1ZXVlIikpCiB7Ci0gICAgdWludDY0X3QgdXNhZ2UgPSAwOwotICAgIGZvciAo
YXV0byYgdXNlciA6IG1fdXNlcnMpCi0gICAgICAgIHVzYWdlICs9IHVzZXItPnNwYWNlVXNlZCgp
OwotICAgIHJldHVybiB1c2FnZTsKIH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRh
dGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVx
dWVzdFNwYWNlT25NYWluVGhyZWFkKHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkLCBSZXF1ZXN0Q2Fs
bGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBpZiAoIW1fcXVvdGEpCi0gICAgICAgIHJldHVybjsK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgYXV0byBkZWZhdWx0UXVvdGFTdGVw
ID0gbV9xdW90YSAvIDEwOwotICAgIG1fcXVvdGEgPSBzdGQ6Om1heChtX3F1b3RhLCBkZWZhdWx0
UXVvdGFTdGVwICogKChzcGFjZVVzYWdlKCkgLyBkZWZhdWx0UXVvdGFTdGVwKSArIDEpKTsKLX0K
LQotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjppbml0aWFsaXplVXNlcnNJZk5lZWRlZCgpCi17
Ci0gICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBWZWN0b3I8U3RvcmFnZVF1b3RhVXNlcio+IHVzZXJzVG9Jbml0aWFs
aXplOwotICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVz
ZXJzKSB7Ci0gICAgICAgIGlmIChrZXlWYWx1ZS52YWx1ZSA9PSBXaGVuSW5pdGlhbGl6ZWRDYWxs
ZWQ6Ok5vKSB7Ci0gICAgICAgICAgICBrZXlWYWx1ZS52YWx1ZSA9IFdoZW5Jbml0aWFsaXplZENh
bGxlZDo6WWVzOwotICAgICAgICAgICAgdXNlcnNUb0luaXRpYWxpemUuYXBwZW5kKGtleVZhbHVl
LmtleSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChhdXRvKiB1c2VyIDogdXNlcnNUb0lu
aXRpYWxpemUpIHsKLSAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29u
dGFpbnModXNlcikpCi0gICAgICAgICAgICBhc2tVc2VyVG9Jbml0aWFsaXplKCp1c2VyKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZShT
dG9yYWdlUXVvdGFVc2VyJiB1c2VyKQotewotICAgIHVzZXIud2hlbkluaXRpYWxpemVkKFt0aGlz
LCAmdXNlciwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oKSB7Ci0gICAgICAgIGlmICgh
d2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1fcGVuZGluZ0lu
aXRpYWxpemF0aW9uVXNlcnMucmVtb3ZlKCZ1c2VyKSkKLSAgICAgICAgICAgIG1fdXNlcnMuYWRk
KCZ1c2VyKTsKLQotICAgICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNF
bXB0eSgpKQorICAgIC8vIEZhc3QgcGF0aC4KKyAgICBpZiAobV9xdW90YUNvdW50RG93bkxvY2su
dHJ5TG9jaygpKSB7CisgICAgICAgIGlmICh0cnlHcmFudFJlcXVlc3Qoc3BhY2VSZXF1ZXN0ZWQp
KSB7CisgICAgICAgICAgICBtX3F1b3RhQ291bnREb3duTG9jay51bmxvY2soKTsKKyAgICAgICAg
ICAgIGNhbGxiYWNrKERlY2lzaW9uOjpHcmFudCk7CiAgICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgLy8gTWFrZSBzdXJlIHF1b3RhIGlzIHNldCBiZWZvcmUgaGFuZGxpbmcgZmlyc3QgcmVx
dWVzdC4KLSAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlVuaW5pdGlhbGl6ZWQpIHsKLSAg
ICAgICAgICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKLSAgICAgICAgICAgIG1f
c3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwogICAgICAgICB9CisgICAg
ICAgIG1fcXVvdGFDb3VudERvd25Mb2NrLnVubG9jaygpOworICAgIH0KIAotICAgICAgICBwcm9j
ZXNzUGVuZGluZ1JlcXVlc3RzKHsgfSk7CisgICAgbV9jYWxsYmFja3MuYXBwZW5kKFdURk1vdmUo
Y2FsbGJhY2spKTsKKyAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgc3BhY2VSZXF1ZXN0ZWRdIHsKKyAgICAgICAgYXV0byBkZWNp
c2lvbiA9IHJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZChzcGFjZVJlcXVlc3RlZCk7Cisg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgZGVjaXNpb25dIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9jYWxsYmFja3MuaXNFbXB0
eSgpKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtlRmlyc3Qo
KTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGRlY2lzaW9uKTsKKyAgICAgICAgfSk7CiAgICAgfSk7
CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YWRkVXNlcihTdG9yYWdlUXVvdGFVc2Vy
JiB1c2VyKQorU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gU3RvcmFnZVF1b3RhTWFuYWdl
cjo6cmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVk
KQogewotICAgIEFTU0VSVCghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5jb250YWlucygm
dXNlcikpOwotICAgIEFTU0VSVCghbV91c2Vycy5jb250YWlucygmdXNlcikpOwotICAgIG1fcGVu
ZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuYWRkKCZ1c2VyLCBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ6
Ok5vKTsKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgIGlmICghbV9wZW5kaW5n
UmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAgICBhc2tVc2VyVG9Jbml0aWFsaXplKHVzZXIpOwot
fQotCi1ib29sIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSh1aW50
NjRfdCBzcGFjZUluY3JlYXNlKSBjb25zdAotewotICAgIGlmICghc3BhY2VJbmNyZWFzZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcXVvdGFDb3VudERv
d25Mb2NrKTsKIAotICAgIHJldHVybiBzcGFjZVVzYWdlKCkgKyBzcGFjZUluY3JlYXNlID4gbV9x
dW90YTsKLX0KKyAgICBpZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkKKyAgICAg
ICAgcmV0dXJuIERlY2lzaW9uOjpHcmFudDsKIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpy
ZW1vdmVVc2VyKFN0b3JhZ2VRdW90YVVzZXImIHVzZXIpCi17Ci0gICAgQVNTRVJUKG1fdXNlcnMu
Y29udGFpbnMoJnVzZXIpIHx8IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnMo
JnVzZXIpKTsKLSAgICBtX3VzZXJzLnJlbW92ZSgmdXNlcik7Ci0gICAgaWYgKG1fcGVuZGluZ0lu
aXRpYWxpemF0aW9uVXNlcnMucmVtb3ZlKCZ1c2VyKSAmJiBtX3BlbmRpbmdJbml0aWFsaXphdGlv
blVzZXJzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBXaGVuIGJlaW5nIGNsZWFyZWQsIHF1b3Rh
IHVzZXJzIG1heSByZW1vdmUgdGhlbXNlbHZlcyBhbmQgYWRkIHRoZW1zZWx2ZXMgdG8gdHJpZ2dl
ciByZWluaXRpYWxpemF0aW9uLgotICAgICAgICAvLyBMZXQncyB3YWl0IGZvciBhZGRVc2VyIHRv
IGJlIGNhbGxlZCBiZWZvcmUgcHJvY2Vzc2luZyBwZW5kaW5nIHJlcXVlc3RzLgotICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXSB7Ci0g
ICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKLSAgICAgICAg
fSk7Ci0gICAgfQotfQorICAgIG1fdXNhZ2UgPSBtX3VzYWdlR2V0dGVyKCk7CisgICAgbV9xdW90
YUNvdW50RG93biA9IG1fdXNhZ2UgPCBtX3F1b3RhID8gbV9xdW90YSAtIG1fdXNhZ2UgOiAwOwor
ICAgIGlmICh0cnlHcmFudFJlcXVlc3Qoc3BhY2VSZXF1ZXN0ZWQpKQorICAgICAgICByZXR1cm4g
RGVjaXNpb246OkdyYW50OwogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFj
ZSh1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBSZXF1ZXN0Q2FsbGJhY2smJiBjYWxsYmFjaykKLXsK
LSAgICBpZiAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAgICBtX3BlbmRp
bmdSZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghc3BhY2VJbmNyZWFzZSkgewotICAg
ICAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQoKTsKLQotICAgIGlmICghbV9wZW5kaW5nSW5p
dGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMu
YXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgLy8gQmxvY2sgdGhpcyB0aHJlYWQgdW50aWwgZ2V0dGluZyBkZWNz
aW9uIGZvciBxdW90YSBpbmNyZWFzZS4KKyAgICBCaW5hcnlTZW1hcGhvcmUgc2VtYXBob3JlOwor
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgc3BhY2VSZXF1ZXN0ZWQsICZzZW1hcGhvcmVdIHsKKyAgICAgICAgbV9xdW90YUluY3JlYXNl
UmVxdWVzdGVyKG1fcXVvdGEsIG1fdXNhZ2UsIHNwYWNlUmVxdWVzdGVkLCBbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCAmc2VtYXBob3JlXShPcHRpb25hbDx1aW50NjRfdD4g
bmV3UXVvdGEpIHsKKyAgICAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAg
ICAgICBpZiAobmV3UXVvdGEpCisgICAgICAgICAgICAgICAgbV9xdW90YSA9ICpuZXdRdW90YTsK
IAotICAgIGlmIChzaG91bGRBc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSkpIHsKLSAgICAg
ICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxs
YmFjaykgfSk7Ci0KLSAgICAgICAgLy8gVHJ5IHByb2Nlc3NpbmcgcmVxdWVzdCBhZ2FpbiBhZnRl
ciBtYWtpbmcgc3VyZSB1c2FnZSBpcyBhY2N1cmF0ZS4KLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRl
OjpDb21wdXRpbmdTcGFjZVVzZWQ7Ci0gICAgICAgIGZvciAoYXV0byYgdXNlciA6IGNvcHlUb1Zl
Y3RvcihtX3VzZXJzKSkKLSAgICAgICAgICAgIHVzZXItPmNvbXB1dGVTcGFjZVVzZWQoKTsKLQot
ICAgICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNraW5nRm9yTW9y
ZVNwYWNlOwotICAgICAgICBhc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9y
UmVxdWVzdDsKLSAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOwotfQotCi12b2lkIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNlKQot
ewotICAgIEFTU0VSVChzaG91bGRBc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSkpOwotICAg
IEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2UpOwotCi0gICAgUkVM
RUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNw
YWNlICUiIFBSSXU2NCwgdGhpcywgc3BhY2VJbmNyZWFzZSk7Ci0gICAgbV9zdGF0ZSA9IFN0YXRl
OjpXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlOwotICAgIG1fc3BhY2VJbmNyZWFzZVJl
cXVlc3RlcihtX3F1b3RhLCBzcGFjZVVzYWdlKCksIHNwYWNlSW5jcmVhc2UsIFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0oT3B0aW9uYWw8dWludDY0X3Q+IG5ld1F1b3RhKSB7
Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
UkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9y
ZVNwYWNlIHJlY2VpdmVkIHJlc3BvbnNlICUiIFBSSXU2NCwgdGhpcywgbmV3UXVvdGEgPyAqbmV3
UXVvdGEgOiAwKTsKLQotICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFj
ZTsKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhuZXdRdW90YSk7CisgICAgICAgICAg
ICBzZW1hcGhvcmUuc2lnbmFsKCk7CisgICAgICAgIH0pOwogICAgIH0pOworICAgIHNlbWFwaG9y
ZS53YWl0KCk7CisKKyAgICBtX3F1b3RhQ291bnREb3duID0gbV91c2FnZSA8IG1fcXVvdGEgPyBt
X3F1b3RhIC0gbV91c2FnZSA6IDA7CisgICAgYXV0byBkZWNpc2lvbiA9IHRyeUdyYW50UmVxdWVz
dChzcGFjZVJlcXVlc3RlZCkgPyBEZWNpc2lvbjo6R3JhbnQgOiBEZWNpc2lvbjo6RGVueTsKKyAg
ICByZXR1cm4gZGVjaXNpb247CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vz
c1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEpCitib29sIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OnRyeUdyYW50UmVxdWVzdCh1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCkK
IHsKLSAgICBpZiAobV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobmV3UXVvdGEpCi0gICAgICAgIG1fcXVvdGEgPSAqbmV3UXVvdGE7Ci0KLSAg
ICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6V2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6
OkFza2luZ0Zvck1vcmVTcGFjZSkgewotICAgICAgICBhdXRvIHJlcXVlc3QgPSBtX3BlbmRpbmdS
ZXF1ZXN0cy50YWtlRmlyc3QoKTsKLSAgICAgICAgYm9vbCBzaG91bGRBbGxvd1JlcXVlc3QgPSAh
c2hvdWxkQXNrRm9yTW9yZVNwYWNlKHJlcXVlc3Quc3BhY2VJbmNyZWFzZSk7Ci0KLSAgICAgICAg
UkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1Bl
bmRpbmdSZXF1ZXN0cyBmaXJzdCByZXF1ZXN0IGRlY2lzaW9uIGlzICVkIiwgdGhpcywgc2hvdWxk
QWxsb3dSZXF1ZXN0KTsKLQotICAgICAgICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9u
Rm9yUmVxdWVzdDsKLSAgICAgICAgcmVxdWVzdC5jYWxsYmFjayhzaG91bGRBbGxvd1JlcXVlc3Qg
PyBEZWNpc2lvbjo6R3JhbnQgOiBEZWNpc2lvbjo6RGVueSk7Ci0gICAgfQotCi0gICAgd2hpbGUg
KCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byYgcmVxdWVzdCA9
IG1fcGVuZGluZ1JlcXVlc3RzLmZpcnN0KCk7Ci0KLSAgICAgICAgaWYgKHNob3VsZEFza0Zvck1v
cmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVhc2UpKSB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0
ZSA9PSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0KSB7Ci0gICAgICAgICAgICAgICAg
bV9zdGF0ZSA9IFN0YXRlOjpDb21wdXRpbmdTcGFjZVVzZWQ7Ci0gICAgICAgICAgICAgICAgZm9y
IChhdXRvJiB1c2VyIDogY29weVRvVmVjdG9yKG1fdXNlcnMpKQotICAgICAgICAgICAgICAgICAg
ICB1c2VyLT5jb21wdXRlU3BhY2VVc2VkKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fcGVu
ZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNr
aW5nRm9yTW9yZVNwYWNlOwotICAgICAgICAgICAgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSA9IDA7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHBlbmRpbmdSZXF1ZXN0IDogbV9wZW5kaW5nUmVxdWVz
dHMpCi0gICAgICAgICAgICAgICAgc3BhY2VJbmNyZWFzZSArPSBwZW5kaW5nUmVxdWVzdC5zcGFj
ZUluY3JlYXNlOwotICAgICAgICAgICAgYXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRl
OjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3Q7Ci0gICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLnRh
a2VGaXJzdCgpLmNhbGxiYWNrKERlY2lzaW9uOjpHcmFudCk7CisgICAgQVNTRVJUKG1fcXVvdGFD
b3VudERvd25Mb2NrLmlzTG9ja2VkKCkpOworICAgIGlmIChzcGFjZVJlcXVlc3RlZCA8PSBtX3F1
b3RhQ291bnREb3duKSB7CisgICAgICAgIG1fcXVvdGFDb3VudERvd24gLT0gc3BhY2VSZXF1ZXN0
ZWQ7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
UXVvdGFNYW5hZ2VyLmgKaW5kZXggMDk1NjYzMDZmNTUuLjRjNjcyM2QwM2Q1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaApAQCAtMzEsNzEgKzMxLDQw
IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFN0b3JhZ2VRdW90YVVzZXI7Ci0KLWNsYXNzIFN0
b3JhZ2VRdW90YU1hbmFnZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U3RvcmFnZVF1b3RhTWFu
YWdlcj4geworY2xhc3MgU3RvcmFnZVF1b3RhTWFuYWdlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxTdG9yYWdlUXVvdGFNYW5hZ2VyPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPFN0b3Jh
Z2VRdW90YU1hbmFnZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICB1c2luZyBTcGFjZUluY3JlYXNlUmVxdWVzdGVyID0gV1RGOjpGdW5jdGlvbjx2b2lkKHVp
bnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVh
c2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8dWludDY0X3Q+KT4mJik+OwotICAg
IFN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFNwYWNlSW5jcmVhc2VSZXF1ZXN0
ZXImJiBzcGFjZUluY3JlYXNlUmVxdWVzdGVyKQotICAgICAgICA6IG1fcXVvdGEocXVvdGEpCi0g
ICAgICAgICwgbV9zcGFjZUluY3JlYXNlUmVxdWVzdGVyKFdURk1vdmUoc3BhY2VJbmNyZWFzZVJl
cXVlc3RlcikpCi0gICAgewotICAgIH0KLSAgICBXRUJDT1JFX0VYUE9SVCB+U3RvcmFnZVF1b3Rh
TWFuYWdlcigpOworICAgIHVzaW5nIFVzYWdlR2V0dGVyID0gV1RGOjpGdW5jdGlvbjx1aW50NjRf
dCgpPjsKKyAgICB1c2luZyBRdW90YUluY3JlYXNlUmVxdWVzdGVyID0gV1RGOjpGdW5jdGlvbjx2
b2lkKHVpbnQ2NF90IGN1cnJlbnRRdW90YSwgdWludDY0X3QgY3VycmVudFVzYWdlLCB1aW50NjRf
dCByZXF1ZXN0ZWRJbmNyZWFzZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDx1aW50
NjRfdD4pPiYmKT47CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTdG9yYWdlUXVvdGFN
YW5hZ2VyPiBjcmVhdGUodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYsIFF1b3RhSW5jcmVh
c2VSZXF1ZXN0ZXImJik7CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGRlZmF1bHRU
aGlyZFBhcnR5UXVvdGFGcm9tUGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpIHsgcmV0dXJu
IHF1b3RhIC8gMTA7IH0KLQogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVmYXVsdFF1
b3RhKCkgeyByZXR1cm4gMTAwMCAqIE1COyB9CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRf
dCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkgeyByZXR1cm4gZGVmYXVsdFRoaXJkUGFydHlRdW90
YUZyb21QZXJPcmlnaW5RdW90YShkZWZhdWx0UXVvdGEoKSk7IH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYWRkVXNlcihTdG9yYWdlUXVvdGFVc2VyJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZW1vdmVVc2VyKFN0b3JhZ2VRdW90YVVzZXImKTsKLQogICAgIGVudW0gY2xhc3MgRGVj
aXNpb24geyBEZW55LCBHcmFudCB9OwogICAgIHVzaW5nIFJlcXVlc3RDYWxsYmFjayA9IENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoRGVjaXNpb24pPjsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJl
cXVlc3RTcGFjZSh1aW50NjRfdCwgUmVxdWVzdENhbGxiYWNrJiYpOwotICAgIHZvaWQgcmVzZXRR
dW90YSh1aW50NjRfdCBuZXdRdW90YSkgeyBtX3F1b3RhID0gbmV3UXVvdGE7IH0KLQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOwotCi0gICAg
ZW51bSBjbGFzcyBTdGF0ZSB7Ci0gICAgICAgIFVuaW5pdGlhbGl6ZWQsCi0gICAgICAgIENvbXB1
dGluZ1NwYWNlVXNlZCwKLSAgICAgICAgV2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSwK
LSAgICAgICAgQXNraW5nRm9yTW9yZVNwYWNlLAotICAgICAgICBNYWtpbmdEZWNpc2lvbkZvclJl
cXVlc3QsCi0gICAgfTsKLSAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7
IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCh1aW50
NjRfdCwgUmVxdWVzdENhbGxiYWNrJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIERlY2lzaW9uIHJl
cXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCh1aW50NjRfdCk7CiAKIHByaXZhdGU6Ci0gICAg
dWludDY0X3Qgc3BhY2VVc2FnZSgpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkQXNrRm9yTW9yZVNw
YWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpIGNvbnN0OwotICAgIHZvaWQgYXNrRm9yTW9yZVNw
YWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpOwotCi0gICAgdm9pZCBpbml0aWFsaXplVXNlcnNJ
Zk5lZWRlZCgpOwotICAgIHZvaWQgYXNrVXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFVc2Vy
Jik7Ci0KLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+
KTsKKyAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYm
LCBRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYpOworICAgIGJvb2wgdHJ5R3JhbnRSZXF1ZXN0KHVp
bnQ2NF90KTsKIAorICAgIERlcXVlPFJlcXVlc3RDYWxsYmFjaz4gbV9jYWxsYmFja3M7CiAgICAg
dWludDY0X3QgbV9xdW90YSB7IDAgfTsKKyAgICB1aW50NjRfdCBtX3VzYWdlIHsgMCB9OworICAg
IHVpbnQ2NF90IG1fcXVvdGFDb3VudERvd24geyAwIH07CisgICAgTG9jayBtX3F1b3RhQ291bnRE
b3duTG9jazsKIAotICAgIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIgbV9zcGFjZUluY3JlYXNlUmVx
dWVzdGVyOwotCi0gICAgZW51bSBjbGFzcyBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQgeyBObywgWWVz
IH07Ci0gICAgSGFzaE1hcDxTdG9yYWdlUXVvdGFVc2VyKiwgV2hlbkluaXRpYWxpemVkQ2FsbGVk
PiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzOwotICAgIEhhc2hTZXQ8U3RvcmFnZVF1b3Rh
VXNlcio+IG1fdXNlcnM7Ci0KLSAgICBzdHJ1Y3QgUGVuZGluZ1JlcXVlc3QgewotICAgICAgICB1
aW50NjRfdCBzcGFjZUluY3JlYXNlOwotICAgICAgICBSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2s7
Ci0gICAgfTsKLSAgICBEZXF1ZTxQZW5kaW5nUmVxdWVzdD4gbV9wZW5kaW5nUmVxdWVzdHM7Cisg
ICAgVXNhZ2VHZXR0ZXIgbV91c2FnZUdldHRlcjsKKyAgICBRdW90YUluY3JlYXNlUmVxdWVzdGVy
IG1fcXVvdGFJbmNyZWFzZVJlcXVlc3RlcjsKIAotICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6
VW5pbml0aWFsaXplZCB9OworICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA0ZjhmMGFhYzkzNy4uZDhmYTViMGNlMDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0z
MjYsMTAgKzMyNiwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJgogICAgICAgICBhZGRTZXJ2
aWNlV29ya2VyU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2
aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgfQogI2Vu
ZGlmCi0gICAgaW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzKTsKIAogICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQs
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1l
UGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGFkZFNlc3Npb25TdG9yYWdlUXVv
dGFNYW5hZ2VyKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKKwogICAg
IGF1dG8qIGRlZmF1bHRTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7CiAgICAgYXV0byogZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gZGVm
YXVsdFNlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwogICAgIGZvciAoY29uc3QgYXV0
byYgY29va2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5n
Q29va2llcykKQEAgLTQzNCwyOCArNDM2LDM5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFy
Q2FjaGVkQ3JlZGVudGlhbHMoKQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0
YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKIHsKKyAgICBh
dXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Np
b25JRDsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJh
c2VTZXNzaW9uKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwg
cGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBhZGRJbmRleGVkRGF0YWJhc2VT
ZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBh
cmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGlmIChwYXJlbnRQcm9jZXNzSGFz
U2VydmljZVdvcmtlckVudGl0bGVtZW50KCkpCi0gICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNz
aW9uKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgcGFyYW1l
dGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3Zl
KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Cisg
ICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5zZXJ2
aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKIAot
ICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5zZXNzaW9uSUQsIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgbV9zdG9y
YWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
IAotICAgIGluaXRpYWxpemVTdG9yYWdlUXVvdGEocGFyYW1ldGVycyk7CisgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihz
ZXNzaW9uSUQsIHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7CiAKICAgICBSZW1v
dGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMs
IFdURk1vdmUocGFyYW1ldGVycykpOwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFs
aXplU3RvcmFnZVF1b3RhKGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQordm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90
IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0aCwgY29u
c3QgU3RyaW5nJiBpZGJSb290UGF0aCkKIHsKLSAgICBhdXRvJiBtYW5hZ2VycyA9ICBtX3N0b3Jh
Z2VRdW90YU1hbmFnZXJzLmVuc3VyZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5zZXNzaW9uSUQsIFtdIHsKLSAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsg
fTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgbWFuYWdlcnMuc2V0RGVmYXVsdFF1b3Rh
cyhwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBh
cnR5T3JpZ2luU3RvcmFnZVF1b3RhKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25T
dG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIGF1dG8gW2l0ZXIsIGlzTmV3RW50cnldID0g
bV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuYWRkKHNlc3Npb25JRCwgbnVsbHB0cik7Cisg
ICAgaWYgKGlzTmV3RW50cnkpIHsKKyAgICAgICAgaXRlci0+dmFsdWUgPSBtYWtlVW5pcXVlPFNl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyPihjYWNoZVJvb3RQYXRoLCBpZGJSb290UGF0aCk7Cisg
ICAgICAgIGl0ZXItPnZhbHVlLT5zZXREZWZhdWx0UXVvdGEoZGVmYXVsdFF1b3RhLCBkZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92
ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sK
KyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2sp
OworICAgIEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5jb250YWlucyhzZXNz
aW9uSUQpKTsKKyAgICBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5yZW1vdmUoc2Vzc2lv
bklEKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKGNv
bnN0IEZ1bmN0aW9uPHZvaWQoTmV0d29ya1Nlc3Npb24mKT4mIGZ1bmN0b3IpCkBAIC01NzYsOCAr
NTg5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQogI2VuZGlmCiAKICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW1vdmUo
c2Vzc2lvbklEKTsKLQotICAgIG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Npb25J
RCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMTQ2OCw5
ICsxNDc5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2kKICAgICBpZiAod2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkgJiYgIXNlc3Npb25JRC5p
c0VwaGVtZXJhbCgpKQogICAgICAgICBjbGVhckRpc2tDYWNoZShtb2RpZmllZFNpbmNlLCBbY2xl
YXJUYXNrc0hhbmRsZXIgPSBXVEZNb3ZlKGNsZWFyVGFza3NIYW5kbGVyKV0geyB9KTsKIAotICAg
IGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERC
RGF0YWJhc2VzKSB8fCB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6
RE9NQ2FjaGUpKQotICAgICAgICBjbGVhclN0b3JhZ2VRdW90YShzZXNzaW9uSUQpOwotCiAgICAg
aWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpBZENsaWNrQXR0
cmlidXRpb25zKSkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0aGlzLT5u
ZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICAgICAgbmV0d29ya1Nlc3Npb24tPmNs
ZWFyQWRDbGlja0F0dHJpYnV0aW9uKCk7CkBAIC0xNTYzLDE5ICsxNTcxLDYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgT3B0aW8KICAgICAgICAgfQogICAgICAgICBXZWJDb3JlOjpDcmVkZW50aWFsU3Rv
cmFnZTo6cmVtb3ZlU2Vzc2lvbkNyZWRlbnRpYWxzV2l0aE9yaWdpbnMob3JpZ2luRGF0YXMpOwog
ICAgIH0KLQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc3RvcmFnZSBxdW90YSBjbGVhcmluZyBm
b3IgdGhlc2Ugb3JpZ2lucy4KLX0KLQotdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJTdG9yYWdl
UXVvdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3N0b3JhZ2VRdW90YU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsKLSAgICBpZiAoaXRlcmF0b3Ig
PT0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byYgbWFuYWdlcnMgPSBpdGVyYXRvci0+dmFsdWU7Ci0gICAgZm9yIChhdXRvJiBtYW5hZ2Vy
IDogbWFuYWdlcnMubWFuYWdlcnNQZXJPcmlnaW4oKSkKLSAgICAgICAgbWFuYWdlci52YWx1ZS0+
cmVzZXRRdW90YShtYW5hZ2Vycy5kZWZhdWx0UXVvdGEobWFuYWdlci5rZXkpKTsKIH0KIAogI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjExLDEwICsyMjA2LDExIEBA
IFJlZjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gTmV0d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZl
cihQQUw6OlNlc3Npb25JRCBzZXNzaW9uCiAgICAgICAgIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0
aHMuZ2V0KHNlc3Npb25JRCk7CiAgICAgfQogCi0gICAgcmV0dXJuIElEQlNlcnZlcjo6SURCU2Vy
dmVyOjpjcmVhdGUoc2Vzc2lvbklELCBwYXRoLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cih0aGlzKV0oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBhdXRvJiBvcmlnaW4pIC0+
IFN0b3JhZ2VRdW90YU1hbmFnZXIqIHsKKyAgICByZXR1cm4gSURCU2VydmVyOjpJREJTZXJ2ZXI6
OmNyZWF0ZShzZXNzaW9uSUQsIHBhdGgsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRo
aXMpLCBzZXNzaW9uSURdKGNvbnN0IGF1dG8mIG9yaWdpbikgLT4gUmVmUHRyPFN0b3JhZ2VRdW90
YU1hbmFnZXI+IHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICByZXR1cm4gJnRoaXMtPnN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lv
bklELCBvcmlnaW4pOworCisgICAgICAgIHJldHVybiBzdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Np
b25JRCwgb3JpZ2luKTsKICAgICB9KTsKIH0KIApAQCAtMjMxNywxMyArMjMxMyw2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKCkK
ICAgICAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+ZGVsZXRlTG9jYWxTdG9yYWdlTW9kaWZpZWRT
aW5jZShQQUw6OlNlc3Npb25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpLCAtV2FsbFRpbWU6
OmluZmluaXR5KCksIFtdKCkgeyB9KTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6dXBkYXRl
UXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBhdXRvJiBtYW5hZ2VyID0gc3Rv
cmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbik7Ci0gICAgbWFuYWdlci5yZXNldFF1
b3RhKG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpLT52YWx1ZS5kZWZhdWx0
UXVvdGEob3JpZ2luKSk7Ci0gICAgbWFuYWdlci51cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdl
KCk7Ci19Ci0KICNpZiBFTkFCTEUoU0FOREJPWF9FWFRFTlNJT05TKQogdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6Z2V0U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGZpbGVuYW1lcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGVBcnJheSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKQEAgLTIzOTgsNjIgKzIzODcs
MzQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVxdWVzdFN0b3JhZ2VTcGFjZShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIGNvbnN0IENsaWVudE8KICAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OlJl
cXVlc3RTdG9yYWdlU3BhY2UgeyBzZXNzaW9uSUQsIG9yaWdpbiwgcXVvdGEsIGN1cnJlbnRTaXpl
LCBzcGFjZVJlcXVpcmVkIH0sIFdURk1vdmUoY2FsbGJhY2spLCAwKTsKIH0KIAotY2xhc3MgUXVv
dGFVc2VySW5pdGlhbGl6ZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQg
UXVvdGFVc2VySW5pdGlhbGl6ZXIoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlcikKLSAgICAg
ICAgOiBtX21hbmFnZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCi0gICAgewotICAgICAgICBtYW5h
Z2VyLmFkZFVzZXIoKnRoaXMpOwotICAgIH0KLQotICAgIH5RdW90YVVzZXJJbml0aWFsaXplcigp
Ci0gICAgewotICAgICAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICAgICAgbV9tYW5hZ2VyLT5y
ZW1vdmVVc2VyKCp0aGlzKTsKLSAgICAgICAgaWYgKG1fY2FsbGJhY2spCi0gICAgICAgICAgICBt
X2NhbGxiYWNrKCk7Ci0gICAgfQorUmVmUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IE5ldHdvcmtQ
cm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9zZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBhdXRvKiBzZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlciA9IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzLmdldChzZXNzaW9uSUQp
OworICAgIGlmICghc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpCisgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi1wcml2YXRlOgotICAgIC8vIFN0b3JhZ2VRdW90YVVzZXIgQVBJLgotICAgIHVp
bnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OlVzYWdlR2V0dGVyIHVzYWdlR2V0dGVyID0gW2NhY2hlUm9vdFBhdGggPSBzZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlci0+Y2FjaGVSb290UGF0aCgpLCBpZGJSb290UGF0aCA9IHNlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5pZGJSb290UGF0aCgpLCBvcmlnaW5dKCkgeworICAgICAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgIHZvaWQgd2hlbkluaXRpYWxpemVkKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykgZmluYWwKLSAgICB7Ci0gICAgICAg
IG1fY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKLSAgICB9CisgICAgICAgIHVpbnQ2NF90
IHVzYWdlID0gMDsKKyAgICAgICAgdXNhZ2UgKz0gQ2FjaGVTdG9yYWdlOjpFbmdpbmU6OmRpc2tV
c2FnZShjYWNoZVJvb3RQYXRoLCBvcmlnaW4pOworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQorICAgICAgICB1c2FnZSArPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlza1VzYWdlKGlkYlJv
b3RQYXRoLCBvcmlnaW4pOworI2VuZGlmCiAKLSAgICBXZWFrUHRyPFN0b3JhZ2VRdW90YU1hbmFn
ZXI+IG1fbWFuYWdlcjsKLSAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IG1fY2FsbGJhY2s7
Ci19OworICAgICAgICByZXR1cm4gdXNhZ2U7CisgICAgfTsKKyAgICBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpRdW90YUluY3JlYXNlUmVxdWVzdGVyIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBbdGhp
cywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHNlc3Npb25JRCwgb3JpZ2luXSAodWlu
dDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHJlcXVl
c3RlZEluY3JlYXNlLCBhdXRvJiYgY2FsbGJhY2spIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVF1b3RhVXNlcnMoU3Rv
cmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlciwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwgb3JpZ2luLCB1
c2VyID0gbWFrZVVuaXF1ZTxRdW90YVVzZXJJbml0aWFsaXplcj4obWFuYWdlcildKCkgbXV0YWJs
ZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHRoaXMtPmlkYlNlcnZlcihzZXNzaW9uSUQpLmluaXRpYWxpemVRdW90YVVzZXIob3JpZ2luKTsK
LSAgICAgICAgQ2FjaGVTdG9yYWdlOjpFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIoKnRoaXMs
IHNlc3Npb25JRCwgb3JpZ2luLCBbdXNlciA9IFdURk1vdmUodXNlcildIHsgfSk7Ci0gICAgfSk7
Ci19CisgICAgICAgICAgICBjYWxsYmFjayh7IH0pOwogCi1TdG9yYWdlUXVvdGFNYW5hZ2VyJiBO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQotewotICAgIGF1dG8mIHN0b3JhZ2VRdW90
YU1hbmFnZXJzID0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbXSB7
Ci0gICAgICAgIHJldHVybiBTdG9yYWdlUXVvdGFNYW5hZ2VycyB7IH07Ci0gICAgfSkuaXRlcmF0
b3ItPnZhbHVlOwotICAgIHJldHVybiAqc3RvcmFnZVF1b3RhTWFuYWdlcnMubWFuYWdlcnNQZXJP
cmlnaW4oKS5lbnN1cmUob3JpZ2luLCBbdGhpcywgJnN0b3JhZ2VRdW90YU1hbmFnZXJzLCBzZXNz
aW9uSUQsICZvcmlnaW5dIHsKLSAgICAgICAgYXV0byBtYW5hZ2VyID0gbWFrZVVuaXF1ZTxTdG9y
YWdlUXVvdGFNYW5hZ2VyPihzdG9yYWdlUXVvdGFNYW5hZ2Vycy5kZWZhdWx0UXVvdGEob3JpZ2lu
KSwgW3RoaXMsIHNlc3Npb25JRCwgb3JpZ2luXSh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3Vy
cmVudFNwYWNlLCB1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBhdXRvIGNhbGxiYWNrKSB7Ci0gICAg
ICAgICAgICB0aGlzLT5yZXF1ZXN0U3RvcmFnZVNwYWNlKHNlc3Npb25JRCwgb3JpZ2luLCBxdW90
YSwgY3VycmVudFNwYWNlLCBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAg
ICAgIH0pOwotICAgICAgICBpbml0aWFsaXplUXVvdGFVc2VycygqbWFuYWdlciwgc2Vzc2lvbklE
LCBvcmlnaW4pOwotICAgICAgICByZXR1cm4gbWFuYWdlcjsKLSAgICB9KS5pdGVyYXRvci0+dmFs
dWU7CisgICAgICAgIHJlcXVlc3RTdG9yYWdlU3BhY2Uoc2Vzc2lvbklELCBvcmlnaW4sIGN1cnJl
bnRRdW90YSwgY3VycmVudFNwYWNlLCByZXF1ZXN0ZWRJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFj
aykpOworICAgIH07CisKKyAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPmVu
c3VyZU9yaWdpblN0b3JhZ2VRdW90YU1hbmFnZXIob3JpZ2luLCBzZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlci0+ZGVmYXVsdFF1b3RhKG9yaWdpbiksIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZN
b3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBh
ZGI1Yzk3MmE0NC4uODY1ZTQ0Y2FiM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTI4Miw3ICsyODIsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9p
ZCBjbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpOwogCi0gICAgdm9pZCB1
cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgY29u
c3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgdm9pZCB1cGRhdGVRdW90YUJhc2VkT25T
cGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50
T3JpZ2luJikgeyB9CiAKICNpZiBFTkFCTEUoU0FOREJPWF9FWFRFTlNJT05TKQogICAgIHZvaWQg
Z2V0U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZp
bGVuYW1lcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVB
cnJheSYmKT4mJik7CkBAIC0zMjYsNyArMzI2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWRD
bGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQsIFVS
TCYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgbWFya0FkQ2xpY2tB
dHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOwogCi0gICAgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYg
c3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50
T3JpZ2luJik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+IHN0b3Jh
Z2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdp
biYpOwogCiAgICAgdm9pZCBhZGRLZXB0QWxpdmVMb2FkKFJlZjxOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI+JiYpOwogICAgIHZvaWQgcmVtb3ZlS2VwdEFsaXZlTG9hZChOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXImKTsKQEAgLTM4OSw3ICszODksNiBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJDYWNoZWRD
cmVkZW50aWFscygpOwogCiAgICAgdm9pZCBzZXRDYWNoZVN0b3JhZ2VQYXJhbWV0ZXJzKFBBTDo6
U2Vzc2lvbklELCBTdHJpbmcmJiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSYmKTsKLSAgICB2b2lkIGluaXRpYWxpemVRdW90YVVzZXJzKFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXImLCBQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50
T3JpZ2luJik7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdGFrZSBhIHNlc3Npb24gSUQg
c28gd2UgY2FuIGlkZW50aWZ5IHdoaWNoIGRpc2sgY2FjaGUgdG8gZGVsZXRlLgogICAgIHZvaWQg
Y2xlYXJEaXNrQ2FjaGUoV2FsbFRpbWUgbW9kaWZpZWRTaW5jZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKQEAgLTQ1OSw4ICs0NTgsNDEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBlcmZv
cm1OZXh0U3RvcmFnZVRhc2soKTsKICAgICB2b2lkIGVuc3VyZVBhdGhFeGlzdHMoY29uc3QgU3Ry
aW5nJiBwYXRoKTsKIAotICAgIHZvaWQgY2xlYXJTdG9yYWdlUXVvdGEoUEFMOjpTZXNzaW9uSUQp
OwotICAgIHZvaWQgaW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShjb25zdCBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyYpOworICAgIGNsYXNzIFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyIHsKKyAg
ICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBTZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcihjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgsIGNvbnN0
IFN0cmluZyYgaWRiUm9vdFBhdGgpCisgICAgICAgICAgICA6IG1fY2FjaGVSb290UGF0aChjYWNo
ZVJvb3RQYXRoKQorICAgICAgICAgICAgLCBtX2lkYlJvb3RQYXRoKGlkYlJvb3RQYXRoKQorICAg
ICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhKGNvbnN0IFdl
YkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKSBjb25zdCB7IHJldHVybiBvcmlnaW4udG9wT3Jp
Z2luID09IG9yaWdpbi5jbGllbnRPcmlnaW4gPyBtX2RlZmF1bHRRdW90YSA6IG1fZGVmYXVsdFRo
aXJkUGFydHlRdW90YTsgfQorICAgICAgICB2b2lkIHNldERlZmF1bHRRdW90YSh1aW50NjRfdCBk
ZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fZGVmYXVsdFF1b3RhID0gZGVmYXVsdFF1b3RhOworICAgICAgICAgICAg
bV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhID0gZGVmYXVsdFRoaXJkUGFydHlRdW90YTsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBlbnN1
cmVPcmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2VyKFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4s
IHVpbnQ2NF90IHF1b3RhLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpVc2FnZUdldHRl
ciYmIHVzYWdlR2V0dGVyLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpRdW90YUluY3Jl
YXNlUmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3RlcikgeworICAgICAgICAgICAgYXV0
byBbaXRlciwgaXNOZXdFbnRyeV0gPSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmFkZChvcmlnaW4s
IG51bGxwdHIpOworICAgICAgICAgICAgaWYgKGlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAg
aXRlci0+dmFsdWUgPSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUocXVvdGEs
IFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKTsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlUmVmUHRyKCppdGVyLT52YWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVSb290UGF0aDsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIGlkYlJvb3RQ
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9pZGJSb290UGF0aDsgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgU3RyaW5nIG1fY2FjaGVSb290UGF0aDsKKyAgICAgICAgU3RyaW5nIG1faWRiUm9vdFBh
dGg7CisgICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCkgfTsKKyAgICAgICAgdWludDY0X3QgbV9kZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRo
aXJkUGFydHlRdW90YSgpIH07CisgICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2lu
LCBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fc3RvcmFnZVF1b3RhTWFu
YWdlcnM7CisgICAgfTsKKworICAgIHZvaWQgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIo
UEFMOjpTZXNzaW9uSUQsIHVpbnQ2NF90IGRlZmF1bHRRdW90YSwgdWludDY0X3QgZGVmYXVsdFRo
aXJkUGFydHlRdW90YSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBy
ZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCk7CiAKICAgICAv
LyBDb25uZWN0aW9ucyB0byBXZWJQcm9jZXNzZXMuCiAgICAgSGFzaE1hcDxXZWJDb3JlOjpQcm9j
ZXNzSWRlbnRpZmllciwgUmVmPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPj4gbV93ZWJQ
cm9jZXNzQ29ubmVjdGlvbnM7CkBAIC01MjksMjQgKzU2MSw5IEBAIHByaXZhdGU6CiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICBib29sIG1faXNJVFBEYXRhYmFzZUVu
YWJsZWQgeyBmYWxzZSB9OwogI2VuZGlmCi0gICAgCi0gICAgY2xhc3MgU3RvcmFnZVF1b3RhTWFu
YWdlcnMgewotICAgIHB1YmxpYzoKLSAgICAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhKGNvbnN0
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKSBjb25zdCB7IHJldHVybiBvcmlnaW4udG9w
T3JpZ2luID09IG9yaWdpbi5jbGllbnRPcmlnaW4gPyBtX2RlZmF1bHRRdW90YSA6IG1fZGVmYXVs
dFRoaXJkUGFydHlRdW90YTsgfQotICAgICAgICB2b2lkIHNldERlZmF1bHRRdW90YXModWludDY0
X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2RlZmF1bHRRdW90YSA9IGRlZmF1bHRRdW90YTsKLSAgICAgICAg
ICAgIG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YSA9IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGE7Ci0g
ICAgICAgIH0KIAotICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdpbiwgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+PiYgbWFuYWdlcnNQZXJPcmln
aW4oKSB7IHJldHVybiBtX21hbmFnZXJzUGVyT3JpZ2luOyB9Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICB1aW50NjRfdCBtX2RlZmF1bHRRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OmRlZmF1bHRRdW90YSgpIH07Ci0gICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFRoaXJkUGFy
dHlRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRUaGlyZFBhcnR5
UXVvdGEoKSB9OwotICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdpbiwgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX21hbmFnZXJzUGVyT3Jp
Z2luOwotICAgIH07Ci0gICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgU3RvcmFnZVF1b3RhTWFu
YWdlcnM+IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnM7CisgICAgTG9jayBtX3Nlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2Vyc0xvY2s7CisgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlx
dWVfcHRyPFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9zZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlcnM7CiAKICAgICBPcHRpb25TZXQ8TmV0d29ya0NhY2hlOjpDYWNoZU9wdGlvbj4gbV9j
YWNoZU9wdGlvbnM7CiAgICAgV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnkgbV9t
ZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAppbmRleCBlMmJmZWRi
ZGJlYS4uYjc4MDQ2OTJmNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKQEAgLTE5OCw2ICsxOTgsNTUg
QEAgdm9pZCBFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIoTmV0d29ya1Byb2Nlc3MmIG5ldHdv
cmtQcm9jZXNzLCBQQUw6OlNlc3Npb25JRAogICAgIH0pOwogfQogCitzdGF0aWMgdWludDY0X3Qg
Z2V0RGlyZWN0b3J5U2l6ZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpCit7CisgICAgdWlu
dDY0X3QgZGlyZWN0b3J5U2l6ZSA9IDA7CisgICAgRGVxdWU8U3RyaW5nPiBwYXRoczsKKyAgICBw
YXRocy5hcHBlbmQoZGlyZWN0b3J5UGF0aCk7CisgICAgd2hpbGUgKCFwYXRocy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgYXV0byBwYXRoID0gcGF0aHMudGFrZUZpcnN0KCk7CisgICAgICAgIGlmIChG
aWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkocGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93
U3ltYm9saWNMaW5rczo6Tm8pKSB7CisgICAgICAgICAgICBhdXRvIG5ld1BhdGhzID0gRmlsZVN5
c3RlbTo6bGlzdERpcmVjdG9yeShwYXRoLCAiKiJfcyk7CisgICAgICAgICAgICBmb3IgKGF1dG8m
IG5ld1BhdGggOiBuZXdQYXRocykKKyAgICAgICAgICAgICAgICBwYXRocy5hcHBlbmQobmV3UGF0
aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb25nIGxvbmcgZmlsZVNpemUgPSAw
OworICAgICAgICAgICAgRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUocGF0aCwgZmlsZVNpemUpOwor
ICAgICAgICAgICAgZGlyZWN0b3J5U2l6ZSArPSBmaWxlU2l6ZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gZGlyZWN0b3J5U2l6ZTsKK30KKwordWludDY0X3QgRW5naW5lOjpkaXNrVXNh
Z2UoY29uc3QgU3RyaW5nJiByb290UGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBv
cmlnaW4pCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKHJvb3RQYXRo
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHJpbmcgc2FsdFBhdGggPSBG
aWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocm9vdFBhdGgsICJzYWx0Il9zKTsK
KyAgICBhdXRvIHNhbHQgPSByZWFkT3JNYWtlU2FsdChzYWx0UGF0aCk7CisgICAgaWYgKCFzYWx0
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEtleSBrZXkob3JpZ2luLnRvcE9yaWdpbi50b1N0
cmluZygpLCBvcmlnaW4uY2xpZW50T3JpZ2luLnRvU3RyaW5nKCksIHsgfSwgeyB9LCAqc2FsdCk7
CisgICAgU3RyaW5nIGRpcmVjdG9yeVBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQocm9vdFBhdGgsIGtleS5oYXNoQXNTdHJpbmcoKSk7CisKKyAgICByZXR1cm4gZ2V0
RGlyZWN0b3J5U2l6ZShkaXJlY3RvcnlQYXRoKTsKK30KKwordm9pZCBFbmdpbmU6OnJlcXVlc3RT
cGFjZShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVj
aXNpb24pPiYmIGNhbGxiYWNrKQoreworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKKyAgICAg
ICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkp
OworCisgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90
YU1hbmFnZXIgPSBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lv
bklELCBvcmlnaW4pOworICAgIGlmICghc3RvcmFnZVF1b3RhTWFuYWdlcikKKyAgICAgICAgY2Fs
bGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpOworCisg
ICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKHNwYWNlUmVx
dWVzdGVkLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKIEVuZ2luZTo6RW5naW5lKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgTmV0d29ya1Byb2Nlc3MmIHByb2Nlc3MsIFN0cmluZyYmIHJvb3RQ
YXRoKQogICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAgICwgbV9uZXR3b3JrUHJvY2Vz
cyhtYWtlV2Vha1B0cihwcm9jZXNzKSkKQEAgLTMyOSw3ICszNzgsNyBAQCB2b2lkIEVuZ2luZTo6
cmVhZENhY2hlc0Zyb21EaXNrKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBD
YWNoZXNDYWxsYgogCiAgICAgICAgIGF1dG8mIGNhY2hlcyA9IG1fY2FjaGVzLmVuc3VyZShvcmln
aW4sIFsmb3JpZ2luLCB0aGlzXSB7CiAgICAgICAgICAgICBhdXRvIHBhdGggPSBjYWNoZXNSb290
UGF0aChvcmlnaW4pOwotICAgICAgICAgICAgcmV0dXJuIENhY2hlczo6Y3JlYXRlKCp0aGlzLCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4geyBvcmlnaW4gfSwgV1RGTW92ZShwYXRoKSwgbV9uZXR3b3Jr
UHJvY2Vzcy0+c3RvcmFnZVF1b3RhTWFuYWdlcihtX3Nlc3Npb25JRCwgb3JpZ2luKSk7CisgICAg
ICAgICAgICByZXR1cm4gQ2FjaGVzOjpjcmVhdGUoKnRoaXMsIFdlYkNvcmU6OkNsaWVudE9yaWdp
biB7IG9yaWdpbiB9LCBXVEZNb3ZlKHBhdGgpKTsKICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVl
OwogCiAgICAgICAgIGlmIChjYWNoZXMtPmlzSW5pdGlhbGl6ZWQoKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmgK
aW5kZXggMTQ5MTRiNTViMmUuLjNlMzBlOTc4MmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmgKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEYXRhLmgiCiAjaW5jbHVkZSAiV2Vic2l0
ZURhdGEuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBA
IC03OSw2ICs4MCw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVRdW90
YVVzZXIoTmV0d29ya1Byb2Nlc3MmLCBQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIHN0YXRpYyB1
aW50NjRfdCBkaXNrVXNhZ2UoY29uc3QgU3RyaW5nJiByb290UGF0aCwgY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJik7CisgICAgdm9pZCByZXF1ZXN0U3BhY2UoY29uc3QgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJiwgdWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKKwogICAgIGJv
b2wgc2hvdWxkUGVyc2lzdCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pb1F1ZXVlO30KIAogICAgIHZv
aWQgd3JpdGVGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIE5ldHdvcmtDYWNoZTo6RGF0YSYm
LCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmluZGV4IDIzODc5NDE2ZmZkLi44NzMxNjZlYWQ3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VF
bmdpbmVDYWNoZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcApAQCAtNTEsMzYgKzUxLDIyIEBAIHN0YXRpYyBp
bmxpbmUgU3RyaW5nIGNhY2hlc09yaWdpbkZpbGVuYW1lKGNvbnN0IFN0cmluZyYgY2FjaGVzUm9v
dFBhdGgpCiAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChj
YWNoZXNSb290UGF0aCwgIm9yaWdpbiJfcyk7CiB9CiAKLVJlZjxDYWNoZXM+IENhY2hlczo6Y3Jl
YXRlKEVuZ2luZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmlu
ZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJiBxdW90YU1hbmFnZXIp
CitSZWY8Q2FjaGVzPiBDYWNoZXM6OmNyZWF0ZShFbmdpbmUmIGVuZ2luZSwgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCkKIHsKLSAgICBhdXRvIGNhY2hl
cyA9IGFkb3B0UmVmKCpuZXcgQ2FjaGVzIHsgZW5naW5lLCBXVEZNb3ZlKG9yaWdpbiksIFdURk1v
dmUocm9vdFBhdGgpLCBxdW90YU1hbmFnZXIgfSk7Ci0gICAgcXVvdGFNYW5hZ2VyLmFkZFVzZXIo
Y2FjaGVzLmdldCgpKTsKKyAgICBhdXRvIGNhY2hlcyA9IGFkb3B0UmVmKCpuZXcgQ2FjaGVzIHsg
ZW5naW5lLCBXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUocm9vdFBhdGgpIH0pOwogICAgIHJldHVy
biBjYWNoZXM7CiB9CiAKLUNhY2hlczo6Q2FjaGVzKEVuZ2luZSYgZW5naW5lLCBXZWJDb3JlOjpD
bGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdl
UXVvdGFNYW5hZ2VyJiBxdW90YU1hbmFnZXIpCitDYWNoZXM6OkNhY2hlcyhFbmdpbmUmIGVuZ2lu
ZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCkKICAg
ICA6IG1fZW5naW5lKCZlbmdpbmUpCiAgICAgLCBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCiAg
ICAgLCBtX3Jvb3RQYXRoKFdURk1vdmUocm9vdFBhdGgpKQotICAgICwgbV9xdW90YU1hbmFnZXIo
bWFrZVdlYWtQdHIocXVvdGFNYW5hZ2VyKSkKIHsKIH0KIAogQ2FjaGVzOjp+Q2FjaGVzKCkKIHsK
ICAgICBBU1NFUlQobV9wZW5kaW5nV3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrcy5pc0VtcHR5
KCkpOwotCi0gICAgaWYgKG1fcXVvdGFNYW5hZ2VyKQotICAgICAgICBtX3F1b3RhTWFuYWdlci0+
cmVtb3ZlVXNlcigqdGhpcyk7Ci19Ci0KLXZvaWQgQ2FjaGVzOjp3aGVuSW5pdGlhbGl6ZWQoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAgIGluaXRpYWxpemUoW2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAg
ICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKENhY2hlU3RvcmFn
ZSwgIkNhY2hlczo6aW5pdGlhbGl6ZSBmYWlsZWQsIHJlcG9ydGVkIHNwYWNlIHVzZWQgd2lsbCBi
ZSB6ZXJvIik7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgfSk7CiB9CiAKIHZvaWQgQ2FjaGVz
OjpyZXRyaWV2ZU9yaWdpbkZyb21EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBmb2xkZXJQYXRoLCBX
b3JrUXVldWUmIHF1ZXVlLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8V2Vi
Q29yZTo6Q2xpZW50T3JpZ2luPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTI2MCwxMyAr
MjQ2LDExIEBAIHZvaWQgQ2FjaGVzOjpjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIG1fc3RvcmFnZS0+Y2xlYXIoU3RyaW5nIHsgfSwg
LVdhbGxUaW1lOjppbmZpbml0eSgpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgICAgIHBy
b3RlY3RlZFRoaXMtPmNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKLSAgICAgICAgICAgIHBy
b3RlY3RlZFRoaXMtPnJlc2V0U3BhY2VVc2VkKCk7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhck1l
bW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgcmVzZXRTcGFjZVVzZWQoKTsKICAgICBjbGVhclBl
bmRpbmdXcml0aW5nQ2FjaGVzVG9EaXNrQ2FsbGJhY2tzKCk7CiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKIH0KQEAgLTUxMiwxMiArNDk2LDEwIEBAIHZvaWQgQ2FjaGVzOjpyZWFkUmVjb3Jkc0xp
c3QoQ2FjaGUmIGNhY2hlLCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlRyYXZlcnNlSGFuZGxlCiAK
IHZvaWQgQ2FjaGVzOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VSZXF1aXJlZCwgV2ViQ29y
ZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAg
IGlmICghbV9xdW90YU1hbmFnZXIpIHsKKyAgICBpZiAoIW1fZW5naW5lKQogICAgICAgICBjYWxs
YmFjayhFcnJvcjo6UXVvdGFFeGNlZWRlZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAg
ICBtX3F1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHNwYWNlUmVxdWlyZWQsIFtjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKKyAgICBtX2VuZ2lu
ZS0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCBzcGFjZVJlcXVpcmVkLCBbY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CiAgICAgICAgIHN3aXRjaCAo
ZGVjaXNpb24pIHsKICAgICAgICAgY2FzZSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6RGVueToKICAgICAgICAgICAgIGNhbGxiYWNrKEVycm9yOjpRdW90YUV4Y2VlZGVk
KTsKQEAgLTYwNSwxNSArNTg3LDYgQEAgdm9pZCBDYWNoZXM6OnJlbW92ZUNhY2hlRW50cnkoY29u
c3QgTmV0d29ya0NhY2hlOjpLZXkmIGtleSkKICAgICBtX3N0b3JhZ2UtPnJlbW92ZShrZXkpOwog
fQogCi12b2lkIENhY2hlczo6cmVzZXRTcGFjZVVzZWQoKQotewotICAgIG1fc2l6ZSA9IDA7Ci0g
ICAgaWYgKG1fcXVvdGFNYW5hZ2VyKSB7Ci0gICAgICAgIG1fcXVvdGFNYW5hZ2VyLT5yZW1vdmVV
c2VyKCp0aGlzKTsKLSAgICAgICAgbV9xdW90YU1hbmFnZXItPmFkZFVzZXIoKnRoaXMpOwotICAg
IH0KLX0KLQogdm9pZCBDYWNoZXM6OmNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKQogewogICAg
IGlmICghbV9pc0luaXRpYWxpemVkKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaAppbmRleCAz
YzQ1MWE3MjNlMS4uMDFiNWIzNjg0ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaApAQCAt
MjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkNhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmgiCiAjaW5j
bHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3Jp
Z2luLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFVc2VyLmg+CiAjaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAKQEAgLTQy
LDkgKzQxLDkgQEAgbmFtZXNwYWNlIENhY2hlU3RvcmFnZSB7CiAKIGNsYXNzIEVuZ2luZTsKIAot
Y2xhc3MgQ2FjaGVzIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FjaGVzPiwgcHJpdmF0ZSBX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyIHsKK2NsYXNzIENhY2hlcyBmaW5hbCA6IHB1YmxpYyBS
ZWZDb3VudGVkPENhY2hlcz4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2FjaGVzPiBjcmVh
dGUoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYsIFN0cmluZyYmIHJvb3RQYXRoLCBX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJik7CisgICAgc3RhdGljIFJlZjxDYWNoZXM+IGNy
ZWF0ZShFbmdpbmUmLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgp
OwogICAgIH5DYWNoZXMoKTsKIAogICAgIHN0YXRpYyB2b2lkIHJldHJpZXZlT3JpZ2luRnJvbURp
cmVjdG9yeShjb25zdCBTdHJpbmcmIGZvbGRlclBhdGgsIFdvcmtRdWV1ZSYsIFdURjo6Q29tcGxl
dGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+JiYpPiYmKTsK
QEAgLTc4LDIyICs3NywxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKFdURjo6Q29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyTWVtb3J5UmVwcmVzZW50YXRp
b24oKTsKLSAgICB2b2lkIHJlc2V0U3BhY2VVc2VkKCk7CiAKICAgICB1aW50NjRfdCBzdG9yYWdl
U2l6ZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENhY2hlcyhFbmdpbmUmLCBXZWJDb3JlOjpD
bGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXImKTsKLQotICAgIC8vIFN0b3JhZ2VRdW90YVVzZXIgQVBJLgotICAgIHVpbnQ2NF90IHNw
YWNlVXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIENhY2hlcyhFbmdp
bmUmLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgpOwogCiAgICAg
dm9pZCBpbml0aWFsaXplU2l6ZSgpOwogICAgIHZvaWQgcmVhZENhY2hlc0Zyb21EaXNrKFdURjo6
RnVuY3Rpb248dm9pZChFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBXZWJDb3JlOjpET01DYWNoZUVu
Z2luZTo6RXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIHdyaXRlQ2FjaGVzVG9EaXNrKFdlYkNvcmU6
OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAKLSAgICB2b2lkIHdoZW5J
bml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwotCiAgICAgdm9p
ZCBzdG9yZU9yaWdpbihXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNr
JiYpOwogICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IHJlYWRPcmln
aW4oY29uc3QgTmV0d29ya0NhY2hlOjpEYXRhJik7CiAKQEAgLTExOSw3ICsxMTIsNiBAQCBwcml2
YXRlOgogICAgIFZlY3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxi
YWNrPiBtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNrczsKICAgICBib29sIG1faXNXcml0
aW5nQ2FjaGVzVG9EaXNrIHsgZmFsc2UgfTsKICAgICBEZXF1ZTxDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpFcnJvcj4pPj4gbV9wZW5kaW5n
V3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrczsKLSAgICBXZWFrUHRyPFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXI+IG1fcXVvdGFNYW5hZ2VyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQ2Fj
aGVTdG9yYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycy5jcHAKaW5kZXggYzBmY2Y5YzVmNjAuLjZkMGMxMjlhNzQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCkBA
IC01NSw2ICs1NSw4IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZShJ
UEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAKICAgICBlbmNvZGVyIDw8IGxvY2FsU3RvcmFn
ZURpcmVjdG9yeSA8PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CiAKKyAg
ICBlbmNvZGVyIDw8IGNhY2hlU3RvcmFnZURpcmVjdG9yeSA8PCBjYWNoZVN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7CisKICAgICBlbmNvZGVyIDw8IHBlck9yaWdpblN0b3JhZ2VRdW90
YTsKICAgICBlbmNvZGVyIDw8IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7CiB9CkBA
IC0xNDEsNiArMTQzLDE4IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogCisgICAgT3B0aW9uYWw8U3RyaW5nPiBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAg
ZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VE
aXJlY3RvcnkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcGFyYW1ldGVycy5j
YWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZNb3ZlKCpjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOwor
CisgICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBjYWNoZVN0b3JhZ2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcGFyYW1ldGVycy5j
YWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjYWNoZVN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworCiAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHBl
ck9yaWdpblN0b3JhZ2VRdW90YTsKICAgICBkZWNvZGVyID4+IHBlck9yaWdpblN0b3JhZ2VRdW90
YTsKICAgICBpZiAoIXBlck9yaWdpblN0b3JhZ2VRdW90YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IDA5NWYwOWQ2YWY5Li5m
MjdkZjQ4OTgwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycy5oCkBAIC03MSw2ICs3MSw5IEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyB7CiAgICAgU3RyaW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUgbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OwogCisgICAgU3RyaW5nIGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUgY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworCiAgICAg
dWludDY0X3QgcGVyT3JpZ2luU3RvcmFnZVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFu
YWdlcjo6ZGVmYXVsdFF1b3RhKCkgfTsKICAgICB1aW50NjRfdCBwZXJUaGlyZFBhcnR5T3JpZ2lu
U3RvcmFnZVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRoaXJk
UGFydHlRdW90YSgpIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCmluZGV4IDhlY2M0MjBiYTE5Li4wZmZkOWE5NGI1ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtNTUyLDYgKzU1MiwxMiBAQCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0
ZURhdGFTdG9yZSogd2l0aAogICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwogICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9j
YWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIAorICAgIGF1dG8gY2FjaGVTdG9y
YWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5j
YWNoZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKKyAgICBpZiAoIWNhY2hlU3Rv
cmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBjYWNoZVN0b3JhZ2VEaXJl
Y3Rvcnk7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0
ZURpcmVjdG9yeShjYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAg
ICB9CisKICAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQogICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBpZiAocGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0
b3JlQ29jb2EubW0KaW5kZXggMjllOTAwM2YwNDYuLjg3MDYyYWJkNmM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3Jl
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2Ev
V2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCkBAIC0xOTAsNiArMTkwLDEwIEBAIFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogICAgIGlmICgh
cGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQogICAgICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVy
cy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKIAorICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
ID0gY2FjaGVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgaWYgKCFwYXJhbWV0ZXJzLmNhY2hlU3Rv
cmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwor
CiAgICAgcGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBwZXJPcmlnaW5TdG9yYWdl
UXVvdGEoKTsKICAgICBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEg
PSBwZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5k
ZXggMmRmOWQ3Zjk5YzkuLjIwZDJkZDQ3NDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMjA3Nyw2
ICsyMDc3LDEyIEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6
OnBhcmFtZXRlcnMoKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JS
ZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2Fs
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgfQogCisgICAgYXV0byBjYWNo
ZVN0b3JhZ2VEaXJlY3RvcnkgPSB0aGlzLT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBp
ZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcGFyYW1ldGVy
cy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNo
ZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKKyAgICB9CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBw
YXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IHJlc29sdmVkSW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5KCk7CiAgICAgaWYgKCFwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDU1M2ZjOTEwYTM1Li5m
YjkwZjg5ZjI1YyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcyNyw3ICs3MjcsNiBAQAog
CQk5MzZGNzI4MTFDRDdEOUVDMDA2OEEwRkIgLyogbGFyZ2UtdmlkZW8td2l0aC1hdWRpby5tcDQg
aW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM2
RjcyN0YxQ0Q3RDlEMDAwNjhBMEZCIC8qIGxhcmdlLXZpZGVvLXdpdGgtYXVkaW8ubXA0ICovOyB9
OwogCQk5M0FGNEVDRTE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0FGNEVDRDE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgKi87IH07CiAJCTkzQUY0RUQx
MTUwNkYxMzAwMDdGRDU3RSAvKiBsb3RzLW9mLWltYWdlcy5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNGMTUwNkYxMjMwMDdG
RDU3RSAvKiBsb3RzLW9mLWltYWdlcy5odG1sICovOyB9OwotCQk5M0I2MjA1NDIzNEVBNjJDMDBE
NDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I2MjA1MzIzNEVBMzJCMDBENDlCOTcgLyogU3RvcmFn
ZVF1b3RhTWFuYWdlci5jcHAgKi87IH07CiAJCTkzQ0ZBODY3MUNFQjlFMzgwMDA1NjVBOCAvKiBh
dXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDRkE4NjYxQ0VCOURFMTAwMDU2NUE4IC8qIGF1dG9m
b2N1c2VkLXRleHQtaW5wdXQuaHRtbCAqLzsgfTsKIAkJOTNEMTE5RkMyMkM2ODBGNzAwOUJFM0M3
IC8qIGxvY2Fsc3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwgaW4gQ29weSBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNEMTE5RkIyMkM1NzExMjAw
OUJFM0M3IC8qIGxvY2Fsc3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwgKi87IH07CiAJ
CTkzRTJDNTU1MUZEMzIwNDEwMEUxREY2QSAvKiBMaW5lRW5kaW5nLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTJDNTU0MUZEMzIwNDEwMEUxREY2
QSAvKiBMaW5lRW5kaW5nLmNwcCAqLzsgfTsKQEAgLTIxMjAsNyArMjExOSw2IEBACiAJCTkzQUY0
RUNBMTUwNkYwMzUwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJ
bWFnZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV3Rmlyc3RW
aXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNBRjRFQ0QxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQUY0RUNGMTUwNkYxMjMwMDdG
RDU3RSAvKiBsb3RzLW9mLWltYWdlcy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0g
ImxvdHMtb2YtaW1hZ2VzLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0I2
MjA1MzIzNEVBMzJCMDBENDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDRkE4NjYxQ0VCOURFMTAwMDU2NUE4IC8qIGF1
dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJh
dXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5M0NGQTg2ODFDRUJDRkVEMDAwNTY1QTggLyogQ2FuZGlkYXRlVGVzdHMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDYW5kaWRhdGVUZXN0cy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNEMTE5RkIyMkM1NzExMjAwOUJFM0M3IC8qIGxvY2Fs
c3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBh
dGggPSAibG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0zMDg5LDcgKzMwODcsNiBAQAogCQkJCTQxOTczQjVDMUFGMjI4
NzUwMDZDN0IzNiAvKiBTaGFyZWRCdWZmZXIuY3BwICovLAogCQkJCUExNzk5MTg5MUUxQ0EyNDEw
MEE1MDVFRCAvKiBTaGFyZWRCdWZmZXJUZXN0LmNwcCAqLywKIAkJCQlBMTc5OTE4QTFFMUNBMjQx
MDBBNTA1RUQgLyogU2hhcmVkQnVmZmVyVGVzdC5oICovLAotCQkJCTkzQjYyMDUzMjM0RUEzMkIw
MEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLywKIAkJCQlFQ0E2ODBDRDFFNjhD
QzA5MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLm1tICovLAogCQkJCUNFNEQ1REU1MUY2NzQz
QkEwMDcyQ0ZDNiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmNwcCAqLywKIAkJCQk5M0EyNTg5ODFG
OTJGRjE1MDAzRTUxMEMgLyogVGV4dENvZGVjLmNwcCAqLywKQEAgLTQ4MTgsNyArNDgxNSw2IEBA
CiAJCQkJN0NDRTdFQ0YxQTQxMUE3RTAwNDQ3QzRDIC8qIFN0b3BMb2FkaW5nRnJvbURpZFJlY2Vp
dmVSZXNwb25zZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEQzA5MzJFMjFDOTkzNDQwMDMwQzRC
MCAvKiBTdG9wU3VzcGVuZFJlc3VtZUFsbE1lZGlhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE0
QUQ2ODYyMjg1RDFDMDAwNzc3RjJEIC8qIFN0b3JhZ2VRdW90YS5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTkzQjYyMDU0MjM0RUE2MkMwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUxNUJFMTcxMUQ0MjhFNEIwMEREN0M2OCAvKiBTdG9yZUJsb2JU
aGVuRGVsZXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRDAxQTQxMUE3RTAwNDQ3QzRD
IC8qIFN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0NDRTdFRDExQTQxMUE3RTAwNDQ3QzRDIC8qIFN0cmluZ1RydW5jYXRvci5tbSBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhZDFjNjdiZjA1Mi4uMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTAzICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0q
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9TdG9yYWdlUXVvdGFVc2VyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1u
YW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KLXN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFF1b3Rh
ID0gMSAqIEtCOwotCi1jbGFzcyBNb2NrUXVvdGFVc2VyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6
OlN0b3JhZ2VRdW90YVVzZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IE1vY2tRdW90YVVzZXIo
U3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlcikKLSAgICAgICAgOiBtX21hbmFnZXIoJm1hbmFn
ZXIpCi0gICAgewotICAgICAgICBtYW5hZ2VyLmFkZFVzZXIoKnRoaXMpOwotICAgIH0KLQotICAg
IHZvaWQgc2V0U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCkgeyBtX3NwYWNlVXNlZCA9IHNw
YWNlVXNlZDsgfQotCi1wcml2YXRlOgotICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZp
bmFsCi0gICAgewotICAgICAgICByZXR1cm4gbV9zcGFjZVVzZWQ7Ci0gICAgfQotCi0gICAgdm9p
ZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSBm
aW5hbAotICAgIHsKLSAgICAgICAgaWYgKCFtX3NwYWNlVXNlZCkKLSAgICAgICAgICAgIEFTU0VS
VF9FUShtX21hbmFnZXItPnN0YXRlKCksIFN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0YXRlOjpVbmlu
aXRpYWxpemVkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUX0VRKG1fbWFuYWdl
ci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNl
ZCk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdXNhZ2UgdG8gbW9jayBkZWxldGlvbi4KLSAgICAgICAg
bV9zcGFjZVVzZWQgPSAwOwotICAgICAgICBjYWxsYmFjaygpOwotICAgIH0KLQotICAgIHVpbnQ2
NF90IG1fc3BhY2VVc2VkIHsgMCB9OwotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1fbWFuYWdl
cjsKLX07Ci0gICAgCi1URVNUKFN0b3JhZ2VRdW90YU1hbmFnZXJUZXN0LCBCYXNpYykKLXsKLSAg
ICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyID0gbnVsbHB0cjsK
LSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyIHN0b3JhZ2VRdW90YU1hbmFnZXIoZGVmYXVsdFF1b3Rh
LCBbJnN0b3JhZ2VRdW90YU1hbmFnZXJQdHJdKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJy
ZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
T3B0aW9uYWw8dWludDY0X3Q+KT4mJiBjb21wbGV0aW9uSGFubGRlcikgewotICAgICAgICBBU1NF
UlRfVFJVRShzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyKTsKLSAgICAgICAgQVNTRVJUX0VRKHN0b3Jh
Z2VRdW90YU1hbmFnZXJQdHItPnN0YXRlKCksIFN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0YXRlOjpX
YWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlKTsKLQotICAgICAgICAvLyBBbGxvdyBhbGwg
c3BhY2UgaW5jcmVhc2UgcmVxdWVzdHMuCi0gICAgICAgIGNvbXBsZXRpb25IYW5sZGVyKHNwYWNl
SW5jcmVhc2UgKyBjdXJyZW50U3BhY2UpOwotICAgIH0pOwotICAgIHN0b3JhZ2VRdW90YU1hbmFn
ZXJQdHIgPSAmc3RvcmFnZVF1b3RhTWFuYWdlcjsKLQotCi0gICAgTW9ja1F1b3RhVXNlciBtb2Nr
VXNlcihzdG9yYWdlUXVvdGFNYW5hZ2VyKTsKLQotICAgIC8vIEdyYW50IGRpcmVjdGx5LgotICAg
IHN0b3JhZ2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDAuMSAqIEtCLCBbJl0oV2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNpb24pIHsKLSAgICAgICAgQVNTRVJU
X0VRKGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3Jh
bnQpOwotICAgICAgICBtb2NrVXNlci5zZXRTcGFjZVVzZWQoMC4xICogS0IpOwotICAgIH0pOwot
Ci0gICAgLy8gR3JhbnQgYWZ0ZXIgY29tcHV0aW5nIGFjY3VyYXRlIHVzYWdlLgotICAgIHN0b3Jh
Z2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDEuMCAqIEtCLCBbJl0oV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNpb24pIHsKLSAgICAgICAgQVNTRVJUX0VRKGRl
Y2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQpOwot
ICAgICAgICBtb2NrVXNlci5zZXRTcGFjZVVzZWQoMS4wICogS0IpOwotICAgIH0pOwotCi0gICAg
Ly8gR3JhbnQgYWZ0ZXIgY29tcHV0aW5nIGFjY3VyYXRlIHVzYWdlIGFuZCByZXF1ZXN0aW5nIHNw
YWNlIGluY3JlYXNlLgotICAgIHN0b3JhZ2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDEwICog
S0IsIFsmXShXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNpc2lvbikg
ewotICAgICAgICBBU1NFUlRfRVEoc3RvcmFnZVF1b3RhTWFuYWdlclB0ci0+c3RhdGUoKSwgU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdCk7Ci0gICAg
ICAgIEFTU0VSVF9FUShkZWNpc2lvbiwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVj
aXNpb246OkdyYW50KTsKLSAgICB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383365</attachid>
            <date>2019-11-12 10:50:21 -0800</date>
            <delta_ts>2019-11-12 13:31:54 -0800</delta_ts>
            <desc>WIP2</desc>
            <filename>WIP2</filename>
            <type>text/plain</type>
            <size>146626</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5jcHAKaW5kZXggZTYxZGI4Yzk0MjguLjAwODM0YmYyZWQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAt
NDYsMjQgKzQ2LDI0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCU2VydmVy
IHsKIAotUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitSZWY8SURC
U2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0b3Jh
Z2VRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiB7CiAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgSURCU2VydmVyKHNlc3Npb25JRCwgV1RGTW92ZShxdW90YU1hbmFnZXJH
ZXR0ZXIpKSk7CiB9CiAKLVJlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1
b3RhTWFuYWdlckdldHRlciYmIHF1b3RhTWFuYWdlckdldHRlcikKK1JlZjxJREJTZXJ2ZXI+IElE
QlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1h
bmFnZXJHZXR0ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCU2VydmVyKHNlc3Np
b25JRCwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBXVEZNb3ZlKHF1b3RhTWFuYWdlckdldHRlcikp
KTsKIH0KIAotSURCU2VydmVyOjpJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBR
dW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitJREJTZXJ2ZXI6OklEQlNl
cnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIm
JiBxdW90YU1hbmFnZXJHZXR0ZXIpCiAgICAgOiBDcm9zc1RocmVhZFRhc2tIYW5kbGVyKCJJbmRl
eGVkRGF0YWJhc2UgU2VydmVyIiwgQXV0b2RyYWluZWRQb29sRm9yUnVuTG9vcDo6VXNlKQogICAg
ICwgbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAgICwgbV9xdW90YU1hbmFnZXJHZXR0ZXIoV1RG
TW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKQogewogfQogCi1JREJTZXJ2ZXI6OklEQlNlcnZlcihQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoLCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitJREJTZXJ2ZXI6
OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2Vy
R2V0dGVyKQogICAgIDogQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlcigiSW5kZXhlZERhdGFiYXNlIFNl
cnZlciIsIEF1dG9kcmFpbmVkUG9vbEZvclJ1bkxvb3A6OlVzZSkKICAgICAsIG1fc2Vzc2lvbklE
KHNlc3Npb25JRCkKICAgICAsIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKGRhdGFiYXNlRGlyZWN0
b3J5UGF0aCkKQEAgLTY4MywxNTcgKzY4MywyOCBAQCB2b2lkIElEQlNlcnZlcjo6cGVyZm9ybUNs
b3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcgog
CiB2b2lkIElEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzKHVpbnQ2
NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgZm9yIChhdXRvJiB1c2VyIDogbV9xdW90YVVzZXJzLnZh
bHVlcygpKQotICAgICAgICB1c2VyLT5yZXNldFNwYWNlVXNlZCgpOwotCiAgICAgYXV0byBjYWxs
YmFjayA9IG1fZGVsZXRlRGF0YWJhc2VDb21wbGV0aW9uSGFuZGxlcnMudGFrZShjYWxsYmFja0lE
KTsKICAgICBBU1NFUlQoY2FsbGJhY2spOwogICAgIGNhbGxiYWNrKCk7CiB9CiAKLUlEQlNlcnZl
cjo6UXVvdGFVc2VyOjpRdW90YVVzZXIoSURCU2VydmVyJiBzZXJ2ZXIsIFN0b3JhZ2VRdW90YU1h
bmFnZXIqIG1hbmFnZXIsIENsaWVudE9yaWdpbiYmIG9yaWdpbikKLSAgICA6IG1fc2VydmVyKHNl
cnZlcikKLSAgICAsIG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKLSAgICAsIG1fb3Jp
Z2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAsIG1faXNJbml0aWFsaXplZChtX3NlcnZlci5tX3Nl
c3Npb25JRC5pc0VwaGVtZXJhbCgpKQotewotICAgIGlmIChtYW5hZ2VyKQotICAgICAgICBtYW5h
Z2VyLT5hZGRVc2VyKCp0aGlzKTsKLX0KLQotSURCU2VydmVyOjpRdW90YVVzZXI6On5RdW90YVVz
ZXIoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+cmVtb3ZlVXNl
cigqdGhpcyk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2Vk
KCkKLXsKLSAgICBtX3NwYWNlVXNlZCA9IDA7Ci0KLSAgICBpZiAoIW1fbWFuYWdlcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2VydmVyLm1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1faW5pdGlhbGl6YXRpb25DYWxsYmFjayk7Ci0KLSAgICBt
X2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIC8vIERvIGFkZC9yZW1vdmUgdG8gdHJpZ2dl
ciBjYWxsIHRvIHdoZW5Jbml0aWFsaXplZC4KLSAgICBtX21hbmFnZXItPnJlbW92ZVVzZXIoKnRo
aXMpOwotICAgIG1fbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7Ci19Ci0KLXZvaWQgSURCU2VydmVy
OjpRdW90YVVzZXI6OmNvbXB1dGVTcGFjZVVzZWQoKQotewotICAgIHJlc2V0U3BhY2VVc2VkKCk7
Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKHVpbnQ2
NF90IHNpemUpCi17Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQobV9zcGFjZVVzZWQgKyBzaXplID4gbV9zcGFjZVVzZWQpOwotICAgIG1fc3Bh
Y2VVc2VkICs9IHNpemU7Ci19Ci12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpkZWNyZWFzZVNw
YWNlVXNlZCh1aW50NjRfdCBzaXplKQotewotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAg
ICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fc3BhY2VVc2VkID49IHNpemUpOwotICAgIG1fc3Bh
Y2VVc2VkIC09IHNpemU7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OndoZW5Jbml0
aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCi17Ci0gICAgaWYg
KG1faXNJbml0aWFsaXplZCkgewotICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIG1faW5pdGlhbGl6YXRpb25DYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
OwotICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKG1fb3JpZ2lu
KTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5pdGlhbGl6ZVNwYWNlVXNlZCh1
aW50NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCB8fCAhbV9l
c3RpbWF0ZWRTcGFjZUluY3JlYXNlKTsKLSAgICBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsKLSAg
ICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgaWYgKGF1dG8gY2FsbGJhY2sgPSBXVEZN
b3ZlKG1faW5pdGlhbGl6YXRpb25DYWxsYmFjaykpCi0gICAgICAgIGNhbGxiYWNrKCk7Ci19Ci0K
LUlEQlNlcnZlcjo6UXVvdGFVc2VyJiBJREJTZXJ2ZXI6OmVuc3VyZVF1b3RhVXNlcihjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICByZXR1cm4gKm1fcXVvdGFVc2Vycy5lbnN1cmUo
b3JpZ2luLCBbdGhpcywgJm9yaWdpbl0gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxRdW90
YVVzZXI+KCp0aGlzLCBtX3F1b3RhTWFuYWdlckdldHRlcihtX3Nlc3Npb25JRCwgb3JpZ2luKSwg
Q2xpZW50T3JpZ2luIHsgb3JpZ2luIH0pOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLX0KLQot
dm9pZCBJREJTZXJ2ZXI6OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENs
aWVudE9yaWdpbiYgb3JpZ2luKQotewotICAgIEFTU0VSVCghbV9zZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZJREJTZXJ2ZXI6OmNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4sIG9yaWdpbikpOwotfQotCi12
b2lkIElEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmln
aW4mIG9yaWdpbikKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIElEQlNlcnZlcjo6cmVx
dWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0YXNrU2l6ZSkK
IHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBSZWZQdHI8U3RvcmFnZVF1b3Rh
TWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fcXVvdGFNYW5hZ2VyR2V0dGVyKG9yaWdp
bik7CisgICAgaWYgKCFzdG9yYWdlUXVvdGFNYW5hZ2VyKQorICAgICAgICByZXR1cm4gU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk7CiAKLSAgICBhdXRvIGRhdGFiYXNlRGlyZWN0
b3J5UGF0aCA9IHRoaXMtPmRhdGFiYXNlRGlyZWN0b3J5UGF0aElzb2xhdGVkQ29weSgpOwotICAg
IGF1dG8gb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6
ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4u
Y2xpZW50T3JpZ2luLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsICJ2MCIpOwotICAgIGF1dG8gbmV3
VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VE
aXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3Jp
Z2luLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsICJ2MSIpOwotICAgIGF1dG8gc2l6ZSA9IFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShvbGRWZXJzaW9uT3Jp
Z2luRGlyZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRp
cmVjdG9yeShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKLQotICAgIHBvc3REYXRhYmFzZVRh
c2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmZpbmlzaENv
bXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbiwgb3JpZ2luLCBzaXplKSk7Ci19Ci0KLXZvaWQgSURC
U2VydmVyOjpmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3Jp
Z2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlVXNlZCkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIo
b3JpZ2luKS5pbml0aWFsaXplU3BhY2VVc2VkKHNwYWNlVXNlZCk7CisgICAgcmV0dXJuIHN0b3Jh
Z2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCh0YXNrU2l6ZSk7
CiB9CiAKLXZvaWQgSURCU2VydmVyOjpyZXF1ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VR
dW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJiBjYWxsYmFjaykKK3VpbnQ2NF90IElEQlNlcnZlcjo6
ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdERpcmVjdG9yeSwgY29uc3QgQ2xpZW50T3JpZ2lu
JiBvcmlnaW4pCiB7Ci0gICAgYXV0byogcXVvdGFNYW5hZ2VyID0gZW5zdXJlUXVvdGFVc2VyKG9y
aWdpbikubWFuYWdlcigpOwotICAgIGlmICghcXVvdGFNYW5hZ2VyKSB7Ci0gICAgICAgIGNhbGxi
YWNrKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHRhc2tTaXplLCBXVEZN
b3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpyZXNldFNwYWNlVXNlZChjb25z
dCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBpZiAoYXV0byogdXNlciA9IG1fcXVvdGFV
c2Vycy5nZXQob3JpZ2luKSkKLSAgICAgICAgdXNlci0+cmVzZXRTcGFjZVVzZWQoKTsKLX0KLQot
dm9pZCBJREJTZXJ2ZXI6OmluY3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3Jp
Z2luLCB1aW50NjRfdCBzaXplKQotewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmluY3Jl
YXNlU3BhY2VVc2VkKHNpemUpOwotfQotCi12b2lkIElEQlNlcnZlcjo6ZGVjcmVhc2VTcGFjZVVz
ZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNpemUpCi17Ci0gICAgZW5z
dXJlUXVvdGFVc2VyKG9yaWdpbikuZGVjcmVhc2VTcGFjZVVzZWQoc2l6ZSk7Ci19Ci0KLXZvaWQg
SURCU2VydmVyOjppbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4m
IG9yaWdpbiwgdWludDY0X3QgdGFza1NpemUpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdp
bikuaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodGFza1NpemUpOwotfQorICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwogCi12b2lkIElEQlNlcnZlcjo6ZGVjcmVhc2VQb3RlbnRpYWxTcGFj
ZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlVXNlZCkKLXsK
LSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5kZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChz
cGFjZVVzZWQpOworICAgIGF1dG8gb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRhdGFi
YXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9w
T3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCByb290RGlyZWN0b3J5LCAidjAiKTsKKyAgICBh
dXRvIG5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZpZXI6OmRh
dGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3JpZ2luLmNs
aWVudE9yaWdpbiwgcm9vdERpcmVjdG9yeSwgInYxIik7CisgICAgcmV0dXJuIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShvbGRWZXJzaW9uT3JpZ2luRGly
ZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9y
eShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKIH0KIAogdm9pZCBJREJTZXJ2ZXI6OnVwZ3Jh
ZGVGaWxlc0lmTmVjZXNzYXJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCBkM2EyMjNkOTMyZC4uYmYyYjQ3ODg0NTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJJREJDb25uZWN0aW9uVG9DbGll
bnQuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTdG9y
YWdlUXVvdGFNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiU3RvcmFnZVF1b3RhVXNlci5oIgogI2luY2x1
ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uLmgiCiAjaW5jbHVkZSA8cGFsL0h5c3RlcmVzaXNBY3Rpdml0eS5oPgpAQCAtNTgsOSAr
NTcsOSBAQCBlbnVtIGNsYXNzIFNob3VsZEZvcmNlU3RvcCA6IGJvb2wgeyBObywgWWVzIH07CiAK
IGNsYXNzIElEQlNlcnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlNlcnZlcj4sIHB1YmxpYyBD
cm9zc1RocmVhZFRhc2tIYW5kbGVyLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8SURCU2VydmVyPiB7
CiBwdWJsaWM6Ci0gICAgdXNpbmcgUXVvdGFNYW5hZ2VyR2V0dGVyID0gV1RGOjpGdW5jdGlvbjxT
dG9yYWdlUXVvdGFNYW5hZ2VyKihQQUw6OlNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJik+
OwotICAgIHN0YXRpYyBSZWY8SURCU2VydmVyPiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIFF1b3Rh
TWFuYWdlckdldHRlciYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPElEQlNlcnZl
cj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5
UGF0aCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOworICAgIHVzaW5nIFN0b3JhZ2VRdW90YU1hbmFn
ZXJHZXR0ZXIgPSBXVEY6OkZ1bmN0aW9uPFJlZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPihjb25z
dCBDbGllbnRPcmlnaW4mKT47CisgICAgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6
OlNlc3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlckdldHRlciYmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBjb25zdCBT
dHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgU3RvcmFnZVF1b3RhTWFuYWdlckdldHRlciYm
KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5l
Y3Rpb25Ub0NsaWVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdW5yZWdpc3RlckNvbm5l
Y3Rpb24oSURCQ29ubmVjdGlvblRvQ2xpZW50Jik7CkBAIC0xMTEsMjEgKzExMCwxNSBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbG9zZUFuZERlbGV0ZURhdGFiYXNlc01vZGlm
aWVkU2luY2UoV2FsbFRpbWUsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmln
aW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiwgRnVuY3Rpb248dm9pZCAoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICB2b2lkIHJlcXVlc3RTcGFjZShjb25zdCBDbGll
bnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYpOwotICAgIHZvaWQgaW5jcmVhc2VQb3RlbnRp
YWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUpOwotICAg
IHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWlu
dDY0X3QgdGFza1NpemUpOwotICAgIHZvaWQgaW5jcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50
T3JpZ2luJiwgdWludDY0X3Qgc2l6ZSk7Ci0gICAgdm9pZCBkZWNyZWFzZVNwYWNlVXNlZChjb25z
dCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzaXplKTsKLSAgICB2b2lkIHJlc2V0U3BhY2VVc2Vk
KGNvbnN0IENsaWVudE9yaWdpbiYpOwotCi0gICAgdm9pZCBpbml0aWFsaXplUXVvdGFVc2VyKGNv
bnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKSB7IGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pOyB9Cisg
ICAgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gcmVxdWVzdFNwYWNlKGNvbnN0IENsaWVu
dE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dWludDY0X3QgZGlza1VzYWdlKGNvbnN0IFN0cmluZyYsIGNvbnN0IENsaWVudE9yaWdpbiYpOwog
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0cnlTdG9wKFNob3VsZEZvcmNlU3RvcCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZXN1bWUoKTsKIAogcHJpdmF0ZToKLSAgICBJREJTZXJ2ZXIo
UEFMOjpTZXNzaW9uSUQsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKLSAgICBJREJTZXJ2ZXIoUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBRdW90YU1h
bmFnZXJHZXR0ZXImJik7CisgICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBTdG9yYWdlUXVv
dGFNYW5hZ2VyR2V0dGVyJiYpOworICAgIElEQlNlcnZlcihQQUw6OlNlc3Npb25JRCwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIm
Jik7CiAKICAgICBVbmlxdWVJREJEYXRhYmFzZSYgZ2V0T3JDcmVhdGVVbmlxdWVJREJEYXRhYmFz
ZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKICAgICAKQEAgLTE0Miw1MSArMTM1LDYg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZURhdGFiYXNlc01vZGlmaWVkU2luY2VGb3JWZXJz
aW9uKFdhbGxUaW1lLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHJlbW92ZURhdGFiYXNlc1dp
dGhPcmlnaW5zRm9yVmVyc2lvbihjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIGNv
bnN0IFN0cmluZyYpOwogCi0gICAgY2xhc3MgUXVvdGFVc2VyIGZpbmFsIDogcHVibGljIFN0b3Jh
Z2VRdW90YVVzZXIgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIFF1b3RhVXNlcihJREJTZXJ2ZXImLCBTdG9yYWdlUXVvdGFNYW5hZ2VyKiwg
Q2xpZW50T3JpZ2luJiYpOwotICAgICAgICB+UXVvdGFVc2VyKCk7Ci0KLSAgICAgICAgU3RvcmFn
ZVF1b3RhTWFuYWdlciogbWFuYWdlcigpIHsgcmV0dXJuIG1fbWFuYWdlci5nZXQoKTsgfQotCi0g
ICAgICAgIHZvaWQgc2V0U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCkgeyBtX3NwYWNlVXNl
ZCA9IHNwYWNlVXNlZDsgfQotICAgICAgICB2b2lkIHJlc2V0U3BhY2VVc2VkKCk7Ci0KLSAgICAg
ICAgdm9pZCBpbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRfdCBpbmNyZWFzZSkgeyBt
X2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgKz0gaW5jcmVhc2U7IH0KLSAgICAgICAgdm9pZCBkZWNy
ZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRfdCBkZWNyZWFzZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSA+PSBkZWNyZWFzZSk7Ci0g
ICAgICAgICAgICBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgLT0gZGVjcmVhc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgdm9pZCBpbmNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKTsKLSAgICAg
ICAgdm9pZCBkZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKTsKLQotICAgICAgICB2b2lk
IGluaXRpYWxpemVTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKTsKLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOwotICAgICAgICAgICAgcmV0dXJuIG1f
c3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlOwotICAgICAgICB9Ci0gICAgICAg
IHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgpIGZpbmFsOwotICAgICAgICB2b2lkIHdoZW5Jbml0aWFs
aXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwotCi0gICAgICAgIElEQlNl
cnZlciYgbV9zZXJ2ZXI7Ci0gICAgICAgIFdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gbV9t
YW5hZ2VyOwotICAgICAgICBDbGllbnRPcmlnaW4gbV9vcmlnaW47Ci0gICAgICAgIGJvb2wgbV9p
c0luaXRpYWxpemVkIHsgZmFsc2UgfTsKLSAgICAgICAgdWludDY0X3QgbV9zcGFjZVVzZWQgeyAw
IH07Ci0gICAgICAgIHVpbnQ2NF90IG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSB7IDAgfTsKLSAg
ICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2s7
Ci0gICAgfTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIFF1b3RhVXNlciYgZW5zdXJlUXVvdGFVc2Vy
KGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZvaWQgc3RhcnRDb21wdXRpbmdTcGFjZVVzZWRG
b3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJik7Ci0gICAgdm9pZCBjb21wdXRlU3BhY2VVc2Vk
Rm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZvaWQgZmluaXNoQ29tcHV0aW5n
U3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNwYWNlVXNl
ZCk7Ci0KICAgICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKICAgICBIYXNoTWFwPElEQkNv
bm5lY3Rpb25JZGVudGlmaWVyLCBSZWZQdHI8SURCQ29ubmVjdGlvblRvQ2xpZW50Pj4gbV9jb25u
ZWN0aW9uTWFwOwogICAgIEhhc2hNYXA8SURCRGF0YWJhc2VJZGVudGlmaWVyLCBzdGQ6OnVuaXF1
ZV9wdHI8VW5pcXVlSURCRGF0YWJhc2U+PiBtX3VuaXF1ZUlEQkRhdGFiYXNlTWFwOwpAQCAtMTk4
LDggKzE0Niw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgbV9kYXRhYmFzZURpcmVjdG9yeVBh
dGg7CiAKLSAgICBIYXNoTWFwPENsaWVudE9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFF1b3RhVXNl
cj4+IG1fcXVvdGFVc2VyczsKLSAgICBRdW90YU1hbmFnZXJHZXR0ZXIgbV9xdW90YU1hbmFnZXJH
ZXR0ZXI7CisgICAgU3RvcmFnZVF1b3RhTWFuYWdlckdldHRlciBtX3F1b3RhTWFuYWdlckdldHRl
cjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5j
cHAKaW5kZXggZmRlZGE2MzVlYjcuLjk0YTI1NGE1OTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5jcHAKQEAgLTE4Niw1NiArMTg2LDYgQEAgc3RhdGljIGlubGluZSBTdHJpbmcgcXVvdGFFcnJv
ck1lc3NhZ2VOYW1lKGNvbnN0IGNoYXIqIHRhc2tOYW1lKQogICAgIHJldHVybiBtYWtlU3RyaW5n
KCJGYWlsZWQgdG8gIiwgdGFza05hbWUsICIgaW4gZGF0YWJhc2UgYmVjYXVzZSBub3QgZW5vdWdo
IHNwYWNlIGZvciBkb21haW4iKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVxdWVz
dFNwYWNlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRf
dCB0YXNrU2l6ZSwgY29uc3QgY2hhciogdGFza05hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SURCRXJyb3ImJik+JiYgY2FsbGJhY2spCi17Ci0gICAgbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZSht
X2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0
aGlzKSwgdGhpcywgd2Vha1RyYW5zYWN0aW9uID0gbWFrZVdlYWtQdHIodHJhbnNhY3Rpb24pLCB0
YXNrTmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBkZWNpc2lvbikgbXV0
YWJsZSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKElE
QkVycm9yIHsgVW5rbm93bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCF3ZWFrVHJhbnNhY3Rpb24pIHsKLSAgICAgICAgICAgIGNhbGxiYWNr
KElEQkVycm9yIHsgVW5rbm93bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX293bmluZ1BvaW50ZXJGb3JDbG9zZSkgewotICAgICAgICAgICAg
Ly8gV2UgYXJlIGNsb3NpbmcgdGhlIGRhdGFiYXNlLCB0aGVyZSBpcyBubyBwb2ludCBpbiB0cnlp
bmcgdG8gbW9kaWZ5IHRoZSBkYXRhYmFzZSBhdCB0aGF0IHBvaW50LgotICAgICAgICAgICAgY2Fs
bGJhY2soSURCRXJyb3IgeyBVbmtub3duRXJyb3IgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7Ci0gICAgICAgIGNhc2UgU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk6Ci0gICAgICAgICAgICBjYWxsYmFjayhJ
REJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKHRhc2tO
YW1lKSB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQ6Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7
IH0pOwotICAgICAgICB9OwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjp3
YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJiBjYWxs
YmFjaykKLXsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIDAsICIiLCBXVEZNb3ZlKGNh
bGxiYWNrKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFz
ZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgdGFza1NpemUpCi17Ci0gICAgbV9z
ZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwg
dGFza1NpemUpOwotICAgIEFTU0VSVCghbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmNvbnRh
aW5zKGlkZW50aWZpZXIpKTsKLSAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuYWRkKGlk
ZW50aWZpZXIsIHRhc2tTaXplKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNo
U3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgYm9vbCBpc1Rhc2tTdWNjZXNz
ZnVsKQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3Mu
ZmluZChpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9wZW5kaW5nU3BhY2VJ
bmNyZWFzZVRhc2tzLmVuZCgpKTsKLSAgICBtX3NlcnZlci0+ZGVjcmVhc2VQb3RlbnRpYWxTcGFj
ZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+dmFsdWUpOwotICAgIGlmIChp
c1Rhc2tTdWNjZXNzZnVsKQotICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VTcGFjZVVzZWQobV9p
ZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+dmFsdWUpOwotICAgIG1fcGVuZGluZ1NwYWNl
SW5jcmVhc2VUYXNrcy5yZW1vdmUoaXRlcmF0b3IpOwotfQotCiB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24oKQogewogICAgIExPRyhJbmRleGVkREIs
ICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbiAo
JXApIiwgdGhpcyk7CkBAIC0yNDYsMjkgKzE5Niw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiAgICAgaWYgKCFtX2RhdGFiYXNlSW5mbykg
ewogICAgICAgICBpZiAoIW1faXNPcGVuaW5nQmFja2luZ1N0b3JlKSB7CiAgICAgICAgICAgICBt
X2lzT3BlbmluZ0JhY2tpbmdTdG9yZSA9IHRydWU7Ci0gICAgICAgICAgICAvLyBXZSBkbyBub3Qg
a25vdyB3aGV0aGVyIHRoaXMgaXMgYW4gZXhpc3Rpbmcgb3IgYSBuZXcgZGF0YWJhc2UuCi0gICAg
ICAgICAgICAvLyBXZSBzZXQgYSBzbWFsbCBjb3N0IHNvIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxl
IHRvIG9wZW4gYW4gaW5maW5pdGUgbnVtYmVyIG9mIGRhdGFiYXNlLgotICAgICAgICAgICAgbV9z
ZXJ2ZXItPnJlcXVlc3RTcGFjZShtX2lkZW50aWZpZXIub3JpZ2luKCksIGRlZmF1bHRXcml0ZU9w
ZXJhdGlvbkNvc3QsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXShhdXRvIGRl
Y2lzaW9uKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9vd25pbmdQb2lu
dGVyRm9yQ2xvc2UpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAg
ICAgIHN3aXRjaCAoZGVjaXNpb24pIHsKLSAgICAgICAgICAgICAgICBjYXNlIFN0b3JhZ2VRdW90
YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gSURCUmVzdWx0RGF0YTo6ZXJyb3IobV9jdXJyZW50T3BlbkRCUmVxdWVzdC0+cmVxdWVz
dERhdGEoKS5yZXF1ZXN0SWRlbnRpZmllcigpLCBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJv
ciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJvcGVuRGF0YWJhc2UiKSB9KTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdC0+Y29ubmVjdGlvbigpLmRpZE9wZW5EYXRh
YmFzZShyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0
ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50
OgotICAgICAgICAgICAgICAgICAgICBhdXRvIGNhbGxiYWNrSUQgPSB0aGlzLT5nZW5lcmF0ZVVu
aXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAgICAgICBzdGFydFNwYWNl
SW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QpOwotICAg
ICAgICAgICAgICAgICAgICB0aGlzLT5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50
aWZpZXIsIGNhbGxiYWNrSUQpKTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODIxLDIzICs3NDksMzAgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWRkT3BlbkRhdGFiYXNlQ29ubmVjdGlvbihSZWY8VW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW8KICAgICBtX29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmFk
ZChhZG9wdFJlZihjb25uZWN0aW9uLmxlYWtSZWYoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRl
bnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmll
cikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAi
KGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSAoJXApIiwgdGhpcyk7CiAK
KworICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CisgICAgLy8gUXVvdGEgY2hlY2su
CisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UoaWRlbnRpZmllci5v
cmlnaW4oKSwgZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCk7CisgICAgaWYgKGRlY2lzaW9uID09
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBJREJFcnJvcihRdW90YUV4
Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiT3BlbkJhY2tpbmdTdG9yZSIpKSkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9yZSk7
CiAgICAgbV9iYWNraW5nU3RvcmUgPSBtX3NlcnZlci0+Y3JlYXRlQmFja2luZ1N0b3JlKGlkZW50
aWZpZXIpOwogICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlv
bnMgPSBtX2JhY2tpbmdTdG9yZS0+c3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMoKTsK
ICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gbV9iYWNraW5nU3RvcmUtPmlzRXBoZW1l
cmFsKCk7CiAKLSAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJbmZvOwogICAgIGF1dG8gZXJy
b3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oZGF0YWJhc2VJ
bmZvKTsKLQotICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJ
bmZvLCBlcnJvciwgIHRhc2tJZGVudGlmaWVyKSk7CisgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVu
QmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZv
LCBjb25zdCBJREJFcnJvciYgZXJyb3IsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKQordm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlu
Zm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBlcnJvcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZE9wZW5CYWNraW5nU3RvcmUiKTsKQEAgLTg0OCw4ICs3ODMsNiBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywg
Y29uc3QgSQogICAgIEFTU0VSVChtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSk7CiAgICAgbV9pc09w
ZW5pbmdCYWNraW5nU3RvcmUgPSBmYWxzZTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNr
KHRhc2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7Ci0KICAgICBpZiAobV9oYXJkQ2xvc2Vk
Rm9yVXNlckRlbGV0ZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04NjEsMzMgKzc5NCwyMyBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3Rv
cmUiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsg
ZXN0aW1hdGVTaXplKGluZm8pOwotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2FjdGlvbiwgdGFza1Np
emUsICJjcmVhdGVPYmplY3RTdG9yZSIsIFt0aGlzLCB0YXNrU2l6ZSwgJnRyYW5zYWN0aW9uLCBp
bmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9IFF1b3RhRXhj
ZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNyZWF0ZU9iamVjdFN0
b3JlQWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgaW5mbywgV1RGTW92ZShj
YWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9y
ZUluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBxdW90
YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJl
RXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6
ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lELCB0
cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvLCAgcXVvdGFFcnJvcikpOworICAg
IHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgbV9pZGVudGlmaWVyLm9yaWdpbigp
LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvKSk7CiB9
CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8sIGNvbnN0
IElEQkVycm9yJiBxdW90YUVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNy
ZWF0ZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8pCiB7CiAgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKCFxdW90YUVycm9y
LmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVj
dFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIHF1b3RhRXJyb3IsIGluZm8pKTsKKyAgICAvLyBR
dW90YSBjaGVjay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29z
dCArIGVzdGltYXRlU2l6ZShpbmZvKTsKKyAgICBhdXRvIGRlY2lzaW9uID0gbV9zZXJ2ZXItPnJl
cXVlc3RTcGFjZShvcmlnaW4sIHRhc2tTaXplKTsKKyAgICBpZiAoZGVjaXNpb24gPT0gU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3Io
UXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIkNyZWF0ZU9iamVjdFN0
b3JlIikpLCBpbmZvKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTkwMyw3ICs4MjYs
NiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bUNyZWF0ZU9iamVjdFN0b3JlIik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkp
CiAgICAgICAgIG1fZGF0YWJhc2VJbmZvLT5hZGRFeGlzdGluZ09iamVjdFN0b3JlKGluZm8pOwog
CkBAIC05MTUsMTcgKzgzNyw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVj
dFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNv
bXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTmFt
ZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RG
TW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRo
aXMtPmRlbGV0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9uLCBvYmplY3RT
dG9yZU5hbWUsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVO
YW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQg
PSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICgh
Y2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtOTM2LDE0ICs4NDcsMTkgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2soVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2EKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHBvc3REYXRh
YmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygp
LmlkZW50aWZpZXIoKSwgaW5mby0+aWRlbnRpZmllcigpKSk7CisgICAgcG9zdERhdGFiYXNlVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bURlbGV0ZU9iamVjdFN0b3JlLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHRy
YW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8tPmlkZW50aWZpZXIoKSkpOwogfQog
Ci12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQordm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9y
aWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9y
ZSIpOwogCisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VU
YXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJv
cihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiRGVsZXRlT2JqZWN0
U3RvcmUiKSksIG9iamVjdFN0b3JlSWRlbnRpZmllcikpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVs
ZXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIpOwogCkBAIC05NjcsMzggKzg4MywyOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5h
bWVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlx
dWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmUiKTsKIAotICAgIGF1dG8gdGFza1NpemUg
PSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgbmV3TmFtZS5zaXplSW5CeXRlcygpOwotICAg
IHJlcXVlc3RTcGFjZSh0cmFuc2FjdGlvbiwgdGFza1NpemUsICJyZW5hbWVPYmplY3RTdG9yZSIs
IFt0aGlzLCB0YXNrU2l6ZSwgJnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5l
d05hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUg
ewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFF
eGNlZWRlZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+cmVuYW1lT2JqZWN0
U3RvcmVBZnRlclF1b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIG5ld05hbWUsIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNo
ZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5l
d05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9y
KQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3Io
V1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBxdW90YUVycm9yOworICAgIElEQkVycm9yIGVycm9y
OwogICAgIGF1dG8qIGluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0
U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICBpZiAoIWluZm8pCiAgICAgICAgIGVy
cm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJBdHRlbXB0IHRvIHJlbmFtZSBub24tZXhp
c3RhbnQgb2JqZWN0IHN0b3JlIl9zIH07CiAKLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNh
bGxiYWNrSUQsIHRhc2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3Rv
cmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0
b3JlSWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVu
YW1lT2JqZWN0U3RvcmUsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNh
Y3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1l
LCBlcnJvcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2Jq
ZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElEQkVycm9yJiBlcnJvcikKK3Zv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZShjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElEQkVycm9yJiBl
cnJvcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlIik7CiAK
LSAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBs
eShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKKyAgICAvLyBRdW90YSBjaGVjay4KKyAgICBhdXRv
IHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUluQnl0
ZXMoKTsKKyAgICBhdXRvIGRlY2lzaW9uID0gbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4s
IHRhc2tTaXplKTsKKyAgICBpZiAoZGVjaXNpb24gPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVj
aXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2Jq
ZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9y
LCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIlJlbmFtZU9iamVjdFN0b3JlIikpLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTAx
Myw3ICs5MTksNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2Jq
ZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLAogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlIik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNl
VGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKICAgICBpZiAoZXJyb3Iu
aXNOdWxsKCkpCiAgICAgICAgIG1fZGF0YWJhc2VJbmZvLT5yZW5hbWVPYmplY3RTdG9yZShvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpOwogCkBAIC0xMDI1LDI4ICs5MzAsMjIgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdGkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUi
KTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhp
cywgJnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3Iu
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5jbGVhck9iamVjdFN0b3Jl
QWZldFF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgV1RGTW92
ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVh
ck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgRXJyb3JDYWxsYmFj
ayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAg
ICAgIHJldHVybjsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSwgY2FsbGJh
Y2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUsIG1faWRlbnRpZmll
ci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1DbGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DbGVh
ck9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1DbGVhck9iamVjdFN0b3JlIik7CiAKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVl
c3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55
KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUsIGNh
bGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9y
TWVzc2FnZU5hbWUoIkNsZWFyT2JqZWN0U3RvcmUiKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgbV9iYWNraW5nU3RvcmUtPmNs
ZWFyT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIpOwogCkBAIC0xMDY3LDMzICs5NjYsMjIgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3Jl
YXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGMKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4Iik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVm
YXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsKLSAgICByZXF1ZXN0
U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAiY3JlYXRlSW5kZXgiLCBbdGhpcywgdGFza1Np
emUsICZ0cmFuc2FjdGlvbiwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0
byBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9y
LmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdU
Rk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0
aGlzLT5jcmVhdGVJbmRleEFmdGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIGlu
Zm8sIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXpl
LCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCSW5k
ZXhJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVv
dGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1Np
emUpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJhY2tJRCwgdHJhbnNh
Y3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbywgcXVvdGFFcnJvcikpOworICAgIHBvc3RE
YXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1DcmVhdGVJbmRleCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lE
LCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvKSk7CiB9CiAKLXZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjb25zdCBJREJJbmRleEluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQor
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4KGNvbnN0IENsaWVudE9y
aWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8m
IGluZm8pCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCIpOwogCi0gICAg
aWYgKCFxdW90YUVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBs
eShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIHF1b3RhRXJyb3IsIGluZm8pKTsK
KyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRl
U2l6ZShpbmZvKTsKKyAgICBhdXRvIGRlY2lzaW9uID0gbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShv
cmlnaW4sIHRhc2tTaXplKTsKKyAgICBpZiAoZGVjaXNpb24gPT0gU3RvcmFnZVF1b3RhTWFuYWdl
cjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3Jl
YXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9y
LCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIkNyZWF0ZUluZGV4IikpLCBpbmZvKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTExMTUsOCArMTAwMyw2IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAi
KG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgiKTsKIAotICAg
IGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxs
KCkpOwotCiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CiAgICAgICAgIEFTU0VSVChtX2RhdGFi
YXNlSW5mbyk7CiAgICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZv
LT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigp
KTsKQEAgLTExMzIsMTcgKzEwMTgsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJ
bmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdQogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6ZGVsZXRlSW5kZXgiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21w
bGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIGluZGV4TmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVy
cm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAg
ICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9u
LCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSwgV1RGTW92ZShjYWxsYmFjaykpOwot
ICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleEFmdGVyUXVv
dGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgRXJyb3JD
YWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQp
CiAgICAgICAgIHJldHVybjsKQEAgLTExNTksNyArMTAzNCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24mCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVs
ZXRlSW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9i
amVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJbmZvLT5pZGVudGlmaWVyKCkpKTsKKyAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJ
RCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleEluZm8tPmlkZW50aWZpZXIoKSkpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtRGVsZXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIpCkBAIC0x
MTY3LDYgKzEwNDIsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZUlu
ZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSUQKICAgICBBU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybURlbGV0ZUluZGV4Iik7CiAKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFj
ZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7Cisg
ICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZUluZGV4LCBjYWxsYmFja0lkZW50
aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1l
KCJEZWxldGVJbmRleCIpKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7
CiAgICAgbV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIpOwogCkBAIC0xMTkzLDIzICsx
MDczLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4KFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5h
bWVJbmRleCIpOwogCi0gICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNv
c3QgKyBuZXdOYW1lLnNpemVJbkJ5dGVzKCk7Ci0gICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9u
LCB0YXNrU2l6ZSwgInJlbmFtZUluZGV4IiwgW3RoaXMsIHRhc2tTaXplLCAmdHJhbnNhY3Rpb24s
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYg
KCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9IFF1b3RhRXhjZWVkZWRFcnJvcikg
ewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPnJlbmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNr
KHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50
aWZpZXIsIG5ld05hbWUsIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2
NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSURC
RXJyb3ImIHF1b3RhRXJyb3IpCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2Fs
bGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lE
KQogICAgICAgICByZXR1cm47CiAKLSAgICBJREJFcnJvciBlcnJvciA9IHF1b3RhRXJyb3I7Cisg
ICAgSURCRXJyb3IgZXJyb3I7CiAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFz
ZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7
CiAgICAgaWYgKCFvYmplY3RTdG9yZUluZm8pCiAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBV
bmtub3duRXJyb3IsICJBdHRlbXB0IHRvIHJlbmFtZSBpbmRleCBpbiBub24tZXhpc3RhbnQgb2Jq
ZWN0IHN0b3JlIl9zIH07CkBAIC0xMjE4LDE3ICsxMDg2LDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnJlbmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlx
dWVJREJECiAgICAgaWYgKCFpbmRleEluZm8pCiAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBV
bmtub3duRXJyb3IsICJBdHRlbXB0IHRvIHJlbmFtZSBub24tZXhpc3RhbnQgaW5kZXgiX3MgfTsK
IAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwotICAg
IHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5m
bygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIs
IG5ld05hbWUsIGVycm9yKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4LCBtX2lk
ZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlm
aWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lLCBl
cnJvcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1
aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURC
RXJyb3ImIGVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4
KGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCIpOwogCi0gICAgaWYgKCFlcnJvci5pc051bGwoKSkg
ewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIs
IG5ld05hbWUpKTsKKyAgICAvLyBRdW90YSBjaGVjay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVm
YXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKKyAgICBhdXRv
IGRlY2lzaW9uID0gbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIHRhc2tTaXplKTsKKyAg
ICBpZiAoZGVjaXNpb24gPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsK
KyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgsIGNhbGxiYWNrSWRl
bnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5h
bWUoIlJlbmFtZUluZGV4IikpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmll
ciwgbmV3TmFtZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMjQzLDcgKzExMTMs
NiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bVJlbmFtZUluZGV4Iik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKICAg
ICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlz
dGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgICAgIEFTU0VSVChv
YmplY3RTdG9yZUluZm8pOwpAQCAtMTI1Nyw1MiArMTEyNiw0MCBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdAogICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZChVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVl
c3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgdmFsdWUs
IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIEtleURh
dGFDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0
YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRl
TW9kZSBvdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwdXRPckFkZCIpOwogCi0gICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0
ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoa2V5RGF0YSkgKyBlc3RpbWF0ZVNpemUodmFs
dWUpOwotICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7Ci0gICAgYXV0byogb2JqZWN0U3RvcmUg
PSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUocmVxdWVzdERhdGEu
b2JqZWN0U3RvcmVJZGVudGlmaWVyKCkpOwotICAgIGlmIChvYmplY3RTdG9yZSkKLSAgICAgICAg
dGFza1NpemUgKz0gb2JqZWN0U3RvcmUtPmluZGV4TmFtZXMoKS5zaXplKCkgKiB0YXNrU2l6ZTsK
LQotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2FjdGlvbiwgdGFza1NpemUsICJwdXRPckFkZCIsIFt0
aGlzLCB0YXNrU2l6ZSwgcmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBvdmVyd3JpdGVNb2RlXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9IFF1b3RhRXhjZWVk
ZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+cHV0T3JBZGRBZnRl
clF1b3RhQ2hlY2sodGFza1NpemUsIHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgb3Zlcndy
aXRlTW9kZSwgV1RGTW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1Np
emUsIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYg
a2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zl
cndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0
IElEQkVycm9yJiBxdW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9y
ZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJh
Y2tJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxs
YmFja0lELCB0YXNrU2l6ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFj
a0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKCksIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBxdW90
YUVycm9yKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkLCBtX2lkZW50aWZpZXIub3Jp
Z2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCBy
ZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3
cml0ZU1vZGUpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRk
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
Y29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIG9yaWdpbmFsUmVjb3Jk
VmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUs
IGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVB1dE9yQWRkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEm
IGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiBvcmlnaW5hbFJlY29yZFZhbHVlLCBJbmRleGVkREI6
Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlKQogewogICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUHV0T3JBZGQiKTsKIAotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0g
ICAgQVNTRVJUKG9iamVjdFN0b3JlSWRlbnRpZmllcik7Ci0KICAgICBJREJLZXlEYXRhIHVzZWRL
ZXk7CiAgICAgSURCRXJyb3IgZXJyb3I7CiAKLSAgICBpZiAoIXF1b3RhRXJyb3IuaXNOdWxsKCkp
IHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRl
bnRpZmllciwgcXVvdGFFcnJvciwgdXNlZEtleSkpOwotICAgICAgICByZXR1cm47CisgICAgLy8g
UXVvdGEgY2hlY2suCisgICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNv
c3QgKyBlc3RpbWF0ZVNpemUoa2V5RGF0YSkgKyBlc3RpbWF0ZVNpemUob3JpZ2luYWxSZWNvcmRW
YWx1ZSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKKyAgICBhdXRvKiBvYmplY3RTdG9y
ZSA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9y
ZUlkZW50aWZpZXIpOworICAgIGlmIChvYmplY3RTdG9yZSkKKyAgICAgICAgdGFza1NpemUgKz0g
b2JqZWN0U3RvcmUtPmluZGV4TmFtZXMoKS5zaXplKCkgKiB0YXNrU2l6ZTsKKyAgICBhdXRvIGRl
Y2lzaW9uID0gbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIHRhc2tTaXplKTsKKyAgICBp
ZiAoZGVjaXNpb24gPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAg
ICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmll
ciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIlB1
dE9yQWRkIikpLCB1c2VkS2V5KSk7CisgICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgQVNT
RVJUKG1fYmFja2luZ1N0b3JlKTsKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsK
ICAgICBpZiAoIW1fYmFja2luZ1N0b3JlKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKElu
ZGV4ZWREQiwgIiVwIC0gVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZDogbV9iYWNr
aW5nU3RvcmUgaXMgbnVsbCIsIHRoaXMpOwogICAgICAgICBlcnJvciA9IElEQkVycm9yKEludmFs
aWRTdGF0ZUVycm9yLCAiQmFja2luZyBzdG9yZSBpcyBpbnZhbGlkIGZvciBjYWxsIHRvIHB1dCBv
ciBhZGQiX3MpOwpAQCAtMTM3Niw4MCArMTIzMyw2NSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
RAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWlu
KSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkIik7CiAKLSAgICBmaW5pc2hT
cGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKICAg
ICBwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3Vs
dEtleSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZChVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJl
cXVlc3REYXRhLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiBnZXRSZWNvcmREYXRhLCBHZXRSZXN1
bHRDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZChj
b25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldFJlY29yZERhdGEm
IGdldFJlY29yZERhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJE
YXRhYmFzZTo6Z2V0UmVjb3JkIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlv
bih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBnZXRSZWNvcmREYXRhLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBp
ZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9y
KSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5n
ZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGdldFJlY29yZERhdGEsIFdURk1v
dmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0
UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwg
Y29uc3QgSURCR2V0UmVjb3JkRGF0YSYgZ2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sg
Y2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAodWludDY0X3QgaW5kZXhJZGVudGlmaWVyID0gcmVxdWVzdERh
dGEuaW5kZXhJZGVudGlmaWVyKCkpCi0gICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJl
Y29yZCwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJl
cXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBpbmRleElkZW50aWZpZXIsIHJlcXVl
c3REYXRhLmluZGV4UmVjb3JkVHlwZSgpLCBnZXRSZWNvcmREYXRhLmtleVJhbmdlRGF0YSkpOwor
ICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQsIG1faWRlbnRpZmllci5vcmln
aW4oKSwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJl
cXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBpbmRleElkZW50aWZpZXIsIHJlcXVl
c3REYXRhLmluZGV4UmVjb3JkVHlwZSgpLCBnZXRSZWNvcmREYXRhLmtleVJhbmdlRGF0YSkpOwog
ICAgIGVsc2UKLSAgICAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCwgY2FsbGJhY2tJRCwg
cmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0
b3JlSWRlbnRpZmllcigpLCBnZXRSZWNvcmREYXRhLmtleVJhbmdlRGF0YSwgZ2V0UmVjb3JkRGF0
YS50eXBlKSk7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQsIG1faWRlbnRpZmll
ci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVy
KCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBnZXRSZWNvcmREYXRhLmtl
eVJhbmdlRGF0YSwgZ2V0UmVjb3JkRGF0YS50eXBlKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmdldEFsbFJlY29yZHMoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxs
UmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2Fs
bGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJl
cXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFs
bFJlY29yZHNEYXRhLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlE
QkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29t
cGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0
YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RG
TW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgdGhpcy0+Z2V0QWxsUmVjb3Jkc0FmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgZ2V0QWxs
UmVjb3Jkc0RhdGEsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3Jkc0FmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1
ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxS
ZWNvcmRzRGF0YSwgR2V0QWxsUmVzdWx0c0NhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2
NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFj
aykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcG9zdERh
dGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUdldEFsbFJlY29yZHMsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0
aW9uSWRlbnRpZmllcigpLCBnZXRBbGxSZWNvcmRzRGF0YSkpOworICAgIHBvc3REYXRhYmFzZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1HZXRBbGxSZWNvcmRzLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVl
c3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCBnZXRBbGxSZWNvcmRzRGF0YSkpOwogfQog
Ci12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiBrZXlSYW5nZURhdGEsIElEQkdldFJlY29yZERhdGFUeXBlIHR5cGUpCit2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkKGNvbnN0IENsaWVudE9yaWdpbiYgb3Jp
Z2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBJREJHZXRSZWNvcmREYXRh
VHlwZSB0eXBlKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkIik7CiAKLSAg
ICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotCiAgICAgSURCR2V0UmVzdWx0IHJlc3VsdDsKKyAg
ICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1h
bmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bUdldFJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJy
b3IpLCByZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX2Jh
Y2tpbmdTdG9yZSk7CiAgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVj
b3JkKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlSYW5n
ZURhdGEsIHR5cGUsIHJlc3VsdCk7CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRS
ZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCkpOwogfQogCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50
aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIHJlY29yZFR5cGUsIGNvbnN0IElEQktl
eVJhbmdlRGF0YSYgcmFuZ2UpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5k
ZXhSZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlm
aWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSByZWNvcmRUeXBlLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmIHJhbmdlKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNv
cmQiKTsKIAotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KICAgICBJREJHZXRSZXN1bHQg
cmVzdWx0OworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3Rh
RXhjZWVkZWRFcnJvciksIHJlc3VsdCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
QVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0
b3JlLT5nZXRJbmRleFJlY29yZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRl
bnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCByZWNvcmRUeXBlLCByYW5nZSwgcmVzdWx0KTsKIAog
ICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVy
LCBlcnJvciwgcmVzdWx0KSk7CkBAIC0xNDYzLDE0ICsxMzA1LDE4IEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJCiAgICAgcGVyZm9ybUdldFJlc3VsdENhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmll
ciwgZXJyb3IsIHJlc3VsdCk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1H
ZXRBbGxSZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29y
ZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1HZXRBbGxSZWNvcmRzKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEp
CiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihk
YikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRzIik7CiAKLSAgICBBU1NF
UlQobV9iYWNraW5nU3RvcmUpOwotCiAgICAgSURCR2V0QWxsUmVzdWx0IHJlc3VsdDsKKyAgICBp
ZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFn
ZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdl
dEFsbFJlY29yZHMsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVy
cm9yKSwgV1RGTW92ZShyZXN1bHQpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3Rv
cmUtPmdldEFsbFJlY29yZHModHJhbnNhY3Rpb25JZGVudGlmaWVyLCBnZXRBbGxSZWNvcmRzRGF0
YSwgcmVzdWx0KTsKIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldEFsbFJlY29yZHMs
IGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIFdURk1vdmUocmVzdWx0KSkpOwpAQCAtMTQ4OSwz
MiArMTMzNSwyNSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudChVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29ucwogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6
Z2V0Q291bnQiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0
aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIHJhbmdlLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5nZXRDb3VudEFmdGVyUXVvdGFD
aGVjayhyZXF1ZXN0RGF0YSwgcmFuZ2UsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0K
LQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnRBZnRlclF1b3RhQ2hlY2soY29uc3Qg
SURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdl
LCBDb3VudENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBz
dG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2Fs
bGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCwg
Y2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3RE
YXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIo
KSwgcmFuZ2UpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQsIG1faWRlbnRpZmllci5v
cmlnaW4oKSwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCks
IHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5pbmRleElk
ZW50aWZpZXIoKSwgcmFuZ2UpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUdldENvdW50KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
IGtleVJhbmdlRGF0YSkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudChj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhKQogewogICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtR2V0Q291bnQiKTsKIAorICAgIHVpbnQ2NF90IGNvdW50OworICAgIGlmIChtX3NlcnZlci0+
cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246
OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0Q291bnQsIGNhbGxi
YWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgY291bnQpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAg
QVNTRVJUKG9iamVjdFN0b3JlSWRlbnRpZmllcik7Ci0KLSAgICB1aW50NjRfdCBjb3VudDsKICAg
ICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRDb3VudCh0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBrZXlSYW5n
ZURhdGEsIGNvdW50KTsKIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldENvdW50LCBj
YWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBjb3VudCkpOwpAQCAtMTUzMywzMSArMTM3MiwyNCBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQi
KTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhp
cywgcmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkg
ewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVj
ayhyZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVj
ayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYga2V5UmFuZ2VEYXRhLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90
IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykp
OwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1EZWxldGVSZWNvcmQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRl
bnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwga2V5UmFuZ2VE
YXRhKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCwgbV9pZGVudGlmaWVyLm9y
aWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwg
cmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGtleVJhbmdlRGF0YSkpOwogfQog
Ci12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiByYW5nZSkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVS
ZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBy
YW5nZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCIpOwogCi0gICAg
SURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmFuZ2UodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHJhbmdlKTsKKyAgICBpZiAobV9zZXJ2
ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29y
ZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IpKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxl
dGVSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpKTsKKyAgICBJREJFcnJvciBlcnJv
ciA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVSYW5nZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9i
amVjdFN0b3JlSWRlbnRpZmllciwgcmFuZ2UpOworICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHko
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1EZWxldGVSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpKTsKIH0KIAogdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvcikKQEAgLTE1NjgsMzQgKzE0MDAsMjcg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnMKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3Bl
bkN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3Qg
SURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvLCBH
ZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5D
dXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJDdXJzb3JJ
bmZvJiBpbmZvLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJh
c2U6Om9wZW5DdXJzb3IiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRy
YW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGluZm8sIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPm9wZW5DdXJzb3JBZnRl
clF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGluZm8sIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9
KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvckFmdGVyUXVvdGFDaGVj
ayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkN1cnNvckluZm8m
IGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAg
IGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3REYXRhYmFzZVRhc2so
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1P
cGVuQ3Vyc29yLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIo
KSwgaW5mbykpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1PcGVuQ3Vyc29yLCBtX2lkZW50aWZpZXIu
b3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigp
LCBpbmZvKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1PcGVuQ3Vyc29y
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtT3BlbkN1cnNvcihjb25zdCBDbGllbnRPcmlnaW4m
IG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5m
bykKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAi
KGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJzb3IiKTsKIAogICAgIElEQkdl
dFJlc3VsdCByZXN1bHQ7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAw
KSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1PcGVuQ3Vyc29yLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIHJlc3VsdCkpOworICAgICAgICByZXR1cm47CisgICAg
fQogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5DdXJzb3IodHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBpbmZvLCByZXN1bHQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtT3BlbkN1cnNvciwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KSk7CkBA
IC0xNjA5LDM0ICsxNDM0LDI3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1P
cGVuQ3Vyc29yKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBwZXJmb3Jt
R2V0UmVzdWx0Q2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KTsKIH0K
IAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvcihVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3RE
YXRhLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sg
Y2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yKGNvbnN0IElE
QlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmIGRh
dGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6aXRl
cmF0ZUN1cnNvciIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNh
Y3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgZGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwo
KSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+aXRlcmF0ZUN1cnNvckFmdGVy
UXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgZGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0p
OwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yQWZ0ZXJRdW90YUNo
ZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSXRlcmF0ZUN1
cnNvckRhdGEmIGRhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2
NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFj
aykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3REYXRh
YmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1JdGVyYXRlQ3Vyc29yLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlv
bklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEuY3Vyc29ySWRlbnRpZmllcigpLCBkYXRhKSk7Cisg
ICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IsIG1faWRlbnRpZmllci5vcmlnaW4oKSwg
Y2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3RE
YXRhLmN1cnNvcklkZW50aWZpZXIoKSwgZGF0YSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVD
dXJzb3JEYXRhJiBkYXRhKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVD
dXJzb3IoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgSURC
SXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVy
YXRlQ3Vyc29yIik7CiAKICAgICBJREJHZXRSZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3NlcnZl
ci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtSXRlcmF0ZUN1cnNv
ciwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IpLCByZXN1
bHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFj
a2luZ1N0b3JlLT5pdGVyYXRlQ3Vyc29yKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY3Vyc29ySWRl
bnRpZmllciwgZGF0YSwgcmVzdWx0KTsKIAogICAgIGlmIChlcnJvci5pc051bGwoKSkgewpAQCAt
MTY4OCwxNyArMTUwNiw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0
aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAKICAgICBBU1NFUlQo
dHJhbnNhY3Rpb24uZGF0YWJhc2VDb25uZWN0aW9uKCkuZGF0YWJhc2UoKSA9PSB0aGlzKTsKIAot
ICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRy
YW5zYWN0aW9uLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11
dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxs
YmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgdGhpcy0+Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2sodHJhbnNhY3Rpb24s
IFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWlu
dDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxi
YWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xNzE0LDcg
KzE1MjEsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbkFmdGVy
UXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uLCBjYWxsYmFja0lELCB0
cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNv
bW1pdFRyYW5zYWN0aW9uLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHRyYW5z
YWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpCkBAIC0x
NzI2LDExICsxNTMzLDE2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRU
cmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvCiAgICAgcG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IsIHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1p
dFRyYW5zYWN0aW9uKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9u
IC0gJXMiLCB0cmFuc2FjdGlvbklkZW50aWZpZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwogCisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VU
YXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJv
cihRdW90YUV4Y2VlZGVkRXJyb3IpLCB0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIElEQkVycm9yIHJlc3VsdCA9IGVycm9yOwogICAgIGF1dG8g
dHJhbnNhY3Rpb24gPSBtX2ZpbmlzaGluZ1RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVu
dGlmaWVyKTsKICAgICBzd2l0Y2ggKHRyYW5zYWN0aW9uLT5zdGF0ZSgpKSB7CkBAIC0xNzUyLDI0
ICsxNTY0LDEzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Db21taXRUcmFu
c2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsCiAgICAgdHJhbnNhY3Rpb25Db21w
bGV0ZWQobV9maW5pc2hpbmdUcmFuc2FjdGlvbnMudGFrZSh0cmFuc2FjdGlvbklkZW50aWZpZXIp
KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2FpdEZvclBlbmRpbmdUYXNrcyB3
YWl0Rm9yUGVuZGluZ1Rhc2tzLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJh
c2U6OmFib3J0VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVy
KCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgQVNTRVJUKHRyYW5zYWN0
aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigpLmRhdGFiYXNlKCkgPT0gdGhpcyk7CiAKLSAgICBpZiAo
d2FpdEZvclBlbmRpbmdUYXNrcyA9PSBXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpZZXMpIHsKLSAgICAg
ICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCAmdHJh
bnNhY3Rpb24sIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0
YWJsZSB7Ci0gICAgICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAg
ICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rp
b24sIFdhaXRGb3JQZW5kaW5nVGFza3M6Ok5vLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9
IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFj
YWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xNzg1LDcgKzE1ODYsNyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24mIHRyYW5zYWN0aQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5p
ZGVudGlmaWVyKCkpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiwgbV9p
ZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRp
ZmllcigpKSk7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZEZpbmlzaEhhbmRsaW5n
VmVyc2lvbkNoYW5nZShVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQpAQCAtMTgx
Miw2ICsxNjEzLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1BYm9ydFRyYW5z
YWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uCiAgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uIC0gJXMiLCB0cmFuc2FjdGlvbklkZW50aWZpZXIubG9n
Z2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0
U3BhY2Uob3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkg
eworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uLCBjYWxs
YmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIHRyYW5zYWN0aW9u
SWRlbnRpZmllcikpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgSURCRXJyb3IgZXJy
b3IgPSBtX2JhY2tpbmdTdG9yZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZp
ZXIpOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUFib3J0VHJhbnNhY3Rpb24sIGNhbGxi
YWNrSWRlbnRpZmllciwgZXJyb3IsIHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2UuaAppbmRleCBlYzNmYzBjNzNlYS4uNzQ0OTg1MjRmOTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5oCkBAIC00NCw2ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
c3RydWN0IENsaWVudE9yaWdpbjsKIGNsYXNzIElEQkVycm9yOwogY2xhc3MgSURCR2V0QWxsUmVz
dWx0Owogc3RydWN0IElEQkdldFJlY29yZERhdGE7CkBAIC04OSwxNyArOTAsMTUgQEAgcHVibGlj
OgogICAgIHZvaWQgY3JlYXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNv
bnN0IElEQkluZGV4SW5mbyYsIEVycm9yQ2FsbGJhY2spOwogICAgIHZvaWQgZGVsZXRlSW5kZXgo
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIEVycm9yQ2FsbGJhY2spOwogICAgIHZvaWQg
cmVuYW1lSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IG5ld05hbWUsIEVycm9yQ2FsbGJhY2spOwotICAgIHZvaWQgcHV0T3JBZGQoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0
YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUs
IEtleURhdGFDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRSZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVjb3JkRGF0
YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGdldEFsbFJlY29yZHMoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0
QWxsUmVjb3Jkc0RhdGEmLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0Q291
bnQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgQ291bnRDYWxsYmFjayk7Ci0gICAgdm9pZCBkZWxldGVS
ZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRh
JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBvcGVu
Q3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0
YSYsIGNvbnN0IElEQkN1cnNvckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBp
dGVyYXRlQ3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1
ZXN0RGF0YSYsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2sp
OworICAgIHZvaWQgcHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlE
YXRhJiwgY29uc3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZSwgS2V5RGF0YUNhbGxiYWNrKTsKKyAgICB2b2lkIGdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0
RGF0YSYsIGNvbnN0IElEQkdldFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CisgICAg
dm9pZCBnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0QWxs
UmVjb3Jkc0RhdGEmLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOworICAgIHZvaWQgZ2V0Q291bnQo
Y29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBDb3VudENhbGxi
YWNrKTsKKyAgICB2b2lkIGRlbGV0ZVJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYsIEVycm9yQ2FsbGJhY2spOworICAgIHZvaWQgb3BlbkN1cnNvcihj
b25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkN1cnNvckluZm8mLCBHZXRSZXN1bHRDYWxs
YmFjayk7CisgICAgdm9pZCBpdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29u
c3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CiAgICAgdm9pZCBj
b21taXRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgRXJyb3JDYWxs
YmFjayk7Ci0KLSAgICBlbnVtIGNsYXNzIFdhaXRGb3JQZW5kaW5nVGFza3MgeyBObywgWWVzIH07
Ci0gICAgdm9pZCBhYm9ydFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
LCBXYWl0Rm9yUGVuZGluZ1Rhc2tzLCBFcnJvckNhbGxiYWNrKTsKKyAgICB2b2lkIGFib3J0VHJh
bnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwog
CiAgICAgdm9pZCBkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoVW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW9uJiwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIpOwogICAgIHZvaWQgdHJhbnNhY3Rpb25EZXN0cm95ZWQoVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYpOwpAQCAtMTM5LDQ0ICsxMzgsMjcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgc2NoZWR1bGVTaHV0ZG93bkZvckNsb3NlKCk7CiAKLSAgICB2b2lkIGNyZWF0ZU9iamVjdFN0
b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgRXJyb3JDYWxsYmFjaywgY29u
c3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNr
KHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2Fs
bGJhY2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBjcmVhdGVJbmRleEFmdGVyUXVvdGFD
aGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNv
bnN0IElEQkluZGV4SW5mbyYsIEVycm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAg
dm9pZCByZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
dWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2Fs
bGJhY2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwdXRPckFkZEFmdGVyUXVvdGFDaGVj
ayh1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlE
YXRhJiwgY29uc3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZSwgS2V5RGF0YUNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgZGVsZXRlUmVj
b3JkQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiwgRXJyb3JDYWxsYmFjayk7Ci0KLSAgICB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlQWZ0
ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBTdHJpbmcm
IG9iamVjdFN0b3JlTmFtZSwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBjbGVhck9iamVjdFN0
b3JlQWZldFF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBkZWxldGVJ
bmRleEFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmLCBFcnJvckNhbGxiYWNrKTsK
LSAgICB2b2lkIGdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYs
IGNvbnN0IElEQkdldFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBn
ZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3Qg
SURCR2V0QWxsUmVjb3Jkc0RhdGEmLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOwotICAgIHZvaWQg
Z2V0Q291bnRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJL
ZXlSYW5nZURhdGEmLCBDb3VudENhbGxiYWNrKTsKLSAgICB2b2lkIG9wZW5DdXJzb3JBZnRlclF1
b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJDdXJzb3JJbmZvJiwgR2V0
UmVzdWx0Q2FsbGJhY2spOwotICAgIHZvaWQgaXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayhj
b25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwgR2V0UmVz
dWx0Q2FsbGJhY2spOwotICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2so
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwotCiAgICAgLy8g
RGF0YWJhc2UgdGhyZWFkIG9wZXJhdGlvbnMKICAgICB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZShj
b25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKLSAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUo
Y29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpOwot
ICAgIHZvaWQgcGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIp
OwotICAgIHZvaWQgcGVyZm9ybUFib3J0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
cik7CisgICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmll
ciYpOworICAgIHZvaWQgcGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IENsaWVudE9yaWdp
biYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOworICAgIHZvaWQgcGVyZm9ybUFib3J0VHJhbnNh
Y3Rpb24oY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAg
dm9pZCBiZWdpblRyYW5zYWN0aW9uSW5CYWNraW5nU3RvcmUoY29uc3QgSURCVHJhbnNhY3Rpb25J
bmZvJik7Ci0gICAgdm9pZCBwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKLSAg
ICB2b2lkIHBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwotICAgIHZvaWQgcGVyZm9ybVJlbmFtZU9i
amVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZv
aWQgcGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKLSAgICB2b2lkIHBlcmZvcm1DcmVhdGVJbmRleCh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mLCBjb25zdCBJREJFcnJv
ciYpOwotICAgIHZvaWQgcGVyZm9ybURlbGV0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVy
KTsKLSAgICB2b2lkIHBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgcGVyZm9y
bVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhlZERCOjpP
YmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUsIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJm
b3JtR2V0UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSURCR2V0UmVjb3JkRGF0YVR5cGUp
OwotICAgIHZvaWQgcGVyZm9ybUdldEFsbFJlY29yZHModWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmKTsKLSAgICB2b2lkIHBlcmZvcm1HZXRJbmRleFJl
Y29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwotICAgIHZvaWQgcGVyZm9ybUdldENvdW50KHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0
X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKLSAgICB2b2lkIHBl
cmZvcm1EZWxldGVSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKLSAgICB2b2lkIHBlcmZv
cm1PcGVuQ3Vyc29yKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkN1cnNvckluZm8m
KTsKLSAgICB2b2lkIHBlcmZvcm1JdGVyYXRlQ3Vyc29yKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgSURC
SXRlcmF0ZUN1cnNvckRhdGEmKTsKKyAgICB2b2lkIHBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZShj
b25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmpl
Y3RTdG9yZUluZm8mKTsKKyAgICB2b2lkIHBlcmZvcm1EZWxldGVPYmplY3RTdG9yZShjb25zdCBD
bGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIpOworICAgIHZvaWQgcGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKGNvbnN0IENs
aWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYpOworICAg
IHZvaWQgcGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICB2
b2lkIHBlcmZvcm1DcmVhdGVJbmRleChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mKTsKKyAgICB2b2lkIHBlcmZvcm1EZWxldGVJ
bmRleChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllcik7CisgICAg
dm9pZCBwZXJmb3JtUmVuYW1lSW5kZXgoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRl
eElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImKTsKKyAg
ICB2b2lkIHBlcmZvcm1QdXRPckFkZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURh
dGEmLCBjb25zdCBJREJWYWx1ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2Rl
KTsKKyAgICB2b2lkIHBlcmZvcm1HZXRSZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJ
REJLZXlSYW5nZURhdGEmLCBJREJHZXRSZWNvcmREYXRhVHlwZSk7CisgICAgdm9pZCBwZXJmb3Jt
R2V0QWxsUmVjb3Jkcyhjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYpOworICAgIHZvaWQgcGVyZm9ybUdldEluZGV4
UmVjb3JkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRl
eGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CisgICAgdm9p
ZCBwZXJmb3JtR2V0Q291bnQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50
aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOworICAgIHZvaWQgcGVyZm9ybURlbGV0ZVJl
Y29yZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOworICAgIHZv
aWQgcGVyZm9ybU9wZW5DdXJzb3IoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOworICAgIHZvaWQgcGVyZm9ybUl0ZXJhdGVD
dXJzb3IoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJREJJdGVyYXRl
Q3Vyc29yRGF0YSYpOwogICAgIHZvaWQgcGVyZm9ybVByZWZldGNoQ3Vyc29yKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIpOwogCiAgICAgdm9pZCBwZXJmb3JtU3RhcnRW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJik7CkBAIC0x
ODYsNyArMTY4LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIE1haW4gdGhyZWFkIGNhbGxiYWNrcwog
ICAgIHZvaWQgZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKTsK
LSAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29u
c3QgSURCRXJyb3ImLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcik7CisgICAgdm9pZCBkaWRPcGVu
QmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYsIGNvbnN0IElEQkVycm9yJik7CiAg
ICAgdm9pZCBkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJFcnJvciYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOwogICAg
IHZvaWQgZGlkUGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwog
ICAgIHZvaWQgZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgbmV3TmFtZSk7CkBAIC0yNDYsOSArMjI4LDYgQEAgcHJpdmF0ZToKICAg
ICBib29sIGlzRG9uZVdpdGhIYXJkQ2xvc2UoKTsKIAogICAgIHZvaWQgcmVxdWVzdFNwYWNlKFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgY2hh
ciogZXJyb3JNZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElEQkVycm9yJiYpPiYmKTsK
LSAgICB2b2lkIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElEQkVycm9yJiYpPiYmKTsKLSAg
ICB2b2lkIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0
X3QgdGFza1NpemUpOwotICAgIHZvaWQgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3Qg
aWRlbnRpZmllciwgYm9vbCBpc1Rhc2tTdWNjZXNzZnVsKTsKIAogICAgIHZvaWQgY2xlYXJUcmFu
c2FjdGlvbnNPbkNvbm5lY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAKaW5kZXggZmU5MTBmYWY5
ODQuLjgwMDYwNjk4ODM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0
aW9uLmNwcApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
bjo6YWJvcnRUcmFuc2FjdGlvbldpdGhvdXRDYWxsYmFjayhVbmlxdWVJREJEYXRhYgogICAgIGlm
ICghbV9kYXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fZGF0YWJhc2UtPmFi
b3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIFVuaXF1ZUlEQkRhdGFiYXNlOjpXYWl0Rm9yUGVu
ZGluZ1Rhc2tzOjpObywgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmll
cl0oY29uc3QgSURCRXJyb3ImKSB7CisgICAgbV9kYXRhYmFzZS0+YWJvcnRUcmFuc2FjdGlvbih0
cmFuc2FjdGlvbiwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0o
Y29uc3QgSURCRXJyb3ImKSB7CiAgICAgICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uTWFwLmNvbnRh
aW5zKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwogICAgICAgICBtX3RyYW5zYWN0aW9uTWFwLnJl
bW92ZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCmluZGV4IGE4ZDJiZGM3NDBjLi43NmVkZGM0NWIw
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcApAQCAt
NzksNyArNzksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmFib3J0KCkK
ICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAg
ICAgQVNTRVJUKGRhdGFiYXNlKTsKIAotICAgIGRhdGFiYXNlLT5hYm9ydFRyYW5zYWN0aW9uKCp0
aGlzLCBVbmlxdWVJREJEYXRhYmFzZTo6V2FpdEZvclBlbmRpbmdUYXNrczo6WWVzLCBbdGhpcywg
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKGF1dG8mIGVycm9yKSB7CisgICAgZGF0YWJh
c2UtPmFib3J0VHJhbnNhY3Rpb24oKnRoaXMsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKV0oYXV0byYgZXJyb3IpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb246OmFib3J0IChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3
ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRh
JiByZXF1ZXN0RGF0YSwgYwogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlv
bi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNl
LT5wdXRPckFkZCgqdGhpcywgcmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVN
b2RlLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShh
dXRvJiBlcnJvciwgY29uc3QgSURCS2V5RGF0YSYga2V5KSB7CisgICAgZGF0YWJhc2UtPnB1dE9y
QWRkKHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgW3RoaXMsIHdl
YWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNv
bnN0IElEQktleURhdGEmIGtleSkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6cHV0T3JBZGQgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAo
IXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzA3LDcgKzMwNyw3IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZXN0RGF0YSwKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rp
b24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFz
ZS0+Z2V0UmVjb3JkKCp0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgW3RoaXMsIHdl
YWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNv
bnN0IElEQkdldFJlc3VsdCYgcmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPmdldFJlY29yZChyZXF1
ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0
KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
OjpnZXRSZWNvcmQgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMzI4LDcgKzMyOCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jkcyhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERh
CiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwog
ICAgIEFTU0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmdldEFsbFJlY29yZHMo
KnRoaXMsIHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdl
dEFsbFJlc3VsdCYgcmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPmdldEFsbFJlY29yZHMocmVxdWVz
dERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigq
dGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0QWxsUmVzdWx0JiBy
ZXN1bHQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb246OmdldEFsbFJlY29yZHMgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlz
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVl
c3REYXRhLCBjCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRh
YmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmdldENv
dW50KCp0aGlzLCByZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgdWludDY0X3QgY291
bnQpIHsKKyAgICBkYXRhYmFzZS0+Z2V0Q291bnQocmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwg
W3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYg
ZXJyb3IsIHVpbnQ2NF90IGNvdW50KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRDb3VudCAoY2FsbGJhY2spIik7CiAgICAgICAgIGlm
ICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zNzAsNyArMzcwLDcgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmQoY29uc3QgSURCUmVx
dWVzdERhdGEmIHJlcXVlc3REYXQKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5l
Y3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRh
YmFzZS0+ZGVsZXRlUmVjb3JkKCp0aGlzLCByZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhp
cywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJv
cikgeworICAgIGRhdGFiYXNlLT5kZWxldGVSZWNvcmQocmVxdWVzdERhdGEsIGtleVJhbmdlRGF0
YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0
byYgZXJyb3IpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb246OmRlbGV0ZVJlY29yZCAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1Ro
aXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zOTEsNyArMzkxLDcgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSwKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRh
dGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+b3Bl
bkN1cnNvcigqdGhpcywgcmVxdWVzdERhdGEsIGluZm8sIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1
bHQmIHJlc3VsdCkgeworICAgIGRhdGFiYXNlLT5vcGVuQ3Vyc29yKHJlcXVlc3REYXRhLCBpbmZv
LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRv
JiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKICAgICAgICAgTE9HKEluZGV4
ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9wZW5DdXJzb3IgKGNhbGxiYWNr
KSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDEy
LDcgKzQxMiw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1
cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhCiAgICAgYXV0byBkYXRhYmFzZSA9
IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7
CiAgICAgCi0gICAgZGF0YWJhc2UtPml0ZXJhdGVDdXJzb3IoKnRoaXMsIHJlcXVlc3REYXRhLCBk
YXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShh
dXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRhYmFzZS0+
aXRlcmF0ZUN1cnNvcihyZXF1ZXN0RGF0YSwgZGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3Vs
dCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFr
VGhpcykKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAKaW5k
ZXggOTExMWY1OTc4ZTMuLjljYWE3MjZiYmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNw
cApAQCAtNjEsMTkgKzYxLDIxIEBAIFJlZjxJblByb2Nlc3NJREJTZXJ2ZXI+IEluUHJvY2Vzc0lE
QlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uCiAKIEluUHJvY2Vz
c0lEQlNlcnZlcjo6fkluUHJvY2Vzc0lEQlNlcnZlcigpID0gZGVmYXVsdDsKIAotU3RvcmFnZVF1
b3RhTWFuYWdlciogSW5Qcm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIoY29uc3QgQ2xpZW50
T3JpZ2luJiBvcmlnaW4pCitSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gSW5Qcm9jZXNzSURC
U2VydmVyOjpxdW90YU1hbmFnZXIoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7CiAgICAg
cmV0dXJuIG1fcXVvdGFNYW5hZ2Vycy5lbnN1cmUob3JpZ2luLCBbXSB7Ci0gICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPFN0b3JhZ2VRdW90YU1hbmFnZXI+KFN0b3JhZ2VRdW90YU1hbmFnZXI6OmRl
ZmF1bHRRdW90YSgpLCBbXSh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3VycmVudFNwYWNlLCB1
aW50NjRfdCBzcGFjZUluY3JlYXNlLCBhdXRvIGNhbGxiYWNrKSB7CisgICAgICAgIHJldHVybiBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUoU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1
b3RhKCksIFtdIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9LCBbXSh1aW50NjRf
dCBxdW90YSwgdWludDY0X3QgY3VycmVudFNwYWNlLCB1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBh
dXRvIGNhbGxiYWNrKSB7CiAgICAgICAgICAgICBjYWxsYmFjayhxdW90YSArIGN1cnJlbnRTcGFj
ZSArIHNwYWNlSW5jcmVhc2UpOwogICAgICAgICB9KTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWUu
Z2V0KCk7CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCi1zdGF0aWMgaW5saW5lIElEQlNl
cnZlcjo6SURCU2VydmVyOjpRdW90YU1hbmFnZXJHZXR0ZXIgc3RvcmFnZVF1b3RhTWFuYWdlckdl
dHRlcihJblByb2Nlc3NJREJTZXJ2ZXImIHNlcnZlcikKK3N0YXRpYyBpbmxpbmUgSURCU2VydmVy
OjpJREJTZXJ2ZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIgc3RvcmFnZVF1b3RhTWFuYWdl
ckdldHRlcihJblByb2Nlc3NJREJTZXJ2ZXImIHNlcnZlcikKIHsKICAgICByZXR1cm4gW3dlYWtT
ZXJ2ZXIgPSBtYWtlV2Vha1B0cihzZXJ2ZXIpXShQQUw6OlNlc3Npb25JRCwgY29uc3QgYXV0byYg
b3JpZ2luKSB7Ci0gICAgICAgIHJldHVybiB3ZWFrU2VydmVyID8gd2Vha1NlcnZlci0+cXVvdGFN
YW5hZ2VyKG9yaWdpbikgOiBudWxscHRyOworICAgICAgICByZXR1cm4gW3dlYWtTZXJ2ZXIgPSBt
YWtlV2Vha1B0cihzZXJ2ZXIpXShjb25zdCBhdXRvJiBvcmlnaW4pIHsKICAgICB9OwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9j
ZXNzSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SW5Qcm9jZXNzSURCU2VydmVyLmgKaW5kZXggYzdiNTMyMWNhMzYuLmEyN2E2MjkyZjUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNz
SURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0luUHJvY2Vzc0lEQlNlcnZlci5oCkBAIC0xMjUsNyArMTI1LDcgQEAgcHVibGljOgogICAgIHZv
aWQgcmVmKCkgb3ZlcnJpZGUgeyBSZWZDb3VudGVkPEluUHJvY2Vzc0lEQlNlcnZlcj46OnJlZigp
OyB9CiAgICAgdm9pZCBkZXJlZigpIG92ZXJyaWRlIHsgUmVmQ291bnRlZDxJblByb2Nlc3NJREJT
ZXJ2ZXI+OjpkZXJlZigpOyB9CiAKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBxdW90YU1hbmFn
ZXIoY29uc3QgQ2xpZW50T3JpZ2luJik7CisgICAgUmVmUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+
IHF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mKTsKIAogcHJpdmF0ZToKICAgICBleHBs
aWNpdCBJblByb2Nlc3NJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQpOwpAQCAtMTM1LDcgKzEzNSw3
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVy
PiBtX2Nvbm5lY3Rpb25Ub1NlcnZlcjsKICAgICBSZWZQdHI8SURCU2VydmVyOjpJREJDb25uZWN0
aW9uVG9DbGllbnQ+IG1fY29ubmVjdGlvblRvQ2xpZW50OwogCi0gICAgSGFzaE1hcDxDbGllbnRP
cmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9xdW90YU1hbmFn
ZXJzOworICAgIEhhc2hNYXA8Q2xpZW50T3JpZ2luLCBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdl
cj4+IG1fcXVvdGFNYW5hZ2VyczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCmluZGV4IDg1MjU3
NTJlNjMzLi5lZjcyOTNjMjllMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VRdW90YU1hbmFnZXIuY3BwCkBAIC0yNywyMTMgKzI3LDEwOCBAQAogI2luY2x1ZGUgIlN0b3Jh
Z2VRdW90YU1hbmFnZXIuaCIKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTdG9y
YWdlUXVvdGFVc2VyLmgiCisjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3RvcmFnZVF1b3RhTWFuYWdlcjo6flN0b3JhZ2VR
dW90YU1hbmFnZXIoKQorUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+IFN0b3JhZ2VRdW90YU1hbmFn
ZXI6OmNyZWF0ZSh1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgUXVv
dGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpCiB7Ci0gICAgd2hp
bGUgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fcGVuZGluZ1JlcXVl
c3RzLnRha2VGaXJzdCgpLmNhbGxiYWNrKERlY2lzaW9uOjpEZW55KTsKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTdG9yYWdlUXVvdGFNYW5hZ2VyKHF1b3RhLCBXVEZNb3ZlKHVzYWdlR2V0dGVy
KSwgV1RGTW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKSkpOwogfQogCi11aW50NjRfdCBTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpzcGFjZVVzYWdlKCkgY29uc3QKK1N0b3JhZ2VRdW90YU1hbmFnZXI6
OlN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYgdXNhZ2VH
ZXR0ZXIsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiBxdW90YUluY3JlYXNlUmVxdWVzdGVyKQor
ICAgIDogbV9xdW90YShxdW90YSkKKyAgICAsIG1fdXNhZ2VHZXR0ZXIoV1RGTW92ZSh1c2FnZUdl
dHRlcikpCisgICAgLCBtX3F1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIoV1RGTW92ZShxdW90YUluY3Jl
YXNlUmVxdWVzdGVyKSkKKyAgICAsIG1fd29ya1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJTdG9y
YWdlUXVvdGFNYW5hZ2VyIEJhY2tncm91bmQgUXVldWUiKSkKIHsKLSAgICB1aW50NjRfdCB1c2Fn
ZSA9IDA7Ci0gICAgZm9yIChhdXRvJiB1c2VyIDogbV91c2VycykKLSAgICAgICAgdXNhZ2UgKz0g
dXNlci0+c3BhY2VVc2VkKCk7Ci0gICAgcmV0dXJuIHVzYWdlOwogfQogCi12b2lkIFN0b3JhZ2VR
dW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKQordm9pZCBTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQodWludDY0X3Qgc3BhY2VSZXF1
ZXN0ZWQsIFJlcXVlc3RDYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIGlmICghbV9xdW90YSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBkZWZhdWx0UXVvdGFTdGVwID0gbV9xdW90YSAv
IDEwOwotICAgIG1fcXVvdGEgPSBzdGQ6Om1heChtX3F1b3RhLCBkZWZhdWx0UXVvdGFTdGVwICog
KChzcGFjZVVzYWdlKCkgLyBkZWZhdWx0UXVvdGFTdGVwKSArIDEpKTsKLX0KLQotdm9pZCBTdG9y
YWdlUXVvdGFNYW5hZ2VyOjppbml0aWFsaXplVXNlcnNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1f
cGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBWZWN0b3I8U3RvcmFnZVF1b3RhVXNlcio+IHVzZXJzVG9Jbml0aWFsaXplOwotICAgIGZv
ciAoYXV0byYga2V5VmFsdWUgOiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzKSB7Ci0gICAg
ICAgIGlmIChrZXlWYWx1ZS52YWx1ZSA9PSBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ6Ok5vKSB7Ci0g
ICAgICAgICAgICBrZXlWYWx1ZS52YWx1ZSA9IFdoZW5Jbml0aWFsaXplZENhbGxlZDo6WWVzOwot
ICAgICAgICAgICAgdXNlcnNUb0luaXRpYWxpemUuYXBwZW5kKGtleVZhbHVlLmtleSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZm9yIChhdXRvKiB1c2VyIDogdXNlcnNUb0luaXRpYWxpemUpIHsK
LSAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnModXNlcikp
Ci0gICAgICAgICAgICBhc2tVc2VyVG9Jbml0aWFsaXplKCp1c2VyKTsKLSAgICB9Ci19Ci0KLXZv
aWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFV
c2VyJiB1c2VyKQotewotICAgIHVzZXIud2hlbkluaXRpYWxpemVkKFt0aGlzLCAmdXNlciwgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oKSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCisg
ICAgV1RGTG9nQWx3YXlzKCJzaWh1aWw6IFslcF1TdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0
U3BhY2VPbk1haW5UaHJlYWQgc3BhY2VSZXF1ZXN0ZWRbJWxsdV0sIG1fcXVvdGFbJWxsdV0sIG1f
dXNhZ2VbJWxsdV0sIG1fcXVvdGFDb3VudERvd25bJWxsdV0iLCB0aGlzLCBzcGFjZVJlcXVlc3Rl
ZCwgbV9xdW90YSwgbV91c2FnZSwgbV9xdW90YUNvdW50RG93bik7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIC8vIEZhc3QgcGF0aC4KKyAgICBpZiAobV9xdW90YUNvdW50RG93
bkxvY2sudHJ5TG9jaygpKSB7CisgICAgICAgIGlmICh0cnlHcmFudFJlcXVlc3Qoc3BhY2VSZXF1
ZXN0ZWQpKSB7CisgICAgICAgICAgICBtX3F1b3RhQ291bnREb3duTG9jay51bmxvY2soKTsKKyAg
ICAgICAgICAgIGNhbGxiYWNrKERlY2lzaW9uOjpHcmFudCk7CiAgICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMucmVtb3ZlKCZ1c2Vy
KSkKLSAgICAgICAgICAgIG1fdXNlcnMuYWRkKCZ1c2VyKTsKLQotICAgICAgICBpZiAoIW1fcGVu
ZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSBxdW90YSBpcyBzZXQgYmVmb3JlIGhhbmRsaW5nIGZpcnN0
IHJlcXVlc3QuCi0gICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpVbmluaXRpYWxpemVkKSB7
Ci0gICAgICAgICAgICB1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCk7Ci0gICAgICAgICAg
ICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKICAgICAgICAgfQor
ICAgICAgICBtX3F1b3RhQ291bnREb3duTG9jay51bmxvY2soKTsKKyAgICB9CiAKLSAgICAgICAg
cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyh7IH0pOworICAgIG1fY2FsbGJhY2tzLmFwcGVuZChXVEZN
b3ZlKGNhbGxiYWNrKSk7CisgICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNwYWNlUmVxdWVzdGVkXSB7CisgICAgICAgIGF1dG8g
ZGVjaXNpb24gPSByZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQoc3BhY2VSZXF1ZXN0ZWQp
OworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGRlY2lzaW9uXSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fY2FsbGJhY2tzLmlz
RW1wdHkoKSk7CisgICAgICAgICAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZUZp
cnN0KCk7CisgICAgICAgICAgICBjYWxsYmFjayhkZWNpc2lvbik7CisgICAgICAgIH0pOwogICAg
IH0pOwogfQogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFkZFVzZXIoU3RvcmFnZVF1b3Rh
VXNlciYgdXNlcikKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCh1aW50NjRfdCBzcGFjZVJlcXVl
c3RlZCkKIHsKLSAgICBBU1NFUlQoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFp
bnMoJnVzZXIpKTsKLSAgICBBU1NFUlQoIW1fdXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBt
X3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmFkZCgmdXNlciwgV2hlbkluaXRpYWxpemVkQ2Fs
bGVkOjpObyk7Ci0KLSAgICBpZiAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAg
ICAgYXNrVXNlclRvSW5pdGlhbGl6ZSh1c2VyKTsKLX0KLQotYm9vbCBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpzaG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3QK
LXsKLSAgICBpZiAoIXNwYWNlSW5jcmVhc2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiBzcGFjZVVzYWdlKCkgKyBzcGFjZUluY3JlYXNlID4gbV9xdW90YTsKLX0KLQotdm9p
ZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKFN0b3JhZ2VRdW90YVVzZXImIHVzZXIp
Ci17Ci0gICAgQVNTRVJUKG1fdXNlcnMuY29udGFpbnMoJnVzZXIpIHx8IG1fcGVuZGluZ0luaXRp
YWxpemF0aW9uVXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBtX3VzZXJzLnJlbW92ZSgmdXNl
cik7Ci0gICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMucmVtb3ZlKCZ1c2VyKSAm
JiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBX
aGVuIGJlaW5nIGNsZWFyZWQsIHF1b3RhIHVzZXJzIG1heSByZW1vdmUgdGhlbXNlbHZlcyBhbmQg
YWRkIHRoZW1zZWx2ZXMgdG8gdHJpZ2dlciByZWluaXRpYWxpemF0aW9uLgotICAgICAgICAvLyBM
ZXQncyB3YWl0IGZvciBhZGRVc2VyIHRvIGJlIGNhbGxlZCBiZWZvcmUgcHJvY2Vzc2luZyBwZW5k
aW5nIHJlcXVlc3RzLgotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0
aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5n
UmVxdWVzdHMoeyB9KTsKLSAgICAgICAgfSk7Ci0gICAgfQotfQorICAgIFdURkxvZ0Fsd2F5cygi
c2lodWlsOiBbJXBdU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5k
VGhyZWFkIHNwYWNlUmVxdWVzdGVkWyVsbHVdLCBtX3F1b3RhWyVsbHVdLCBtX3VzYWdlWyVsbHVd
LCBtX3F1b3RhQ291bnREb3duWyVsbHVdIiwgdGhpcywgc3BhY2VSZXF1ZXN0ZWQsIG1fcXVvdGEs
IG1fdXNhZ2UsIG1fcXVvdGFDb3VudERvd24pOworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkp
OwogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSh1aW50NjRfdCBzcGFj
ZUluY3JlYXNlLCBSZXF1ZXN0Q2FsbGJhY2smJiBjYWxsYmFjaykKLXsKLSAgICBpZiAoIW1fcGVu
ZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBl
bmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3F1b3RhQ291bnREb3duTG9jayk7CiAK
LSAgICBpZiAoIXNwYWNlSW5jcmVhc2UpIHsKLSAgICAgICAgY2FsbGJhY2soRGVjaXNpb246Okdy
YW50KTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmICh0cnlHcmFudFJlcXVlc3Qoc3BhY2VSZXF1
ZXN0ZWQpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygic2lodWlsOiBbJXBdU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkIHNwYWNlUmVxdWVzdGVkWyVs
bHVdIEdSQU5ULCBub3cgbV9xdW90YUNvdW50RG93blslbGx1XSIsIHRoaXMsIHNwYWNlUmVxdWVz
dGVkLCBtX3F1b3RhQ291bnREb3duKTsKKyAgICAgICAgcmV0dXJuIERlY2lzaW9uOjpHcmFudDsK
ICAgICB9Ci0KLSAgICBpbml0aWFsaXplVXNlcnNJZk5lZWRlZCgpOwotCi0gICAgaWYgKCFtX3Bl
bmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkgewotICAgICAgICBtX3BlbmRpbmdS
ZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKLSAg
ICAgICAgcmV0dXJuOworICAgIG1fdXNhZ2UgPSBtX3VzYWdlR2V0dGVyKCk7CisgICAgLy8gV2hl
biBTdG9yYWdlUXVvdGFNYW5hZ2VyIGlzIHVzZWQgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSB3YW50
IHRvIG1ha2Ugc3VyZSBpdHMgaW5pdGlhbCBxdW90YSBpcyBiaWdnZXIgdGhhbiBjdXJyZW50IGRp
c2sgdXNhZ2UsCisgICAgLy8gYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgcXVvdGEg
d2FzIGluY3JlYXNlZCB0byBhdCBsZWFzdCB0aGUgZGlzayB1c2FnZSB1bmRlciB1c2VyJ3MgcGVy
bWlzc2lvbiBiZWZvcmUuCisgICAgaWYgKCFtX3F1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZSkgewor
ICAgICAgICBtX3F1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZSA9IHRydWU7CisgICAgICAgIGF1dG8g
ZGVmYXVsdFF1b3RhU3RlcCA9IG1fcXVvdGEgLyAxMDsKKyAgICAgICAgbV9xdW90YSA9IHN0ZDo6
bWF4KG1fcXVvdGEsIGRlZmF1bHRRdW90YVN0ZXAgKiAobV91c2FnZSAvIGRlZmF1bHRRdW90YVN0
ZXApICsgMSkpCiAgICAgfQotCi0gICAgaWYgKHNob3VsZEFza0Zvck1vcmVTcGFjZShzcGFjZUlu
Y3JlYXNlKSkgewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUluY3Jl
YXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKLQotICAgICAgICAvLyBUcnkgcHJvY2Vzc2luZyBy
ZXF1ZXN0IGFnYWluIGFmdGVyIG1ha2luZyBzdXJlIHVzYWdlIGlzIGFjY3VyYXRlLgotICAgICAg
ICBtX3N0YXRlID0gU3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKLSAgICAgICAgZm9yIChhdXRv
JiB1c2VyIDogY29weVRvVmVjdG9yKG1fdXNlcnMpKQotICAgICAgICAgICAgdXNlci0+Y29tcHV0
ZVNwYWNlVXNlZCgpOwotCi0gICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vy
cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9zdGF0ZSA9IFN0
YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgIGFza0Zvck1vcmVTcGFjZShzcGFjZUlu
Y3JlYXNlKTsKLSAgICAgICAgcmV0dXJuOworICAgIG1fcXVvdGFDb3VudERvd24gPSBtX3VzYWdl
IDwgbV9xdW90YSA/IG1fcXVvdGEgLSBtX3VzYWdlIDogMDsKKyAgICBpZiAodHJ5R3JhbnRSZXF1
ZXN0KHNwYWNlUmVxdWVzdGVkKSkgeworICAgICAgICBXVEZMb2dBbHdheXMoInNpaHVpbDogWyVw
XVN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCBzcGFj
ZVJlcXVlc3RlZFslbGx1XSBHUkFOVCBhZnRlciB1cGRhdGUgbV91c2FnZVslbGx1XSwgbm93IG1f
cXVvdGFDb3VudERvd25bJWxsdV0iLCB0aGlzLCBzcGFjZVJlcXVlc3RlZCwgbV91c2FnZSwgbV9x
dW90YUNvdW50RG93bik7CisgICAgICAgIHJldHVybiBEZWNpc2lvbjo6R3JhbnQ7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJzaWh1aWw6IFslcF1TdG9yYWdlUXVvdGFNYW5h
Z2VyOjpyZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQgc3BhY2VSZXF1ZXN0ZWRbJWxsdV0g
Y29udGludWVzIGFmdGVyIHVwZGF0ZSBtX3VzYWdlWyVsbHVdLCBub3cgbV9xdW90YUNvdW50RG93
blslbGx1XSIsIHRoaXMsIHNwYWNlUmVxdWVzdGVkLCBtX3VzYWdlLCBtX3F1b3RhQ291bnREb3du
KTsKICAgICB9CiAKLSAgICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVz
dDsKLSAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOwotfQorICAgIC8vIEJsb2NrIHRoaXMg
dGhyZWFkIHVudGlsIGdldHRpbmcgZGVjc2lvbiBmb3IgcXVvdGEgaW5jcmVhc2UuCisgICAgQmlu
YXJ5U2VtYXBob3JlIHNlbWFwaG9yZTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNwYWNlUmVxdWVzdGVkLCAmc2VtYXBob3JlXSB7
CisgICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXIg
YXNrcyBmb3IgcXVvdGEgaW5jcmVhc2UgJSIgUFJJdTY0LCB0aGlzLCBzcGFjZVJlcXVlc3RlZCk7
CisgICAgICAgIG1fcXVvdGFJbmNyZWFzZVJlcXVlc3RlcihtX3F1b3RhLCBtX3VzYWdlLCBzcGFj
ZVJlcXVlc3RlZCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgJnNlbWFw
aG9yZV0oT3B0aW9uYWw8dWludDY0X3Q+IG5ld1F1b3RhKSB7CisgICAgICAgICAgICBSRUxFQVNF
X0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyIHJlY2VpdmVzIHF1b3RhIGlu
Y3JlYXNlIHJlc3BvbnNlICUiIFBSSXU2NCwgdGhpcywgbmV3UXVvdGEgPyAqbmV3UXVvdGEgOiAw
KTsKKyAgICAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLXZvaWQgU3RvcmFnZVF1
b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpCi17Ci0g
ICAgQVNTRVJUKHNob3VsZEFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKSk7Ci0gICAgQVNT
RVJUKG1fc3RhdGUgPT0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZSk7CisgICAgICAgICAgICBp
ZiAobmV3UXVvdGEpCisgICAgICAgICAgICAgICAgbV9xdW90YSA9ICpuZXdRdW90YTsKIAotICAg
IFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1v
cmVTcGFjZSAlIiBQUkl1NjQsIHRoaXMsIHNwYWNlSW5jcmVhc2UpOwotICAgIG1fc3RhdGUgPSBT
dGF0ZTo6V2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZTsKLSAgICBtX3NwYWNlSW5jcmVh
c2VSZXF1ZXN0ZXIobV9xdW90YSwgc3BhY2VVc2FnZSgpLCBzcGFjZUluY3JlYXNlLCBbdGhpcywg
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90
YSkgewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOworICAgICAgICB9KTsKIAotICAgICAgICBSRUxFQVNF
X0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2Ug
cmVjZWl2ZWQgcmVzcG9uc2UgJSIgUFJJdTY0LCB0aGlzLCBuZXdRdW90YSA/ICpuZXdRdW90YSA6
IDApOworICAgICAgICBzZW1hcGhvcmUud2FpdCgpOwogCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0
ZTo6QXNraW5nRm9yTW9yZVNwYWNlOwotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKG5l
d1F1b3RhKTsKKyAgICAgICAgbV91c2FnZSA9IG1fdXNhZ2VHZXR0ZXIoKTsKKyAgICAgICAgbV9x
dW90YUNvdW50RG93biA9IG1fdXNhZ2UgPCBtX3F1b3RhID8gbV9xdW90YSAtIG1fdXNhZ2UgOiAw
OworICAgICAgICBhdXRvIGRlY2lzaW9uID0gdHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVk
KSA/IERlY2lzaW9uOjpHcmFudCA6IERlY2lzaW9uOjpEZW55OworICAgICAgICBXVEZMb2dBbHdh
eXMoInNpaHVpbDogWyVwXVN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uQmFja2dy
b3VuZFRocmVhZCBzcGFjZVJlcXVlc3RlZFslbGx1XSBHUkFOVFslZF0gYWZ0ZXIgdXBkYXRlIG1f
cXVvdGFbJWxsdV0sIG5vdyBtX3VzYWdlWyVsbHVdLCBtX3F1b3RhQ291bnREb3duWyVsbHVdIiwg
dGhpcywgc3BhY2VSZXF1ZXN0ZWQsIGRlY2lzaW9uID09IERlY2lzaW9uOjpHcmFudCwgbV9xdW90
YSwgbV91c2FnZSwgbV9xdW90YUNvdW50RG93bik7CisgICAgICAgIHJldHVybiBkZWNpc2lvbjsK
ICAgICB9KTsKIH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1Jl
cXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkKK2Jvb2wgU3RvcmFnZVF1b3RhTWFu
YWdlcjo6dHJ5R3JhbnRSZXF1ZXN0KHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkKQogewotICAgIGlm
IChtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChuZXdRdW90YSkKLSAgICAgICAgbV9xdW90YSA9ICpuZXdRdW90YTsKLQotICAgIGlmIChtX3N0
YXRlID09IFN0YXRlOjpXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9y
TW9yZVNwYWNlKSB7Ci0gICAgICAgIGF1dG8gcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLnRh
a2VGaXJzdCgpOwotICAgICAgICBib29sIHNob3VsZEFsbG93UmVxdWVzdCA9ICFzaG91bGRBc2tG
b3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNlKTsKLQotICAgICAgICBSRUxFQVNFX0xP
RyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVl
c3RzIGZpcnN0IHJlcXVlc3QgZGVjaXNpb24gaXMgJWQiLCB0aGlzLCBzaG91bGRBbGxvd1JlcXVl
c3QpOwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0
OwotICAgICAgICByZXF1ZXN0LmNhbGxiYWNrKHNob3VsZEFsbG93UmVxdWVzdCA/IERlY2lzaW9u
OjpHcmFudCA6IERlY2lzaW9uOjpEZW55KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1fcGVuZGlu
Z1JlcXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvJiByZXF1ZXN0ID0gbV9wZW5kaW5n
UmVxdWVzdHMuZmlyc3QoKTsKLQotICAgICAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHJl
cXVlc3Quc3BhY2VJbmNyZWFzZSkpIHsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRl
OjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3QpIHsKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0g
U3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHVz
ZXIgOiBjb3B5VG9WZWN0b3IobV91c2VycykpCi0gICAgICAgICAgICAgICAgICAgIHVzZXItPmNv
bXB1dGVTcGFjZVVzZWQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlh
bGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3Jl
U3BhY2U7Ci0gICAgICAgICAgICB1aW50NjRfdCBzcGFjZUluY3JlYXNlID0gMDsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgcGVuZGluZ1JlcXVlc3QgOiBtX3BlbmRpbmdSZXF1ZXN0cykKLSAgICAg
ICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9IHBlbmRpbmdSZXF1ZXN0LnNwYWNlSW5jcmVhc2U7
Ci0gICAgICAgICAgICBhc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0Rl
Y2lzaW9uRm9yUmVxdWVzdDsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCku
Y2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKKyAgICBBU1NFUlQobV9xdW90YUNvdW50RG93bkxv
Y2suaXNMb2NrZWQoKSk7CisgICAgaWYgKHNwYWNlUmVxdWVzdGVkIDw9IG1fcXVvdGFDb3VudERv
d24pIHsKKyAgICAgICAgbV9xdW90YUNvdW50RG93biAtPSBzcGFjZVJlcXVlc3RlZDsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
UXVvdGFNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFn
ZXIuaAppbmRleCAwOTU2NjMwNmY1NS4uMmJmNGRkNjkwMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCkBAIC0yNSw3NyArMjUsNDcgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDbGllbnRPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvQ29t
cGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgU3RvcmFnZVF1b3RhVXNlcjsKLQotY2xhc3MgU3RvcmFnZVF1b3RhTWFuYWdlciA6
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiB7CitjbGFzcyBTdG9y
YWdlUXVvdGFNYW5hZ2VyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFN0b3JhZ2VRdW90
YU1hbmFnZXI+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHVzaW5nIFNwYWNlSW5j
cmVhc2VSZXF1ZXN0ZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQodWludDY0X3QgcXVvdGEsIHVpbnQ2
NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmKT47Ci0gICAgU3RvcmFnZVF1b3RhTWFuYWdl
cih1aW50NjRfdCBxdW90YSwgU3BhY2VJbmNyZWFzZVJlcXVlc3RlciYmIHNwYWNlSW5jcmVhc2VS
ZXF1ZXN0ZXIpCi0gICAgICAgIDogbV9xdW90YShxdW90YSkKLSAgICAgICAgLCBtX3NwYWNlSW5j
cmVhc2VSZXF1ZXN0ZXIoV1RGTW92ZShzcGFjZUluY3JlYXNlUmVxdWVzdGVyKSkKLSAgICB7Ci0g
ICAgfQotICAgIFdFQkNPUkVfRVhQT1JUIH5TdG9yYWdlUXVvdGFNYW5hZ2VyKCk7CisgICAgdXNp
bmcgVXNhZ2VHZXR0ZXIgPSBXVEY6OkZ1bmN0aW9uPHVpbnQ2NF90KCk+OworICAgIHVzaW5nIFF1
b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQodWludDY0X3QgY3VycmVu
dFF1b3RhLCB1aW50NjRfdCBjdXJyZW50VXNhZ2UsIHVpbnQ2NF90IHJlcXVlc3RlZEluY3JlYXNl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVpbnQ2NF90Pik+JiYpPjsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+IGNyZWF0ZSh1aW50
NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmKTsKIAog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YUZyb21Q
ZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkgeyByZXR1cm4gcXVvdGEgLyAxMDsgfQotCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBkZWZhdWx0UXVvdGEoKSB7IHJldHVybiAxMDAw
ICogTUI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5
UXVvdGEoKSB7IHJldHVybiBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3Rh
KGRlZmF1bHRRdW90YSgpKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyKFN0
b3JhZ2VRdW90YVVzZXImKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXIoU3Rv
cmFnZVF1b3RhVXNlciYpOwotCiAgICAgZW51bSBjbGFzcyBEZWNpc2lvbiB7IERlbnksIEdyYW50
IH07CiAgICAgdXNpbmcgUmVxdWVzdENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChE
ZWNpc2lvbik+OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdFNwYWNlKHVpbnQ2NF90
LCBSZXF1ZXN0Q2FsbGJhY2smJik7Ci0gICAgdm9pZCByZXNldFF1b3RhKHVpbnQ2NF90IG5ld1F1
b3RhKSB7IG1fcXVvdGEgPSBuZXdRdW90YTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1
cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCk7Ci0KLSAgICBlbnVtIGNsYXNzIFN0YXRlIHsK
LSAgICAgICAgVW5pbml0aWFsaXplZCwKLSAgICAgICAgQ29tcHV0aW5nU3BhY2VVc2VkLAotICAg
ICAgICBXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlLAotICAgICAgICBBc2tpbmdGb3JN
b3JlU3BhY2UsCi0gICAgICAgIE1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdCwKLSAgICB9OwotICAg
IFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKHVpbnQ2NF90LCBSZXF1ZXN0Q2FsbGJh
Y2smJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRGVjaXNpb24gcmVxdWVzdFNwYWNlT25CYWNrZ3Jv
dW5kVGhyZWFkKHVpbnQ2NF90KTsKIAogcHJpdmF0ZToKLSAgICB1aW50NjRfdCBzcGFjZVVzYWdl
KCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSkgY29uc3Q7Ci0gICAgdm9pZCBhc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSk7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7Ci0gICAgdm9p
ZCBhc2tVc2VyVG9Jbml0aWFsaXplKFN0b3JhZ2VRdW90YVVzZXImKTsKLQotICAgIHZvaWQgcHJv
Y2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4pOworICAgIFN0b3JhZ2VRdW90
YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYsIFF1b3RhSW5jcmVhc2VSZXF1
ZXN0ZXImJik7CisgICAgYm9vbCB0cnlHcmFudFJlcXVlc3QodWludDY0X3QpOwogCisgICAgTG9j
ayBtX3F1b3RhQ291bnREb3duTG9jazsKKyAgICB1aW50NjRfdCBtX3F1b3RhQ291bnREb3duIHsg
MCB9OwogICAgIHVpbnQ2NF90IG1fcXVvdGEgeyAwIH07CisgICAgdWludDY0X3QgbV91c2FnZSB7
IDAgfTsKIAotICAgIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIgbV9zcGFjZUluY3JlYXNlUmVxdWVz
dGVyOwotCi0gICAgZW51bSBjbGFzcyBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQgeyBObywgWWVzIH07
Ci0gICAgSGFzaE1hcDxTdG9yYWdlUXVvdGFVc2VyKiwgV2hlbkluaXRpYWxpemVkQ2FsbGVkPiBt
X3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzOwotICAgIEhhc2hTZXQ8U3RvcmFnZVF1b3RhVXNl
cio+IG1fdXNlcnM7CisgICAgVXNhZ2VHZXR0ZXIgbV91c2FnZUdldHRlcjsKKyAgICBRdW90YUlu
Y3JlYXNlUmVxdWVzdGVyIG1fcXVvdGFJbmNyZWFzZVJlcXVlc3RlcjsKIAotICAgIHN0cnVjdCBQ
ZW5kaW5nUmVxdWVzdCB7Ci0gICAgICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2U7Ci0gICAgICAg
IFJlcXVlc3RDYWxsYmFjayBjYWxsYmFjazsKLSAgICB9OwotICAgIERlcXVlPFBlbmRpbmdSZXF1
ZXN0PiBtX3BlbmRpbmdSZXF1ZXN0czsKKyAgICBEZXF1ZTxSZXF1ZXN0Q2FsbGJhY2s+IG1fY2Fs
bGJhY2tzOworICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOwogCi0gICAgU3RhdGUgbV9z
dGF0ZSB7IFN0YXRlOjpVbmluaXRpYWxpemVkIH07CisgICAgYm9vbCBtX3F1b3RhVXBkYXRlZEJh
c2VkT25Vc2FnZSB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDVm
MjNjYzY2YWExLi44ZWM1MTk5Yzc5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlICJXZWJz
aXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIK
ICNpbmNsdWRlICJXZWJzaXRlRGF0YVR5cGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9y
aWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9ETlMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oPgpA
QCAtMzE2LDggKzMxNywxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJgogICAgIGF1dG8gc2Vz
c2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwogICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3
b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwogCisgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBh
ZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEs
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0
b3J5KTsKKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGFkZEluZGV4ZWREYXRh
YmFzZVNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAg
IHNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoc2Vzc2lvbklELCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTMyNiw3ICszMzEs
NiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJgogICAgICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vz
c2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJv
Y2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgfQogI2VuZGlmCi0gICAgaW5p
dGlhbGl6ZVN0b3JhZ2VRdW90YShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
KTsKIAogICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAKQEAgLTQzNCwyOCArNDM4LDM5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmNsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoKQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRXZWJz
aXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKIHsK
KyAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNlc3Npb25JRDsKKworICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgYWRk
U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLnBlck9yaWdp
blN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3Rh
LCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSk7CisKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKLSNlbmRpZgorICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklE
LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIHNldFNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeSk7CisgI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAg
ICAgaWYgKHBhcmVudFByb2Nlc3NIYXNTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSkKLSAgICAg
ICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24ocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklELCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRp
b25EZWxheUVuYWJsZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vz
c2lvbklELCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVu
YWJsZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKICNlbmRpZgogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgcGFyYW1ldGVycy5sb2Nh
bFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKLQotICAgIGluaXRpYWxpemVTdG9yYWdlUXVvdGEocGFyYW1ldGVycyk7Cisg
ICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKIAogICAgIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0
YVN0b3JlU2Vzc2lvbigqdGhpcywgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiB9CiAKLXZvaWQgTmV0
d29ya1Byb2Nlc3M6OmluaXRpYWxpemVTdG9yYWdlUXVvdGEoY29uc3QgV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIHVpbnQ2NF90IGRl
ZmF1bHRRdW90YSwgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YSwgY29uc3QgU3RyaW5n
JiBjYWNoZVJvb3RQYXRoKQogewotICAgIGF1dG8mIG1hbmFnZXJzID0gIG1fc3RvcmFnZVF1b3Rh
TWFuYWdlcnMuZW5zdXJlKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Np
b25JRCwgW10gewotICAgICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcnMgeyB9OwotICAg
IH0pLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBtYW5hZ2Vycy5zZXREZWZhdWx0UXVvdGFzKHBhcmFt
ZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmln
aW5TdG9yYWdlUXVvdGEpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lvblN0b3JhZ2VR
dW90YU1hbmFnZXJzTG9jayk7CisgICAgYXV0b1tpdGVyLCBpc05ld0VudHJ5XSA9IG1fc2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXJzLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOworICAgIGlmIChp
c05ld0VudHJ5KQorICAgICAgICBpdGVyLT52YWx1ZSA9IG1ha2VVbmlxdWU8U2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXI+KGNhY2hlUm9vdFBhdGgsIGRlZmF1bHRRdW90YSwgZGVmYXVsdFRoaXJk
UGFydHlRdW90YSk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92ZVNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIEFTU0VS
VChtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5jb250YWlucyhzZXNzaW9uSUQpKTsKKyAg
ICBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5yZW1vdmUoc2Vzc2lvbklEKTsKIH0KIAog
dm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKGNvbnN0IEZ1bmN0aW9u
PHZvaWQoTmV0d29ya1Nlc3Npb24mKT4mIGZ1bmN0b3IpCkBAIC0xNDY4LDkgKzE0ODMsNiBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIE9wdGlvblNldDxXZWJzaQogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlKSAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkp
CiAgICAgICAgIGNsZWFyRGlza0NhY2hlKG1vZGlmaWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxl
ciA9IFdURk1vdmUoY2xlYXJUYXNrc0hhbmRsZXIpXSB7IH0pOwogCi0gICAgaWYgKHdlYnNpdGVE
YXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpIHx8
IHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpET01DYWNoZSkpCi0g
ICAgICAgIGNsZWFyU3RvcmFnZVF1b3RhKHNlc3Npb25JRCk7Ci0KICAgICBpZiAod2Vic2l0ZURh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkFkQ2xpY2tBdHRyaWJ1dGlvbnMpKSB7
CiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9u
KHNlc3Npb25JRCkpCiAgICAgICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+Y2xlYXJBZENsaWNrQXR0
cmlidXRpb24oKTsKQEAgLTE1NjMsMTkgKzE1NzUsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpk
ZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRp
bwogICAgICAgICB9CiAgICAgICAgIFdlYkNvcmU6OkNyZWRlbnRpYWxTdG9yYWdlOjpyZW1vdmVT
ZXNzaW9uQ3JlZGVudGlhbHNXaXRoT3JpZ2lucyhvcmlnaW5EYXRhcyk7CiAgICAgfQotCi0gICAg
Ly8gRklYTUU6IEltcGxlbWVudCBzdG9yYWdlIHF1b3RhIGNsZWFyaW5nIGZvciB0aGVzZSBvcmln
aW5zLgotfQotCi12b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhclN0b3JhZ2VRdW90YShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpCi17Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fc3RvcmFnZVF1b3Rh
TWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOwotICAgIGlmIChpdGVyYXRvciA9PSBtX3N0b3JhZ2VR
dW90YU1hbmFnZXJzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBtYW5hZ2Vy
cyA9IGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBmb3IgKGF1dG8mIG1hbmFnZXIgOiBtYW5hZ2Vycy5t
YW5hZ2Vyc1Blck9yaWdpbigpKQotICAgICAgICBtYW5hZ2VyLnZhbHVlLT5yZXNldFF1b3RhKG1h
bmFnZXJzLmRlZmF1bHRRdW90YShtYW5hZ2VyLmtleSkpOwogfQogCiAjaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIyMTcsMTAgKzIyMTYsMTAgQEAgUmVmPElEQlNlcnZl
cjo6SURCU2VydmVyPiBOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlSURCU2VydmVyKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb24KICAgICAgICAgcGF0aCA9IG1faWRiRGF0YWJhc2VQYXRocy5nZXQoc2Vzc2lv
bklEKTsKICAgICB9CiAKLSAgICByZXR1cm4gSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShz
ZXNzaW9uSUQsIHBhdGgsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IGF1dG8mIG9yaWdpbikgLT4gU3RvcmFnZVF1b3Rh
TWFuYWdlciogeworICAgIHJldHVybiBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Np
b25JRCwgcGF0aCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25J
RF0oY29uc3QgYXV0byYgb3JpZ2luKSAtPiBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gewog
ICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgIHJldHVybiAmdGhpcy0+c3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbik7
CisgICAgICAgIHJldHVybiBzdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsK
ICAgICB9KTsKIH0KIApAQCAtMjMwOSw2ICsyMzA4LDE1IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJp
bmcmCiAgICAgICAgICAgICBwb3N0U3RvcmFnZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMsIGluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeSkpOwogICAgIH0KIH0KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0U2Vzc2lvblN0
b3JhZ2VRdW90YU1hbmFnZXJJREJSb290UGF0aChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgaWRiUm9vdFBhdGgpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9zZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBhdXRvKiBzZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlciA9IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzLmdldChzZXNzaW9uSUQp
OworICAgIEFTU0VSVChzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcik7CisgICAgc2Vzc2lvblN0
b3JhZ2VRdW90YU1hbmFnZXItPnNldElEQlJvb3RQYXRoKGlkYlJvb3RQYXRoKTsKK30KKwogI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpz
eW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTIzMjMsMTMgKzIzMzEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckxl
Z2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpCiAgICAgICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmRlbGV0ZUxvY2FsU3RvcmFnZU1vZGlmaWVkU2luY2UoUEFMOjpTZXNzaW9uSUQ6Omxl
Z2FjeVByaXZhdGVTZXNzaW9uSUQoKSwgLVdhbGxUaW1lOjppbmZpbml0eSgpLCBbXSgpIHsgfSk7
CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2VG
b3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4pCi17Ci0gICAgYXV0byYgbWFuYWdlciA9IHN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lv
bklELCBvcmlnaW4pOwotICAgIG1hbmFnZXIucmVzZXRRdW90YShtX3N0b3JhZ2VRdW90YU1hbmFn
ZXJzLmZpbmQoc2Vzc2lvbklEKS0+dmFsdWUuZGVmYXVsdFF1b3RhKG9yaWdpbikpOwotICAgIG1h
bmFnZXIudXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOwotfQotCiAjaWYgRU5BQkxFKFNB
TkRCT1hfRVhURU5TSU9OUykKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmdldFNhbmRib3hFeHRlbnNp
b25zRm9yQmxvYkZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CkBAIC0yNDA0LDYyICsyNDA1LDM2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OnJlcXVlc3RTdG9yYWdlU3BhY2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBD
bGllbnRPCiAgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpSZXF1ZXN0U3RvcmFnZVNwYWNlIHsgc2Vz
c2lvbklELCBvcmlnaW4sIHF1b3RhLCBjdXJyZW50U2l6ZSwgc3BhY2VSZXF1aXJlZCB9LCBXVEZN
b3ZlKGNhbGxiYWNrKSwgMCk7CiB9CiAKLWNsYXNzIFF1b3RhVXNlckluaXRpYWxpemVyIGZpbmFs
IDogcHVibGljIFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVzZXIgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IFF1b3RhVXNlckluaXRpYWxpemVyKFN0
b3JhZ2VRdW90YU1hbmFnZXImIG1hbmFnZXIpCi0gICAgICAgIDogbV9tYW5hZ2VyKG1ha2VXZWFr
UHRyKG1hbmFnZXIpKQotICAgIHsKLSAgICAgICAgbWFuYWdlci5hZGRVc2VyKCp0aGlzKTsKLSAg
ICB9Ci0KLSAgICB+UXVvdGFVc2VySW5pdGlhbGl6ZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1f
bWFuYWdlcikKLSAgICAgICAgICAgIG1fbWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci0gICAg
ICAgIGlmIChtX2NhbGxiYWNrKQotICAgICAgICAgICAgbV9jYWxsYmFjaygpOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICAvLyBTdG9yYWdlUXVvdGFVc2VyIEFQSS4KLSAgICB1aW50NjRfdCBzcGFj
ZVVzZWQoKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KK1JlZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBO
ZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQoreworICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jayk7CisgICAgYXV0byogc2Vzc2lvblN0
b3JhZ2VRdW90YU1hbmFnZXIgPSBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5nZXQoc2Vz
c2lvbklEKTsKKyAgICBpZiAoIXNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjYWxsYmFjaykgZmluYWwKLSAgICB7Ci0gICAgICAgIG1fY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKTsKLSAgICB9CisgICAgU3RyaW5nIGlkYlJvb3RQYXRoOworI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgIGlkYlJvb3RQYXRoID0gc2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXItPmlkYlJvb3RQYXRoKCk7CisjZW5kaWYKKyAgICBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpVc2FnZUdldHRlciB1c2FnZUdldHRlciA9IFtjYWNoZVJvb3RQYXRoID0gc2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXItPmNhY2hlUm9vdFBhdGgoKSwgaWRiUm9vdFBhdGgsIG9yaWdp
bl0oKSB7CisgICAgICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOyAgICAKIAotICAgIFdlYWtQ
dHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gbV9tYW5hZ2VyOwotICAgIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4gbV9jYWxsYmFjazsKLX07CisgICAgICAgIHVpbnQ2NF90IHVzYWdlID0gMDsKKyAg
ICAgICAgdXNhZ2UgKz0gQ2FjaGVTdG9yYWdlOjpFbmdpbmU6OmRpc2tVc2FnZShjYWNoZVJvb3RQ
YXRoLCBvcmlnaW4pOworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgICAgICB1c2Fn
ZSArPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlza1VzYWdlKGlkYlJvb3RQYXRoLCBvcmlnaW4p
OworI2VuZGlmCiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVRdW90YVVzZXJzKFN0
b3JhZ2VRdW90YU1hbmFnZXImIG1hbmFnZXIsIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIG9yaWdpbiwg
dXNlciA9IG1ha2VVbmlxdWU8UXVvdGFVc2VySW5pdGlhbGl6ZXI+KG1hbmFnZXIpXSgpIG11dGFi
bGUgeworICAgICAgICByZXR1cm4gdXNhZ2U7CisgICAgfTsKKyAgICBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpRdW90YUluY3JlYXNlUmVxdWVzdGVyIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBbdGhp
cywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHNlc3Npb25JRCwgb3JpZ2luXSAodWlu
dDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHJlcXVl
c3RlZEluY3JlYXNlLCBhdXRvJiYgY2FsbGJhY2spIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdGhpcy0+aWRiU2VydmVyKHNlc3Npb25JRCkuaW5pdGlhbGl6ZVF1b3RhVXNlcihvcmln
aW4pOwotICAgICAgICBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6aW5pdGlhbGl6ZVF1b3RhVXNlcigq
dGhpcywgc2Vzc2lvbklELCBvcmlnaW4sIFt1c2VyID0gV1RGTW92ZSh1c2VyKV0geyB9KTsKLSAg
ICB9KTsKLX0KKyAgICAgICAgICAgIGNhbGxiYWNrKHsgfSk7CisgICAgICAgIHJlcXVlc3RTdG9y
YWdlU3BhY2Uoc2Vzc2lvbklELCBvcmlnaW4sIGN1cnJlbnRRdW90YSwgY3VycmVudFNwYWNlLCBy
ZXF1ZXN0ZWRJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIH07CiAKLVN0b3JhZ2VR
dW90YU1hbmFnZXImIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAgYXV0
byYgc3RvcmFnZVF1b3RhTWFuYWdlcnMgPSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmVuc3VyZShz
ZXNzaW9uSUQsIFtdIHsKLSAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsgfTsK
LSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgcmV0dXJuICpzdG9yYWdlUXVvdGFNYW5hZ2Vy
cy5tYW5hZ2Vyc1Blck9yaWdpbigpLmVuc3VyZShvcmlnaW4sIFt0aGlzLCAmc3RvcmFnZVF1b3Rh
TWFuYWdlcnMsIHNlc3Npb25JRCwgJm9yaWdpbl0gewotICAgICAgICBhdXRvIG1hbmFnZXIgPSBt
YWtlVW5pcXVlPFN0b3JhZ2VRdW90YU1hbmFnZXI+KHN0b3JhZ2VRdW90YU1hbmFnZXJzLmRlZmF1
bHRRdW90YShvcmlnaW4pLCBbdGhpcywgc2Vzc2lvbklELCBvcmlnaW5dKHVpbnQ2NF90IHF1b3Rh
LCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2Fs
bGJhY2spIHsKLSAgICAgICAgICAgIHRoaXMtPnJlcXVlc3RTdG9yYWdlU3BhY2Uoc2Vzc2lvbklE
LCBvcmlnaW4sIHF1b3RhLCBjdXJyZW50U3BhY2UsIHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2Fs
bGJhY2spKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGluaXRpYWxpemVRdW90YVVzZXJzKCptYW5h
Z2VyLCBzZXNzaW9uSUQsIG9yaWdpbik7Ci0gICAgICAgIHJldHVybiBtYW5hZ2VyOwotICAgIH0p
Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIt
PmVuc3VyZU9yaWdpblN0b3JhZ2VRdW90YU1hbmFnZXIob3JpZ2luLCBzZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlci0+ZGVmYXVsdFF1b3RhKG9yaWdpbiksIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBX
VEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKTsKIH0KIAogI2lmICFQTEFURk9STShDT0NP
QSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRl
eCBmNjJmMDFkMzgwZi4uMGNhYmFjNjZlYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTI4Myw3ICsyODMsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAg
dm9pZCBjbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpOwogCi0gICAgdm9p
ZCB1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwg
Y29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgdm9pZCB1cGRhdGVRdW90YUJhc2Vk
T25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJikgeyB9CiAKICNpZiBFTkFCTEUoU0FOREJPWF9FWFRFTlNJT05TKQogICAgIHZv
aWQgZ2V0U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGZpbGVuYW1lcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGVBcnJheSYmKT4mJik7CkBAIC0zMjcsNyArMzI3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQs
IFVSTCYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgbWFya0FkQ2xp
Y2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCi0gICAgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
ciYgc3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+IHN0
b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYpOwogCiAgICAgdm9pZCBhZGRLZXB0QWxpdmVMb2FkKFJlZjxOZXR3b3JrUmVzb3VyY2VM
b2FkZXI+JiYpOwogICAgIHZvaWQgcmVtb3ZlS2VwdEFsaXZlTG9hZChOZXR3b3JrUmVzb3VyY2VM
b2FkZXImKTsKQEAgLTQ0Miw2ICs0NDIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29sbGVjdElu
ZGV4ZWREYXRhYmFzZU9yaWdpbnNGb3JWZXJzaW9uKGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8V2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYpOwogICAgIEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhPiBpbmRleGVkRGF0YWJhc2VPcmlnaW5zKGNvbnN0IFN0cmluZyYgcGF0aCk7
CiAgICAgUmVmPFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyPiBjcmVhdGVJREJTZXJ2ZXIo
UEFMOjpTZXNzaW9uSUQpOworICAgIHZvaWQgc2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJJ
REJSb290UGF0aChQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBpZGJSb290UGF0aCk7CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTQ2MSw5ICs0NjIsNDMgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHBlcmZvcm1OZXh0U3RvcmFnZVRhc2soKTsKICAgICB2b2lkIGVu
c3VyZVBhdGhFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAotICAgIHZvaWQgY2xlYXJTdG9y
YWdlUXVvdGEoUEFMOjpTZXNzaW9uSUQpOwotICAgIHZvaWQgaW5pdGlhbGl6ZVN0b3JhZ2VRdW90
YShjb25zdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYpOworICAgIGNsYXNzIFNlc3Npb25T
dG9yYWdlUXVvdGFNYW5hZ2VyIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cisg
ICAgcHVibGljOgorICAgICAgICBTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihjb25zdCBTdHJp
bmcmIGNhY2hlUm9vdFBhdGgsIHVpbnQ2NF90IGRlZmF1bHRRdW90YSwgdWludDY0X3QgZGVmYXVs
dFRoaXJkUGFydHlRdW90YSkKKyAgICAgICAgICAgIDogbV9jYWNoZVJvb3RQYXRoKGNhY2hlUm9v
dFBhdGgpCisgICAgICAgICAgICAsIG1fZGVmYXVsdFF1b3RhKGRlZmF1bHRRdW90YSkKKyAgICAg
ICAgICAgICwgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEp
CisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB1aW50NjRfdCBkZWZhdWx0UXVvdGEoY29u
c3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pIGNvbnN0IHsgcmV0dXJuIG9yaWdpbi50
b3BPcmlnaW4gPT0gb3JpZ2luLmNsaWVudE9yaWdpbiA/IG1fZGVmYXVsdFF1b3RhIDogbV9kZWZh
dWx0VGhpcmRQYXJ0eVF1b3RhOyB9CiAKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI+IGVuc3VyZU9yaWdpblN0b3JhZ2VRdW90YU1hbmFnZXIoV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luIG9yaWdpbiwgdWludDY0X3QgcXVvdGEsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OlVzYWdlR2V0dGVyJiYgdXNhZ2VHZXR0ZXIsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OlF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiBxdW90YUluY3JlYXNlUmVxdWVzdGVyKQor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvW2l0ZXIsIGlzTmV3RW50cnldID0gbV9zdG9yYWdl
UXVvdGFNYW5hZ2Vycy5hZGQob3JpZ2luLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmIChpc05l
d0VudHJ5KQorICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlID0gV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6Y3JlYXRlKHF1b3RhLCBXVEZNb3ZlKHVzYWdlR2V0dGVyKSwgV1RGTW92ZShx
dW90YUluY3JlYXNlUmVxdWVzdGVyKSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVJlZlB0cigq
aXRlci0+dmFsdWUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb25zdCBTdHJpbmcm
IGNhY2hlUm9vdFBhdGgoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlUm9vdFBhdGg7IH0KKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICAgICAgdm9pZCBzZXRJREJSb290UGF0aChjb25z
dCBTdHJpbmcmIGlkYlJvb3RQYXRoKSB7IG1faWRiUm9vdFBhdGggPSBpZGJSb290UGF0aDsgfQor
ICAgICAgICBjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9pZGJS
b290UGF0aDsgfQorI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICBTdHJpbmcgbV9jYWNo
ZVJvb3RQYXRoOworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgICAgICBTdHJpbmcg
bV9pZGJSb290UGF0aDsKKyNlbmRpZgorICAgICAgICB1aW50NjRfdCBtX2RlZmF1bHRRdW90YSB7
IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpIH07CisgICAgICAg
IHVpbnQ2NF90IG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OmRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB9OworICAgICAgICBIYXNoTWFwPFdl
YkNvcmU6OkNsaWVudE9yaWdpbiwgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+
PiBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzOworICAgIH07CisgICAgdm9pZCBhZGRTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1
aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBh
dGgpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNz
aW9uSUQpOworIAogICAgIC8vIENvbm5lY3Rpb25zIHRvIFdlYlByb2Nlc3Nlcy4KICAgICBIYXNo
TWFwPFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBSZWY8TmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M+PiBtX3dlYlByb2Nlc3NDb25uZWN0aW9uczsKIApAQCAtNTMzLDIzICs1NjgsOCBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCB7IGZhbHNlIH07CiAj
ZW5kaWYKICAgICAKLSAgICBjbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VycyB7Ci0gICAgcHVibGlj
OgotICAgICAgICB1aW50NjRfdCBkZWZhdWx0UXVvdGEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luJiBvcmlnaW4pIGNvbnN0IHsgcmV0dXJuIG9yaWdpbi50b3BPcmlnaW4gPT0gb3JpZ2luLmNs
aWVudE9yaWdpbiA/IG1fZGVmYXVsdFF1b3RhIDogbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhOyB9
Ci0gICAgICAgIHZvaWQgc2V0RGVmYXVsdFF1b3Rhcyh1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVp
bnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1f
ZGVmYXVsdFF1b3RhID0gZGVmYXVsdFF1b3RhOwotICAgICAgICAgICAgbV9kZWZhdWx0VGhpcmRQ
YXJ0eVF1b3RhID0gZGVmYXVsdFRoaXJkUGFydHlRdW90YTsKLSAgICAgICAgfQotCi0gICAgICAg
IEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcj4+JiBtYW5hZ2Vyc1Blck9yaWdpbigpIHsgcmV0dXJuIG1fbWFu
YWdlcnNQZXJPcmlnaW47IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2NF90IG1fZGVm
YXVsdFF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCkg
fTsKLSAgICAgICAgdWludDY0X3QgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhIHsgV2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgpIH07Ci0gICAgICAg
IEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fbWFuYWdlcnNQZXJPcmlnaW47Ci0gICAgfTsKLSAgICBI
YXNoTWFwPFBBTDo6U2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2Vycz4gbV9zdG9yYWdlUXVv
dGFNYW5hZ2VyczsKKyAgICBMb2NrIG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jazsK
KyAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXI+PiBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyczsKIAogICAgIE9w
dGlvblNldDxOZXR3b3JrQ2FjaGU6OkNhY2hlT3B0aW9uPiBtX2NhY2hlT3B0aW9uczsKICAgICBX
ZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeSBtX21lc3NhZ2VQb3J0Q2hhbm5lbFJl
Z2lzdHJ5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9D
YWNoZVN0b3JhZ2VFbmdpbmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCmluZGV4IGFjMTI5NGUzMTliLi5iYTIxZDEwMzBlMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lLmNwcApAQCAtMTkwLDEzICsxOTAsNTUgQEAgdm9pZCBFbmdpbmU6OmNs
ZWFyQ2FjaGVzRm9yT3JpZ2luKE5ldHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgUEFMOjpT
ZXNzaW9uSUQKICAgICB9KTsKIH0KIAotdm9pZCBFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIo
TmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgY2xpZW50T3JpZ2luLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCitzdGF0aWMgdWludDY0X3QgZ2V0RGly
ZWN0b3J5U2l6ZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpCit7CisgICAgdWludDY0X3Qg
ZGlyZWN0b3J5U2l6ZSA9IDA7CisgICAgRGVxdWU8U3RyaW5nPiBwYXRoczsKKyAgICBwYXRocy5h
cHBlbmQoZGlyZWN0b3J5UGF0aCk7CisgICAgd2hpbGUgKCFwYXRocy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgYXV0byBwYXRoID0gcGF0aHMudGFrZUZpcnN0KCk7CisgICAgICAgIGlmIChGaWxlU3lz
dGVtOjpmaWxlSXNEaXJlY3RvcnkocGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9s
aWNMaW5rczo6Tm8pKSB7CisgICAgICAgICAgICBhdXRvIG5ld1BhdGhzID0gRmlsZVN5c3RlbTo6
bGlzdERpcmVjdG9yeShwYXRoLCAiKiJfcyk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIG5ld1Bh
dGggOiBuZXdQYXRocykKKyAgICAgICAgICAgICAgICBwYXRocy5hcHBlbmQobmV3UGF0aCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb25nIGxvbmcgZmlsZVNpemUgPSAwOworICAg
ICAgICAgICAgRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUocGF0aCwgZmlsZVNpemUpOworICAgICAg
ICAgICAgZGlyZWN0b3J5U2l6ZSArPSBmaWxlU2l6ZTsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5
cygic2lodWlsOiBnZXREaXJlY3RvcnlTaXplIGZpbGVQYXRoWyVzXSwgc2l6ZVslbGx1XSIsIHBh
dGgudXRmOCgpLmRhdGEoKSwgZmlsZVNpemUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBkaXJlY3RvcnlTaXplOworfQorCit1aW50NjRfdCBFbmdpbmU6OmRpc2tVc2FnZShjb25zdCBT
dHJpbmcmIHJvb3RQYXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsK
LSAgICBmcm9tKG5ldHdvcmtQcm9jZXNzLCBzZXNzaW9uSUQsIFtjbGllbnRPcmlnaW4sIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mIGVuZ2luZSkg
bXV0YWJsZSB7Ci0gICAgICAgIGVuZ2luZS5yZWFkQ2FjaGVzRnJvbURpc2soY2xpZW50T3JpZ2lu
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYm
IGNhY2hlc09yRXJyb3IpIG11dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7CisgICAgLy8gRklYTUU6IHJlLWltcGxlbWVudAorICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChyb290UGF0aC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgU3RyaW5nIHNhbHRQYXRoID0gRmlsZVN5c3RlbTo6cGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJvb3RQYXRoLCAic2FsdCJfcyk7CisgICAgYXV0byBzYWx0
ID0gcmVhZE9yTWFrZVNhbHQoc2FsdFBhdGgpOworICAgIGlmICghc2FsdCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBLZXkga2V5KG9yaWdpbi50b3BPcmlnaW4udG9TdHJpbmcoKSwgb3JpZ2lu
LmNsaWVudE9yaWdpbi50b1N0cmluZygpLCB7IH0sIHsgfSwgKnNhbHQpOworICAgIFN0cmluZyBk
aXJlY3RvcnlQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJvb3RQ
YXRoLCBrZXkuaGFzaEFzU3RyaW5nKCkpOworCisgICAgcmV0dXJuIGdldERpcmVjdG9yeVNpemUo
ZGlyZWN0b3J5UGF0aCk7Cit9CisKK3ZvaWQgRW5naW5lOjpyZXF1ZXN0U3BhY2UoY29uc3QgQ2xp
ZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJiBjYWxs
YmFjaykKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIGNhbGxiYWNrKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KTsKKworICAgIFJlZlB0
cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBzdG9yYWdlUXVvdGFNYW5hZ2VyID0gbV9u
ZXR3b3JrUHJvY2Vzcy0+c3RvcmFnZVF1b3RhTWFuYWdlcihtX3Nlc3Npb25JRCwgb3JpZ2luKTsK
KyAgICBpZiAoIXN0b3JhZ2VRdW90YU1hbmFnZXIpCisgICAgICAgIGNhbGxiYWNrKFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KTsKKworICAgIHN0b3JhZ2VRdW90
YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZChzcGFjZVJlcXVlc3RlZCwgV1RGTW92
ZShjYWxsYmFjaykpOwogfQogCiBFbmdpbmU6OkVuZ2luZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIE5ldHdvcmtQcm9jZXNzJiBwcm9jZXNzLCBTdHJpbmcmJiByb290UGF0aCkKQEAgLTMzMCw3
ICszNzIsNyBAQCB2b2lkIEVuZ2luZTo6cmVhZENhY2hlc0Zyb21EaXNrKGNvbnN0IFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBDYWNoZXNDYWxsYgogCiAgICAgICAgIGF1dG8mIGNhY2hl
cyA9IG1fY2FjaGVzLmVuc3VyZShvcmlnaW4sIFsmb3JpZ2luLCB0aGlzXSB7CiAgICAgICAgICAg
ICBhdXRvIHBhdGggPSBjYWNoZXNSb290UGF0aChvcmlnaW4pOwotICAgICAgICAgICAgcmV0dXJu
IENhY2hlczo6Y3JlYXRlKCp0aGlzLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4geyBvcmlnaW4gfSwg
V1RGTW92ZShwYXRoKSwgbV9uZXR3b3JrUHJvY2Vzcy0+c3RvcmFnZVF1b3RhTWFuYWdlcihtX3Nl
c3Npb25JRCwgb3JpZ2luKSk7CisgICAgICAgICAgICByZXR1cm4gQ2FjaGVzOjpjcmVhdGUoKnRo
aXMsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IG9yaWdpbiB9LCBXVEZNb3ZlKHBhdGgpKTsKICAg
ICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgICAgIGlmIChjYWNoZXMtPmlzSW5pdGlh
bGl6ZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lLmgKaW5kZXggMzhkNmZjMTM0ZmUuLmNjOTFlY2MwNjMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVE
YXRhLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGEuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVu
dE9yaWdpbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5oPgogI2lu
Y2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC03OSw2ICs4MCw5IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyB2b2lkIGluaXRpYWxpemVRdW90YVVzZXIoTmV0d29ya1Byb2Nlc3MmLCBQQUw6OlNlc3Np
b25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKIAorICAgIHN0YXRpYyB1aW50NjRfdCBkaXNrVXNhZ2UoY29uc3QgU3RyaW5nJiBy
b290UGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgdm9pZCByZXF1ZXN0
U3BhY2UoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc3BhY2VSZXF1ZXN0
ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6
RGVjaXNpb24pPiYmKTsKKwogICAgIGJvb2wgc2hvdWxkUGVyc2lzdCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9pb1F1ZXVlO30KIAogICAgIHZvaWQgd3JpdGVGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIE5ldHdvcmtDYWNoZTo6RGF0YSYmLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxl
dGlvbkNhbGxiYWNrJiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmluZGV4IGJiMGU2
YmJlZDAzLi4wZGVhM2JmZjY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcApAQCAt
NTYsMzYgKzU2LDIxIEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIGNhY2hlc1NpemVGaWxlbmFtZShj
b25zdCBTdHJpbmcmIGNhY2hlc1Jvb3RzUGF0aCkKICAgICByZXR1cm4gRmlsZVN5c3RlbTo6cGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlc1Jvb3RzUGF0aCwgImVzdGltYXRlZHNpemUiX3Mp
OwogfQogCi1SZWY8Q2FjaGVzPiBDYWNoZXM6OmNyZWF0ZShFbmdpbmUmIGVuZ2luZSwgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCwgV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlciYgcXVvdGFNYW5hZ2VyKQorUmVmPENhY2hlcz4gQ2FjaGVzOjpjcmVh
dGUoRW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5n
JiYgcm9vdFBhdGgpCiB7Ci0gICAgYXV0byBjYWNoZXMgPSBhZG9wdFJlZigqbmV3IENhY2hlcyB7
IGVuZ2luZSwgV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKHJvb3RQYXRoKSwgcXVvdGFNYW5hZ2Vy
IH0pOwotICAgIHF1b3RhTWFuYWdlci5hZGRVc2VyKGNhY2hlcy5nZXQoKSk7Ci0gICAgcmV0dXJu
IGNhY2hlczsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYWNoZXMgeyBlbmdpbmUsIFdURk1v
dmUob3JpZ2luKSwgV1RGTW92ZShyb290UGF0aCkgfSk7CiB9CiAKIENhY2hlczo6Q2FjaGVzKEVu
Z2luZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJv
b3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJiBxdW90YU1hbmFnZXIpCiAgICAg
OiBtX2VuZ2luZSgmZW5naW5lKQogICAgICwgbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAg
ICwgbV9yb290UGF0aChXVEZNb3ZlKHJvb3RQYXRoKSkKLSAgICAsIG1fcXVvdGFNYW5hZ2VyKG1h
a2VXZWFrUHRyKHF1b3RhTWFuYWdlcikpCiB7CiB9CiAKIENhY2hlczo6fkNhY2hlcygpCiB7CiAg
ICAgQVNTRVJUKG1fcGVuZGluZ1dyaXRpbmdDYWNoZXNUb0Rpc2tDYWxsYmFja3MuaXNFbXB0eSgp
KTsKLQotICAgIGlmIChtX3F1b3RhTWFuYWdlcikKLSAgICAgICAgbV9xdW90YU1hbmFnZXItPnJl
bW92ZVVzZXIoKnRoaXMpOwotfQotCi12b2lkIENhY2hlczo6d2hlbkluaXRpYWxpemVkKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKLXsKLSAgICBpbml0aWFsaXplKFtjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAg
ICBpZiAoZXJyb3IpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihDYWNoZVN0b3JhZ2Us
ICJDYWNoZXM6OmluaXRpYWxpemUgZmFpbGVkLCByZXBvcnRlZCBzcGFjZSB1c2VkIHdpbGwgYmUg
emVybyIpOwotICAgICAgICBjYWxsYmFjaygpOwotICAgIH0pOwogfQogCiB2b2lkIENhY2hlczo6
cmV0cmlldmVPcmlnaW5Gcm9tRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZm9sZGVyUGF0aCwgV29y
a1F1ZXVlJiBxdWV1ZSwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNv
cmU6OkNsaWVudE9yaWdpbj4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNzMsMTMgKzI1
OCwxMSBAQCB2b2lkIENhY2hlczo6Y2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogICAgICAgICBtX3N0b3JhZ2UtPmNsZWFyKFN0cmluZyB7IH0sIC1X
YWxsVGltZTo6aW5maW5pdHkoKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
ICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5jbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5yZXNldFNwYWNlVXNlZCgpOwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2xlYXJNZW1v
cnlSZXByZXNlbnRhdGlvbigpOwotICAgIHJlc2V0U3BhY2VVc2VkKCk7CiAgICAgY2xlYXJQZW5k
aW5nV3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrcygpOwogICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CiB9CkBAIC01MjUsMTIgKzUwOCwxMiBAQCB2b2lkIENhY2hlczo6cmVhZFJlY29yZHNMaXN0
KENhY2hlJiBjYWNoZSwgTmV0d29ya0NhY2hlOjpTdG9yYWdlOjpUcmF2ZXJzZUhhbmRsZQogCiB2
b2lkIENhY2hlczo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlUmVxdWlyZWQsIFdlYkNvcmU6
OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBp
ZiAoIW1fcXVvdGFNYW5hZ2VyKSB7CisgICAgaWYgKCFtX2VuZ2luZSkgewogICAgICAgICBjYWxs
YmFjayhFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX3F1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHNwYWNlUmVxdWlyZWQsIFtjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKKyAgICBtX2VuZ2lu
ZS0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCBzcGFjZVJlcXVpcmVkLCBbY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CiAgICAgICAgIHN3aXRjaCAo
ZGVjaXNpb24pIHsKICAgICAgICAgY2FzZSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6RGVueToKICAgICAgICAgICAgIGNhbGxiYWNrKEVycm9yOjpRdW90YUV4Y2VlZGVk
KTsKQEAgLTYyMSwxNyArNjA0LDYgQEAgdm9pZCBDYWNoZXM6OnJlbW92ZUNhY2hlRW50cnkoY29u
c3QgTmV0d29ya0NhY2hlOjpLZXkmIGtleSkKICAgICBtX3N0b3JhZ2UtPnJlbW92ZShrZXkpOwog
fQogCi12b2lkIENhY2hlczo6cmVzZXRTcGFjZVVzZWQoKQotewotICAgIG1fc2l6ZSA9IDA7Ci0g
ICAgdXBkYXRlU2l6ZUZpbGUoKTsKLQotICAgIGlmIChtX3F1b3RhTWFuYWdlcikgewotICAgICAg
ICBtX3F1b3RhTWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci0gICAgICAgIG1fcXVvdGFNYW5h
Z2VyLT5hZGRVc2VyKCp0aGlzKTsKLSAgICB9Ci19Ci0KIHZvaWQgQ2FjaGVzOjpjbGVhck1lbW9y
eVJlcHJlc2VudGF0aW9uKCkKIHsKICAgICBpZiAoIW1faXNJbml0aWFsaXplZCkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGVzLmgKaW5kZXggNTVhOWVlZWZlOTUuLjgwZWI4ZDRhNjcxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGVzLmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJDYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFn
ZVF1b3RhVXNlci5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgogCkBAIC00Miw5ICs0MSw5IEBAIG5hbWVzcGFjZSBDYWNoZVN0b3Jh
Z2UgewogCiBjbGFzcyBFbmdpbmU7CiAKLWNsYXNzIENhY2hlcyBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGVkPENhY2hlcz4sIHByaXZhdGUgV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlciB7CitjbGFz
cyBDYWNoZXMgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWNoZXM+IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPENhY2hlcz4gY3JlYXRlKEVuZ2luZSYsIFdlYkNvcmU6OkNsaWVudE9yaWdp
biYmLCBTdHJpbmcmJiByb290UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYpOwor
ICAgIHN0YXRpYyBSZWY8Q2FjaGVzPiBjcmVhdGUoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luJiYsIFN0cmluZyYmIHJvb3RQYXRoKTsKICAgICB+Q2FjaGVzKCk7CiAKICAgICBzdGF0aWMg
dm9pZCByZXRyaWV2ZU9yaWdpbkZyb21EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBmb2xkZXJQYXRo
LCBXb3JrUXVldWUmLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8V2ViQ29y
ZTo6Q2xpZW50T3JpZ2luPiYmKT4mJik7CkBAIC03OCwyMiArNzcsMTYgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBjbGVhcihXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9p
ZCBjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgdm9pZCByZXNldFNwYWNlVXNlZCgp
OwogCiAgICAgdWludDY0X3Qgc3RvcmFnZVNpemUoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBD
YWNoZXMoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYsIFN0cmluZyYmIHJvb3RQYXRo
LCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJik7Ci0KLSAgICAvLyBTdG9yYWdlUXVvdGFV
c2VyIEFQSS4KLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X3NpemU7IH0KKyAgICBDYWNoZXMoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYsIFN0
cmluZyYmIHJvb3RQYXRoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVNpemUoKTsKICAgICB2b2lk
IHJlYWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8VmVjdG9yPENh
Y2hlPiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7CiAgICAgdm9pZCB3
cml0ZUNhY2hlc1RvRGlzayhXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxi
YWNrJiYpOwogCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKSBmaW5hbDsKLQogICAgIHZvaWQgc3RvcmVPcmlnaW4oV2ViQ29yZTo6RE9NQ2FjaGVF
bmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKICAgICBzdGF0aWMgT3B0aW9uYWw8V2ViQ29y
ZTo6Q2xpZW50T3JpZ2luPiByZWFkT3JpZ2luKGNvbnN0IE5ldHdvcmtDYWNoZTo6RGF0YSYpOwog
CkBAIC0xMjEsNyArMTE0LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8V2ViQ29yZTo6RE9NQ2Fj
aGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjaz4gbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25DYWxs
YmFja3M7CiAgICAgYm9vbCBtX2lzV3JpdGluZ0NhY2hlc1RvRGlzayB7IGZhbHNlIH07CiAgICAg
RGVxdWU8Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVu
Z2luZTo6RXJyb3I+KT4+IG1fcGVuZGluZ1dyaXRpbmdDYWNoZXNUb0Rpc2tDYWxsYmFja3M7Ci0g
ICAgV2Vha1B0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBtX3F1b3RhTWFuYWdlcjsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIENhY2hlU3RvcmFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4IGMwZmNmOWM1ZjYw
Li42ZDBjMTI5YTc0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApAQCAtNTUsNiArNTUsOCBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogCiAg
ICAgZW5jb2RlciA8PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPDwgbG9jYWxTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlOwogCisgICAgZW5jb2RlciA8PCBjYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkgPDwgY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworCiAgICAgZW5jb2Rl
ciA8PCBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7CiAgICAgZW5jb2RlciA8PCBwZXJUaGlyZFBhcnR5
T3JpZ2luU3RvcmFnZVF1b3RhOwogfQpAQCAtMTQxLDYgKzE0MywxOCBAQCBPcHRpb25hbDxXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29k
ZShJUEM6OkRlYwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMu
bG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqbG9jYWxTdG9y
YWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIAorICAgIE9wdGlvbmFsPFN0cmluZz4gY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5OworICAgIGRlY29kZXIgPj4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5
OworICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5KQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZSgq
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKKworICAgIE9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZT4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGRlY29k
ZXIgPj4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGlmICghY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlID0gV1RGTW92ZSgqY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKwog
ICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7CiAgICAgZGVjb2Rl
ciA+PiBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7CiAgICAgaWYgKCFwZXJPcmlnaW5TdG9yYWdlUXVv
dGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMuaAppbmRleCAwOTVmMDlkNmFmOS4uZjI3ZGY0ODk4MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNzEsNiArNzEsOSBA
QCBzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgewogICAgIFN0cmluZyBsb2NhbFN0
b3JhZ2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGxvY2FsU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKIAorICAgIFN0cmluZyBjYWNoZVN0b3JhZ2VEaXJl
Y3Rvcnk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNhY2hlU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZTsKKwogICAgIHVpbnQ2NF90IHBlck9yaWdpblN0b3JhZ2VRdW90YSB7
IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpIH07CiAgICAgdWlu
dDY0X3QgcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OmRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB9OwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5k
ZXggZjk0MjlmOGIwOWMuLjMwNzI4YzBlMDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaApAQCAtNTYsNiArNTYsNyBA
QCBlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biA6IGJvb2w7CiBlbnVtIGNs
YXNzIFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkIDogYm9vbDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2lu
Owogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKK3N0cnVjdCBDbGllbnRPcmlnaW47CiB9CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCmluZGV4IDBlMzc4ODk5Mzk2Li5lMzI1YThlZDY3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtNTUyLDYgKzU1MiwxMyBAQCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0
ZURhdGFTdG9yZSogd2l0aAogICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwogICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9j
YWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIAorICAgIGF1dG8gY2FjaGVTdG9y
YWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5j
YWNoZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKKyAgICBpZiAoIWNhY2hlU3Rv
cmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBjYWNoZVN0b3JhZ2VEaXJl
Y3Rvcnk7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0
ZURpcmVjdG9yeShjYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAg
ICB9CisKKwogICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCiAgICAgICAgIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVk
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwogICAgIGlmIChwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRh
U3RvcmVDb2NvYS5tbQppbmRleCAyOWU5MDAzZjA0Ni4uYjBkMjZmMDcwYzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3Rv
cmVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2Nv
YS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KQEAgLTExNSw2ICsxMTUsMTAgQEAgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgaWYg
KCFyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHJlc291cmNl
TG9hZFN0YXRpc3RpY3NEaXJlY3RvcnksIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlI
YW5kbGUpOwogCisgICAgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBjYWNoZVN0
b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKICAgICBhdXRv
IG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IHJlc29sdmVkTmV0d29ya0NhY2hlRGlyZWN0b3J5KCk7
CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIG5ldHdvcmtDYWNoZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZTsKICAgICBpZiAoIW5ldHdvcmtDYWNoZURpcmVjdG9yeS5pc0VtcHR5KCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuY3BwCmluZGV4IGJiOTg0MTY2NDU0Li40YjI3ZGZiNGYzMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5jcHAKQEAgLTIwODMsNiArMjA4MywxMiBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBX
ZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIH0K
IAorICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gdGhpcy0+Y2FjaGVTdG9yYWdlRGly
ZWN0b3J5KCk7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gY2FjaGVTdG9yYWdlRGly
ZWN0b3J5OworICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3Jp
dGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgfQorCiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCiAgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSByZXNv
bHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpOwogICAgIGlmICghcGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBlMzJiODVlNDJkYy4uYTcwZTE0NjQ0YzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03
MzQsNyArNzM0LDYgQEAKIAkJOTM5OUJBMDYyMzcxMTE0RjAwODM5MkJGIC8qIEluZGV4ZWREQk5v
dEluUGFnZUNhY2hlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTM5OUJBMDMyMzcxMTBCRjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdElu
UGFnZUNhY2hlLmh0bWwgKi87IH07CiAJCTkzQUY0RUNFMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNEMTUwNkYwNjQwMDdG
RDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNw
cCAqLzsgfTsKIAkJOTNBRjRFRDExNTA2RjEzMDAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNBRjRFQ0YxNTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi87IH07Ci0J
CTkzQjYyMDU0MjM0RUE2MkMwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjYyMDUzMjM0RUEz
MkIwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJOTNDRkE4Njcx
Q0VCOUUzODAwMDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0NGQTg2NjFDRUI5
REUxMDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sICovOyB9OwogCQk5M0Qx
MTlGQzIyQzY4MEY3MDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0QxMTlGQjIyQzU3MTEyMDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXBy
aXZhdGUuaHRtbCAqLzsgfTsKIAkJOTNFMkM1NTUxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRp
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNF
MkM1NTQxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRpbmcuY3BwICovOyB9OwpAQCAtMjEzOCw3
ICsyMTM3LDYgQEAKIAkJOTNBRjRFQ0ExNTA2RjAzNTAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dEZvckltYWdlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FGNEVDRDE1MDZGMDY0MDA3RkQ1N0UgLyog
TmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTNBRjRFQ0YxNTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0Lmh0bWw7IHBhdGggPSAibG90cy1vZi1pbWFnZXMuaHRtbCI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTkzQjYyMDUzMjM0RUEzMkIwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFN
YW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VR
dW90YU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0NGQTg2NjFD
RUI5REUxMDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5odG1sOyBwYXRoID0gImF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0ZBODY4MUNFQkNGRUQwMDA1NjVBOCAvKiBDYW5kaWRh
dGVUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENhbmRp
ZGF0ZVRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0QxMTlGQjIyQzU3
MTEyMDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0
ZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxMTAsNyArMzEwOCw2IEBA
CiAJCQkJNDE5NzNCNUMxQUYyMjg3NTAwNkM3QjM2IC8qIFNoYXJlZEJ1ZmZlci5jcHAgKi8sCiAJ
CQkJQTE3OTkxODkxRTFDQTI0MTAwQTUwNUVEIC8qIFNoYXJlZEJ1ZmZlclRlc3QuY3BwICovLAog
CQkJCUExNzk5MThBMUUxQ0EyNDEwMEE1MDVFRCAvKiBTaGFyZWRCdWZmZXJUZXN0LmggKi8sCi0J
CQkJOTNCNjIwNTMyMzRFQTMyQjAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwICov
LAogCQkJCUVDQTY4MENEMUU2OENDMDkwMDczMUQyMCAvKiBTdHJpbmdVdGlsaXRpZXMubW0gKi8s
CiAJCQkJQ0U0RDVERTUxRjY3NDNCQTAwNzJDRkM2IC8qIFN0cmluZ1dpdGhEaXJlY3Rpb24uY3Bw
ICovLAogCQkJCTkzQTI1ODk4MUY5MkZGMTUwMDNFNTEwQyAvKiBUZXh0Q29kZWMuY3BwICovLApA
QCAtNDg0Niw3ICs0ODQzLDYgQEAKIAkJCQk3Q0NFN0VDRjFBNDExQTdFMDA0NDdDNEMgLyogU3Rv
cExvYWRpbmdGcm9tRGlkUmVjZWl2ZVJlc3BvbnNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RD
MDkzMkUyMUM5OTM0NDAwMzBDNEIwIC8qIFN0b3BTdXNwZW5kUmVzdW1lQWxsTWVkaWEubW0gaW4g
U291cmNlcyAqLywKIAkJCQk0MTRBRDY4NjIyODVEMUMwMDA3NzdGMkQgLyogU3RvcmFnZVF1b3Rh
Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJOTNCNjIwNTQyMzRFQTYyQzAwRDQ5Qjk3IC8qIFN0b3Jh
Z2VRdW90YU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1QkUxNzExRDQyOEU0QjAw
REQ3QzY4IC8qIFN0b3JlQmxvYlRoZW5EZWxldGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NF
N0VEMDFBNDExQTdFMDA0NDdDNEMgLyogU3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21T
dHJpbmcubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VEMTFBNDExQTdFMDA0NDdDNEMgLyog
U3RyaW5nVHJ1bmNhdG9yLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMWM2N2JmMDUyLi4wMDAwMDAwMDAwMAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0q
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFn
ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VRdW90YVVzZXIuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKLQotc3RhdGljIGNv
bnN0IGludCBkZWZhdWx0UXVvdGEgPSAxICogS0I7Ci0KLWNsYXNzIE1vY2tRdW90YVVzZXIgZmlu
YWwgOiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlciB7Ci1wdWJsaWM6Ci0gICAgZXhw
bGljaXQgTW9ja1F1b3RhVXNlcihTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5hZ2VyKQotICAgICAg
ICA6IG1fbWFuYWdlcigmbWFuYWdlcikKLSAgICB7Ci0gICAgICAgIG1hbmFnZXIuYWRkVXNlcigq
dGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2Vk
KSB7IG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOyB9Ci0KLXByaXZhdGU6Ci0gICAgdWludDY0X3Qg
c3BhY2VVc2VkKCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NwYWNlVXNl
ZDsKLSAgICB9Ci0KLSAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2spIGZpbmFsCi0gICAgewotICAgICAgICBpZiAoIW1fc3BhY2VVc2Vk
KQotICAgICAgICAgICAgQVNTRVJUX0VRKG1fbWFuYWdlci0+c3RhdGUoKSwgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6U3RhdGU6OlVuaW5pdGlhbGl6ZWQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBBU1NFUlRfRVEobV9tYW5hZ2VyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0
ZTo6Q29tcHV0aW5nU3BhY2VVc2VkKTsKLQotICAgICAgICAvLyBSZXNldCB1c2FnZSB0byBtb2Nr
IGRlbGV0aW9uLgotICAgICAgICBtX3NwYWNlVXNlZCA9IDA7Ci0gICAgICAgIGNhbGxiYWNrKCk7
Ci0gICAgfQotCi0gICAgdWludDY0X3QgbV9zcGFjZVVzZWQgeyAwIH07Ci0gICAgU3RvcmFnZVF1
b3RhTWFuYWdlciogbV9tYW5hZ2VyOwotfTsKLSAgICAKLVRFU1QoU3RvcmFnZVF1b3RhTWFuYWdl
clRlc3QsIEJhc2ljKQotewotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIHN0b3JhZ2VRdW90YU1h
bmFnZXJQdHIgPSBudWxscHRyOwotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIgc3RvcmFnZVF1b3Rh
TWFuYWdlcihkZWZhdWx0UXVvdGEsIFsmc3RvcmFnZVF1b3RhTWFuYWdlclB0cl0odWludDY0X3Qg
cXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmIGNvbXBsZXRpb25IYW5s
ZGVyKSB7Ci0gICAgICAgIEFTU0VSVF9UUlVFKHN0b3JhZ2VRdW90YU1hbmFnZXJQdHIpOwotICAg
ICAgICBBU1NFUlRfRVEoc3RvcmFnZVF1b3RhTWFuYWdlclB0ci0+c3RhdGUoKSwgU3RvcmFnZVF1
b3RhTWFuYWdlcjo6U3RhdGU6OldhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UpOwotCi0g
ICAgICAgIC8vIEFsbG93IGFsbCBzcGFjZSBpbmNyZWFzZSByZXF1ZXN0cy4KLSAgICAgICAgY29t
cGxldGlvbkhhbmxkZXIoc3BhY2VJbmNyZWFzZSArIGN1cnJlbnRTcGFjZSk7Ci0gICAgfSk7Ci0g
ICAgc3RvcmFnZVF1b3RhTWFuYWdlclB0ciA9ICZzdG9yYWdlUXVvdGFNYW5hZ2VyOwotCi0KLSAg
ICBNb2NrUXVvdGFVc2VyIG1vY2tVc2VyKHN0b3JhZ2VRdW90YU1hbmFnZXIpOwotCi0gICAgLy8g
R3JhbnQgZGlyZWN0bHkuCi0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2UoMC4x
ICogS0IsIFsmXShXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNpc2lv
bikgewotICAgICAgICBBU1NFUlRfRVEoZGVjaXNpb24sIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OkRlY2lzaW9uOjpHcmFudCk7Ci0gICAgICAgIG1vY2tVc2VyLnNldFNwYWNlVXNlZCgw
LjEgKiBLQik7Ci0gICAgfSk7Ci0KLSAgICAvLyBHcmFudCBhZnRlciBjb21wdXRpbmcgYWNjdXJh
dGUgdXNhZ2UuCi0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2UoMS4wICogS0Is
IFsmXShXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNpc2lvbikgewot
ICAgICAgICBBU1NFUlRfRVEoZGVjaXNpb24sIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6
OkRlY2lzaW9uOjpHcmFudCk7Ci0gICAgICAgIG1vY2tVc2VyLnNldFNwYWNlVXNlZCgxLjAgKiBL
Qik7Ci0gICAgfSk7Ci0KLSAgICAvLyBHcmFudCBhZnRlciBjb21wdXRpbmcgYWNjdXJhdGUgdXNh
Z2UgYW5kIHJlcXVlc3Rpbmcgc3BhY2UgaW5jcmVhc2UuCi0gICAgc3RvcmFnZVF1b3RhTWFuYWdl
ci5yZXF1ZXN0U3BhY2UoMTAgKiBLQiwgWyZdKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6
OkRlY2lzaW9uIGRlY2lzaW9uKSB7Ci0gICAgICAgIEFTU0VSVF9FUShzdG9yYWdlUXVvdGFNYW5h
Z2VyUHRyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6TWFraW5nRGVjaXNp
b25Gb3JSZXF1ZXN0KTsKLSAgICAgICAgQVNTRVJUX0VRKGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQpOwotICAgIH0pOwotfQotCi19IC8vIG5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383374</attachid>
            <date>2019-11-12 13:31:54 -0800</date>
            <delta_ts>2019-11-12 16:45:51 -0800</delta_ts>
            <desc>WIP3</desc>
            <filename>WIP3</filename>
            <type>text/plain</type>
            <size>164122</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNGRjMTkzNDUzMC4uMzA5YjRiYzFkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzggQEAKKzIwMTktMTEtMTIgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+
CisKKyAgICAgICAgQ3Jvc3MtdGhyZWFkIHZlcnNpb24gU3RvcmFnZVF1b3RhTWFuYWdlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTcxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVs
ZXRlRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpy
ZXF1ZXN0U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRp
c2tVc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFV
c2VyOjpRdW90YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJ
REJTZXJ2ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2Vy
Ojpjb21wdXRlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNl
U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2Vy
dmVyOjpRdW90YVVzZXI6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2Vk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjplbnN1
cmVRdW90YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3Jp
Z2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpm
aW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGVjcmVh
c2VTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCk6
IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluaXRpYWxpemVRdW90
YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9w
ZW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxl
dGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtRGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFk
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtUHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEluZGV4
UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1HZXRBbGxSZWNvcmRzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1PcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1p
dFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVxdWVzdFNwYWNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OndhaXRG
b3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2spOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Zmlu
aXNoU3BhY2VJbmNyZWFzZVRhc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6ZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVB
ZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0
ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJl
bmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Omdl
dFJlY29yZEFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OmdldENvdW50QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpvcGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hl
Y2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb246OmFib3J0VHJhbnNhY3Rpb25XaXRob3V0Q2FsbGJhY2spOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uOjpwdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
OjpnZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9wZW5DdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjppdGVyYXRl
Q3Vyc29yKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURC
U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6cXVvdGFN
YW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaDoK
KyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uQmFja2dyb3Vu
ZFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp0cnlHcmFu
dFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6flN0b3Jh
Z2VRdW90YU1hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6c3BhY2VVc2FnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmluaXRpYWxpemVVc2Vy
c0lmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OmFza1VzZXJUb0luaXRpYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcjo6YWRkVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpzaG91bGRBc2tGb3JNb3JlU3BhY2UgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3ZlVXNlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3Bh
Y2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNr
Rm9yTW9yZVNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAqIHN0b3Jh
Z2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlc2V0UXVv
dGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6c3Rh
dGUgY29uc3QpOiBEZWxldGVkLgorCiAyMDE5LTExLTEyICBQZW5nIExpdSAgPHBlbmcubGl1NkBh
cHBsZS5jb20+CiAKICAgICAgICAgUGljdHVyZS1pbi1QaWN0dXJlIGV2ZW50cyBhcmUgbm90IGZp
cmVkIGlmIHdlIHN3aXRjaCB0aGUgUGljdHVyZS1pbi1QaWN0dXJlIG1vZGUgdGhyb3VnaCBtb2Rl
cm4gbWVkaWEgY29udHJvbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXggZTYxZGI4Yzk0MjguLjAwODM0YmYyZWQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcApAQCAtNDYsMjQgKzQ2LDI0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgSURCU2VydmVyIHsKIAotUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFn
ZXJHZXR0ZXIpCitSZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0
ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCU2VydmVyKHNlc3Npb25JRCwgV1RG
TW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKSk7CiB9CiAKLVJlZjxJREJTZXJ2ZXI+IElEQlNlcnZl
cjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmIHF1b3RhTWFuYWdlckdldHRlcikK
K1JlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VRdW90YU1hbmFn
ZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSURCU2VydmVyKHNlc3Npb25JRCwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBXVEZNb3ZlKHF1
b3RhTWFuYWdlckdldHRlcikpKTsKIH0KIAotSURCU2VydmVyOjpJREJTZXJ2ZXIoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIp
CitJREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0b3JhZ2VR
dW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiAgICAgOiBDcm9zc1RocmVh
ZFRhc2tIYW5kbGVyKCJJbmRleGVkRGF0YWJhc2UgU2VydmVyIiwgQXV0b2RyYWluZWRQb29sRm9y
UnVuTG9vcDo6VXNlKQogICAgICwgbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAgICwgbV9xdW90
YU1hbmFnZXJHZXR0ZXIoV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKQogewogfQogCi1JREJT
ZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJH
ZXR0ZXIpCitJREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0
dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQogICAgIDogQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlcigi
SW5kZXhlZERhdGFiYXNlIFNlcnZlciIsIEF1dG9kcmFpbmVkUG9vbEZvclJ1bkxvb3A6OlVzZSkK
ICAgICAsIG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKICAgICAsIG1fZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoKGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKQEAgLTY4MywxNTcgKzY4MywyOCBAQCB2b2lkIElE
QlNlcnZlcjo6cGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBW
ZWN0b3I8U2VjdXJpdHlPcgogCiB2b2lkIElEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVs
ZXRlRGF0YWJhc2VzKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgZm9yIChhdXRvJiB1c2Vy
IDogbV9xdW90YVVzZXJzLnZhbHVlcygpKQotICAgICAgICB1c2VyLT5yZXNldFNwYWNlVXNlZCgp
OwotCiAgICAgYXV0byBjYWxsYmFjayA9IG1fZGVsZXRlRGF0YWJhc2VDb21wbGV0aW9uSGFuZGxl
cnMudGFrZShjYWxsYmFja0lEKTsKICAgICBBU1NFUlQoY2FsbGJhY2spOwogICAgIGNhbGxiYWNr
KCk7CiB9CiAKLUlEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90YVVzZXIoSURCU2VydmVyJiBzZXJ2
ZXIsIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1hbmFnZXIsIENsaWVudE9yaWdpbiYmIG9yaWdpbikK
LSAgICA6IG1fc2VydmVyKHNlcnZlcikKLSAgICAsIG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5h
Z2VyKSkKLSAgICAsIG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAsIG1faXNJbml0aWFs
aXplZChtX3NlcnZlci5tX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotewotICAgIGlmIChtYW5h
Z2VyKQotICAgICAgICBtYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKLX0KLQotSURCU2VydmVyOjpR
dW90YVVzZXI6On5RdW90YVVzZXIoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVz
ZXI6OnJlc2V0U3BhY2VVc2VkKCkKLXsKLSAgICBtX3NwYWNlVXNlZCA9IDA7Ci0KLSAgICBpZiAo
IW1fbWFuYWdlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2VydmVyLm1fc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0luaXRp
YWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1faW5pdGlhbGl6YXRpb25D
YWxsYmFjayk7Ci0KLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIC8vIERvIGFk
ZC9yZW1vdmUgdG8gdHJpZ2dlciBjYWxsIHRvIHdoZW5Jbml0aWFsaXplZC4KLSAgICBtX21hbmFn
ZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgIG1fbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7Ci19
Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmNvbXB1dGVTcGFjZVVzZWQoKQotewotICAg
IHJlc2V0U3BhY2VVc2VkKCk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluY3Jl
YXNlU3BhY2VVc2VkKHVpbnQ2NF90IHNpemUpCi17Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQp
Ci0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9zcGFjZVVzZWQgKyBzaXplID4gbV9zcGFj
ZVVzZWQpOwotICAgIG1fc3BhY2VVc2VkICs9IHNpemU7Ci19Ci12b2lkIElEQlNlcnZlcjo6UXVv
dGFVc2VyOjpkZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKQotewotICAgIGlmICghbV9p
c0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fc3BhY2VVc2VkID49
IHNpemUpOwotICAgIG1fc3BhY2VVc2VkIC09IHNpemU7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpR
dW90YVVzZXI6OndoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2spCi17Ci0gICAgaWYgKG1faXNJbml0aWFsaXplZCkgewotICAgICAgICBjYWxsYmFjaygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1faW5pdGlhbGl6YXRpb25DYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spOwotICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2Vk
Rm9yT3JpZ2luKG1fb3JpZ2luKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5p
dGlhbGl6ZVNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgQVNTRVJUKG1faXNJ
bml0aWFsaXplZCB8fCAhbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlKTsKLSAgICBtX3NwYWNlVXNl
ZCA9IHNwYWNlVXNlZDsKLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgaWYgKGF1
dG8gY2FsbGJhY2sgPSBXVEZNb3ZlKG1faW5pdGlhbGl6YXRpb25DYWxsYmFjaykpCi0gICAgICAg
IGNhbGxiYWNrKCk7Ci19Ci0KLUlEQlNlcnZlcjo6UXVvdGFVc2VyJiBJREJTZXJ2ZXI6OmVuc3Vy
ZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICByZXR1cm4gKm1f
cXVvdGFVc2Vycy5lbnN1cmUob3JpZ2luLCBbdGhpcywgJm9yaWdpbl0gewotICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxRdW90YVVzZXI+KCp0aGlzLCBtX3F1b3RhTWFuYWdlckdldHRlcihtX3Nl
c3Npb25JRCwgb3JpZ2luKSwgQ2xpZW50T3JpZ2luIHsgb3JpZ2luIH0pOwotICAgIH0pLml0ZXJh
dG9yLT52YWx1ZTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2Vk
Rm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQotewotICAgIEFTU0VSVCghbV9z
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4s
IG9yaWdpbikpOwotfQotCi12b2lkIElEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdp
bihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uIElEQlNlcnZlcjo6cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1
aW50NjRfdCB0YXNrU2l6ZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBS
ZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fcXVvdGFN
YW5hZ2VyR2V0dGVyKG9yaWdpbik7CisgICAgaWYgKCFzdG9yYWdlUXVvdGFNYW5hZ2VyKQorICAg
ICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk7CiAKLSAgICBh
dXRvIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCA9IHRoaXMtPmRhdGFiYXNlRGlyZWN0b3J5UGF0aElz
b2xhdGVkQ29weSgpOwotICAgIGF1dG8gb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRh
dGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4u
dG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsICJ2
MCIpOwotICAgIGF1dG8gbmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRhdGFiYXNlSWRl
bnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2lu
LCBvcmlnaW4uY2xpZW50T3JpZ2luLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsICJ2MSIpOwotICAg
IGF1dG8gc2l6ZSA9IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVj
dG9yeShvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKLQot
ICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJ
REJTZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbiwgb3JpZ2luLCBzaXpl
KSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmln
aW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlVXNlZCkKLXsKLSAg
ICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbml0aWFsaXplU3BhY2VVc2VkKHNwYWNlVXNlZCk7
CisgICAgcmV0dXJuIHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9uQmFja2dyb3Vu
ZFRocmVhZCh0YXNrU2l6ZSk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpyZXF1ZXN0U3BhY2UoY29u
c3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJiBjYWxsYmFjaykKK3Vp
bnQ2NF90IElEQlNlcnZlcjo6ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdERpcmVjdG9yeSwg
Y29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAgYXV0byogcXVvdGFNYW5hZ2VyID0g
ZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikubWFuYWdlcigpOwotICAgIGlmICghcXVvdGFNYW5hZ2Vy
KSB7Ci0gICAgICAgIGNhbGxiYWNrKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHF1b3RhTWFuYWdlci0+cmVxdWVzdFNw
YWNlKHRhc2tTaXplLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpy
ZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBpZiAoYXV0
byogdXNlciA9IG1fcXVvdGFVc2Vycy5nZXQob3JpZ2luKSkKLSAgICAgICAgdXNlci0+cmVzZXRT
cGFjZVVzZWQoKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OmluY3JlYXNlU3BhY2VVc2VkKGNvbnN0
IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzaXplKQotewotICAgIGVuc3VyZVF1b3Rh
VXNlcihvcmlnaW4pLmluY3JlYXNlU3BhY2VVc2VkKHNpemUpOwotfQotCi12b2lkIElEQlNlcnZl
cjo6ZGVjcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90
IHNpemUpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuZGVjcmVhc2VTcGFjZVVzZWQo
c2l6ZSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjppbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgdGFza1NpemUpCi17Ci0gICAgZW5z
dXJlUXVvdGFVc2VyKG9yaWdpbikuaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodGFza1NpemUp
OwotfQorICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi12b2lkIElEQlNlcnZlcjo6ZGVj
cmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2
NF90IHNwYWNlVXNlZCkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5kZWNyZWFzZVBv
dGVudGlhbFNwYWNlVXNlZChzcGFjZVVzZWQpOworICAgIGF1dG8gb2xkVmVyc2lvbk9yaWdpbkRp
cmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2
ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCByb290RGlyZWN0
b3J5LCAidjAiKTsKKyAgICBhdXRvIG5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRh
YmFzZUlkZW50aWZpZXI6OmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRv
cE9yaWdpbiwgb3JpZ2luLmNsaWVudE9yaWdpbiwgcm9vdERpcmVjdG9yeSwgInYxIik7CisgICAg
cmV0dXJuIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShv
bGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJh
c2VzU2l6ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKIH0KIAogdm9p
ZCBJREJTZXJ2ZXI6OnVwZ3JhZGVGaWxlc0lmTmVjZXNzYXJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCBkM2EyMjNk
OTMyZC4uYmYyYjQ3ODg0NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJJ
REJDb25uZWN0aW9uVG9DbGllbnQuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUlkZW50aWZpZXIu
aCIKICNpbmNsdWRlICJTdG9yYWdlUXVvdGFNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiU3RvcmFnZVF1
b3RhVXNlci5oIgogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiVW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSA8cGFsL0h5c3RlcmVzaXNBY3Rp
dml0eS5oPgpAQCAtNTgsOSArNTcsOSBAQCBlbnVtIGNsYXNzIFNob3VsZEZvcmNlU3RvcCA6IGJv
b2wgeyBObywgWWVzIH07CiAKIGNsYXNzIElEQlNlcnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPElE
QlNlcnZlcj4sIHB1YmxpYyBDcm9zc1RocmVhZFRhc2tIYW5kbGVyLCBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8SURCU2VydmVyPiB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgUXVvdGFNYW5hZ2VyR2V0dGVy
ID0gV1RGOjpGdW5jdGlvbjxTdG9yYWdlUXVvdGFNYW5hZ2VyKihQQUw6OlNlc3Npb25JRCwgY29u
c3QgQ2xpZW50T3JpZ2luJik+OwotICAgIHN0YXRpYyBSZWY8SURCU2VydmVyPiBjcmVhdGUoUEFM
OjpTZXNzaW9uSUQsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOworICAgIHVzaW5n
IFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIgPSBXVEY6OkZ1bmN0aW9uPFJlZlB0cjxTdG9yYWdl
UXVvdGFNYW5hZ2VyPihjb25zdCBDbGllbnRPcmlnaW4mKT47CisgICAgc3RhdGljIFJlZjxJREJT
ZXJ2ZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlckdldHRlciYm
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKFBBTDo6
U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgU3RvcmFnZVF1
b3RhTWFuYWdlckdldHRlciYmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVnaXN0ZXJD
b25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgdW5yZWdpc3RlckNvbm5lY3Rpb24oSURCQ29ubmVjdGlvblRvQ2xpZW50Jik7CkBAIC0xMTEs
MjEgKzExMCwxNSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbG9zZUFuZERl
bGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2UoV2FsbFRpbWUsIEZ1bmN0aW9uPHZvaWQgKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxl
dGVEYXRhYmFzZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+Jiwg
RnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICB2b2lkIHJlcXVl
c3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYpOwotICAgIHZv
aWQgaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0
X3QgdGFza1NpemUpOwotICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3Qg
Q2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUpOwotICAgIHZvaWQgaW5jcmVhc2VTcGFj
ZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6ZSk7Ci0gICAgdm9pZCBkZWNy
ZWFzZVNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzaXplKTsKLSAgICB2
b2lkIHJlc2V0U3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYpOwotCi0gICAgdm9pZCBpbml0
aWFsaXplUXVvdGFVc2VyKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKSB7IGVuc3VyZVF1b3Rh
VXNlcihvcmlnaW4pOyB9CisgICAgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gcmVxdWVz
dFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgdWludDY0X3QgZGlza1VzYWdlKGNvbnN0IFN0cmluZyYsIGNvbnN0
IENsaWVudE9yaWdpbiYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0cnlTdG9wKFNob3Vs
ZEZvcmNlU3RvcCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN1bWUoKTsKIAogcHJpdmF0
ZToKLSAgICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQsIFF1b3RhTWFuYWdlckdldHRlciYmKTsK
LSAgICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJl
Y3RvcnlQYXRoLCBRdW90YU1hbmFnZXJHZXR0ZXImJik7CisgICAgSURCU2VydmVyKFBBTDo6U2Vz
c2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOworICAgIElEQlNlcnZlcihQQUw6
OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VR
dW90YU1hbmFnZXJHZXR0ZXImJik7CiAKICAgICBVbmlxdWVJREJEYXRhYmFzZSYgZ2V0T3JDcmVh
dGVVbmlxdWVJREJEYXRhYmFzZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKICAgICAK
QEAgLTE0Miw1MSArMTM1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZURhdGFiYXNlc01v
ZGlmaWVkU2luY2VGb3JWZXJzaW9uKFdhbGxUaW1lLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lk
IHJlbW92ZURhdGFiYXNlc1dpdGhPcmlnaW5zRm9yVmVyc2lvbihjb25zdCBWZWN0b3I8U2VjdXJp
dHlPcmlnaW5EYXRhPiYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgY2xhc3MgUXVvdGFVc2VyIGZp
bmFsIDogcHVibGljIFN0b3JhZ2VRdW90YVVzZXIgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFF1b3RhVXNlcihJREJTZXJ2ZXImLCBTdG9y
YWdlUXVvdGFNYW5hZ2VyKiwgQ2xpZW50T3JpZ2luJiYpOwotICAgICAgICB+UXVvdGFVc2VyKCk7
Ci0KLSAgICAgICAgU3RvcmFnZVF1b3RhTWFuYWdlciogbWFuYWdlcigpIHsgcmV0dXJuIG1fbWFu
YWdlci5nZXQoKTsgfQotCi0gICAgICAgIHZvaWQgc2V0U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNl
VXNlZCkgeyBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsgfQotICAgICAgICB2b2lkIHJlc2V0U3Bh
Y2VVc2VkKCk7Ci0KLSAgICAgICAgdm9pZCBpbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50
NjRfdCBpbmNyZWFzZSkgeyBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgKz0gaW5jcmVhc2U7IH0K
LSAgICAgICAgdm9pZCBkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRfdCBkZWNyZWFz
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFz
ZSA+PSBkZWNyZWFzZSk7Ci0gICAgICAgICAgICBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgLT0g
ZGVjcmVhc2U7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBpbmNyZWFzZVNwYWNlVXNlZCh1aW50
NjRfdCBzaXplKTsKLSAgICAgICAgdm9pZCBkZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXpl
KTsKLQotICAgICAgICB2b2lkIGluaXRpYWxpemVTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2Vk
KTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZp
bmFsCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOwotICAg
ICAgICAgICAgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlOwot
ICAgICAgICB9Ci0gICAgICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgpIGZpbmFsOwotICAgICAg
ICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFs
OwotCi0gICAgICAgIElEQlNlcnZlciYgbV9zZXJ2ZXI7Ci0gICAgICAgIFdlYWtQdHI8U3RvcmFn
ZVF1b3RhTWFuYWdlcj4gbV9tYW5hZ2VyOwotICAgICAgICBDbGllbnRPcmlnaW4gbV9vcmlnaW47
Ci0gICAgICAgIGJvb2wgbV9pc0luaXRpYWxpemVkIHsgZmFsc2UgfTsKLSAgICAgICAgdWludDY0
X3QgbV9zcGFjZVVzZWQgeyAwIH07Ci0gICAgICAgIHVpbnQ2NF90IG1fZXN0aW1hdGVkU3BhY2VJ
bmNyZWFzZSB7IDAgfTsKLSAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2luaXRp
YWxpemF0aW9uQ2FsbGJhY2s7Ci0gICAgfTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIFF1b3RhVXNl
ciYgZW5zdXJlUXVvdGFVc2VyKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZvaWQgc3RhcnRD
b21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJik7Ci0gICAgdm9p
ZCBjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZv
aWQgZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYs
IHVpbnQ2NF90IHNwYWNlVXNlZCk7Ci0KICAgICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsK
ICAgICBIYXNoTWFwPElEQkNvbm5lY3Rpb25JZGVudGlmaWVyLCBSZWZQdHI8SURCQ29ubmVjdGlv
blRvQ2xpZW50Pj4gbV9jb25uZWN0aW9uTWFwOwogICAgIEhhc2hNYXA8SURCRGF0YWJhc2VJZGVu
dGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8VW5pcXVlSURCRGF0YWJhc2U+PiBtX3VuaXF1ZUlEQkRh
dGFiYXNlTWFwOwpAQCAtMTk4LDggKzE0Niw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgbV9k
YXRhYmFzZURpcmVjdG9yeVBhdGg7CiAKLSAgICBIYXNoTWFwPENsaWVudE9yaWdpbiwgc3RkOjp1
bmlxdWVfcHRyPFF1b3RhVXNlcj4+IG1fcXVvdGFVc2VyczsKLSAgICBRdW90YU1hbmFnZXJHZXR0
ZXIgbV9xdW90YU1hbmFnZXJHZXR0ZXI7CisgICAgU3RvcmFnZVF1b3RhTWFuYWdlckdldHRlciBt
X3F1b3RhTWFuYWdlckdldHRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggZmRlZGE2MzVlYjcuLjIyN2U0YzkyNTcwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTE4Niw1NiArMTg2LDYgQEAgc3RhdGljIGlubGlu
ZSBTdHJpbmcgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKGNvbnN0IGNoYXIqIHRhc2tOYW1lKQogICAg
IHJldHVybiBtYWtlU3RyaW5nKCJGYWlsZWQgdG8gIiwgdGFza05hbWUsICIgaW4gZGF0YWJhc2Ug
YmVjYXVzZSBub3QgZW5vdWdoIHNwYWNlIGZvciBkb21haW4iKTsKIH0KIAotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cmVxdWVzdFNwYWNlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCB1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgY2hhciogdGFza05hbWUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYgY2FsbGJhY2spCi17Ci0gICAgbV9zZXJ2
ZXItPnJlcXVlc3RTcGFjZShtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplLCBbd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgdGhpcywgd2Vha1RyYW5zYWN0aW9uID0gbWFrZVdlYWtQ
dHIodHJhbnNhY3Rpb24pLCB0YXNrTmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0o
YXV0byBkZWNpc2lvbikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpIHsKLSAgICAg
ICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgVW5rbm93bkVycm9yIH0pOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF3ZWFrVHJhbnNhY3Rpb24pIHsKLSAg
ICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgVW5rbm93bkVycm9yIH0pOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX293bmluZ1BvaW50ZXJGb3JDbG9z
ZSkgewotICAgICAgICAgICAgLy8gV2UgYXJlIGNsb3NpbmcgdGhlIGRhdGFiYXNlLCB0aGVyZSBp
cyBubyBwb2ludCBpbiB0cnlpbmcgdG8gbW9kaWZ5IHRoZSBkYXRhYmFzZSBhdCB0aGF0IHBvaW50
LgotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3duRXJyb3IgfSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7
Ci0gICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk6Ci0gICAg
ICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJv
ck1lc3NhZ2VOYW1lKHRhc2tOYW1lKSB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Y2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQ6Ci0gICAgICAgICAgICBj
YWxsYmFjayhJREJFcnJvciB7IH0pOwotICAgICAgICB9OwotICAgIH0pOwotfQotCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjp3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJ
REJFcnJvciYmKT4mJiBjYWxsYmFjaykKLXsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24s
IDAsICIiLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgdGFz
a1NpemUpCi17Ci0gICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRl
bnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUpOwotICAgIEFTU0VSVCghbV9wZW5kaW5nU3BhY2VJ
bmNyZWFzZVRhc2tzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKLSAgICBtX3BlbmRpbmdTcGFjZUlu
Y3JlYXNlVGFza3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKLX0KLQotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwg
Ym9vbCBpc1Rhc2tTdWNjZXNzZnVsKQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX3BlbmRpbmdT
cGFjZUluY3JlYXNlVGFza3MuZmluZChpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoaXRlcmF0b3Ig
IT0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmVuZCgpKTsKLSAgICBtX3NlcnZlci0+ZGVj
cmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+
dmFsdWUpOwotICAgIGlmIChpc1Rhc2tTdWNjZXNzZnVsKQotICAgICAgICBtX3NlcnZlci0+aW5j
cmVhc2VTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+dmFsdWUpOwot
ICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5yZW1vdmUoaXRlcmF0b3IpOwotfQotCiB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24oKQogewog
ICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJy
ZW50T3Blbk9wZXJhdGlvbiAoJXApIiwgdGhpcyk7CkBAIC0yNDYsMjkgKzE5Niw3IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiAgICAgaWYg
KCFtX2RhdGFiYXNlSW5mbykgewogICAgICAgICBpZiAoIW1faXNPcGVuaW5nQmFja2luZ1N0b3Jl
KSB7CiAgICAgICAgICAgICBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSA9IHRydWU7Ci0gICAgICAg
ICAgICAvLyBXZSBkbyBub3Qga25vdyB3aGV0aGVyIHRoaXMgaXMgYW4gZXhpc3Rpbmcgb3IgYSBu
ZXcgZGF0YWJhc2UuCi0gICAgICAgICAgICAvLyBXZSBzZXQgYSBzbWFsbCBjb3N0IHNvIHRoYXQg
aXQgaXMgbm90IHBvc3NpYmxlIHRvIG9wZW4gYW4gaW5maW5pdGUgbnVtYmVyIG9mIGRhdGFiYXNl
LgotICAgICAgICAgICAgbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX2lkZW50aWZpZXIub3JpZ2lu
KCksIGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKHRoaXMpXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBpZiAo
IXdlYWtUaGlzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAg
ICBpZiAobV9vd25pbmdQb2ludGVyRm9yQ2xvc2UpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAgICAgICAgIHN3aXRjaCAoZGVjaXNpb24pIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OiB7Ci0gICAgICAgICAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gSURCUmVzdWx0RGF0YTo6ZXJyb3IobV9jdXJyZW50T3Bl
bkRCUmVxdWVzdC0+cmVxdWVzdERhdGEoKS5yZXF1ZXN0SWRlbnRpZmllcigpLCBJREJFcnJvciB7
IFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJvcGVuRGF0YWJhc2Ui
KSB9KTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdC0+Y29ubmVj
dGlvbigpLmRpZE9wZW5EYXRhYmFzZShyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRPcGVuREJSZXF1ZXN0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgbV9pc09w
ZW5pbmdCYWNraW5nU3RvcmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdl
cjo6RGVjaXNpb246OkdyYW50OgotICAgICAgICAgICAgICAgICAgICBhdXRvIGNhbGxiYWNrSUQg
PSB0aGlzLT5nZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpOwotICAgICAgICAgICAg
ICAgICAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIGRlZmF1bHRXcml0ZU9w
ZXJhdGlvbkNvc3QpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLT5wb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFj
a2luZ1N0b3JlLCBtX2lkZW50aWZpZXIsIGNhbGxiYWNrSUQpKTsKLSAgICAgICAgICAgICAgICB9
OwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3Jl
LCBtX2lkZW50aWZpZXIpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
ODIxLDIzICs3NDksMzAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWRkT3BlbkRhdGFiYXNl
Q29ubmVjdGlvbihSZWY8VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW8KICAgICBtX29wZW5EYXRh
YmFzZUNvbm5lY3Rpb25zLmFkZChhZG9wdFJlZihjb25uZWN0aW9uLmxlYWtSZWYoKSkpOwogfQog
Ci12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRl
bnRpZmllciYgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9y
ZSAoJXApIiwgdGhpcyk7CiAKKworICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87Cisg
ICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0
U3BhY2UoaWRlbnRpZmllci5vcmlnaW4oKSwgZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCk7Cisg
ICAgaWYgKGRlY2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7
CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZv
LCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiT3Bl
bkJhY2tpbmdTdG9yZSIpKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQVNTRVJU
KCFtX2JhY2tpbmdTdG9yZSk7CiAgICAgbV9iYWNraW5nU3RvcmUgPSBtX3NlcnZlci0+Y3JlYXRl
QmFja2luZ1N0b3JlKGlkZW50aWZpZXIpOwogICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11
bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBtX2JhY2tpbmdTdG9yZS0+c3VwcG9ydHNTaW11bHRhbmVv
dXNUcmFuc2FjdGlvbnMoKTsKICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gbV9iYWNr
aW5nU3RvcmUtPmlzRXBoZW1lcmFsKCk7CiAKLSAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJ
bmZvOwogICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRh
YmFzZUluZm8oZGF0YWJhc2VJbmZvKTsKLQotICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tp
bmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvciwgIHRhc2tJZGVudGlmaWVyKSk7CisgICAgcG9z
dERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yKSk7CiB9
CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURC
RGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIHVpbnQ2NF90IHRhc2tJ
ZGVudGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShj
b25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBlcnJvcikKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUiKTsKQEAgLTg0OCw4ICs3ODMsNiBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRh
dGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSQogICAgIEFTU0VSVChtX2lzT3BlbmluZ0JhY2tpbmdT
dG9yZSk7CiAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSBmYWxzZTsKIAotICAgIGZpbmlz
aFNwYWNlSW5jcmVhc2VUYXNrKHRhc2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7Ci0KICAg
ICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04
NjEsMzMgKzc5NCwyMyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9y
ZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3Jp
dGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGluZm8pOwotICAgIHJlcXVlc3RTcGFjZSh0
cmFuc2FjdGlvbiwgdGFza1NpemUsICJjcmVhdGVPYmplY3RTdG9yZSIsIFt0aGlzLCB0YXNrU2l6
ZSwgJnRyYW5zYWN0aW9uLCBpbmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRv
IGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3Iu
Y29kZSgpICE9IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RG
TW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRo
aXMtPmNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlv
biwgaW5mbywgV1RGTW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0
X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBj
b25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNv
bnN0IElEQkVycm9yJiBxdW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBz
dG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2Fs
bGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhj
YWxsYmFja0lELCB0YXNrU2l6ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0
b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvLCAg
cXVvdGFFcnJvcikpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgbV9p
ZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRp
ZmllcigpLCBpbmZvKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVh
dGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9y
ZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQordm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYgb3Jp
Z2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGlu
Zm8pCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwogCi0g
ICAgaWYgKCFxdW90YUVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tS
ZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIHF1b3RhRXJyb3Is
IGluZm8pKTsKKyAgICAvLyBRdW90YSBjaGVjay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVs
dFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsKKyAgICBhdXRvIGRlY2lz
aW9uID0gbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIHRhc2tTaXplKTsKKyAgICBpZiAo
ZGVjaXNpb24gPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAg
ICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRl
bnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5h
bWUoIkNyZWF0ZU9iamVjdFN0b3JlIikpLCBpbmZvKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTkwMyw3ICs4MjYsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
Q3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLAogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlIik7CiAKLSAgICBmaW5pc2hTcGFj
ZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKICAgICBp
ZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fZGF0YWJhc2VJbmZvLT5hZGRFeGlzdGluZ09i
amVjdFN0b3JlKGluZm8pOwogCkBAIC05MTUsMTcgKzgzNyw2IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAi
KG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSIpOwogCi0gICAgd2Fp
dEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rp
b24sIG9iamVjdFN0b3JlTmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYm
IGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAg
ICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRy
YW5zYWN0aW9uLCBvYmplY3RTdG9yZU5hbWUsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3Rh
Q2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IFN0
cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxs
YmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtOTM2LDE0
ICs4NDcsMTkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmVBZnRl
clF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2EKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwg
dHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mby0+aWRlbnRpZmllcigpKSk7Cisg
ICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlLCBtX2lkZW50aWZpZXIub3JpZ2lu
KCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8tPmlk
ZW50aWZpZXIoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRl
T2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0
b3JlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1EZWxldGVPYmplY3RTdG9yZSIpOwogCisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uo
b3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAg
ICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdl
TmFtZSgiRGVsZXRlT2JqZWN0U3RvcmUiKSksIG9iamVjdFN0b3JlSWRlbnRpZmllcikpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBt
X2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIpOwogCkBAIC05NjcsMzggKzg4MywyOCBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiB0cmFuc2FjdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmUiKTsKIAot
ICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgbmV3TmFtZS5z
aXplSW5CeXRlcygpOwotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2FjdGlvbiwgdGFza1NpemUsICJy
ZW5hbWVPYmplY3RTdG9yZSIsIFt0aGlzLCB0YXNrU2l6ZSwgJnRyYW5zYWN0aW9uLCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1
dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJv
ci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhX
VEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
dGhpcy0+cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIFdURk1vdmUoY2FsbGJhY2spLCBl
cnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVj
dFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElE
QkVycm9yJiBxdW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNh
bGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJ
RCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBxdW90YUVycm9yOwor
ICAgIElEQkVycm9yIGVycm9yOwogICAgIGF1dG8qIGluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5m
b0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICBpZiAo
IWluZm8pCiAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJBdHRlbXB0
IHRvIHJlbmFtZSBub24tZXhpc3RhbnQgb2JqZWN0IHN0b3JlIl9zIH07CiAKLSAgICBzdGFydFNw
YWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtUmVuYW1lT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVu
dGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKKyAgICBw
b3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUsIG1faWRlbnRpZmllci5vcmlnaW4oKSwg
Y2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBuZXdOYW1lLCBlcnJvcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElE
QkVycm9yJiBlcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmpl
Y3RTdG9yZShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUs
IGNvbnN0IElEQkVycm9yJiBlcnJvcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
ICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFt
ZU9iamVjdFN0b3JlIik7CiAKLSAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZp
ZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKKyAgICAvLyBRdW90
YSBjaGVjay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCAr
IG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKKyAgICBhdXRvIGRlY2lzaW9uID0gbV9zZXJ2ZXItPnJl
cXVlc3RTcGFjZShvcmlnaW4sIHRhc2tTaXplKTsKKyAgICBpZiAoZGVjaXNpb24gPT0gU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3Io
UXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIlJlbmFtZU9iamVjdFN0
b3JlIikpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMTAxMyw3ICs5MTksNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLAog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlIik7CiAKLSAgICBm
aW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgp
KTsKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fZGF0YWJhc2VJbmZvLT5yZW5h
bWVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpOwogCkBAIC0xMDI1
LDI4ICs5MzAsMjIgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZShV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGkKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6
OmNsZWFyT2JqZWN0U3RvcmUiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9u
KHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0g
ICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1v
dmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlz
LT5jbGVhck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2soVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lE
ID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAo
IWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJP
YmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNsZWFyT2JqZWN0
U3RvcmUsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5m
bygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSk7CiB9CiAKLXZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DbGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1DbGVhck9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2lu
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIp
CiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihk
YikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DbGVhck9iamVjdFN0b3JlIik7CiAKKyAgICBp
ZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFn
ZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNs
ZWFyT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRl
ZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIkNsZWFyT2JqZWN0U3RvcmUiKSkpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAg
bV9iYWNraW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIpOwogCkBAIC0xMDY3LDMzICs5NjYsMjIgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24sIGMKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4Iik7CiAKLSAgICBh
dXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShp
bmZvKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAiY3JlYXRlSW5k
ZXgiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgaW5mbywgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3Iu
aXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAgICAg
ICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICB0aGlzLT5jcmVhdGVJbmRleEFmdGVyUXVvdGFDaGVjayh0YXNrU2l6
ZSwgdHJhbnNhY3Rpb24sIGluZm8sIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNr
KHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBj
b25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0g
c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNh
bGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2so
Y2FsbGJhY2tJRCwgdGFza1NpemUpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCwg
Y2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbywgcXVvdGFF
cnJvcikpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCwgbV9pZGVudGlmaWVyLm9y
aWdpbigpLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZv
KSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8sIGNvbnN0IElEQkVy
cm9yJiBxdW90YUVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUlu
ZGV4KGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBj
b25zdCBJREJJbmRleEluZm8mIGluZm8pCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVh
dGVJbmRleCIpOwogCi0gICAgaWYgKCFxdW90YUVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIHF1
b3RhRXJyb3IsIGluZm8pKTsKKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0
aW9uQ29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsKKyAgICBhdXRvIGRlY2lzaW9uID0gbV9zZXJ2
ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIHRhc2tTaXplKTsKKyAgICBpZiAoZGVjaXNpb24gPT0g
U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3Io
UXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIkNyZWF0ZUluZGV4Iikp
LCBpbmZvKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTExMTUsOCArMTAwMyw2IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3Jl
YXRlSW5kZXgiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRp
ZmllciwgZXJyb3IuaXNOdWxsKCkpOwotCiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CiAgICAg
ICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7CiAgICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5m
byA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvLm9iamVj
dFN0b3JlSWRlbnRpZmllcigpKTsKQEAgLTExMzIsMTcgKzEwMTgsNiBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbiwgdQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXgiKTsKIAotICAgIHdhaXRG
b3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9u
LCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051
bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZUluZGV4QWZ0ZXJRdW90
YUNoZWNrKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSwgV1RG
TW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpk
ZWxldGVJbmRleEFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IGluZGV4TmFtZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxs
YmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAg
ICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTExNTksMTQgKzEwMzQsMTkg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2soVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1EZWxldGVJbmRleCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5m
bygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleEluZm8tPmlkZW50
aWZpZXIoKSkpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVJbmRleCwgbV9pZGVudGlmaWVy
Lm9yaWdpbigpLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SW5mby0+aWRlbnRpZmllcigpKSk7CiB9CiAKLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVJbmRleCh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IHVpbnQ2NF90IGlu
ZGV4SWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVJbmRl
eChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCB1aW50NjRfdCBpbmRleElkZW50aWZp
ZXIpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVJbmRleCIpOwogCisgICAgaWYg
KG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxl
dGVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3Is
IHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiRGVsZXRlSW5kZXgiKSksIG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgaW5kZXhJZGVudGlmaWVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBB
U1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleCh0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlm
aWVyKTsKIApAQCAtMTE5MywyMyArMTA3MywxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpy
ZW5hbWVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdQog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBV
bmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBk
ZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgbmV3TmFtZS5zaXplSW5CeXRlcygpOwotICAgIHJl
cXVlc3RTcGFjZSh0cmFuc2FjdGlvbiwgdGFza1NpemUsICJyZW5hbWVJbmRleCIsIFt0aGlzLCB0
YXNrU2l6ZSwgJnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRp
ZmllciwgbmV3TmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikg
bXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAh
PSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJy
b3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5yZW5h
bWVJbmRleEFmdGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSwg
ZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRl
eEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWlu
dDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJh
Y2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQotewogICAgIHVpbnQ2NF90
IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykp
OwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSURCRXJyb3Ig
ZXJyb3IgPSBxdW90YUVycm9yOworICAgIElEQkVycm9yIGVycm9yOwogICAgIGF1dG8qIG9iamVj
dFN0b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShv
YmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIGlmICghb2JqZWN0U3RvcmVJbmZvKQogICAgICAg
ICBlcnJvciA9IElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQXR0ZW1wdCB0byByZW5hbWUgaW5k
ZXggaW4gbm9uLWV4aXN0YW50IG9iamVjdCBzdG9yZSJfcyB9OwpAQCAtMTIxOCwxNyArMTA4Niwx
OSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1
aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRAogICAgIGlmICghaW5kZXhJbmZvKQogICAgICAg
ICBlcnJvciA9IElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQXR0ZW1wdCB0byByZW5hbWUgbm9u
LWV4aXN0YW50IGluZGV4Il9zIH07CiAKLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxi
YWNrSUQsIHRhc2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgsIGNhbGxi
YWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lLCBlcnJvcikpOworICAgIHBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1SZW5hbWVJbmRleCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCB0cmFu
c2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4
SWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIG5ld05hbWUsIGNvbnN0IElEQkVycm9yJiBlcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1SZW5hbWVJbmRleChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRf
dCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3Im
IGVycm9yKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAotICAg
IGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
UmVuYW1lSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisg
ICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBuZXdOYW1lLnNp
emVJbkJ5dGVzKCk7CisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uo
b3JpZ2luLCB0YXNrU2l6ZSk7CisgICAgaWYgKGRlY2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFn
ZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJl
bmFtZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJv
ciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJSZW5hbWVJbmRleCIpKSwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMTI0Myw3ICsxMTEzLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCIpOwogCi0gICAgZmluaXNoU3BhY2VJ
bmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYg
KGVycm9yLmlzTnVsbCgpKSB7CiAgICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0
YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZp
ZXIpOwogICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZvKTsKQEAgLTEyNTcsNTIgKzExMjYs
NDAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhj
YWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cHV0T3JBZGQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0
IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwg
Y29uc3QgSURCVmFsdWUmIHZhbHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZSBvdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNv
bnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERC
OjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNr
IGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQiKTsKIAotICAgIGF1dG8g
dGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGtleURh
dGEpICsgZXN0aW1hdGVTaXplKHZhbHVlKTsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOwot
ICAgIGF1dG8qIG9iamVjdFN0b3JlID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09i
amVjdFN0b3JlKHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKLSAgICBpZiAo
b2JqZWN0U3RvcmUpCi0gICAgICAgIHRhc2tTaXplICs9IG9iamVjdFN0b3JlLT5pbmRleE5hbWVz
KCkuc2l6ZSgpICogdGFza1NpemU7Ci0KLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRh
c2tTaXplLCAicHV0T3JBZGQiLCBbdGhpcywgdGFza1NpemUsIHJlcXVlc3REYXRhLCBrZXlEYXRh
LCB2YWx1ZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgb3ZlcndyaXRlTW9kZV0oYXV0
byBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9y
LmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdU
Rk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIHRoaXMtPnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCByZXF1ZXN0RGF0YSwg
a2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90
YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERh
dGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5k
ZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNh
bGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50
NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJh
Y2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXJ0
U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwotICAgIHBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlm
aWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBrZXlEYXRhLCB2YWx1
ZSwgb3ZlcndyaXRlTW9kZSwgcXVvdGFFcnJvcikpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRP
ckFkZCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFu
c2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCks
IGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElE
QlZhbHVlJiBvcmlnaW5hbFJlY29yZFZhbHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zlcndy
aXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKK3ZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZChjb25zdCBDbGllbnRPcmlnaW4mIG9y
aWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgb3JpZ2luYWxS
ZWNvcmRWYWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRl
TW9kZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkIik7CiAKLSAgICBBU1NF
UlQobV9iYWNraW5nU3RvcmUpOwotICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOwot
CiAgICAgSURCS2V5RGF0YSB1c2VkS2V5OwogICAgIElEQkVycm9yIGVycm9yOwogCi0gICAgaWYg
KCFxdW90YUVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIHF1b3RhRXJyb3IsIHVzZWRLZXkpKTsKLSAg
ICAgICAgcmV0dXJuOworICAgIC8vIFF1b3RhIGNoZWNrLgorICAgIGF1dG8gdGFza1NpemUgPSBk
ZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGtleURhdGEpICsgZXN0aW1h
dGVTaXplKG9yaWdpbmFsUmVjb3JkVmFsdWUpOworICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7
CisgICAgYXV0byogb2JqZWN0U3RvcmUgPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5n
T2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICBpZiAob2JqZWN0U3RvcmUp
CisgICAgICAgIHRhc2tTaXplICs9IG9iamVjdFN0b3JlLT5pbmRleE5hbWVzKCkuc2l6ZSgpICog
dGFza1NpemU7CisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3Jp
Z2luLCB0YXNrU2l6ZSk7CisgICAgaWYgKGRlY2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6
OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9y
QWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVv
dGFFcnJvck1lc3NhZ2VOYW1lKCJQdXRPckFkZCIpKSwgdXNlZEtleSkpOworICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAorICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CisgICAgQVNTRVJUKG9i
amVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZSkgewogICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihJbmRleGVkREIsICIlcCAtIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtUHV0T3JBZGQ6IG1fYmFja2luZ1N0b3JlIGlzIG51bGwiLCB0aGlzKTsKICAgICAgICAg
ZXJyb3IgPSBJREJFcnJvcihJbnZhbGlkU3RhdGVFcnJvciwgIkJhY2tpbmcgc3RvcmUgaXMgaW52
YWxpZCBmb3IgY2FsbCB0byBwdXQgb3IgYWRkIl9zKTsKQEAgLTEzNzYsODAgKzEyMzMsNjUgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSUQKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRP
ckFkZCIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVy
LCBlcnJvci5pc051bGwoKSk7CiAgICAgcGVyZm9ybUtleURhdGFDYWxsYmFjayhjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yLCByZXN1bHRLZXkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpnZXRSZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYg
Z2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBj
b25zdCBJREJHZXRSZWNvcmREYXRhJiBnZXRSZWNvcmREYXRhLCBHZXRSZXN1bHRDYWxsYmFjayBj
YWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZCIpOwogCi0gICAgd2FpdEZv
clJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwg
Z2V0UmVjb3JkRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9y
KSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAg
Y2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgdGhpcy0+Z2V0UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRh
LCBnZXRSZWNvcmREYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1
ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldFJlY29yZERhdGEmIGdldFJlY29yZERh
dGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNr
SUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlm
ICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHVpbnQ2NF90IGluZGV4
SWRlbnRpZmllciA9IHJlcXVlc3REYXRhLmluZGV4SWRlbnRpZmllcigpKQotICAgICAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5z
YWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwg
aW5kZXhJZGVudGlmaWVyLCByZXF1ZXN0RGF0YS5pbmRleFJlY29yZFR5cGUoKSwgZ2V0UmVjb3Jk
RGF0YS5rZXlSYW5nZURhdGEpKTsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVj
b3JkLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5z
YWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwg
aW5kZXhJZGVudGlmaWVyLCByZXF1ZXN0RGF0YS5pbmRleFJlY29yZFR5cGUoKSwgZ2V0UmVjb3Jk
RGF0YS5rZXlSYW5nZURhdGEpKTsKICAgICBlbHNlCi0gICAgICAgIHBvc3REYXRhYmFzZVRhc2so
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1H
ZXRSZWNvcmQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigp
LCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwgZ2V0UmVjb3JkRGF0YS5rZXlS
YW5nZURhdGEsIGdldFJlY29yZERhdGEudHlwZSkpOworICAgICAgICBwb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
R2V0UmVjb3JkLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRh
LnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZp
ZXIoKSwgZ2V0UmVjb3JkRGF0YS5rZXlSYW5nZURhdGEsIGdldFJlY29yZERhdGEudHlwZSkpOwog
fQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzKFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSwgR2V0
QWxsUmVzdWx0c0NhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0
QWxsUmVjb3Jkcyhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdl
dEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSwgR2V0QWxsUmVzdWx0c0NhbGxiYWNr
IGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3JkcyIpOwogCi0gICAg
d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0
RGF0YSwgZ2V0QWxsUmVjb3Jkc0RhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1
dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hl
Y2socmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHNBZnRlclF1
b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRB
bGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIEdldEFsbFJlc3VsdHNDYWxsYmFjayBj
YWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRzLCBjYWxsYmFja0lE
LCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgZ2V0QWxsUmVjb3Jkc0RhdGEp
KTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3JkcywgbV9pZGVudGlmaWVyLm9yaWdp
bigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgZ2V0
QWxsUmVjb3Jkc0RhdGEpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdl
dFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBJREJHZXRSZWNvcmRE
YXRhVHlwZSB0eXBlKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZChj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdl
RGF0YSwgSURCR2V0UmVjb3JkRGF0YVR5cGUgdHlwZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUdldFJlY29yZCIpOwogCi0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLQogICAgIElE
QkdldFJlc3VsdCByZXN1bHQ7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2lu
LCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgSURC
RXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgcmVzdWx0KSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIElEQkVycm9yIGVycm9yID0g
bV9iYWNraW5nU3RvcmUtPmdldFJlY29yZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0
b3JlSWRlbnRpZmllciwga2V5UmFuZ2VEYXRhLCB0eXBlLCByZXN1bHQpOwogCiAgICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBy
ZXN1bHQpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVj
b3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBy
ZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQordm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2lu
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVj
b3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKIHsKICAgICBBU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkIik7CiAKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUp
OwotCiAgICAgSURCR2V0UmVzdWx0IHJlc3VsdDsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RT
cGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7
CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCwgY2FsbGJhY2tJZGVu
dGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IpLCByZXN1bHQpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgSURCRXJy
b3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0SW5kZXhSZWNvcmQodHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgcmVjb3JkVHlw
ZSwgcmFuZ2UsIHJlc3VsdCk7CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNv
cmQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCkpOwpAQCAtMTQ2MywxNCArMTMw
NSwxOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkKHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSQogICAgIHBlcmZvcm1HZXRSZXN1bHRDYWxs
YmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpOwogfQogCi12b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEpCit2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3Jkcyhjb25zdCBDbGllbnRPcmlnaW4m
IG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0Rh
dGEmIGdldEFsbFJlY29yZHNEYXRhKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0QWxs
UmVjb3JkcyIpOwogCi0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLQogICAgIElEQkdldEFs
bFJlc3VsdCByZXN1bHQ7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAw
KSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRBbGxSZWNvcmRzLCBjYWxsYmFja0lkZW50aWZpZXIsIElE
QkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIFdURk1vdmUocmVzdWx0KSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBJREJFcnJv
ciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRBbGxSZWNvcmRzKHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgZ2V0QWxsUmVjb3Jkc0RhdGEsIHJlc3VsdCk7CiAKICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1HZXRBbGxSZWNvcmRzLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBXVEZNb3Zl
KHJlc3VsdCkpKTsKQEAgLTE0ODQsMzcgKzEzMzAsMzAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUdldEFsbFJlY29yZHModWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b24KICAgICBwZXJmb3JtR2V0QWxsUmVzdWx0c0NhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IsIHJlc3VsdCk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldENvdW50KFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0
RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIENvdW50Q2Fs
bGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudChjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2Us
IENvdW50Q2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudCIp
OwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlz
LCByZXF1ZXN0RGF0YSwgcmFuZ2UsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8m
JiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAg
ICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmdldENvdW50QWZ0ZXJRdW90YUNoZWNrKHJlcXVl
c3REYXRhLCByYW5nZSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0
RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIENvdW50Q2Fs
bGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJh
Y2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQog
ICAgICAgICByZXR1cm47Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldENvdW50LCBjYWxsYmFja0lE
LCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0
U3RvcmVJZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLmluZGV4SWRlbnRpZmllcigpLCByYW5nZSkp
OworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBj
YWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERh
dGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLmluZGV4SWRlbnRpZmllcigp
LCByYW5nZSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1
aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VE
YXRhKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldENvdW50KGNvbnN0IENsaWVu
dE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiBrZXlSYW5nZURhdGEpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3Vu
dCIpOwogCisgICAgdWludDY0X3QgY291bnQ7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3Bh
Y2Uob3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgewor
ICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRDb3VudCwgY2FsbGJhY2tJZGVudGlm
aWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IpLCBjb3VudCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBBU1NFUlQob2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKTsKLQotICAgIHVpbnQ2NF90IGNvdW50OwogICAgIElEQkVycm9y
IGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldENvdW50KHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIGtleVJhbmdlRGF0YSwgY291
bnQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0Q291bnQsIGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3IsIGNvdW50KSk7CkBAIC0xNTI4LDM2ICsxMzY3LDI5IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRDb3VudCh1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0IElECiAgICAgcGVyZm9ybUNvdW50Q2FsbGJhY2soY2FsbGJhY2tJZGVudGlm
aWVyLCBlcnJvciwgY291bnQpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVS
ZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElE
QlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5n
ZURhdGEsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpk
ZWxldGVSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJL
ZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZCIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFj
ZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRh
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewot
ICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZN
b3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhp
cy0+ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEs
IFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1
ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEsIEVycm9yQ2FsbGJh
Y2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tP
ckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAg
ICAgICByZXR1cm47Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCwgY2FsbGJhY2tJ
RCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVj
dFN0b3JlSWRlbnRpZmllcigpLCBrZXlSYW5nZURhdGEpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
RGVsZXRlUmVjb3JkLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3RE
YXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50
aWZpZXIoKSwga2V5UmFuZ2VEYXRhKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1EZWxldGVSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQordm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZChjb25zdCBDbGllbnRPcmlnaW4mIG9y
aWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQogewogICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtRGVsZXRlUmVjb3JkIik7CiAKLSAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0
b3JlLT5kZWxldGVSYW5nZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgcmFuZ2UpOworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkg
PT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlUmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKFF1b3RhRXhjZWVkZWRFcnJvcikpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVy
LCBlcnJvcikpOworICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJh
bmdlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCByYW5nZSk7
CisgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCwgY2FsbGJhY2tJZGVu
dGlmaWVyLCBlcnJvcikpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
RGVsZXRlUmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3Im
IGVycm9yKQpAQCAtMTU2OCwzNCArMTQwMCwyNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29ucwog
ICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOwogfQog
Ci12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEs
IGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQor
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYg
cmVxdWVzdERhdGEsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8sIEdldFJlc3VsdENhbGxiYWNr
IGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvciIpOwogCi0gICAgd2Fp
dEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0
YSwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRh
YmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJh
Y2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgdGhpcy0+b3BlbkN1cnNvckFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgaW5m
bywgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpvcGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1
ZXN0RGF0YSwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2Fs
bGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICBy
ZXR1cm47Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJzb3IsIGNhbGxiYWNrSUQsIHJlcXVl
c3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCBpbmZvKSk7CisgICAgcG9zdERhdGFiYXNl
VGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybU9wZW5DdXJzb3IsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgcmVxdWVz
dERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIAotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJzb3IodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29u
c3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1P
cGVuQ3Vyc29yKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQogewogICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtT3BlbkN1cnNvciIpOwogCiAgICAgSURCR2V0UmVzdWx0IHJlc3VsdDsKKyAgICBpZiAobV9z
ZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRl
Y2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybU9wZW5DdXJz
b3IsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgcmVz
dWx0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgSURCRXJyb3IgZXJyb3IgPSBtX2Jh
Y2tpbmdTdG9yZS0+b3BlbkN1cnNvcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGluZm8sIHJlc3Vs
dCk7CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1PcGVuQ3Vyc29yLCBjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKQEAgLTE2MDksMzQgKzE0MzQsMjcgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybU9wZW5DdXJzb3IodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdAogICAgIHBlcmZvcm1HZXRSZXN1bHRDYWxsYmFjayhjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yLCByZXN1bHQpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpp
dGVyYXRlQ3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBj
b25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JE
YXRhJiBkYXRhLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBj
b25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJh
Y2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAi
KG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yIik7CiAKLSAgICB3YWl0Rm9y
UmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBk
YXRhLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUg
ewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhX
VEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLT5pdGVyYXRlQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCBkYXRh
LCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6Oml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJl
cXVlc3REYXRhLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSwgR2V0UmVzdWx0Q2Fs
bGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJh
Y2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQog
ICAgICAgICByZXR1cm47Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IsIGNhbGxi
YWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5j
dXJzb3JJZGVudGlmaWVyKCksIGRhdGEpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1
cnNvciwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFu
c2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEuY3Vyc29ySWRlbnRpZmllcigpLCBkYXRh
KSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29yKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29y
SWRlbnRpZmllciwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEpCit2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvcihjb25zdCBDbGllbnRPcmlnaW4mIG9y
aWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSkKIHsK
ICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IiKTsKIAogICAgIElEQkdldFJl
c3VsdCByZXN1bHQ7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9
PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0
YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1JdGVyYXRlQ3Vyc29yLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIHJlc3VsdCkpOworICAgICAgICByZXR1cm47CisgICAg
fQogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPml0ZXJhdGVDdXJzb3IodHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBjdXJzb3JJZGVudGlmaWVyLCBkYXRhLCByZXN1bHQpOwogCiAg
ICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CkBAIC0xNjg4LDE3ICsxNTA2LDYgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3QKIAogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rp
b24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBs
ZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rpb24sIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3Iu
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5jb21taXRUcmFuc2FjdGlv
bkFmdGVyUXVvdGFDaGVjayh0cmFuc2FjdGlvbiwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0p
OwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbkFmdGVyUXVv
dGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgRXJyb3JD
YWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQp
CiAgICAgICAgIHJldHVybjsKQEAgLTE3MTQsMTMgKzE1MjEsMTUgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2EKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHBvc3REYXRhYmFzZVRhc2so
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1D
b21taXRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZp
ZXIoKSkpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwgbV9pZGVudGlm
aWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigp
KSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlv
bih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyKQogewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIExPRyhJ
bmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rp
b24gLSAlcyIsIHRyYW5zYWN0aW9uSWRlbnRpZmllci5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VU
YXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJv
cihRdW90YUV4Y2VlZGVkRXJyb3IpLCB0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmNv
bW1pdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Is
IHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwpAQCAtMTc1MiwyNCArMTU2MSwxMyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLAogICAgIHRyYW5zYWN0aW9uQ29tcGxldGVkKG1fZmluaXNoaW5nVHJh
bnNhY3Rpb25zLnRha2UodHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiB9CiAKLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIFdhaXRGb3JQZW5kaW5nVGFza3Mgd2FpdEZvclBlbmRpbmdUYXNrcywg
RXJyb3JDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJh
bnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIEVycm9y
Q2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5zYWN0aW9u
IC0gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKIAogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rp
b24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwogCi0gICAgaWYgKHdhaXRGb3JQZW5kaW5nVGFza3Mg
PT0gV2FpdEZvclBlbmRpbmdUYXNrczo6WWVzKSB7Ci0gICAgICAgIHdhaXRGb3JSZXF1ZXN0U3Bh
Y2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICAgICAg
aWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUo
ZXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB0aGlzLT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBXYWl0Rm9yUGVuZGluZ1Rh
c2tzOjpObywgV1RGTW92ZShjYWxsYmFjaykpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJl
RXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTc4NSw3ICsxNTgzLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJv
cnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1BYm9ydFRyYW5zYWN0
aW9uLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CisgICAg
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24sIG1faWRlbnRpZmllci5vcmlnaW4oKSwg
Y2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSkpOwogfQogCiB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoVW5pcXVl
SURCRGF0YWJhc2VDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikKQEAgLTE4MDcsMTEgKzE2MDUsMTYgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRmluaXNoSGFuZGxpbmdWZXJzaW9uQ2hhbmdlKFVuaXF1
ZUlEQkRhdGFiYXNlQ29ubmVjdGkKICAgICBpbnZva2VPcGVyYXRpb25BbmRUcmFuc2FjdGlvblRp
bWVyKCk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1BYm9ydFRyYW5zYWN0
aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtQWJvcnRUcmFuc2FjdGlvbihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0co
SW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rp
b24gLSAlcyIsIHRyYW5zYWN0aW9uSWRlbnRpZmllci5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CiAKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0
b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUFib3J0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJy
b3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5h
Ym9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwg
dHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IGVj
M2ZjMGM3M2VhLi43NDQ5ODUyNGY5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTQ0LDYg
KzQ0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQ2xpZW50T3JpZ2luOwog
Y2xhc3MgSURCRXJyb3I7CiBjbGFzcyBJREJHZXRBbGxSZXN1bHQ7CiBzdHJ1Y3QgSURCR2V0UmVj
b3JkRGF0YTsKQEAgLTg5LDE3ICs5MCwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVJbmRl
eChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCSW5kZXhJbmZvJiwgRXJy
b3JDYWxsYmFjayk7CiAgICAgdm9pZCBkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGlu
ZGV4TmFtZSwgRXJyb3JDYWxsYmFjayk7CiAgICAgdm9pZCByZW5hbWVJbmRleChVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50
NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFj
ayk7Ci0gICAgdm9pZCBwdXRPckFkZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29u
c3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmLCBJ
bmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrKTsKLSAg
ICB2b2lkIGdldFJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURC
UmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2sp
OwotICAgIHZvaWQgZ2V0QWxsUmVjb3JkcyhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwg
Y29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdldEFs
bFJlc3VsdHNDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRDb3VudChVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
LCBDb3VudENhbGxiYWNrKTsKLSAgICB2b2lkIGRlbGV0ZVJlY29yZChVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURh
dGEmLCBFcnJvckNhbGxiYWNrKTsKLSAgICB2b2lkIG9wZW5DdXJzb3IoVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCQ3Vyc29ySW5m
byYsIEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGl0ZXJhdGVDdXJzb3IoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCSXRl
cmF0ZUN1cnNvckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CisgICAgdm9pZCBwdXRPckFkZChj
b25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYs
IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2spOwor
ICAgIHZvaWQgZ2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVj
b3JkRGF0YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKKyAgICB2b2lkIGdldEFsbFJlY29yZHMoY29u
c3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdldEFsbFJl
c3VsdHNDYWxsYmFjayk7CisgICAgdm9pZCBnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYsIENvdW50Q2FsbGJhY2spOworICAgIHZvaWQgZGVsZXRl
UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXJy
b3JDYWxsYmFjayk7CisgICAgdm9pZCBvcGVuQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiwg
Y29uc3QgSURCQ3Vyc29ySW5mbyYsIEdldFJlc3VsdENhbGxiYWNrKTsKKyAgICB2b2lkIGl0ZXJh
dGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0
YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKICAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBFcnJvckNhbGxiYWNrKTsKLQotICAgIGVudW0gY2xh
c3MgV2FpdEZvclBlbmRpbmdUYXNrcyB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIGFib3J0VHJhbnNh
Y3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIFdhaXRGb3JQZW5kaW5nVGFza3Ms
IEVycm9yQ2FsbGJhY2spOworICAgIHZvaWQgYWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiwgRXJyb3JDYWxsYmFjayk7CiAKICAgICB2b2lkIGRpZEZpbmlzaEhh
bmRsaW5nVmVyc2lvbkNoYW5nZShVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCB0
cmFuc2FjdGlvbkRlc3Ryb3llZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJik7CkBAIC0x
MzksNDQgKzEzOCwyNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzY2hlZHVsZVNodXRkb3duRm9y
Q2xvc2UoKTsKIAotICAgIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWlu
dDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJP
YmplY3RTdG9yZUluZm8mLCBFcnJvckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZv
aWQgcmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjaywgY29uc3QgSURCRXJyb3Im
KTsKLSAgICB2b2lkIGNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXpl
LCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCSW5kZXhJbmZvJiwgRXJy
b3JDYWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHJlbmFtZUluZGV4QWZ0ZXJR
dW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjaywgY29uc3QgSURCRXJyb3Im
KTsKLSAgICB2b2lkIHB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBj
b25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYs
IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2ssIGNv
bnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBkZWxldGVSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29u
c3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFcnJvckNhbGxiYWNr
KTsKLQotICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJv
ckNhbGxiYWNrKTsKLSAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmVBZmV0UXVvdGFDaGVjayhVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBFcnJvckNhbGxiYWNrKTsKLSAgICB2b2lkIGRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYsIEVycm9yQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0UmVjb3JkQWZ0
ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVjb3JkRGF0
YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGdldEFsbFJlY29yZHNBZnRlclF1b3Rh
Q2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYs
IEdldEFsbFJlc3VsdHNDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRDb3VudEFmdGVyUXVvdGFDaGVj
ayhjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIENvdW50Q2Fs
bGJhY2spOwotICAgIHZvaWQgb3BlbkN1cnNvckFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1
ZXN0RGF0YSYsIGNvbnN0IElEQkN1cnNvckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAg
dm9pZCBpdGVyYXRlQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwg
Y29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9p
ZCBjb21taXRUcmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiwgRXJyb3JDYWxsYmFjayk7Ci0KICAgICAvLyBEYXRhYmFzZSB0aHJlYWQgb3BlcmF0
aW9ucwogICAgIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRp
ZmllciYpOwotICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50
aWZpZXImLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtQ29tbWl0
VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtQWJv
cnRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICB2b2lkIG9wZW5CYWNr
aW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CisgICAgdm9pZCBwZXJmb3Jt
Q29tbWl0VHJhbnNhY3Rpb24oY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
Zmllcik7CisgICAgdm9pZCBwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbihjb25zdCBDbGllbnRPcmln
aW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIGJlZ2luVHJhbnNhY3Rpb25J
bkJhY2tpbmdTdG9yZShjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKLSAgICB2b2lkIHBlcmZv
cm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmpl
Y3RTdG9yZUluZm8mLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgcGVyZm9ybURlbGV0ZU9i
amVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IG5ld05hbWUsIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtQ2xlYXJPYmplY3RT
dG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIpOwotICAgIHZvaWQgcGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQkluZGV4SW5mbyYsIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3Jt
RGVsZXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIpOwotICAgIHZvaWQgcGVyZm9ybVJl
bmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUs
IGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlE
YXRhJiwgY29uc3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZSwgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHBlcmZvcm1HZXRSZWNvcmQodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJL
ZXlSYW5nZURhdGEmLCBJREJHZXRSZWNvcmREYXRhVHlwZSk7Ci0gICAgdm9pZCBwZXJmb3JtR2V0
QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRz
RGF0YSYpOwotICAgIHZvaWQgcGVyZm9ybUdldEluZGV4UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVu
dGlmaWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRh
Jik7Ci0gICAgdm9pZCBwZXJmb3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYpOwotICAgIHZvaWQgcGVyZm9ybURlbGV0ZVJlY29yZCh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYpOwotICAgIHZvaWQgcGVyZm9ybU9wZW5DdXJzb3IodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwotICAgIHZvaWQgcGVyZm9ybUl0
ZXJhdGVDdXJzb3IodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYpOwor
ICAgIHZvaWQgcGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOworICAgIHZv
aWQgcGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgdm9p
ZCBwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIG5ld05hbWUsIGNvbnN0IElEQkVycm9yJik7CisgICAgdm9pZCBwZXJmb3JtQ2xlYXJPYmpl
Y3RTdG9yZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIHZvaWQgcGVyZm9ybUNyZWF0ZUluZGV4
KGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQklu
ZGV4SW5mbyYpOworICAgIHZvaWQgcGVyZm9ybURlbGV0ZUluZGV4KGNvbnN0IENsaWVudE9yaWdp
biYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyKTsKKyAgICB2b2lkIHBlcmZvcm1SZW5hbWVJbmRl
eChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgcGVyZm9ybVB1dE9yQWRk
KGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwg
SW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOworICAgIHZvaWQgcGVyZm9ybUdl
dFJlY29yZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElEQkdl
dFJlY29yZERhdGFUeXBlKTsKKyAgICB2b2lkIHBlcmZvcm1HZXRBbGxSZWNvcmRzKGNvbnN0IENs
aWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29y
ZHNEYXRhJik7CisgICAgdm9pZCBwZXJmb3JtR2V0SW5kZXhSZWNvcmQoY29uc3QgQ2xpZW50T3Jp
Z2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBl
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKKyAgICB2b2lkIHBlcmZvcm1HZXRDb3VudChjb25z
dCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFu
Z2VEYXRhJik7CisgICAgdm9pZCBwZXJmb3JtRGVsZXRlUmVjb3JkKGNvbnN0IENsaWVudE9yaWdp
biYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CisgICAgdm9pZCBwZXJmb3JtT3BlbkN1cnNvcihj
b25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJDdXJz
b3JJbmZvJik7CisgICAgdm9pZCBwZXJmb3JtSXRlcmF0ZUN1cnNvcihjb25zdCBDbGllbnRPcmln
aW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IGN1cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJik7CiAgICAgdm9p
ZCBwZXJmb3JtUHJlZmV0Y2hDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRl
bnRpZmllcik7CiAKICAgICB2b2lkIHBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKQEAgLTE4Niw3ICsxNjgsNyBAQCBwcml2YXRl
OgogCiAgICAgLy8gTWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAgICAgdm9pZCBkaWREZWxldGVCYWNr
aW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pOwotICAgIHZvaWQgZGlkT3BlbkJhY2tp
bmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90
IHRhc2tJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURC
RGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIGRpZFBlcmZvcm1DcmVh
dGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9y
JiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRl
T2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3JtUmVu
YW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJv
ciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1l
KTsKQEAgLTI0Niw5ICsyMjgsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNEb25lV2l0aEhhcmRD
bG9zZSgpOwogCiAgICAgdm9pZCByZXF1ZXN0U3BhY2UoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYsIHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYpOwotICAgIHZvaWQgd2FpdEZvclJlcXVl
c3RTcGFjZUNvbXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYpOwotICAgIHZvaWQgc3RhcnRTcGFjZUluY3Jl
YXNlVGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrU2l6ZSk7Ci0gICAgdm9p
ZCBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCBib29sIGlzVGFz
a1N1Y2Nlc3NmdWwpOwogCiAgICAgdm9pZCBjbGVhclRyYW5zYWN0aW9uc09uQ29ubmVjdGlvbihV
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2VDb25uZWN0aW9uLmNwcAppbmRleCBmZTkxMGZhZjk4NC4uODAwNjA2OTg4MzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZUNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwCkBAIC03Niw3ICs3Niw3
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjphYm9ydFRyYW5zYWN0aW9uV2l0
aG91dENhbGxiYWNrKFVuaXF1ZUlEQkRhdGFiCiAgICAgaWYgKCFtX2RhdGFiYXNlKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgbV9kYXRhYmFzZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2Fj
dGlvbiwgVW5pcXVlSURCRGF0YWJhc2U6OldhaXRGb3JQZW5kaW5nVGFza3M6Ok5vLCBbdGhpcywg
cHJvdGVjdGVkVGhpcywgdHJhbnNhY3Rpb25JZGVudGlmaWVyXShjb25zdCBJREJFcnJvciYpIHsK
KyAgICBtX2RhdGFiYXNlLT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcHJv
dGVjdGVkVGhpcywgdHJhbnNhY3Rpb25JZGVudGlmaWVyXShjb25zdCBJREJFcnJvciYpIHsKICAg
ICAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25NYXAuY29udGFpbnModHJhbnNhY3Rpb25JZGVudGlm
aWVyKSk7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25NYXAucmVtb3ZlKHRyYW5zYWN0aW9uSWRlbnRp
Zmllcik7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bi5jcHAKaW5kZXggYThkMmJkYzc0MGMuLjc2ZWRkYzQ1YjA3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6YWJvcnQoKQogICAgIGF1dG8gZGF0YWJhc2UgPSBt
X2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwog
Ci0gICAgZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24oKnRoaXMsIFVuaXF1ZUlEQkRhdGFiYXNl
OjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpZZXMsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKV0oYXV0byYgZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+YWJvcnRUcmFuc2FjdGlvbigq
dGhpcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShhdXRvJiBlcnJvcikg
ewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
YWJvcnQgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjCiAgICAg
YXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFT
U0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPnB1dE9yQWRkKCp0aGlzLCByZXF1
ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJL
ZXlEYXRhJiBrZXkpIHsKKyAgICBkYXRhYmFzZS0+cHV0T3JBZGQocmVxdWVzdERhdGEsIGtleURh
dGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigq
dGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCS2V5RGF0YSYga2V5KSB7
CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpw
dXRPckFkZCAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0zMDcsNyArMzA3LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uOjpnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLAogICAg
IGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBB
U1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5nZXRSZWNvcmQoKnRoaXMsIHJl
cXVlc3REYXRhLCBnZXRSZWNvcmREYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigq
dGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1
bHQpIHsKKyAgICBkYXRhYmFzZS0+Z2V0UmVjb3JkKHJlcXVlc3REYXRhLCBnZXRSZWNvcmREYXRh
LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRv
JiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKICAgICAgICAgTE9HKEluZGV4
ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldFJlY29yZCAoY2FsbGJhY2sp
Iik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMjgs
NyArMzI4LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNv
cmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGEKICAgICBhdXRvIGRhdGFiYXNlID0g
bV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsK
ICAgICAKLSAgICBkYXRhYmFzZS0+Z2V0QWxsUmVjb3JkcygqdGhpcywgcmVxdWVzdERhdGEsIGdl
dEFsbFJlY29yZHNEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJl
cXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0QWxsUmVzdWx0JiByZXN1bHQpIHsK
KyAgICBkYXRhYmFzZS0+Z2V0QWxsUmVjb3JkcyhyZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jkc0Rh
dGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1
dG8mIGVycm9yLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0co
SW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3JkcyAo
Y2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC0zNDksNyArMzQ5LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpn
ZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGMKICAgICBhdXRvIGRh
dGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRh
dGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+Z2V0Q291bnQoKnRoaXMsIHJlcXVlc3REYXRh
LCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVx
dWVzdERhdGFdKGF1dG8mIGVycm9yLCB1aW50NjRfdCBjb3VudCkgeworICAgIGRhdGFiYXNlLT5n
ZXRDb3VudChyZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgdWludDY0X3QgY291bnQp
IHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
OmdldENvdW50IChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTM3MCw3ICszNzAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb246OmRlbGV0ZVJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdAog
ICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAg
ICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5kZWxldGVSZWNvcmQoKnRo
aXMsIHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yKSB7CisgICAgZGF0YWJhc2UtPmRl
bGV0ZVJlY29yZChyZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvcikgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3Jk
IChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
Om9wZW5DdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLAogICAgIGF1dG8g
ZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQo
ZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5vcGVuQ3Vyc29yKCp0aGlzLCByZXF1ZXN0
RGF0YSwgaW5mbywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0
RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0KSB7CisgICAgZGF0
YWJhc2UtPm9wZW5DdXJzb3IocmVxdWVzdERhdGEsIGluZm8sIFt0aGlzLCB3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRS
ZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvciAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vh
a1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00MTIsNyArNDEyLDcgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZXN0RGEKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24t
PmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+
aXRlcmF0ZUN1cnNvcigqdGhpcywgcmVxdWVzdERhdGEsIGRhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJH
ZXRSZXN1bHQmIHJlc3VsdCkgeworICAgIGRhdGFiYXNlLT5pdGVyYXRlQ3Vyc29yKHJlcXVlc3RE
YXRhLCBkYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3RE
YXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKICAgICAgICAg
TE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJz
b3IgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0
dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0luUHJvY2Vzc0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAppbmRleCA5MTExZjU5NzhlMy4uZDUyYzAx
MjNmZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC02MSwxOCArNjEsMjAgQEAg
UmVmPEluUHJvY2Vzc0lEQlNlcnZlcj4gSW5Qcm9jZXNzSURCU2VydmVyOjpjcmVhdGUoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBjb24KIAogSW5Qcm9jZXNzSURCU2VydmVyOjp+SW5Qcm9jZXNz
SURCU2VydmVyKCkgPSBkZWZhdWx0OwogCi1TdG9yYWdlUXVvdGFNYW5hZ2VyKiBJblByb2Nlc3NJ
REJTZXJ2ZXI6OnF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK1JlZlB0
cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBJblByb2Nlc3NJREJTZXJ2ZXI6OnF1b3RhTWFuYWdlcihj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKICAgICByZXR1cm4gbV9xdW90YU1hbmFnZXJz
LmVuc3VyZShvcmlnaW4sIFtdIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U3RvcmFnZVF1
b3RhTWFuYWdlcj4oU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCksIFtdKHVpbnQ2
NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2Us
IGF1dG8gY2FsbGJhY2spIHsKKyAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmNy
ZWF0ZShTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSwgW10geworICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0sIFtdKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJy
ZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKICAgICAg
ICAgICAgIGNhbGxiYWNrKHF1b3RhICsgY3VycmVudFNwYWNlICsgc3BhY2VJbmNyZWFzZSk7CiAg
ICAgICAgIH0pOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICB9KS5pdGVyYXRv
ci0+dmFsdWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1b3Rh
TWFuYWdlckdldHRlciBzdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyKEluUHJvY2Vzc0lEQlNlcnZl
ciYgc2VydmVyKQorc3RhdGljIGlubGluZSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6U3RvcmFnZVF1
b3RhTWFuYWdlckdldHRlciBzdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyKEluUHJvY2Vzc0lEQlNl
cnZlciYgc2VydmVyKQogewotICAgIHJldHVybiBbd2Vha1NlcnZlciA9IG1ha2VXZWFrUHRyKHNl
cnZlcildKFBBTDo6U2Vzc2lvbklELCBjb25zdCBhdXRvJiBvcmlnaW4pIHsKKyAgICByZXR1cm4g
W3dlYWtTZXJ2ZXIgPSBtYWtlV2Vha1B0cihzZXJ2ZXIpXShjb25zdCBhdXRvJiBvcmlnaW4pIHsK
ICAgICAgICAgcmV0dXJuIHdlYWtTZXJ2ZXIgPyB3ZWFrU2VydmVyLT5xdW90YU1hbmFnZXIob3Jp
Z2luKSA6IG51bGxwdHI7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAppbmRleCBj
N2I1MzIxY2EzNi4uYTI3YTYyOTJmNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKQEAgLTEy
NSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKSBvdmVycmlkZSB7IFJlZkNvdW50
ZWQ8SW5Qcm9jZXNzSURCU2VydmVyPjo6cmVmKCk7IH0KICAgICB2b2lkIGRlcmVmKCkgb3ZlcnJp
ZGUgeyBSZWZDb3VudGVkPEluUHJvY2Vzc0lEQlNlcnZlcj46OmRlcmVmKCk7IH0KIAotICAgIFN0
b3JhZ2VRdW90YU1hbmFnZXIqIHF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mKTsKKyAg
ICBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyKGNvbnN0IENsaWVudE9y
aWdpbiYpOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEluUHJvY2Vzc0lEQlNlcnZlcihQQUw6
OlNlc3Npb25JRCk7CkBAIC0xMzUsNyArMTM1LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURC
Q2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI+IG1fY29ubmVjdGlvblRvU2VydmVyOwogICAg
IFJlZlB0cjxJREJTZXJ2ZXI6OklEQkNvbm5lY3Rpb25Ub0NsaWVudD4gbV9jb25uZWN0aW9uVG9D
bGllbnQ7CiAKLSAgICBIYXNoTWFwPENsaWVudE9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFN0b3Jh
Z2VRdW90YU1hbmFnZXI+PiBtX3F1b3RhTWFuYWdlcnM7CisgICAgSGFzaE1hcDxDbGllbnRPcmln
aW4sIFJlZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9xdW90YU1hbmFnZXJzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZVF1b3RhTWFuYWdlci5jcHAKaW5kZXggODUyNTc1MmU2MzMuLjQ3YjRiMmJmNGUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKQEAgLTI3LDIx
MyArMjcsMTAwIEBACiAjaW5jbHVkZSAiU3RvcmFnZVF1b3RhTWFuYWdlci5oIgogCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VRdW90YVVzZXIuaCIKKyNpbmNsdWRlIDx3
dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1T
dG9yYWdlUXVvdGFNYW5hZ2VyOjp+U3RvcmFnZVF1b3RhTWFuYWdlcigpCitSZWY8U3RvcmFnZVF1
b3RhTWFuYWdlcj4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKHVpbnQ2NF90IHF1b3RhLCBV
c2FnZUdldHRlciYmIHVzYWdlR2V0dGVyLCBRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYgcXVvdGFJ
bmNyZWFzZVJlcXVlc3RlcikKIHsKLSAgICB3aGlsZSAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1w
dHkoKSkKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCkuY2FsbGJhY2soRGVj
aXNpb246OkRlbnkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VRdW90YU1hbmFn
ZXIocXVvdGEsIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1
ZXN0ZXIpKSk7CiB9CiAKLXVpbnQ2NF90IFN0b3JhZ2VRdW90YU1hbmFnZXI6OnNwYWNlVXNhZ2Uo
KSBjb25zdAorU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RvcmFnZVF1b3RhTWFuYWdlcih1aW50NjRf
dCBxdW90YSwgVXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgUXVvdGFJbmNyZWFzZVJlcXVlc3Rl
ciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpCisgICAgOiBtX3F1b3RhKHF1b3RhKQorICAgICwg
bV91c2FnZUdldHRlcihXVEZNb3ZlKHVzYWdlR2V0dGVyKSkKKyAgICAsIG1fcXVvdGFJbmNyZWFz
ZVJlcXVlc3RlcihXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKQorICAgICwgbV93b3Jr
UXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlN0b3JhZ2VRdW90YU1hbmFnZXIgQmFja2dyb3VuZCBR
dWV1ZSIpKQogewotICAgIHVpbnQ2NF90IHVzYWdlID0gMDsKLSAgICBmb3IgKGF1dG8mIHVzZXIg
OiBtX3VzZXJzKQotICAgICAgICB1c2FnZSArPSB1c2VyLT5zcGFjZVVzZWQoKTsKLSAgICByZXR1
cm4gdXNhZ2U7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6dXBkYXRlUXVvdGFCYXNl
ZE9uU3BhY2VVc2FnZSgpCit2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9u
TWFpblRocmVhZCh1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCwgUmVxdWVzdENhbGxiYWNrJiYgY2Fs
bGJhY2spCiB7Ci0gICAgaWYgKCFtX3F1b3RhKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKIAotICAgIGF1dG8gZGVmYXVsdFF1b3RhU3RlcCA9IG1fcXVvdGEg
LyAxMDsKLSAgICBtX3F1b3RhID0gc3RkOjptYXgobV9xdW90YSwgZGVmYXVsdFF1b3RhU3RlcCAq
ICgoc3BhY2VVc2FnZSgpIC8gZGVmYXVsdFF1b3RhU3RlcCkgKyAxKSk7Ci19Ci0KLXZvaWQgU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQoKQotewotICAgIGlmICht
X3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgVmVjdG9yPFN0b3JhZ2VRdW90YVVzZXIqPiB1c2Vyc1RvSW5pdGlhbGl6ZTsKLSAgICBm
b3IgKGF1dG8mIGtleVZhbHVlIDogbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2VycykgewotICAg
ICAgICBpZiAoa2V5VmFsdWUudmFsdWUgPT0gV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpObykgewot
ICAgICAgICAgICAga2V5VmFsdWUudmFsdWUgPSBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ6OlllczsK
LSAgICAgICAgICAgIHVzZXJzVG9Jbml0aWFsaXplLmFwcGVuZChrZXlWYWx1ZS5rZXkpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGZvciAoYXV0byogdXNlciA6IHVzZXJzVG9Jbml0aWFsaXplKSB7
Ci0gICAgICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmNvbnRhaW5zKHVzZXIp
KQotICAgICAgICAgICAgYXNrVXNlclRvSW5pdGlhbGl6ZSgqdXNlcik7Ci0gICAgfQotfQotCi12
b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUoU3RvcmFnZVF1b3Rh
VXNlciYgdXNlcikKLXsKLSAgICB1c2VyLndoZW5Jbml0aWFsaXplZChbdGhpcywgJnVzZXIsIHdl
YWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldKCkgewotICAgICAgICBpZiAoIXdlYWtUaGlzKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlv
blVzZXJzLnJlbW92ZSgmdXNlcikpCi0gICAgICAgICAgICBtX3VzZXJzLmFkZCgmdXNlcik7Ci0K
LSAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKKyAg
ICAvLyBGYXN0IHBhdGguCisgICAgaWYgKG1fcXVvdGFDb3VudERvd25Mb2NrLnRyeUxvY2soKSkg
eworICAgICAgICBpZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkgeworICAgICAg
ICAgICAgbV9xdW90YUNvdW50RG93bkxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICBjYWxsYmFj
ayhEZWNpc2lvbjo6R3JhbnQpOwogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE1h
a2Ugc3VyZSBxdW90YSBpcyBzZXQgYmVmb3JlIGhhbmRsaW5nIGZpcnN0IHJlcXVlc3QuCi0gICAg
ICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpVbmluaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICB1
cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCk7Ci0gICAgICAgICAgICBtX3N0YXRlID0gU3Rh
dGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKICAgICAgICAgfQorICAgICAgICBtX3F1b3Rh
Q291bnREb3duTG9jay51bmxvY2soKTsKKyAgICB9CiAKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdS
ZXF1ZXN0cyh7IH0pOwotICAgIH0pOwotfQotCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFk
ZFVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKLXsKLSAgICBBU1NFUlQoIW1fcGVuZGluZ0lu
aXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBBU1NFUlQoIW1fdXNlcnMu
Y29udGFpbnMoJnVzZXIpKTsKLSAgICBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmFkZCgm
dXNlciwgV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpObyk7Ci0KLSAgICBpZiAoIW1fcGVuZGluZ1Jl
cXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgYXNrVXNlclRvSW5pdGlhbGl6ZSh1c2VyKTsKLX0K
LQotYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzaG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0
X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3QKLXsKLSAgICBpZiAoIXNwYWNlSW5jcmVhc2UpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBzcGFjZVVzYWdlKCkgKyBzcGFjZUluY3Jl
YXNlID4gbV9xdW90YTsKLX0KLQotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2Vy
KFN0b3JhZ2VRdW90YVVzZXImIHVzZXIpCi17Ci0gICAgQVNTRVJUKG1fdXNlcnMuY29udGFpbnMo
JnVzZXIpIHx8IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnMoJnVzZXIpKTsK
LSAgICBtX3VzZXJzLnJlbW92ZSgmdXNlcik7Ci0gICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0
aW9uVXNlcnMucmVtb3ZlKCZ1c2VyKSAmJiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlz
RW1wdHkoKSkgewotICAgICAgICAvLyBXaGVuIGJlaW5nIGNsZWFyZWQsIHF1b3RhIHVzZXJzIG1h
eSByZW1vdmUgdGhlbXNlbHZlcyBhbmQgYWRkIHRoZW1zZWx2ZXMgdG8gdHJpZ2dlciByZWluaXRp
YWxpemF0aW9uLgotICAgICAgICAvLyBMZXQncyB3YWl0IGZvciBhZGRVc2VyIHRvIGJlIGNhbGxl
ZCBiZWZvcmUgcHJvY2Vzc2luZyBwZW5kaW5nIHJlcXVlc3RzLgotICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgICAg
ICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAg
aWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKKyAgICBtX2NhbGxiYWNrcy5h
cHBlbmQoV1RGTW92ZShjYWxsYmFjaykpOworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzcGFjZVJlcXVlc3RlZF0geworICAg
ICAgICBhdXRvIGRlY2lzaW9uID0gcmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHNwYWNl
UmVxdWVzdGVkKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBkZWNpc2lvbl0geworICAgICAgICAgICAgQVNTRVJUKCFtX2Nh
bGxiYWNrcy5pc0VtcHR5KCkpOworICAgICAgICAgICAgYXV0byBjYWxsYmFjayA9IG1fY2FsbGJh
Y2tzLnRha2VGaXJzdCgpOworICAgICAgICAgICAgY2FsbGJhY2soZGVjaXNpb24pOwogICAgICAg
ICB9KTsKLSAgICB9CisgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVx
dWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIFJlcXVlc3RDYWxsYmFjayYmIGNhbGxi
YWNrKQorU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gU3RvcmFnZVF1b3RhTWFuYWdlcjo6
cmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkKQog
ewotICAgIGlmICghbV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcGVu
ZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spIH0p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwog
Ci0gICAgaWYgKCFzcGFjZUluY3JlYXNlKSB7Ci0gICAgICAgIGNhbGxiYWNrKERlY2lzaW9uOjpH
cmFudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9x
dW90YUNvdW50RG93bkxvY2spOwogCi0gICAgaW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQoKTsKKyAg
ICBpZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkKKyAgICAgICAgcmV0dXJuIERl
Y2lzaW9uOjpHcmFudDsKIAotICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNy
ZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBtX3VzYWdl
ID0gbV91c2FnZUdldHRlcigpOworICAgIC8vIFdoZW4gU3RvcmFnZVF1b3RhTWFuYWdlciBpcyB1
c2VkIGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugd2FudCB0byBtYWtlIHN1cmUgaXRzIGluaXRpYWwg
cXVvdGEgaXMgYmlnZ2VyIHRoYW4gY3VycmVudCBkaXNrIHVzYWdlLAorICAgIC8vIGJhc2VkIG9u
IHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHF1b3RhIHdhcyBpbmNyZWFzZWQgdG8gYXQgbGVhc3Qg
dGhlIGRpc2sgdXNhZ2UgdW5kZXIgdXNlcidzIHBlcm1pc3Npb24gYmVmb3JlLgorICAgIGlmICgh
bV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UpIHsKKyAgICAgICAgbV9xdW90YVVwZGF0ZWRCYXNl
ZE9uVXNhZ2UgPSB0cnVlOworICAgICAgICBhdXRvIGRlZmF1bHRRdW90YVN0ZXAgPSBtX3F1b3Rh
IC8gMTA7CisgICAgICAgIG1fcXVvdGEgPSBzdGQ6Om1heChtX3F1b3RhLCBkZWZhdWx0UXVvdGFT
dGVwICogKG1fdXNhZ2UgLyBkZWZhdWx0UXVvdGFTdGVwKSArIDEpOwogICAgIH0KKyAgICBtX3F1
b3RhQ291bnREb3duID0gbV91c2FnZSA8IG1fcXVvdGEgPyBtX3F1b3RhIC0gbV91c2FnZSA6IDA7
CisgICAgaWYgKHRyeUdyYW50UmVxdWVzdChzcGFjZVJlcXVlc3RlZCkpCisgICAgICAgIHJldHVy
biBEZWNpc2lvbjo6R3JhbnQ7CisKKyAgICAvLyBCbG9jayB0aGlzIHRocmVhZCB1bnRpbCBnZXR0
aW5nIGRlY3Npb24gZm9yIHF1b3RhIGluY3JlYXNlLgorICAgIEJpbmFyeVNlbWFwaG9yZSBzZW1h
cGhvcmU7CisgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBzcGFjZVJlcXVlc3RlZCwgJnNlbWFwaG9yZV0geworICAgICAgICBSRUxFQVNF
X0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyIGFza3MgZm9yIHF1b3RhIGlu
Y3JlYXNlICUiIFBSSXU2NCwgdGhpcywgc3BhY2VSZXF1ZXN0ZWQpOworICAgICAgICBtX3F1b3Rh
SW5jcmVhc2VSZXF1ZXN0ZXIobV9xdW90YSwgbV91c2FnZSwgc3BhY2VSZXF1ZXN0ZWQsIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksICZzZW1hcGhvcmVdKE9wdGlvbmFsPHVp
bnQ2NF90PiBuZXdRdW90YSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVw
IC0gU3RvcmFnZVF1b3RhTWFuYWdlciByZWNlaXZlcyBxdW90YSBpbmNyZWFzZSByZXNwb25zZSAl
IiBQUkl1NjQsIHRoaXMsIG5ld1F1b3RhID8gKm5ld1F1b3RhIDogMCk7CisgICAgICAgICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgICAgICAgICBpZiAobmV3UXVvdGEpCisgICAg
ICAgICAgICAgICAgbV9xdW90YSA9ICpuZXdRdW90YTsKKworICAgICAgICAgICAgc2VtYXBob3Jl
LnNpZ25hbCgpOworICAgICAgICB9KTsKKyAgICB9KTsKIAotICAgIGlmIChzaG91bGRBc2tGb3JN
b3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBw
ZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7Ci0KLSAgICAgICAgLy8g
VHJ5IHByb2Nlc3NpbmcgcmVxdWVzdCBhZ2FpbiBhZnRlciBtYWtpbmcgc3VyZSB1c2FnZSBpcyBh
Y2N1cmF0ZS4KLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDb21wdXRpbmdTcGFjZVVzZWQ7Ci0g
ICAgICAgIGZvciAoYXV0byYgdXNlciA6IGNvcHlUb1ZlY3RvcihtX3VzZXJzKSkKLSAgICAgICAg
ICAgIHVzZXItPmNvbXB1dGVTcGFjZVVzZWQoKTsKLQotICAgICAgICBpZiAoIW1fcGVuZGluZ0lu
aXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlOwotICAgICAgICBhc2tGb3JN
b3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKLSAgICBjYWxsYmFjayhE
ZWNpc2lvbjo6R3JhbnQpOwotfQotCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1v
cmVTcGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNlKQotewotICAgIEFTU0VSVChzaG91bGRBc2tG
b3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSkpOwotICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRl
OjpBc2tpbmdGb3JNb3JlU3BhY2UpOwotCi0gICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0g
U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNlICUiIFBSSXU2NCwgdGhpcywgc3Bh
Y2VJbmNyZWFzZSk7Ci0gICAgbV9zdGF0ZSA9IFN0YXRlOjpXYWl0aW5nRm9yU3BhY2VJbmNyZWFz
ZVJlc3BvbnNlOwotICAgIG1fc3BhY2VJbmNyZWFzZVJlcXVlc3RlcihtX3F1b3RhLCBzcGFjZVVz
YWdlKCksIHNwYWNlSW5jcmVhc2UsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KV0oT3B0aW9uYWw8dWludDY0X3Q+IG5ld1F1b3RhKSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVw
IC0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNlIHJlY2VpdmVkIHJlc3BvbnNl
ICUiIFBSSXU2NCwgdGhpcywgbmV3UXVvdGEgPyAqbmV3UXVvdGEgOiAwKTsKKyAgICBzZW1hcGhv
cmUud2FpdCgpOwogCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNl
OwotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKG5ld1F1b3RhKTsKLSAgICB9KTsKKyAg
ICBtX3VzYWdlID0gbV91c2FnZUdldHRlcigpOworICAgIG1fcXVvdGFDb3VudERvd24gPSBtX3Vz
YWdlIDwgbV9xdW90YSA/IG1fcXVvdGEgLSBtX3VzYWdlIDogMDsKKyAgICBhdXRvIGRlY2lzaW9u
ID0gdHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSA/IERlY2lzaW9uOjpHcmFudCA6IERl
Y2lzaW9uOjpEZW55OworICAgIHJldHVybiBkZWNpc2lvbjsKIH0KIAotdm9pZCBTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdR
dW90YSkKK2Jvb2wgU3RvcmFnZVF1b3RhTWFuYWdlcjo6dHJ5R3JhbnRSZXF1ZXN0KHVpbnQ2NF90
IHNwYWNlUmVxdWVzdGVkKQogewotICAgIGlmIChtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChuZXdRdW90YSkKLSAgICAgICAgbV9xdW90YSA9
ICpuZXdRdW90YTsKLQotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpXYWl0aW5nRm9yU3BhY2VJ
bmNyZWFzZVJlc3BvbnNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcGVuZGluZ0lu
aXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlKSB7Ci0gICAgICAgIGF1dG8gcmVx
dWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpOwotICAgICAgICBib29sIHNob3Vs
ZEFsbG93UmVxdWVzdCA9ICFzaG91bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3Jl
YXNlKTsKLQotICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzIGZpcnN0IHJlcXVlc3QgZGVjaXNpb24gaXMg
JWQiLCB0aGlzLCBzaG91bGRBbGxvd1JlcXVlc3QpOwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0
ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgICAgICByZXF1ZXN0LmNhbGxiYWNrKHNo
b3VsZEFsbG93UmVxdWVzdCA/IERlY2lzaW9uOjpHcmFudCA6IERlY2lzaW9uOjpEZW55KTsKLSAg
ICB9Ci0KLSAgICB3aGlsZSAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAg
ICBhdXRvJiByZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMuZmlyc3QoKTsKLQotICAgICAgICBp
ZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHJlcXVlc3Quc3BhY2VJbmNyZWFzZSkpIHsKLSAgICAg
ICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3QpIHsK
LSAgICAgICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKLSAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8mIHVzZXIgOiBjb3B5VG9WZWN0b3IobV91c2VycykpCi0g
ICAgICAgICAgICAgICAgICAgIHVzZXItPmNvbXB1dGVTcGFjZVVzZWQoKTsKLQotICAgICAgICAg
ICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9z
dGF0ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgICAgICB1aW50NjRfdCBz
cGFjZUluY3JlYXNlID0gMDsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcGVuZGluZ1JlcXVlc3Qg
OiBtX3BlbmRpbmdSZXF1ZXN0cykKLSAgICAgICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9IHBl
bmRpbmdSZXF1ZXN0LnNwYWNlSW5jcmVhc2U7Ci0gICAgICAgICAgICBhc2tGb3JNb3JlU3BhY2Uo
c3BhY2VJbmNyZWFzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKLSAgICAgICAgbV9w
ZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCkuY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKKyAg
ICBBU1NFUlQobV9xdW90YUNvdW50RG93bkxvY2suaXNMb2NrZWQoKSk7CisgICAgaWYgKHNwYWNl
UmVxdWVzdGVkIDw9IG1fcXVvdGFDb3VudERvd24pIHsKKyAgICAgICAgbV9xdW90YUNvdW50RG93
biAtPSBzcGFjZVJlcXVlc3RlZDsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAppbmRleCAwOTU2NjMwNmY1NS4uMmJmNGRk
NjkwMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFu
YWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5o
CkBAIC0yNSw3NyArMjUsNDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDbGllbnRP
cmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3
dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVl
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU3RvcmFnZVF1b3RhVXNlcjsKLQot
Y2xhc3MgU3RvcmFnZVF1b3RhTWFuYWdlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTdG9yYWdl
UXVvdGFNYW5hZ2VyPiB7CitjbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VyIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFN0b3JhZ2VRdW90YU1hbmFnZXI+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQ
dHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIHVzaW5nIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEY6OkZ1bmN0aW9u
PHZvaWQodWludDY0X3QgcXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3Bh
Y2VJbmNyZWFzZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYm
KT47Ci0gICAgU3RvcmFnZVF1b3RhTWFuYWdlcih1aW50NjRfdCBxdW90YSwgU3BhY2VJbmNyZWFz
ZVJlcXVlc3RlciYmIHNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIpCi0gICAgICAgIDogbV9xdW90YShx
dW90YSkKLSAgICAgICAgLCBtX3NwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIoV1RGTW92ZShzcGFjZUlu
Y3JlYXNlUmVxdWVzdGVyKSkKLSAgICB7Ci0gICAgfQotICAgIFdFQkNPUkVfRVhQT1JUIH5TdG9y
YWdlUXVvdGFNYW5hZ2VyKCk7CisgICAgdXNpbmcgVXNhZ2VHZXR0ZXIgPSBXVEY6OkZ1bmN0aW9u
PHVpbnQ2NF90KCk+OworICAgIHVzaW5nIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEY6OkZ1
bmN0aW9uPHZvaWQodWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50VXNhZ2Us
IHVpbnQ2NF90IHJlcXVlc3RlZEluY3JlYXNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlv
bmFsPHVpbnQ2NF90Pik+JiYpPjsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFN0b3Jh
Z2VRdW90YU1hbmFnZXI+IGNyZWF0ZSh1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVv
dGFJbmNyZWFzZVJlcXVlc3RlciYmKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3Qg
ZGVmYXVsdFRoaXJkUGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkg
eyByZXR1cm4gcXVvdGEgLyAxMDsgfQotCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBk
ZWZhdWx0UXVvdGEoKSB7IHJldHVybiAxMDAwICogTUI7IH0KICAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB7IHJldHVybiBkZWZhdWx0VGhpcmRQ
YXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3RhKGRlZmF1bHRRdW90YSgpKTsgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyKFN0b3JhZ2VRdW90YVVzZXImKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlbW92ZVVzZXIoU3RvcmFnZVF1b3RhVXNlciYpOwotCiAgICAgZW51bSBj
bGFzcyBEZWNpc2lvbiB7IERlbnksIEdyYW50IH07CiAgICAgdXNpbmcgUmVxdWVzdENhbGxiYWNr
ID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNpc2lvbik+OwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVxdWVzdFNwYWNlKHVpbnQ2NF90LCBSZXF1ZXN0Q2FsbGJhY2smJik7Ci0gICAgdm9p
ZCByZXNldFF1b3RhKHVpbnQ2NF90IG5ld1F1b3RhKSB7IG1fcXVvdGEgPSBuZXdRdW90YTsgfQot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCk7
Ci0KLSAgICBlbnVtIGNsYXNzIFN0YXRlIHsKLSAgICAgICAgVW5pbml0aWFsaXplZCwKLSAgICAg
ICAgQ29tcHV0aW5nU3BhY2VVc2VkLAotICAgICAgICBXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJl
c3BvbnNlLAotICAgICAgICBBc2tpbmdGb3JNb3JlU3BhY2UsCi0gICAgICAgIE1ha2luZ0RlY2lz
aW9uRm9yUmVxdWVzdCwKLSAgICB9OwotICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdFNwYWNlT25NYWluVGhy
ZWFkKHVpbnQ2NF90LCBSZXF1ZXN0Q2FsbGJhY2smJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRGVj
aXNpb24gcmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHVpbnQ2NF90KTsKIAogcHJpdmF0
ZToKLSAgICB1aW50NjRfdCBzcGFjZVVzYWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRBc2tG
b3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3Q7Ci0gICAgdm9pZCBhc2tG
b3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSk7Ci0KLSAgICB2b2lkIGluaXRpYWxp
emVVc2Vyc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBhc2tVc2VyVG9Jbml0aWFsaXplKFN0b3JhZ2VR
dW90YVVzZXImKTsKLQotICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1
aW50NjRfdD4pOworICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFVzYWdl
R2V0dGVyJiYsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJik7CisgICAgYm9vbCB0cnlHcmFudFJl
cXVlc3QodWludDY0X3QpOwogCisgICAgTG9jayBtX3F1b3RhQ291bnREb3duTG9jazsKKyAgICB1
aW50NjRfdCBtX3F1b3RhQ291bnREb3duIHsgMCB9OwogICAgIHVpbnQ2NF90IG1fcXVvdGEgeyAw
IH07CisgICAgdWludDY0X3QgbV91c2FnZSB7IDAgfTsKIAotICAgIFNwYWNlSW5jcmVhc2VSZXF1
ZXN0ZXIgbV9zcGFjZUluY3JlYXNlUmVxdWVzdGVyOwotCi0gICAgZW51bSBjbGFzcyBXaGVuSW5p
dGlhbGl6ZWRDYWxsZWQgeyBObywgWWVzIH07Ci0gICAgSGFzaE1hcDxTdG9yYWdlUXVvdGFVc2Vy
KiwgV2hlbkluaXRpYWxpemVkQ2FsbGVkPiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzOwot
ICAgIEhhc2hTZXQ8U3RvcmFnZVF1b3RhVXNlcio+IG1fdXNlcnM7CisgICAgVXNhZ2VHZXR0ZXIg
bV91c2FnZUdldHRlcjsKKyAgICBRdW90YUluY3JlYXNlUmVxdWVzdGVyIG1fcXVvdGFJbmNyZWFz
ZVJlcXVlc3RlcjsKIAotICAgIHN0cnVjdCBQZW5kaW5nUmVxdWVzdCB7Ci0gICAgICAgIHVpbnQ2
NF90IHNwYWNlSW5jcmVhc2U7Ci0gICAgICAgIFJlcXVlc3RDYWxsYmFjayBjYWxsYmFjazsKLSAg
ICB9OwotICAgIERlcXVlPFBlbmRpbmdSZXF1ZXN0PiBtX3BlbmRpbmdSZXF1ZXN0czsKKyAgICBE
ZXF1ZTxSZXF1ZXN0Q2FsbGJhY2s+IG1fY2FsbGJhY2tzOworICAgIFJlZjxXb3JrUXVldWU+IG1f
d29ya1F1ZXVlOwogCi0gICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpVbmluaXRpYWxpemVkIH07
CisgICAgYm9vbCBtX3F1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZSB7IGZhbHNlIH07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUzMDRjMWMwM2MzLi4yYmRiMzAyMzBi
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MSBAQAorMjAxOS0xMS0xMiAgU2lodWkgTGl1ICA8c2lo
dWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVyc2lvbiBTdG9yYWdl
UXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDM5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlbW92ZVNlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9u
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3Jp
Z2lucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjcmVhdGVJREJTZXJ2ZXIp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0U2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXJJREJSb290UGF0aCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpz
dG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6Omlu
aXRpYWxpemVTdG9yYWdlUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6Y2xlYXJTdG9yYWdlUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcpOiBE
ZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OmluaXRpYWxpemVRdW90YVVzZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OlNlc3Npb25T
dG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OmVuc3Vy
ZU9yaWdpblN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OmNhY2hlUm9vdFBhdGggY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXI6OnNldElEQlJvb3RQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjppZGJSb290UGF0aCBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yYWdlUXVvdGFNYW5hZ2Vyczo6ZGVmYXVsdFF1b3Rh
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlN0b3Jh
Z2VRdW90YU1hbmFnZXJzOjpzZXREZWZhdWx0UXVvdGFzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OlN0b3JhZ2VRdW90YU1hbmFnZXJzOjptYW5hZ2Vyc1Blck9y
aWdpbik6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpnZXREaXJlY3Rv
cnlTaXplKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OmRpc2tVc2Fn
ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpyZXF1ZXN0U3BhY2Up
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6cmVhZENhY2hlc0Zyb21E
aXNrKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OndyaXRlU2l6ZUZp
bGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6cmVhZFNpemVGaWxl
KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OmNsZWFyQWxsQ2FjaGVz
RnJvbURpc2spOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6ZGVsZXRl
RGlyZWN0b3J5UmVjdXJzaXZlbHlPbkJhY2tncm91bmRUaHJlYWQpOgorICAgICAgICAoV2ViS2l0
OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6aW5pdGlhbGl6ZVF1b3RhVXNlcik6IERlbGV0ZWQuCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmNhY2hlc1NpemVGaWxlbmFt
ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6Q2FjaGVzKToKKyAgICAgICAgKFdl
YktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6On5DYWNoZXMpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlczo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3Jh
Z2U6OkNhY2hlczo6cmVxdWVzdFNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdl
OjpjYWNoZXNTaXplRmlsZW5hbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkNhY2hlczo6d2hlbkluaXRpYWxpemVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaDoKKyAg
ICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAg
ICogU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplbnN1
cmVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29h
L1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwYXJh
bWV0ZXJzKToKKwogMjAxOS0xMS0xMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmVydCByZW1haW5kZXIgb2YgcjI1MTY3NgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA1ZjIz
Y2M2NmFhMS4uMGY2ZTU2NGU5YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAiV2Vic2l0
ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAj
aW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmln
aW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RE5TLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EZXByZWNhdGVkR2xvYmFsU2V0dGluZ3MuaD4KQEAg
LTMxNiw4ICszMTcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKICAgICBhdXRvIHNlc3Np
b25JRCA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKICAgICBzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29y
a1Nlc3Npb246OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIAorICAgIFNhbmRib3hF
eHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgYWRk
U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eSk7CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBhZGRJbmRleGVkRGF0YWJh
c2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBz
ZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKHNlc3Npb25JRCwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnkp
OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC0zMjYsNyArMzMxLDYg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKICAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Np
b24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc2VydmljZVdvcmtlclByb2Nl
c3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIH0KICNlbmRpZgotICAgIGluaXRp
YWxpemVTdG9yYWdlUXVvdGEocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7
CiAKICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwogCkBAIC00MzQsMjggKzQzOCwzOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpj
bGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0
ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiB7Cisg
ICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5z
ZXNzaW9uSUQ7CisKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFy
YW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGFkZFNl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgcGFyYW1ldGVycy5wZXJPcmlnaW5T
dG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwg
cGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOworCiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihwYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0jZW5kaWYKKyAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwg
cGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBzZXRTZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlcklEQlJvb3RQYXRoKHNlc3Npb25JRCwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnkpOworICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAg
IGlmIChwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50KCkpCi0gICAgICAg
IGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnNlc3Npb25JRCwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9u
RGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHNlc3Np
b25JRCwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFi
bGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIHBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7Ci0KLSAgICBpbml0aWFsaXplU3RvcmFnZVF1b3RhKHBhcmFtZXRlcnMpOworICAg
IG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMubG9jYWxTdG9y
YWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CiAKICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFT
dG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycykpOwogfQogCi12b2lkIE5ldHdv
cmtQcm9jZXNzOjppbml0aWFsaXplU3RvcmFnZVF1b3RhKGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQordm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lvblN0
b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW50NjRfdCBkZWZh
dWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0cmluZyYg
Y2FjaGVSb290UGF0aCkKIHsKLSAgICBhdXRvJiBtYW5hZ2VycyA9ICBtX3N0b3JhZ2VRdW90YU1h
bmFnZXJzLmVuc3VyZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9u
SUQsIFtdIHsKLSAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsgfTsKLSAgICB9
KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgbWFuYWdlcnMuc2V0RGVmYXVsdFF1b3RhcyhwYXJhbWV0
ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2lu
U3RvcmFnZVF1b3RhKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVv
dGFNYW5hZ2Vyc0xvY2spOworICAgIGF1dG9baXRlciwgaXNOZXdFbnRyeV0gPSBtX3Nlc3Npb25T
dG9yYWdlUXVvdGFNYW5hZ2Vycy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKKyAgICBpZiAoaXNO
ZXdFbnRyeSkKKyAgICAgICAgaXRlci0+dmFsdWUgPSBtYWtlVW5pcXVlPFNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VyPihjYWNoZVJvb3RQYXRoLCBkZWZhdWx0UXVvdGEsIGRlZmF1bHRUaGlyZFBh
cnR5UXVvdGEpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVTZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBBU1NFUlQo
bV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuY29udGFpbnMoc2Vzc2lvbklEKSk7CisgICAg
bV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Npb25JRCk7CiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2
b2lkKE5ldHdvcmtTZXNzaW9uJik+JiBmdW5jdG9yKQpAQCAtNTc2LDggKzU5MSw2IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkK
ICNlbmRpZgogCiAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+cmVtb3ZlKHNlc3Npb25JRCk7Ci0K
LSAgICBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLnJlbW92ZShzZXNzaW9uSUQpOwogfQogCiAjaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTE0NjgsOSArMTQ4MSw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgT3B0aW9uU2V0PFdlYnNpCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
ICAgICAgICAgY2xlYXJEaXNrQ2FjaGUobW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5kbGVy
ID0gV1RGTW92ZShjbGVhclRhc2tzSGFuZGxlcildIHsgfSk7CiAKLSAgICBpZiAod2Vic2l0ZURh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykgfHwg
d2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRPTUNhY2hlKSkKLSAg
ICAgICAgY2xlYXJTdG9yYWdlUXVvdGEoc2Vzc2lvbklEKTsKLQogICAgIGlmICh3ZWJzaXRlRGF0
YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6QWRDbGlja0F0dHJpYnV0aW9ucykpIHsK
ICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Npb24o
c2Vzc2lvbklEKSkKICAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5jbGVhckFkQ2xpY2tBdHRy
aWJ1dGlvbigpOwpAQCAtMTU2MywxOSArMTU3Myw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRl
bGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlv
CiAgICAgICAgIH0KICAgICAgICAgV2ViQ29yZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OnJlbW92ZVNl
c3Npb25DcmVkZW50aWFsc1dpdGhPcmlnaW5zKG9yaWdpbkRhdGFzKTsKICAgICB9Ci0KLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHN0b3JhZ2UgcXVvdGEgY2xlYXJpbmcgZm9yIHRoZXNlIG9yaWdp
bnMuCi19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyU3RvcmFnZVF1b3RhKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkKLXsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlUXVvdGFN
YW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7Ci0gICAgaWYgKGl0ZXJhdG9yID09IG1fc3RvcmFnZVF1
b3RhTWFuYWdlcnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIG1hbmFnZXJz
ID0gaXRlcmF0b3ItPnZhbHVlOwotICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1hbmFnZXJzLm1h
bmFnZXJzUGVyT3JpZ2luKCkpCi0gICAgICAgIG1hbmFnZXIudmFsdWUtPnJlc2V0UXVvdGEobWFu
YWdlcnMuZGVmYXVsdFF1b3RhKG1hbmFnZXIua2V5KSk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjIxNywxMCArMjIxNCwxMCBAQCBSZWY8SURCU2VydmVy
OjpJREJTZXJ2ZXI+IE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVJREJTZXJ2ZXIoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbgogICAgICAgICBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhzLmdldChzZXNzaW9u
SUQpOwogICAgIH0KIAotICAgIHJldHVybiBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNl
c3Npb25JRCwgcGF0aCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgYXV0byYgb3JpZ2luKSAtPiBTdG9yYWdlUXVvdGFN
YW5hZ2VyKiB7CisgICAgcmV0dXJuIElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUoc2Vzc2lv
bklELCBwYXRoLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklE
XShjb25zdCBhdXRvJiBvcmlnaW4pIC0+IFJlZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiB7CiAg
ICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgcmV0dXJuICZ0aGlzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsK
KyAgICAgICAgcmV0dXJuIHN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBvcmlnaW4pOwog
ICAgIH0pOwogfQogCkBAIC0yMzA5LDYgKzIzMDYsMTUgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
YWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmlu
ZyYKICAgICAgICAgICAgIHBvc3RTdG9yYWdlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0cywgaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5KSk7CiAgICAgfQogfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgU3RyaW5nJiBpZGJSb290UGF0aCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIGF1dG8qIHNlc3Npb25TdG9yYWdlUXVv
dGFNYW5hZ2VyID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7
CisgICAgQVNTRVJUKHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKTsKKyAgICBzZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlci0+c2V0SURCUm9vdFBhdGgoaWRiUm9vdFBhdGgpOworfQorCiAjZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnN5
bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtMjMyMywxMyArMjMyOSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyTGVn
YWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKCkKICAgICAgICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+ZGVsZXRlTG9jYWxTdG9yYWdlTW9kaWZpZWRTaW5jZShQQUw6OlNlc3Npb25JRDo6bGVn
YWN5UHJpdmF0ZVNlc3Npb25JRCgpLCAtV2FsbFRpbWU6OmluZmluaXR5KCksIFtdKCkgeyB9KTsK
IH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZv
clRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9y
aWdpbikKLXsKLSAgICBhdXRvJiBtYW5hZ2VyID0gc3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9u
SUQsIG9yaWdpbik7Ci0gICAgbWFuYWdlci5yZXNldFF1b3RhKG1fc3RvcmFnZVF1b3RhTWFuYWdl
cnMuZmluZChzZXNzaW9uSUQpLT52YWx1ZS5kZWZhdWx0UXVvdGEob3JpZ2luKSk7Ci0gICAgbWFu
YWdlci51cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCk7Ci19Ci0KICNpZiBFTkFCTEUoU0FO
REJPWF9FWFRFTlNJT05TKQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Z2V0U2FuZGJveEV4dGVuc2lv
bnNGb3JCbG9iRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKQEAgLTI0MDQsNjIgKzI0MDMsMzYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
czo6cmVxdWVzdFN0b3JhZ2VTcGFjZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENs
aWVudE8KICAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OlJlcXVlc3RTdG9yYWdlU3BhY2UgeyBzZXNz
aW9uSUQsIG9yaWdpbiwgcXVvdGEsIGN1cnJlbnRTaXplLCBzcGFjZVJlcXVpcmVkIH0sIFdURk1v
dmUoY2FsbGJhY2spLCAwKTsKIH0KIAotY2xhc3MgUXVvdGFVc2VySW5pdGlhbGl6ZXIgZmluYWwg
OiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUXVvdGFVc2VySW5pdGlhbGl6ZXIoU3Rv
cmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlcikKLSAgICAgICAgOiBtX21hbmFnZXIobWFrZVdlYWtQ
dHIobWFuYWdlcikpCi0gICAgewotICAgICAgICBtYW5hZ2VyLmFkZFVzZXIoKnRoaXMpOwotICAg
IH0KLQotICAgIH5RdW90YVVzZXJJbml0aWFsaXplcigpCi0gICAgewotICAgICAgICBpZiAobV9t
YW5hZ2VyKQotICAgICAgICAgICAgbV9tYW5hZ2VyLT5yZW1vdmVVc2VyKCp0aGlzKTsKLSAgICAg
ICAgaWYgKG1fY2FsbGJhY2spCi0gICAgICAgICAgICBtX2NhbGxiYWNrKCk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIC8vIFN0b3JhZ2VRdW90YVVzZXIgQVBJLgotICAgIHVpbnQ2NF90IHNwYWNl
VXNlZCgpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorUmVmUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IE5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBhdXRvKiBzZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlciA9IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzLmdldChzZXNz
aW9uSUQpOworICAgIGlmICghc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpCisgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSBmaW5hbAotICAgIHsKLSAgICAgICAgbV9jYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spOwotICAgIH0KKyAgICBTdHJpbmcgaWRiUm9vdFBhdGg7CisjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisgICAgaWRiUm9vdFBhdGggPSBzZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlci0+aWRiUm9vdFBhdGgoKTsKKyNlbmRpZgorICAgIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OlVzYWdlR2V0dGVyIHVzYWdlR2V0dGVyID0gW2NhY2hlUm9vdFBhdGggPSBzZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlci0+Y2FjaGVSb290UGF0aCgpLCBpZGJSb290UGF0aCwgb3JpZ2lu
XSgpIHsKKyAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7ICAgIAogCi0gICAgV2Vha1B0
cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBtX21hbmFnZXI7Ci0gICAgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiBtX2NhbGxiYWNrOwotfTsKKyAgICAgICAgdWludDY0X3QgdXNhZ2UgPSAwOworICAg
ICAgICB1c2FnZSArPSBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6ZGlza1VzYWdlKGNhY2hlUm9vdFBh
dGgsIG9yaWdpbik7CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisgICAgICAgIHVzYWdl
ICs9IElEQlNlcnZlcjo6SURCU2VydmVyOjpkaXNrVXNhZ2UoaWRiUm9vdFBhdGgsIG9yaWdpbik7
CisjZW5kaWYKIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVF1b3RhVXNlcnMoU3Rv
cmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlciwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwgb3JpZ2luLCB1
c2VyID0gbWFrZVVuaXF1ZTxRdW90YVVzZXJJbml0aWFsaXplcj4obWFuYWdlcildKCkgbXV0YWJs
ZSB7CisgICAgICAgIHJldHVybiB1c2FnZTsKKyAgICB9OworICAgIFN0b3JhZ2VRdW90YU1hbmFn
ZXI6OlF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgcXVvdGFJbmNyZWFzZVJlcXVlc3RlciA9IFt0aGlz
LCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc2Vzc2lvbklELCBvcmlnaW5dICh1aW50
NjRfdCBjdXJyZW50UXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3QgcmVxdWVz
dGVkSW5jcmVhc2UsIGF1dG8mJiBjYWxsYmFjaykgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB0aGlzLT5pZGJTZXJ2ZXIoc2Vzc2lvbklEKS5pbml0aWFsaXplUXVvdGFVc2VyKG9yaWdp
bik7Ci0gICAgICAgIENhY2hlU3RvcmFnZTo6RW5naW5lOjppbml0aWFsaXplUXVvdGFVc2VyKCp0
aGlzLCBzZXNzaW9uSUQsIG9yaWdpbiwgW3VzZXIgPSBXVEZNb3ZlKHVzZXIpXSB7IH0pOwotICAg
IH0pOwotfQorICAgICAgICAgICAgY2FsbGJhY2soeyB9KTsKKyAgICAgICAgcmVxdWVzdFN0b3Jh
Z2VTcGFjZShzZXNzaW9uSUQsIG9yaWdpbiwgY3VycmVudFF1b3RhLCBjdXJyZW50U3BhY2UsIHJl
cXVlc3RlZEluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgfTsKIAotU3RvcmFnZVF1
b3RhTWFuYWdlciYgTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBhdXRv
JiBzdG9yYWdlUXVvdGFNYW5hZ2VycyA9IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuZW5zdXJlKHNl
c3Npb25JRCwgW10gewotICAgICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcnMgeyB9Owot
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLSAgICByZXR1cm4gKnN0b3JhZ2VRdW90YU1hbmFnZXJz
Lm1hbmFnZXJzUGVyT3JpZ2luKCkuZW5zdXJlKG9yaWdpbiwgW3RoaXMsICZzdG9yYWdlUXVvdGFN
YW5hZ2Vycywgc2Vzc2lvbklELCAmb3JpZ2luXSB7Ci0gICAgICAgIGF1dG8gbWFuYWdlciA9IG1h
a2VVbmlxdWU8U3RvcmFnZVF1b3RhTWFuYWdlcj4oc3RvcmFnZVF1b3RhTWFuYWdlcnMuZGVmYXVs
dFF1b3RhKG9yaWdpbiksIFt0aGlzLCBzZXNzaW9uSUQsIG9yaWdpbl0odWludDY0X3QgcXVvdGEs
IHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgYXV0byBjYWxs
YmFjaykgewotICAgICAgICAgICAgdGhpcy0+cmVxdWVzdFN0b3JhZ2VTcGFjZShzZXNzaW9uSUQs
IG9yaWdpbiwgcXVvdGEsIGN1cnJlbnRTcGFjZSwgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxs
YmFjaykpOwotICAgICAgICB9KTsKLSAgICAgICAgaW5pdGlhbGl6ZVF1b3RhVXNlcnMoKm1hbmFn
ZXIsIHNlc3Npb25JRCwgb3JpZ2luKTsKLSAgICAgICAgcmV0dXJuIG1hbmFnZXI7Ci0gICAgfSku
aXRlcmF0b3ItPnZhbHVlOworICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+
ZW5zdXJlT3JpZ2luU3RvcmFnZVF1b3RhTWFuYWdlcihvcmlnaW4sIHNlc3Npb25TdG9yYWdlUXVv
dGFNYW5hZ2VyLT5kZWZhdWx0UXVvdGEob3JpZ2luKSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdU
Rk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3RlcikpOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09B
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4
IGY2MmYwMWQzODBmLi4wY2FiYWM2NmVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMjgzLDcgKzI4Myw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2
b2lkIGNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKCk7CiAKLSAgICB2b2lk
IHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2VGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBj
b25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICB2b2lkIHVwZGF0ZVF1b3RhQmFzZWRP
blNwYWNlVXNhZ2VGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4mKSB7IH0KIAogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCiAgICAgdm9p
ZCBnZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZmlsZW5hbWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZUFycmF5JiYpPiYmKTsKQEAgLTMyNyw3ICszMjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRB
ZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwg
VVJMJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBtYXJrQWRDbGlj
a0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJik7CiAKLSAgICBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
JiBzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4mKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3Rv
cmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luJik7CiAKICAgICB2b2lkIGFkZEtlcHRBbGl2ZUxvYWQoUmVmPE5ldHdvcmtSZXNvdXJjZUxv
YWRlcj4mJik7CiAgICAgdm9pZCByZW1vdmVLZXB0QWxpdmVMb2FkKE5ldHdvcmtSZXNvdXJjZUxv
YWRlciYpOwpAQCAtNDQyLDYgKzQ0Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb2xsZWN0SW5k
ZXhlZERhdGFiYXNlT3JpZ2luc0ZvclZlcnNpb24oY29uc3QgU3RyaW5nJiwgSGFzaFNldDxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAgICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbkRhdGE+IGluZGV4ZWREYXRhYmFzZU9yaWdpbnMoY29uc3QgU3RyaW5nJiBwYXRoKTsK
ICAgICBSZWY8V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI+IGNyZWF0ZUlEQlNlcnZlcihQ
QUw6OlNlc3Npb25JRCk7CisgICAgdm9pZCBzZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcklE
QlJvb3RQYXRoKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKTsKICNl
bmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtNDYxLDkgKzQ2Miw0MyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcGVyZm9ybU5leHRTdG9yYWdlVGFzaygpOwogICAgIHZvaWQgZW5z
dXJlUGF0aEV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpOwogCi0gICAgdm9pZCBjbGVhclN0b3Jh
Z2VRdW90YShQQUw6OlNlc3Npb25JRCk7Ci0gICAgdm9pZCBpbml0aWFsaXplU3RvcmFnZVF1b3Rh
KGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJik7CisgICAgY2xhc3MgU2Vzc2lvblN0
b3JhZ2VRdW90YU1hbmFnZXIgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKGNvbnN0IFN0cmlu
ZyYgY2FjaGVSb290UGF0aCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhKQorICAgICAgICAgICAgOiBtX2NhY2hlUm9vdFBhdGgoY2FjaGVSb290
UGF0aCkKKyAgICAgICAgICAgICwgbV9kZWZhdWx0UXVvdGEoZGVmYXVsdFF1b3RhKQorICAgICAg
ICAgICAgLCBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGEoZGVmYXVsdFRoaXJkUGFydHlRdW90YSkK
KyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHVpbnQ2NF90IGRlZmF1bHRRdW90YShjb25z
dCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikgY29uc3QgeyByZXR1cm4gb3JpZ2luLnRv
cE9yaWdpbiA9PSBvcmlnaW4uY2xpZW50T3JpZ2luID8gbV9kZWZhdWx0UXVvdGEgOiBtX2RlZmF1
bHRUaGlyZFBhcnR5UXVvdGE7IH0KIAorICAgICAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcj4gZW5zdXJlT3JpZ2luU3RvcmFnZVF1b3RhTWFuYWdlcihXZWJDb3JlOjpDbGll
bnRPcmlnaW4gb3JpZ2luLCB1aW50NjRfdCBxdW90YSwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFu
YWdlcjo6VXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFu
YWdlcjo6UXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGF1dG9baXRlciwgaXNOZXdFbnRyeV0gPSBtX3N0b3JhZ2VR
dW90YU1hbmFnZXJzLmFkZChvcmlnaW4sIG51bGxwdHIpOworICAgICAgICAgICAgaWYgKGlzTmV3
RW50cnkpCisgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUgPSBXZWJDb3JlOjpTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpjcmVhdGUocXVvdGEsIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1
b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlUmVmUHRyKCpp
dGVyLT52YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvbnN0IFN0cmluZyYg
Y2FjaGVSb290UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVSb290UGF0aDsgfQorI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgICAgICB2b2lkIHNldElEQlJvb3RQYXRoKGNvbnN0
IFN0cmluZyYgaWRiUm9vdFBhdGgpIHsgbV9pZGJSb290UGF0aCA9IGlkYlJvb3RQYXRoOyB9Cisg
ICAgICAgIGNvbnN0IFN0cmluZyYgaWRiUm9vdFBhdGgoKSBjb25zdCB7IHJldHVybiBtX2lkYlJv
b3RQYXRoOyB9CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAgIFN0cmluZyBtX2NhY2hl
Um9vdFBhdGg7CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisgICAgICAgIFN0cmluZyBt
X2lkYlJvb3RQYXRoOworI2VuZGlmCisgICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFF1b3RhIHsg
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCkgfTsKKyAgICAgICAg
dWludDY0X3QgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgpIH07CisgICAgICAgIEhhc2hNYXA8V2Vi
Q29yZTo6Q2xpZW50T3JpZ2luLCBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+
IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnM7CisgICAgfTsKKyAgICB2b2lkIGFkZFNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVp
bnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0
aCk7CisgICAgdm9pZCByZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Np
b25JRCk7CisgCiAgICAgLy8gQ29ubmVjdGlvbnMgdG8gV2ViUHJvY2Vzc2VzLgogICAgIEhhc2hN
YXA8V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIFJlZjxOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcz4+IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zOwogCkBAIC01MzMsMjMgKzU2OCw4IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2lzSVRQRGF0YWJhc2VFbmFibGVkIHsgZmFsc2UgfTsKICNl
bmRpZgogICAgIAotICAgIGNsYXNzIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHVpbnQ2NF90IGRlZmF1bHRRdW90YShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mIG9yaWdpbikgY29uc3QgeyByZXR1cm4gb3JpZ2luLnRvcE9yaWdpbiA9PSBvcmlnaW4uY2xp
ZW50T3JpZ2luID8gbV9kZWZhdWx0UXVvdGEgOiBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGE7IH0K
LSAgICAgICAgdm9pZCBzZXREZWZhdWx0UXVvdGFzKHVpbnQ2NF90IGRlZmF1bHRRdW90YSwgdWlu
dDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YSkKLSAgICAgICAgewotICAgICAgICAgICAgbV9k
ZWZhdWx0UXVvdGEgPSBkZWZhdWx0UXVvdGE7Ci0gICAgICAgICAgICBtX2RlZmF1bHRUaGlyZFBh
cnR5UXVvdGEgPSBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhOwotICAgICAgICB9Ci0KLSAgICAgICAg
SGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyPj4mIG1hbmFnZXJzUGVyT3JpZ2luKCkgeyByZXR1cm4gbV9tYW5h
Z2Vyc1Blck9yaWdpbjsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdWludDY0X3QgbV9kZWZh
dWx0UXVvdGEgeyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSB9
OwotICAgICAgICB1aW50NjRfdCBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGEgeyBXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkgfTsKLSAgICAgICAg
SGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9tYW5hZ2Vyc1Blck9yaWdpbjsKLSAgICB9OwotICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJzPiBtX3N0b3JhZ2VRdW90
YU1hbmFnZXJzOworICAgIExvY2sgbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrOwor
ICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxTZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlcj4+IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzOwogCiAgICAgT3B0
aW9uU2V0PE5ldHdvcmtDYWNoZTo6Q2FjaGVPcHRpb24+IG1fY2FjaGVPcHRpb25zOwogICAgIFdl
YkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5IG1fbWVzc2FnZVBvcnRDaGFubmVsUmVn
aXN0cnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKaW5kZXggYWMxMjk0ZTMxOWIuLjE4MzExNWE4ZjZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmUuY3BwCkBAIC00Niw2ICs0Niw4IEBAIG5hbWVzcGFjZSBDYWNoZVN0b3Jh
Z2UgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOwogdXNpbmcgbmFt
ZXNwYWNlIE5ldHdvcmtDYWNoZTsKIAorc3RhdGljIExvY2sgZ2xvYmFsU2l6ZWZpbGVMb2NrOwor
CiBTdHJpbmcgRW5naW5lOjpjYWNoZXNSb290UGF0aChjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mIG9yaWdpbikKIHsKICAgICBpZiAoIXNob3VsZFBlcnNpc3QoKSB8fCAhbV9zYWx0KQpAQCAt
MTkwLDEzICsxOTIsNjUgQEAgdm9pZCBFbmdpbmU6OmNsZWFyQ2FjaGVzRm9yT3JpZ2luKE5ldHdv
cmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgUEFMOjpTZXNzaW9uSUQKICAgICB9KTsKIH0KIAot
dm9pZCBFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIoTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQ
cm9jZXNzLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYgY2xpZW50T3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCitzdGF0aWMgdWludDY0X3QgZ2V0RGlyZWN0b3J5U2l6ZShjb25zdCBTdHJpbmcm
IGRpcmVjdG9yeVBhdGgpCiB7Ci0gICAgZnJvbShuZXR3b3JrUHJvY2Vzcywgc2Vzc2lvbklELCBb
Y2xpZW50T3JpZ2luLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShhdXRvJiBlbmdpbmUpIG11dGFibGUgewotICAgICAgICBlbmdpbmUucmVhZENhY2hlc0Zy
b21EaXNrKGNsaWVudE9yaWdpbiwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKGF1dG8mJiBjYWNoZXNPckVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOworICAgIHVpbnQ2NF90
IGRpcmVjdG9yeVNpemUgPSAwOworICAgIERlcXVlPFN0cmluZz4gcGF0aHM7CisgICAgcGF0aHMu
YXBwZW5kKGRpcmVjdG9yeVBhdGgpOworICAgIHdoaWxlICghcGF0aHMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGF1dG8gcGF0aCA9IHBhdGhzLnRha2VGaXJzdCgpOworICAgICAgICBpZiAoRmlsZVN5
c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHBhdGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJv
bGljTGlua3M6Ok5vKSkgeworICAgICAgICAgICAgYXV0byBuZXdQYXRocyA9IEZpbGVTeXN0ZW06
Omxpc3REaXJlY3RvcnkocGF0aCwgIioiX3MpOworICAgICAgICAgICAgZm9yIChhdXRvJiBuZXdQ
YXRoIDogbmV3UGF0aHMpIHsKKyAgICAgICAgICAgICAgICAvLyBGaWxlcyBpbiBCbG9icyBkaXJl
Y3RvcnkgYXJlIGhhcmQgbGluay4KKyAgICAgICAgICAgICAgICBhdXRvIGZpbGVOYW1lID0gRmls
ZVN5c3RlbTo6bGFzdENvbXBvbmVudE9mUGF0aElnbm9yaW5nVHJhaWxpbmdTbGFzaChuZXdQYXRo
KTsKKyAgICAgICAgICAgICAgICBpZiAoZmlsZU5hbWUgPT0gIkJsb2JzIikKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKG5ld1BhdGgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICBsb25nIGxvbmcgZmlsZVNpemUgPSAwOworICAgICAgICBGaWxlU3lzdGVtOjpnZXRGaWxl
U2l6ZShwYXRoLCBmaWxlU2l6ZSk7CisgICAgICAgIGRpcmVjdG9yeVNpemUgKz0gZmlsZVNpemU7
CisgICAgfQorICAgIHJldHVybiBkaXJlY3RvcnlTaXplOworfQorCit1aW50NjRfdCBFbmdpbmU6
OmRpc2tVc2FnZShjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRP
cmlnaW4mIG9yaWdpbikKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAo
cm9vdFBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0cmluZyBzYWx0
UGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyb290UGF0aCwgInNh
bHQiX3MpOworICAgIGF1dG8gc2FsdCA9IHJlYWRPck1ha2VTYWx0KHNhbHRQYXRoKTsKKyAgICBp
ZiAoIXNhbHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gT3IgdHJhdmVyc2UgYWxsIGRp
cmVjdG9yeQorICAgIEtleSBrZXkob3JpZ2luLnRvcE9yaWdpbi50b1N0cmluZygpLCBvcmlnaW4u
Y2xpZW50T3JpZ2luLnRvU3RyaW5nKCksIHsgfSwgeyB9LCAqc2FsdCk7CisgICAgU3RyaW5nIGRp
cmVjdG9yeVBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocm9vdFBh
dGgsIGtleS5oYXNoQXNTdHJpbmcoKSk7CisKKyAgICAvLyBSZWFkIHNpemVlc3RpbWF0ZSBmaWxl
CisgICAgU3RyaW5nIHNpemVGaWxlUGF0aCA9IENhY2hlczo6Y2FjaGVzU2l6ZUZpbGVuYW1lKGRp
cmVjdG9yeVBhdGgpOworICAgIGlmIChhdXRvIHJlY29yZGVkU2l6ZSA9IHJlYWRTaXplRmlsZShz
aXplRmlsZVBhdGgpKQorICAgICAgICByZXR1cm4gKnJlY29yZGVkU2l6ZTsKKworICAgIHJldHVy
biBnZXREaXJlY3RvcnlTaXplKGRpcmVjdG9yeVBhdGgpOworfQorCit2b2lkIEVuZ2luZTo6cmVx
dWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcXVl
c3RlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpEZWNpc2lvbik+JiYgY2FsbGJhY2spCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQor
ICAgICAgICBjYWxsYmFjayhXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6
RGVueSk7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFn
ZVF1b3RhTWFuYWdlciA9IG1fbmV0d29ya1Byb2Nlc3MtPnN0b3JhZ2VRdW90YU1hbmFnZXIobV9z
ZXNzaW9uSUQsIG9yaWdpbik7CisgICAgaWYgKCFzdG9yYWdlUXVvdGFNYW5hZ2VyKQorICAgICAg
ICBjYWxsYmFjayhXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSk7
CisKKyAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQoc3Bh
Y2VSZXF1ZXN0ZWQsIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAogRW5naW5lOjpFbmdpbmUoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBOZXR3b3JrUHJvY2VzcyYgcHJvY2VzcywgU3RyaW5nJiYg
cm9vdFBhdGgpCkBAIC0zMzAsNyArMzg0LDcgQEAgdm9pZCBFbmdpbmU6OnJlYWRDYWNoZXNGcm9t
RGlzayhjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgQ2FjaGVzQ2FsbGIKIAog
ICAgICAgICBhdXRvJiBjYWNoZXMgPSBtX2NhY2hlcy5lbnN1cmUob3JpZ2luLCBbJm9yaWdpbiwg
dGhpc10gewogICAgICAgICAgICAgYXV0byBwYXRoID0gY2FjaGVzUm9vdFBhdGgob3JpZ2luKTsK
LSAgICAgICAgICAgIHJldHVybiBDYWNoZXM6OmNyZWF0ZSgqdGhpcywgV2ViQ29yZTo6Q2xpZW50
T3JpZ2luIHsgb3JpZ2luIH0sIFdURk1vdmUocGF0aCksIG1fbmV0d29ya1Byb2Nlc3MtPnN0b3Jh
Z2VRdW90YU1hbmFnZXIobV9zZXNzaW9uSUQsIG9yaWdpbikpOworICAgICAgICAgICAgcmV0dXJu
IENhY2hlczo6Y3JlYXRlKCp0aGlzLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4geyBvcmlnaW4gfSwg
V1RGTW92ZShwYXRoKSk7CiAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIAogICAgICAgICBp
ZiAoY2FjaGVzLT5pc0luaXRpYWxpemVkKCkpIHsKQEAgLTQ2OCw5ICs1MjIsMTAgQEAgdm9pZCBF
bmdpbmU6OndyaXRlU2l6ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCBzaXplKQog
ICAgICAgICByZXR1cm47CiAKICAgICBtX2lvUXVldWUtPmRpc3BhdGNoKFtwYXRoID0gcGF0aC5p
c29sYXRlZENvcHkoKSwgc2l6ZV0oKSB7Ci0gICAgICAgIGF1dG8gZmlsZUhhbmRsZSA9IEZpbGVT
eXN0ZW06Om9wZW5BbmRMb2NrRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6Oldy
aXRlLCB7IEZpbGVTeXN0ZW06OkZpbGVMb2NrTW9kZTo6RXhjbHVzaXZlIH0pOworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTaXplZmlsZUxvY2spOworICAgICAgICBhdXRvIGZpbGVI
YW5kbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmlsZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1v
ZGU6OldyaXRlKTsKICAgICAgICAgYXV0byBjbG9zZUZpbGVIYW5kbGUgPSBtYWtlU2NvcGVFeGl0
KFsmXSB7Ci0gICAgICAgICAgICBGaWxlU3lzdGVtOjp1bmxvY2tBbmRDbG9zZUZpbGUoZmlsZUhh
bmRsZSk7CisgICAgICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZUhhbmRsZSk7CiAg
ICAgICAgIH0pOwogCiAgICAgICAgIGlmICghRmlsZVN5c3RlbTo6aXNIYW5kbGVWYWxpZChmaWxl
SGFuZGxlKSkKQEAgLTQ4NSwxMSArNTQwLDExIEBAIHZvaWQgRW5naW5lOjp3cml0ZVNpemVGaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3Qgc2l6ZSkKIE9wdGlvbmFsPHVpbnQ2NF90PiBF
bmdpbmU6OnJlYWRTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMocGF0
aCkpOwogCi0gICAgYXV0byBmaWxlSGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkFuZExvY2tGaWxl
KHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCwgeyBGaWxlU3lzdGVtOjpGaWxl
TG9ja01vZGU6OkV4Y2x1c2l2ZSB9KTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTaXpl
ZmlsZUxvY2spOworICAgIGF1dG8gZmlsZUhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBh
dGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6UmVhZCk7CiAgICAgYXV0byBjbG9zZUZpbGVI
YW5kbGUgPSBtYWtlU2NvcGVFeGl0KFsmXSB7Ci0gICAgICAgIEZpbGVTeXN0ZW06OnVubG9ja0Fu
ZENsb3NlRmlsZShmaWxlSGFuZGxlKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGZp
bGVIYW5kbGUpOwogICAgIH0pOwogCiAgICAgaWYgKCFGaWxlU3lzdGVtOjppc0hhbmRsZVZhbGlk
KGZpbGVIYW5kbGUpKQpAQCAtNjE2LDggKzY3MSwxMCBAQCB2b2lkIEVuZ2luZTo6Y2xlYXJBbGxD
YWNoZXNGcm9tRGlzayhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZQogCiAgICAgbV9pb1F1ZXVlLT5kaXNwYXRjaChbcGF0aCA9IG1fcm9vdFBhdGguaXNvbGF0ZWRD
b3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7CiAgICAgICAgIGZvciAoYXV0byYgZmlsZW5hbWUgOiBGaWxlU3lzdGVtOjpsaXN0
RGlyZWN0b3J5KHBhdGgsICIqIikpIHsKLSAgICAgICAgICAgIGlmIChGaWxlU3lzdGVtOjpmaWxl
SXNEaXJlY3RvcnkoZmlsZW5hbWUsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlu
a3M6Ok5vKSkKKyAgICAgICAgICAgIGlmIChGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkoZmls
ZW5hbWUsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSkgeworICAg
ICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFNpemVmaWxlTG9jayk7CiAgICAg
ICAgICAgICAgICAgZGVsZXRlRGlyZWN0b3J5UmVjdXJzaXZlbHkoZmlsZW5hbWUpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC02NzMsOCArNzMwLDEwIEBAIHZv
aWQgRW5naW5lOjpkZWxldGVEaXJlY3RvcnlSZWN1cnNpdmVseU9uQmFja2dyb3VuZFRocmVhZChj
b25zdCBTdHJpbmcmIHBhdGgsIENvCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIG1faW9RdWV1ZS0+ZGlzcGF0Y2goW3BhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewot
ICAgICAgICBkZWxldGVEaXJlY3RvcnlSZWN1cnNpdmVseShwYXRoKTsKLQorICAgICAgICB7Cisg
ICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTaXplZmlsZUxvY2spOworICAgICAg
ICAgICAgZGVsZXRlRGlyZWN0b3J5UmVjdXJzaXZlbHkocGF0aCk7CisgICAgICAgIH0KICAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oCmluZGV4IDM4ZDZmYzEzNGZlLi5jYzkxZWNjMDYzMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTmV0d29ya0NhY2hl
RGF0YS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGll
bnRPcmlnaW4uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaD4KICNp
bmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNzksNiArODAsOSBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgdm9pZCBpbml0aWFsaXplUXVvdGFVc2VyKE5ldHdvcmtQcm9jZXNzJiwgUEFMOjpTZXNz
aW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CiAKKyAgICBzdGF0aWMgdWludDY0X3QgZGlza1VzYWdlKGNvbnN0IFN0cmluZyYg
cm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHZvaWQgcmVxdWVz
dFNwYWNlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNwYWNlUmVxdWVz
dGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6
OkRlY2lzaW9uKT4mJik7CisKICAgICBib29sIHNob3VsZFBlcnNpc3QoKSBjb25zdCB7IHJldHVy
biAhIW1faW9RdWV1ZTt9CiAKICAgICB2b2lkIHdyaXRlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVu
YW1lLCBOZXR3b3JrQ2FjaGU6OkRhdGEmJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBs
ZXRpb25DYWxsYmFjayYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAppbmRleCBiYjBl
NmJiZWQwMy4uMTI2NTdjMjAwOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKQEAg
LTUxLDQxICs1MSwyNiBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBjYWNoZXNPcmlnaW5GaWxlbmFt
ZShjb25zdCBTdHJpbmcmIGNhY2hlc1Jvb3RQYXRoKQogICAgIHJldHVybiBGaWxlU3lzdGVtOjpw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVzUm9vdFBhdGgsICJvcmlnaW4iX3MpOwogfQog
Ci1zdGF0aWMgaW5saW5lIFN0cmluZyBjYWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBj
YWNoZXNSb290c1BhdGgpCitTdHJpbmcgQ2FjaGVzOjpjYWNoZXNTaXplRmlsZW5hbWUoY29uc3Qg
U3RyaW5nJiBjYWNoZXNSb290c1BhdGgpCiB7CiAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZXNSb290c1BhdGgsICJlc3RpbWF0ZWRzaXplIl9zKTsK
IH0KIAotUmVmPENhY2hlcz4gQ2FjaGVzOjpjcmVhdGUoRW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXImIHF1b3RhTWFuYWdlcikKK1JlZjxDYWNoZXM+IENhY2hlczo6Y3JlYXRl
KEVuZ2luZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYm
IHJvb3RQYXRoKQogewotICAgIGF1dG8gY2FjaGVzID0gYWRvcHRSZWYoKm5ldyBDYWNoZXMgeyBl
bmdpbmUsIFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShyb290UGF0aCksIHF1b3RhTWFuYWdlciB9
KTsKLSAgICBxdW90YU1hbmFnZXIuYWRkVXNlcihjYWNoZXMuZ2V0KCkpOwotICAgIHJldHVybiBj
YWNoZXM7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2FjaGVzIHsgZW5naW5lLCBXVEZNb3Zl
KG9yaWdpbiksIFdURk1vdmUocm9vdFBhdGgpIH0pOwogfQogCi1DYWNoZXM6OkNhY2hlcyhFbmdp
bmUmIGVuZ2luZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiByb290
UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYgcXVvdGFNYW5hZ2VyKQorQ2FjaGVz
OjpDYWNoZXMoRW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwg
U3RyaW5nJiYgcm9vdFBhdGgpCiAgICAgOiBtX2VuZ2luZSgmZW5naW5lKQogICAgICwgbV9vcmln
aW4oV1RGTW92ZShvcmlnaW4pKQogICAgICwgbV9yb290UGF0aChXVEZNb3ZlKHJvb3RQYXRoKSkK
LSAgICAsIG1fcXVvdGFNYW5hZ2VyKG1ha2VXZWFrUHRyKHF1b3RhTWFuYWdlcikpCiB7CiB9CiAK
IENhY2hlczo6fkNhY2hlcygpCiB7CiAgICAgQVNTRVJUKG1fcGVuZGluZ1dyaXRpbmdDYWNoZXNU
b0Rpc2tDYWxsYmFja3MuaXNFbXB0eSgpKTsKLQotICAgIGlmIChtX3F1b3RhTWFuYWdlcikKLSAg
ICAgICAgbV9xdW90YU1hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotfQotCi12b2lkIENhY2hl
czo6d2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykK
LXsKLSAgICBpbml0aWFsaXplKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYg
ZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihDYWNoZVN0b3JhZ2UsICJDYWNoZXM6OmluaXRpYWxpemUgZmFpbGVkLCByZXBv
cnRlZCBzcGFjZSB1c2VkIHdpbGwgYmUgemVybyIpOwotICAgICAgICBjYWxsYmFjaygpOwotICAg
IH0pOwogfQogCiB2b2lkIENhY2hlczo6cmV0cmlldmVPcmlnaW5Gcm9tRGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYgZm9sZGVyUGF0aCwgV29ya1F1ZXVlJiBxdWV1ZSwgV1RGOjpDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4mJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0yNzMsMTMgKzI1OCwxMSBAQCB2b2lkIENhY2hlczo6Y2xlYXIoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICBtX3N0b3Jh
Z2UtPmNsZWFyKFN0cmluZyB7IH0sIC1XYWxsVGltZTo6aW5maW5pdHkoKSwgW3Byb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5jbGVhck1lbW9yeVJlcHJlc2VudGF0
aW9uKCk7Ci0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5yZXNldFNwYWNlVXNlZCgpOwogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgY2xlYXJNZW1vcnlSZXByZXNlbnRhdGlvbigpOwotICAgIHJlc2V0U3Bh
Y2VVc2VkKCk7CiAgICAgY2xlYXJQZW5kaW5nV3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrcygp
OwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CkBAIC01MjUsMTIgKzUwOCwxMiBAQCB2b2lk
IENhY2hlczo6cmVhZFJlY29yZHNMaXN0KENhY2hlJiBjYWNoZSwgTmV0d29ya0NhY2hlOjpTdG9y
YWdlOjpUcmF2ZXJzZUhhbmRsZQogCiB2b2lkIENhY2hlczo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90
IHNwYWNlUmVxdWlyZWQsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJh
Y2smJiBjYWxsYmFjaykKIHsKLSAgICBpZiAoIW1fcXVvdGFNYW5hZ2VyKSB7CisgICAgaWYgKCFt
X2VuZ2luZSkgewogICAgICAgICBjYWxsYmFjayhFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3F1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHNw
YWNlUmVxdWlyZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGRlY2lzaW9u
KSBtdXRhYmxlIHsKKyAgICBtX2VuZ2luZS0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCBzcGFjZVJl
cXVpcmVkLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBkZWNpc2lvbikgbXV0
YWJsZSB7CiAgICAgICAgIHN3aXRjaCAoZGVjaXNpb24pIHsKICAgICAgICAgY2FzZSBXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueToKICAgICAgICAgICAgIGNhbGxi
YWNrKEVycm9yOjpRdW90YUV4Y2VlZGVkKTsKQEAgLTYyMSwxNyArNjA0LDYgQEAgdm9pZCBDYWNo
ZXM6OnJlbW92ZUNhY2hlRW50cnkoY29uc3QgTmV0d29ya0NhY2hlOjpLZXkmIGtleSkKICAgICBt
X3N0b3JhZ2UtPnJlbW92ZShrZXkpOwogfQogCi12b2lkIENhY2hlczo6cmVzZXRTcGFjZVVzZWQo
KQotewotICAgIG1fc2l6ZSA9IDA7Ci0gICAgdXBkYXRlU2l6ZUZpbGUoKTsKLQotICAgIGlmICht
X3F1b3RhTWFuYWdlcikgewotICAgICAgICBtX3F1b3RhTWFuYWdlci0+cmVtb3ZlVXNlcigqdGhp
cyk7Ci0gICAgICAgIG1fcXVvdGFNYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKLSAgICB9Ci19Ci0K
IHZvaWQgQ2FjaGVzOjpjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCkKIHsKICAgICBpZiAoIW1f
aXNJbml0aWFsaXplZCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKaW5kZXggNTVhOWVlZWZl
OTUuLjY4MzJiNWM4MTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKQEAgLTI4LDcgKzI4
LDYgQEAKICNpbmNsdWRlICJDYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5oIgogI2luY2x1ZGUgIk5l
dHdvcmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZVF1b3RhVXNlci5oPgogI2luY2x1ZGUgPHd0Zi9Db21w
bGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogCkBAIC00Miw5ICs0MSwx
MCBAQCBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlIHsKIAogY2xhc3MgRW5naW5lOwogCi1jbGFzcyBD
YWNoZXMgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWNoZXM+LCBwcml2YXRlIFdlYkNvcmU6
OlN0b3JhZ2VRdW90YVVzZXIgeworY2xhc3MgQ2FjaGVzIGZpbmFsIDogcHVibGljIFJlZkNvdW50
ZWQ8Q2FjaGVzPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDYWNoZXM+IGNyZWF0ZShFbmdp
bmUmLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXImKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNhY2hlc1NpemVGaWxl
bmFtZShjb25zdCBTdHJpbmcmIGNhY2hlc1Jvb3RzUGF0aCk7CisgICAgc3RhdGljIFJlZjxDYWNo
ZXM+IGNyZWF0ZShFbmdpbmUmLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9v
dFBhdGgpOwogICAgIH5DYWNoZXMoKTsKIAogICAgIHN0YXRpYyB2b2lkIHJldHJpZXZlT3JpZ2lu
RnJvbURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGZvbGRlclBhdGgsIFdvcmtRdWV1ZSYsIFdURjo6
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+JiYp
PiYmKTsKQEAgLTc4LDIyICs3OCwxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKFdURjo6
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyTWVtb3J5UmVwcmVz
ZW50YXRpb24oKTsKLSAgICB2b2lkIHJlc2V0U3BhY2VVc2VkKCk7CiAKICAgICB1aW50NjRfdCBz
dG9yYWdlU2l6ZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENhY2hlcyhFbmdpbmUmLCBXZWJD
b3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXImKTsKLQotICAgIC8vIFN0b3JhZ2VRdW90YVVzZXIgQVBJLgotICAgIHVpbnQ2
NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIENhY2hl
cyhFbmdpbmUmLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgpOwog
CiAgICAgdm9pZCBpbml0aWFsaXplU2l6ZSgpOwogICAgIHZvaWQgcmVhZENhY2hlc0Zyb21EaXNr
KFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBXZWJDb3JlOjpET01D
YWNoZUVuZ2luZTo6RXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIHdyaXRlQ2FjaGVzVG9EaXNrKFdl
YkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAKLSAgICB2b2lk
IHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwotCiAg
ICAgdm9pZCBzdG9yZU9yaWdpbihXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNh
bGxiYWNrJiYpOwogICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IHJl
YWRPcmlnaW4oY29uc3QgTmV0d29ya0NhY2hlOjpEYXRhJik7CiAKQEAgLTEyMSw3ICsxMTUsNiBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlv
bkNhbGxiYWNrPiBtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNrczsKICAgICBib29sIG1f
aXNXcml0aW5nQ2FjaGVzVG9EaXNrIHsgZmFsc2UgfTsKICAgICBEZXF1ZTxDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpFcnJvcj4pPj4gbV9w
ZW5kaW5nV3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrczsKLSAgICBXZWFrUHRyPFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI+IG1fcXVvdGFNYW5hZ2VyOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgQ2FjaGVTdG9yYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggYzBmY2Y5YzVmNjAuLjZkMGMxMjlhNzQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
Y3BwCkBAIC01NSw2ICs1NSw4IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVu
Y29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAKICAgICBlbmNvZGVyIDw8IGxvY2Fs
U3RvcmFnZURpcmVjdG9yeSA8PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7
CiAKKyAgICBlbmNvZGVyIDw8IGNhY2hlU3RvcmFnZURpcmVjdG9yeSA8PCBjYWNoZVN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisKICAgICBlbmNvZGVyIDw8IHBlck9yaWdpblN0b3Jh
Z2VRdW90YTsKICAgICBlbmNvZGVyIDw8IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7
CiB9CkBAIC0xNDEsNiArMTQzLDE4IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwogCisgICAgT3B0aW9uYWw8U3RyaW5nPiBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7
CisgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgaWYgKCFjYWNoZVN0
b3JhZ2VEaXJlY3RvcnkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZNb3ZlKCpjYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkpOworCisgICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBjYWNoZVN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjYWNo
ZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworCiAgICAgT3B0aW9uYWw8dWludDY0
X3Q+IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKICAgICBkZWNvZGVyID4+IHBlck9yaWdpblN0b3Jh
Z2VRdW90YTsKICAgICBpZiAoIXBlck9yaWdpblN0b3JhZ2VRdW90YSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IDA5NWYwOWQ2
YWY5Li5mMjdkZjQ4OTgwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC03MSw2ICs3MSw5IEBAIHN0cnVjdCBXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycyB7CiAgICAgU3RyaW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlOwogCisgICAgU3RyaW5nIGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUgY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwor
CiAgICAgdWludDY0X3QgcGVyT3JpZ2luU3RvcmFnZVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCkgfTsKICAgICB1aW50NjRfdCBwZXJUaGlyZFBhcnR5
T3JpZ2luU3RvcmFnZVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVs
dFRoaXJkUGFydHlRdW90YSgpIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAppbmRleCBmOTQyOWY4YjA5Yy4uMzA3
MjhjMGUwNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgU3RvcmFn
ZUFjY2Vzc1Byb21wdFdhc1Nob3duIDogYm9vbDsKIGVudW0gY2xhc3MgU3RvcmFnZUFjY2Vzc1dh
c0dyYW50ZWQgOiBib29sOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBzdHJ1Y3QgU2VjdXJpdHlP
cmlnaW5EYXRhOworc3RydWN0IENsaWVudE9yaWdpbjsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggMGUzNzg4
OTkzOTYuLmUzMjVhOGVkNjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuY3BwCkBAIC01NTIsNiArNTUyLDEzIEBAIE5ldHdvcmtQcm9jZXNzUHJveHkmIFdlYlBy
b2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3aXRoCiAg
ICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwogCisgICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBtX3dl
YnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hlU3RvcmFnZURpcmVjdG9y
eSgpIDogbnVsbFN0cmluZygpOworICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1w
dHkoKSkgeworICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSA9IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3Rv
cmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNo
ZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIH0KKworCiAgICAgaWYgKG1f
d2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5KCk7CiAgICAgaWYgKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJl
Y3RvcnkuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4
IDI5ZTkwMDNmMDQ2Li44NzA2MmFiZDZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVD
b2NvYS5tbQpAQCAtMTkwLDYgKzE5MCwxMCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBX
ZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICAgICBpZiAoIXBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAKKyAgICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IGNhY2hlU3RvcmFnZURp
cmVjdG9yeSgpOworICAgIGlmICghcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNF
bXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3Jp
dGVEaXJlY3RvcnkocGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKwogICAgIHBhcmFtZXRlcnMu
cGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gcGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7CiAgICAgcGFy
YW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gcGVyVGhpcmRQYXJ0eU9y
aWdpblN0b3JhZ2VRdW90YSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IGJiOTg0MTY2NDU0Li40
YjI3ZGZiNGYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTIwODMsNiArMjA4MywxMiBAQCBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5
KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwogICAgIH0KIAorICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5
ID0gdGhpcy0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VE
aXJlY3RvcnkuaXNFbXB0eSgpKSB7CisgICAgICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5ID0gY2FjaGVTdG9yYWdlRGlyZWN0b3J5OworICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAg
fQorCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgcGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnkgPSByZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpOwog
ICAgIGlmICghcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDY3NjQ3
MWFjMTVhLi41OWQyMTZmNDA4NSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE5LTExLTEyICBTaWh1aSBMaXUgIDxz
aWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENyb3NzLXRocmVhZCB2ZXJzaW9uIFN0b3Jh
Z2VRdW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMzk3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1N0b3JhZ2VRdW90
YU1hbmFnZXIuY3BwOiBSZW1vdmVkLgorCiAyMDE5LTExLTEyICBEaWVnbyBQaW5vIEdhcmNpYSAg
PGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRkICd0ZXN0MjYyLXRlc3QnIHN0
ZXAgdG8gR1RLIGFuZCBXUEUgYnVpbGQgYm90cwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBl
MzJiODVlNDJkYy4uYTcwZTE0NjQ0YzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MzQs
NyArNzM0LDYgQEAKIAkJOTM5OUJBMDYyMzcxMTE0RjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdElu
UGFnZUNhY2hlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTM5OUJBMDMyMzcxMTBCRjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdEluUGFn
ZUNhY2hlLmh0bWwgKi87IH07CiAJCTkzQUY0RUNFMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJz
dFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNEMTUwNkYwNjQwMDdGRDU3
RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCAq
LzsgfTsKIAkJOTNBRjRFRDExNTA2RjEzMDAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNB
RjRFQ0YxNTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi87IH07Ci0JCTkz
QjYyMDU0MjM0RUE2MkMwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjYyMDUzMjM0RUEzMkIw
MEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJOTNDRkE4NjcxQ0VC
OUUzODAwMDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCBpbiBDb3B5IFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0NGQTg2NjFDRUI5REUx
MDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sICovOyB9OwogCQk5M0QxMTlG
QzIyQzY4MEY3MDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0QxMTlGQjIyQzU3MTEyMDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZh
dGUuaHRtbCAqLzsgfTsKIAkJOTNFMkM1NTUxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRpbmcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMkM1
NTQxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRpbmcuY3BwICovOyB9OwpAQCAtMjEzOCw3ICsy
MTM3LDYgQEAKIAkJOTNBRjRFQ0ExNTA2RjAzNTAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlO
b25FbXB0eUxheW91dEZvckltYWdlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FGNEVDRDE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3
Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlv
dXRGb3JJbWFnZXNfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNB
RjRFQ0YxNTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0Lmh0bWw7IHBhdGggPSAibG90cy1vZi1pbWFnZXMuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTkzQjYyMDUzMjM0RUEzMkIwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5h
Z2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VRdW90
YU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0NGQTg2NjFDRUI5
REUxMDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5odG1sOyBwYXRoID0gImF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzQ0ZBODY4MUNFQkNGRUQwMDA1NjVBOCAvKiBDYW5kaWRhdGVU
ZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENhbmRpZGF0
ZVRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0QxMTlGQjIyQzU3MTEy
MDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5o
dG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxMTAsNyArMzEwOCw2IEBACiAJ
CQkJNDE5NzNCNUMxQUYyMjg3NTAwNkM3QjM2IC8qIFNoYXJlZEJ1ZmZlci5jcHAgKi8sCiAJCQkJ
QTE3OTkxODkxRTFDQTI0MTAwQTUwNUVEIC8qIFNoYXJlZEJ1ZmZlclRlc3QuY3BwICovLAogCQkJ
CUExNzk5MThBMUUxQ0EyNDEwMEE1MDVFRCAvKiBTaGFyZWRCdWZmZXJUZXN0LmggKi8sCi0JCQkJ
OTNCNjIwNTMyMzRFQTMyQjAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwICovLAog
CQkJCUVDQTY4MENEMUU2OENDMDkwMDczMUQyMCAvKiBTdHJpbmdVdGlsaXRpZXMubW0gKi8sCiAJ
CQkJQ0U0RDVERTUxRjY3NDNCQTAwNzJDRkM2IC8qIFN0cmluZ1dpdGhEaXJlY3Rpb24uY3BwICov
LAogCQkJCTkzQTI1ODk4MUY5MkZGMTUwMDNFNTEwQyAvKiBUZXh0Q29kZWMuY3BwICovLApAQCAt
NDg0Niw3ICs0ODQzLDYgQEAKIAkJCQk3Q0NFN0VDRjFBNDExQTdFMDA0NDdDNEMgLyogU3RvcExv
YWRpbmdGcm9tRGlkUmVjZWl2ZVJlc3BvbnNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDMDkz
MkUyMUM5OTM0NDAwMzBDNEIwIC8qIFN0b3BTdXNwZW5kUmVzdW1lQWxsTWVkaWEubW0gaW4gU291
cmNlcyAqLywKIAkJCQk0MTRBRDY4NjIyODVEMUMwMDA3NzdGMkQgLyogU3RvcmFnZVF1b3RhLm1t
IGluIFNvdXJjZXMgKi8sCi0JCQkJOTNCNjIwNTQyMzRFQTYyQzAwRDQ5Qjk3IC8qIFN0b3JhZ2VR
dW90YU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1QkUxNzExRDQyOEU0QjAwREQ3
QzY4IC8qIFN0b3JlQmxvYlRoZW5EZWxldGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VE
MDFBNDExQTdFMDA0NDdDNEMgLyogU3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJp
bmcubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VEMTFBNDExQTdFMDA0NDdDNEMgLyogU3Ry
aW5nVHJ1bmNhdG9yLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMWM2N2JmMDUyLi4wMDAwMDAwMDAwMAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VRdW90YVVzZXIuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKLQotc3RhdGljIGNvbnN0
IGludCBkZWZhdWx0UXVvdGEgPSAxICogS0I7Ci0KLWNsYXNzIE1vY2tRdW90YVVzZXIgZmluYWwg
OiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGlj
aXQgTW9ja1F1b3RhVXNlcihTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5hZ2VyKQotICAgICAgICA6
IG1fbWFuYWdlcigmbWFuYWdlcikKLSAgICB7Ci0gICAgICAgIG1hbmFnZXIuYWRkVXNlcigqdGhp
cyk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKSB7
IG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOyB9Ci0KLXByaXZhdGU6Ci0gICAgdWludDY0X3Qgc3Bh
Y2VVc2VkKCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NwYWNlVXNlZDsK
LSAgICB9Ci0KLSAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY2FsbGJhY2spIGZpbmFsCi0gICAgewotICAgICAgICBpZiAoIW1fc3BhY2VVc2VkKQot
ICAgICAgICAgICAgQVNTRVJUX0VRKG1fbWFuYWdlci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFu
YWdlcjo6U3RhdGU6OlVuaW5pdGlhbGl6ZWQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBB
U1NFUlRfRVEobV9tYW5hZ2VyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6
Q29tcHV0aW5nU3BhY2VVc2VkKTsKLQotICAgICAgICAvLyBSZXNldCB1c2FnZSB0byBtb2NrIGRl
bGV0aW9uLgotICAgICAgICBtX3NwYWNlVXNlZCA9IDA7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0g
ICAgfQotCi0gICAgdWludDY0X3QgbV9zcGFjZVVzZWQgeyAwIH07Ci0gICAgU3RvcmFnZVF1b3Rh
TWFuYWdlciogbV9tYW5hZ2VyOwotfTsKLSAgICAKLVRFU1QoU3RvcmFnZVF1b3RhTWFuYWdlclRl
c3QsIEJhc2ljKQotewotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIHN0b3JhZ2VRdW90YU1hbmFn
ZXJQdHIgPSBudWxscHRyOwotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIgc3RvcmFnZVF1b3RhTWFu
YWdlcihkZWZhdWx0UXVvdGEsIFsmc3RvcmFnZVF1b3RhTWFuYWdlclB0cl0odWludDY0X3QgcXVv
dGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmIGNvbXBsZXRpb25IYW5sZGVy
KSB7Ci0gICAgICAgIEFTU0VSVF9UUlVFKHN0b3JhZ2VRdW90YU1hbmFnZXJQdHIpOwotICAgICAg
ICBBU1NFUlRfRVEoc3RvcmFnZVF1b3RhTWFuYWdlclB0ci0+c3RhdGUoKSwgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6U3RhdGU6OldhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UpOwotCi0gICAg
ICAgIC8vIEFsbG93IGFsbCBzcGFjZSBpbmNyZWFzZSByZXF1ZXN0cy4KLSAgICAgICAgY29tcGxl
dGlvbkhhbmxkZXIoc3BhY2VJbmNyZWFzZSArIGN1cnJlbnRTcGFjZSk7Ci0gICAgfSk7Ci0gICAg
c3RvcmFnZVF1b3RhTWFuYWdlclB0ciA9ICZzdG9yYWdlUXVvdGFNYW5hZ2VyOwotCi0KLSAgICBN
b2NrUXVvdGFVc2VyIG1vY2tVc2VyKHN0b3JhZ2VRdW90YU1hbmFnZXIpOwotCi0gICAgLy8gR3Jh
bnQgZGlyZWN0bHkuCi0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2UoMC4xICog
S0IsIFsmXShXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNpc2lvbikg
ewotICAgICAgICBBU1NFUlRfRVEoZGVjaXNpb24sIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OkRlY2lzaW9uOjpHcmFudCk7Ci0gICAgICAgIG1vY2tVc2VyLnNldFNwYWNlVXNlZCgwLjEg
KiBLQik7Ci0gICAgfSk7Ci0KLSAgICAvLyBHcmFudCBhZnRlciBjb21wdXRpbmcgYWNjdXJhdGUg
dXNhZ2UuCi0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2UoMS4wICogS0IsIFsm
XShXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNpc2lvbikgewotICAg
ICAgICBBU1NFUlRfRVEoZGVjaXNpb24sIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRl
Y2lzaW9uOjpHcmFudCk7Ci0gICAgICAgIG1vY2tVc2VyLnNldFNwYWNlVXNlZCgxLjAgKiBLQik7
Ci0gICAgfSk7Ci0KLSAgICAvLyBHcmFudCBhZnRlciBjb21wdXRpbmcgYWNjdXJhdGUgdXNhZ2Ug
YW5kIHJlcXVlc3Rpbmcgc3BhY2UgaW5jcmVhc2UuCi0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci5y
ZXF1ZXN0U3BhY2UoMTAgKiBLQiwgWyZdKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRl
Y2lzaW9uIGRlY2lzaW9uKSB7Ci0gICAgICAgIEFTU0VSVF9FUShzdG9yYWdlUXVvdGFNYW5hZ2Vy
UHRyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6TWFraW5nRGVjaXNpb25G
b3JSZXF1ZXN0KTsKLSAgICAgICAgQVNTRVJUX0VRKGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQpOwotICAgIH0pOwotfQotCi19IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383406</attachid>
            <date>2019-11-12 16:45:52 -0800</date>
            <delta_ts>2019-11-12 17:50:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203971-20191112164551.patch</filename>
            <type>text/plain</type>
            <size>181777</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDRkYzE5MzQ1MzA4YmJj
MjZmMDNmNmM3MmZiMzFlOWJmY2M4NGU2MC4uOGM0YWQzYzY0Yzc1MmI4NjExZDJjZmE2MzIxNGNi
N2I1Mjk4OTQ1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NiBAQAorMjAxOS0xMS0xMiAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVy
c2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgYSBsb2NrLWJhc2VkIFN0b3JhZ2VRdW90YU1hbmFn
ZXIgc28gdGhhdCBxdW90YSBjaGVjayBjYW4gYmUgZG9uZSBvbiBkaWZmZXJlbnQgdGhyZWFkcy4K
KworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVy
cy5jbWFrZToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRl
RGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpyZXF1
ZXN0U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRpc2tV
c2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2Vy
OjpRdW90YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpj
b21wdXRlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
SURCU2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3Bh
Y2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVy
OjpRdW90YVVzZXI6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjplbnN1cmVR
dW90YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2
ZXI6OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2lu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5p
c2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGVjcmVhc2VT
cGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2
ZXI6OmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCk6IERl
bGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluaXRpYWxpemVRdW90YVVz
ZXIpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5C
YWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybUNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmpl
Y3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtRGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6cmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
UHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVj
b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1HZXRBbGxSZWNvcmRzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1PcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6Oml0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRy
YW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OmFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVxdWVzdFNwYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OndhaXRGb3JS
ZXF1ZXN0U3BhY2VDb21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2spOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNo
U3BhY2VJbmNyZWFzZVRhc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
ZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRl
clF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUlu
ZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFt
ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmdldFJl
Y29yZEFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Omdl
dENvdW50QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpv
cGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hlY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rp
b246OmFib3J0VHJhbnNhY3Rpb25XaXRob3V0Q2FsbGJhY2spOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6YWJv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uOjpwdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpn
ZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9wZW5DdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vy
c29yKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2Vy
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6cXVvdGFNYW5h
Z2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dHJ5R3JhbnRSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblVz
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlc2V0UXVvdGFV
cGRhdGVkQmFzZWRPblVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OnJlc2V0UXVvdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6
flN0b3JhZ2VRdW90YU1hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6c3BhY2VVc2FnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmluaXRpYWxp
emVVc2Vyc0lmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YWRkVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzaG91bGRBc2tGb3JNb3JlU3BhY2UgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3ZlVXNl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1
ZXN0U3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
cjo6YXNrRm9yTW9yZVNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAq
IHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YSk6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJl
c2V0UXVvdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
cjo6c3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVF1b3Rh
VXNlci5oOiBSZW1vdmVkLgorCiAyMDE5LTExLTEyICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUGljdHVyZS1pbi1QaWN0dXJlIGV2ZW50cyBhcmUgbm90IGZpcmVk
IGlmIHdlIHN3aXRjaCB0aGUgUGljdHVyZS1pbi1QaWN0dXJlIG1vZGUgdGhyb3VnaCBtb2Rlcm4g
bWVkaWEgY29udHJvbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNTMwNGMxYzAzYzM5ZTZjOGUzNTQwMGFhOTMwMDJj
MWU3MjVjMjJkNy4uYjI5MjBiNDgzMmE4NGJmNzFkOWI5Y2JhYzlkZDA2YjZjZjViYmE3OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3OSBAQAorMjAxOS0xMS0xMiAgU2lodWkgTGl1ICA8c2lodWlfbGl1
QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVyc2lvbiBTdG9yYWdlUXVvdGFN
YW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDM5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlbW92ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vy
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjcmVhdGVJREJTZXJ2ZXIpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXJJREJSb290UGF0aCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjp1cGRhdGVR
dW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
ZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2Vycyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplU3RvcmFnZVF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyU3RvcmFnZVF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXpl
UXVvdGFVc2Vycyk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VyOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1
b3RhIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyOjplbnN1cmVPcmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjpl
eGlzdGluZ1N0b3JhZ2VRdW90YU1hbmFnZXJzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjpjYWNoZVJvb3RQYXRoIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VyOjpzZXRJREJSb290UGF0aCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6aWRiUm9vdFBhdGggY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U3RvcmFnZVF1b3RhTWFuYWdlcnM6OmRlZmF1bHRRdW90
YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTdG9y
YWdlUXVvdGFNYW5hZ2Vyczo6c2V0RGVmYXVsdFF1b3Rhcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yYWdlUXVvdGFNYW5hZ2Vyczo6bWFuYWdlcnNQZXJP
cmlnaW4pOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Z2V0RGlyZWN0b3J5
U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpkaXNrVXNhZ2Up
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6cmVxdWVzdFNwYWNlKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJlYWRDYWNoZXNGcm9tRGlz
ayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjp3cml0ZVNpemVGaWxl
KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJlYWRTaXplRmlsZSk6
CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpjbGVhckFsbENhY2hlc0Zy
b21EaXNrKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OmRlbGV0ZURp
cmVjdG9yeVJlY3Vyc2l2ZWx5T25CYWNrZ3JvdW5kVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIpOiBEZWxldGVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpjYWNoZXNTaXplRmlsZW5hbWUp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OkNhY2hlcyk6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjp+Q2FjaGVzKToKKyAgICAgICAgKFdlYktpdDo6Q2Fj
aGVTdG9yYWdlOjpDYWNoZXM6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdl
OjpDYWNoZXM6OnJlcXVlc3RTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6
Y2FjaGVzU2l6ZUZpbGVuYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZXM6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmg6CisgICAg
ICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAq
IFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0UmVzZXRRdW90YSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OmVuc3VyZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnJlc2V0UXVvdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2Eu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisKIDIwMTktMTEtMTIg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZlcnQgcmVtYWluZGVyIG9mIHIyNTE2NzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDQ5ZTk0ZGVm
MTI5MWI3ZGUwYjYxZDM4MDYwMWNmZjc2ZGVmMjVkNDcuLjc5NTcyZjFmNGM2YjQyNzhiOWI4Y2Y0
MTQ1ZjljM2NjZWEyY2UzYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTM3OCw3ICsxMzc4LDYg
QEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHN0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZS5oCiAgICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaAog
ICAgIHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCi0gICAgc3RvcmFnZS9TdG9yYWdlUXVv
dGFVc2VyLmgKICAgICBzdG9yYWdlL1N0b3JhZ2VUeXBlLmgKIAogICAgIHN0eWxlL1N0eWxlQ2hh
bmdlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5jcHAKaW5kZXggZTYxZGI4Yzk0MjhkOTg0ZGE2NDY5NmU3Yzg0Mjc4NzQyNjlj
MjdlNi4uMDA4MzRiZjJlZDU1NmUyODk4NGU5M2NmNzNlYzUyNDFkYTM2NDhiNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5j
cHAKQEAgLTQ2LDI0ICs0NiwyNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIElE
QlNlcnZlciB7CiAKLVJlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQor
UmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQogewogICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IElEQlNlcnZlcihzZXNzaW9uSUQsIFdURk1vdmUocXVvdGFN
YW5hZ2VyR2V0dGVyKSkpOwogfQogCi1SZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoLCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitSZWY8SURCU2Vy
dmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyJiYg
cXVvdGFNYW5hZ2VyR2V0dGVyKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlNlcnZl
cihzZXNzaW9uSUQsIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgV1RGTW92ZShxdW90YU1hbmFnZXJH
ZXR0ZXIpKSk7CiB9CiAKLUlEQlNlcnZlcjo6SURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorSURCU2VydmVy
OjpJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
R2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQogICAgIDogQ3Jvc3NUaHJlYWRUYXNrSGFuZGxl
cigiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIsIEF1dG9kcmFpbmVkUG9vbEZvclJ1bkxvb3A6OlVz
ZSkKICAgICAsIG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKICAgICAsIG1fcXVvdGFNYW5hZ2VyR2V0
dGVyKFdURk1vdmUocXVvdGFNYW5hZ2VyR2V0dGVyKSkKIHsKIH0KIAotSURCU2VydmVyOjpJREJT
ZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGly
ZWN0b3J5UGF0aCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorSURC
U2VydmVyOjpJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgU3RvcmFnZVF1b3RhTWFuYWdlckdldHRlciYmIHF1b3Rh
TWFuYWdlckdldHRlcikKICAgICA6IENyb3NzVGhyZWFkVGFza0hhbmRsZXIoIkluZGV4ZWREYXRh
YmFzZSBTZXJ2ZXIiLCBBdXRvZHJhaW5lZFBvb2xGb3JSdW5Mb29wOjpVc2UpCiAgICAgLCBtX3Nl
c3Npb25JRChzZXNzaW9uSUQpCiAgICAgLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aChkYXRhYmFz
ZURpcmVjdG9yeVBhdGgpCkBAIC02ODMsMTU3ICs2ODMsMjggQEAgdm9pZCBJREJTZXJ2ZXI6OnBl
cmZvcm1DbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFNlY3Vy
aXR5T3IKIAogdm9pZCBJREJTZXJ2ZXI6OmRpZFBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFiYXNl
cyh1aW50NjRfdCBjYWxsYmFja0lEKQogewotICAgIGZvciAoYXV0byYgdXNlciA6IG1fcXVvdGFV
c2Vycy52YWx1ZXMoKSkKLSAgICAgICAgdXNlci0+cmVzZXRTcGFjZVVzZWQoKTsKLQogICAgIGF1
dG8gY2FsbGJhY2sgPSBtX2RlbGV0ZURhdGFiYXNlQ29tcGxldGlvbkhhbmRsZXJzLnRha2UoY2Fs
bGJhY2tJRCk7CiAgICAgQVNTRVJUKGNhbGxiYWNrKTsKICAgICBjYWxsYmFjaygpOwogfQogCi1J
REJTZXJ2ZXI6OlF1b3RhVXNlcjo6UXVvdGFVc2VyKElEQlNlcnZlciYgc2VydmVyLCBTdG9yYWdl
UXVvdGFNYW5hZ2VyKiBtYW5hZ2VyLCBDbGllbnRPcmlnaW4mJiBvcmlnaW4pCi0gICAgOiBtX3Nl
cnZlcihzZXJ2ZXIpCi0gICAgLCBtX21hbmFnZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCi0gICAg
LCBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgLCBtX2lzSW5pdGlhbGl6ZWQobV9zZXJ2
ZXIubV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKLXsKLSAgICBpZiAobWFuYWdlcikKLSAgICAg
ICAgbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7Ci19Ci0KLUlEQlNlcnZlcjo6UXVvdGFVc2VyOjp+
UXVvdGFVc2VyKCkKLXsKLSAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnJl
bW92ZVVzZXIoKnRoaXMpOwotfQotCi12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNw
YWNlVXNlZCgpCi17Ci0gICAgbV9zcGFjZVVzZWQgPSAwOwotCi0gICAgaWYgKCFtX21hbmFnZXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3NlcnZlci5tX3Nlc3Npb25JRC5pc0VwaGVt
ZXJhbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1faXNJbml0aWFsaXplZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2spOwot
Ci0gICAgbV9pc0luaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICAvLyBEbyBhZGQvcmVtb3ZlIHRv
IHRyaWdnZXIgY2FsbCB0byB3aGVuSW5pdGlhbGl6ZWQuCi0gICAgbV9tYW5hZ2VyLT5yZW1vdmVV
c2VyKCp0aGlzKTsKLSAgICBtX21hbmFnZXItPmFkZFVzZXIoKnRoaXMpOwotfQotCi12b2lkIElE
QlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRlU3BhY2VVc2VkKCkKLXsKLSAgICByZXNldFNwYWNl
VXNlZCgpOwotfQotCi12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjppbmNyZWFzZVNwYWNlVXNl
ZCh1aW50NjRfdCBzaXplKQotewotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAgICAgICBy
ZXR1cm47Ci0gICAgQVNTRVJUKG1fc3BhY2VVc2VkICsgc2l6ZSA+IG1fc3BhY2VVc2VkKTsKLSAg
ICBtX3NwYWNlVXNlZCArPSBzaXplOwotfQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6ZGVj
cmVhc2VTcGFjZVVzZWQodWludDY0X3Qgc2l6ZSkKLXsKLSAgICBpZiAoIW1faXNJbml0aWFsaXpl
ZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX3NwYWNlVXNlZCA+PSBzaXplKTsKLSAg
ICBtX3NwYWNlVXNlZCAtPSBzaXplOwotfQotCi12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjp3
aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQotewot
ICAgIGlmIChtX2lzSW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKTsKLSAgICBtX3NlcnZlci5zdGFydENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbiht
X29yaWdpbik7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluaXRpYWxpemVTcGFj
ZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKQotewotICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQg
fHwgIW1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSk7Ci0gICAgbV9zcGFjZVVzZWQgPSBzcGFjZVVz
ZWQ7Ci0gICAgbV9pc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIGlmIChhdXRvIGNhbGxiYWNr
ID0gV1RGTW92ZShtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2spKQotICAgICAgICBjYWxsYmFjaygp
OwotfQotCi1JREJTZXJ2ZXI6OlF1b3RhVXNlciYgSURCU2VydmVyOjplbnN1cmVRdW90YVVzZXIo
Y29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAgcmV0dXJuICptX3F1b3RhVXNlcnMu
ZW5zdXJlKG9yaWdpbiwgW3RoaXMsICZvcmlnaW5dIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlx
dWU8UXVvdGFVc2VyPigqdGhpcywgbV9xdW90YU1hbmFnZXJHZXR0ZXIobV9zZXNzaW9uSUQsIG9y
aWdpbiksIENsaWVudE9yaWdpbiB7IG9yaWdpbiB9KTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7
Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpzdGFydENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBBU1NFUlQoIW1fc2Vzc2lvbklELmlz
RXBoZW1lcmFsKCkpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmSURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luLCBvcmlnaW4pKTsK
LX0KLQotdm9pZCBJREJTZXJ2ZXI6OmNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xp
ZW50T3JpZ2luJiBvcmlnaW4pCitTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBJREJTZXJ2
ZXI6OnJlcXVlc3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgdGFz
a1NpemUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgUmVmUHRyPFN0b3Jh
Z2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIgPSBtX3F1b3RhTWFuYWdlckdldHRl
cihvcmlnaW4pOworICAgIGlmICghc3RvcmFnZVF1b3RhTWFuYWdlcikKKyAgICAgICAgcmV0dXJu
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OwogCi0gICAgYXV0byBkYXRhYmFz
ZURpcmVjdG9yeVBhdGggPSB0aGlzLT5kYXRhYmFzZURpcmVjdG9yeVBhdGhJc29sYXRlZENvcHko
KTsKLSAgICBhdXRvIG9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50
aWZpZXI6OmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwg
b3JpZ2luLmNsaWVudE9yaWdpbiwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCAidjAiKTsKLSAgICBh
dXRvIG5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZpZXI6OmRh
dGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3JpZ2luLmNs
aWVudE9yaWdpbiwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCAidjEiKTsKLSAgICBhdXRvIHNpemUg
PSBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JEaXJlY3Rvcnkob2xkVmVy
c2lvbk9yaWdpbkRpcmVjdG9yeSkgKyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1Np
emVGb3JEaXJlY3RvcnkobmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSk7Ci0KLSAgICBwb3N0RGF0
YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpm
aW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4sIG9yaWdpbiwgc2l6ZSkpOwotfQotCi12
b2lkIElEQlNlcnZlcjo6ZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENs
aWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgZW5zdXJlUXVv
dGFVc2VyKG9yaWdpbikuaW5pdGlhbGl6ZVNwYWNlVXNlZChzcGFjZVVzZWQpOworICAgIHJldHVy
biBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQodGFz
a1NpemUpOwogfQogCi12b2lkIElEQlNlcnZlcjo6cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9y
aWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0YXNrU2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYgY2FsbGJhY2spCit1aW50NjRfdCBJREJT
ZXJ2ZXI6OmRpc2tVc2FnZShjb25zdCBTdHJpbmcmIHJvb3REaXJlY3RvcnksIGNvbnN0IENsaWVu
dE9yaWdpbiYgb3JpZ2luKQogewotICAgIGF1dG8qIHF1b3RhTWFuYWdlciA9IGVuc3VyZVF1b3Rh
VXNlcihvcmlnaW4pLm1hbmFnZXIoKTsKLSAgICBpZiAoIXF1b3RhTWFuYWdlcikgewotICAgICAg
ICBjYWxsYmFjayhTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBxdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZSh0YXNrU2l6
ZSwgV1RGTW92ZShjYWxsYmFjaykpOwotfQotCi12b2lkIElEQlNlcnZlcjo6cmVzZXRTcGFjZVVz
ZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAgaWYgKGF1dG8qIHVzZXIgPSBt
X3F1b3RhVXNlcnMuZ2V0KG9yaWdpbikpCi0gICAgICAgIHVzZXItPnJlc2V0U3BhY2VVc2VkKCk7
Ci19Ci0KLXZvaWQgSURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZChjb25zdCBDbGllbnRPcmln
aW4mIG9yaWdpbiwgdWludDY0X3Qgc2l6ZSkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2lu
KS5pbmNyZWFzZVNwYWNlVXNlZChzaXplKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OmRlY3JlYXNl
U3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzaXplKQotewot
ICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmRlY3JlYXNlU3BhY2VVc2VkKHNpemUpOwotfQot
Ci12b2lkIElEQlNlcnZlcjo6aW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50
T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplKQotewotICAgIGVuc3VyZVF1b3RhVXNl
cihvcmlnaW4pLmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKHRhc2tTaXplKTsKLX0KKyAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotdm9pZCBJREJTZXJ2ZXI6OmRlY3JlYXNlUG90ZW50
aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVVz
ZWQpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuZGVjcmVhc2VQb3RlbnRpYWxTcGFj
ZVVzZWQoc3BhY2VVc2VkKTsKKyAgICBhdXRvIG9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJ
REJEYXRhYmFzZUlkZW50aWZpZXI6OmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3Jp
Z2luLnRvcE9yaWdpbiwgb3JpZ2luLmNsaWVudE9yaWdpbiwgcm9vdERpcmVjdG9yeSwgInYwIik7
CisgICAgYXV0byBuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5ID0gSURCRGF0YWJhc2VJZGVudGlm
aWVyOjpkYXRhYmFzZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290KG9yaWdpbi50b3BPcmlnaW4sIG9y
aWdpbi5jbGllbnRPcmlnaW4sIHJvb3REaXJlY3RvcnksICJ2MSIpOworICAgIHJldHVybiBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JEaXJlY3Rvcnkob2xkVmVyc2lvbk9y
aWdpbkRpcmVjdG9yeSkgKyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JE
aXJlY3RvcnkobmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSk7CiB9CiAKIHZvaWQgSURCU2VydmVy
Ojp1cGdyYWRlRmlsZXNJZk5lY2Vzc2FyeSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKaW5kZXggZDNhMjIzZDkzMmQ5MTU5ZDU0
NjY2MjlmNzE3ZWZmYjU3NzQxM2NhZi4uYmYyYjQ3ODg0NTQ2OGYzYTM0OTViYmZlOTUyZWE5MDM3
MGMzNjNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJ2ZXIuaApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIklEQkNvbm5lY3Rp
b25Ub0NsaWVudC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlSWRlbnRpZmllci5oIgogI2luY2x1
ZGUgIlN0b3JhZ2VRdW90YU1hbmFnZXIuaCIKLSNpbmNsdWRlICJTdG9yYWdlUXVvdGFVc2VyLmgi
CiAjaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRh
YmFzZUNvbm5lY3Rpb24uaCIKICNpbmNsdWRlIDxwYWwvSHlzdGVyZXNpc0FjdGl2aXR5Lmg+CkBA
IC01OCw5ICs1Nyw5IEBAIGVudW0gY2xhc3MgU2hvdWxkRm9yY2VTdG9wIDogYm9vbCB7IE5vLCBZ
ZXMgfTsKIAogY2xhc3MgSURCU2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8SURCU2VydmVyPiwg
cHVibGljIENyb3NzVGhyZWFkVGFza0hhbmRsZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxJREJT
ZXJ2ZXI+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBRdW90YU1hbmFnZXJHZXR0ZXIgPSBXVEY6OkZ1
bmN0aW9uPFN0b3JhZ2VRdW90YU1hbmFnZXIqKFBBTDo6U2Vzc2lvbklELCBjb25zdCBDbGllbnRP
cmlnaW4mKT47Ci0gICAgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25J
RCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8
SURCU2VydmVyPiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VE
aXJlY3RvcnlQYXRoLCBRdW90YU1hbmFnZXJHZXR0ZXImJik7CisgICAgdXNpbmcgU3RvcmFnZVF1
b3RhTWFuYWdlckdldHRlciA9IFdURjo6RnVuY3Rpb248UmVmUHRyPFN0b3JhZ2VRdW90YU1hbmFn
ZXI+KGNvbnN0IENsaWVudE9yaWdpbiYpPjsKKyAgICBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3Jl
YXRlKFBBTDo6U2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOworICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SURCU2VydmVyPiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQs
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
R2V0dGVyJiYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZWdpc3RlckNvbm5lY3Rpb24o
SURCQ29ubmVjdGlvblRvQ2xpZW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1bnJlZ2lz
dGVyQ29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmKTsKQEAgLTExMSwyMSArMTEwLDE1
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJh
c2VzTW9kaWZpZWRTaW5jZShXYWxsVGltZSwgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbG9zZUFuZERlbGV0ZURhdGFiYXNl
c0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mLCBGdW5jdGlvbjx2
b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIHZvaWQgcmVxdWVzdFNwYWNlKGNv
bnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJik7Ci0gICAgdm9pZCBpbmNyZWFz
ZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6
ZSk7Ci0gICAgdm9pZCBkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmln
aW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7Ci0gICAgdm9pZCBpbmNyZWFzZVNwYWNlVXNlZChjb25z
dCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzaXplKTsKLSAgICB2b2lkIGRlY3JlYXNlU3BhY2VV
c2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNpemUpOwotICAgIHZvaWQgcmVzZXRT
cGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJik7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVRdW90
YVVzZXIoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pIHsgZW5zdXJlUXVvdGFVc2VyKG9yaWdp
bik7IH0KKyAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiByZXF1ZXN0U3BhY2UoY29u
c3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUpOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB1aW50NjRfdCBkaXNrVXNhZ2UoY29uc3QgU3RyaW5nJiwgY29uc3QgQ2xpZW50T3Jp
Z2luJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyeVN0b3AoU2hvdWxkRm9yY2VTdG9w
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3VtZSgpOwogCiBwcml2YXRlOgotICAgIElE
QlNlcnZlcihQQUw6OlNlc3Npb25JRCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOwotICAgIElEQlNl
cnZlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgs
IFF1b3RhTWFuYWdlckdldHRlciYmKTsKKyAgICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQsIFN0
b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXImJik7CisgICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklE
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgU3RvcmFnZVF1b3RhTWFuYWdl
ckdldHRlciYmKTsKIAogICAgIFVuaXF1ZUlEQkRhdGFiYXNlJiBnZXRPckNyZWF0ZVVuaXF1ZUlE
QkRhdGFiYXNlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOwogICAgIApAQCAtMTQyLDUx
ICsxMzUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlRGF0YWJhc2VzTW9kaWZpZWRTaW5j
ZUZvclZlcnNpb24oV2FsbFRpbWUsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgcmVtb3ZlRGF0
YWJhc2VzV2l0aE9yaWdpbnNGb3JWZXJzaW9uKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRh
dGE+JiwgY29uc3QgU3RyaW5nJik7CiAKLSAgICBjbGFzcyBRdW90YVVzZXIgZmluYWwgOiBwdWJs
aWMgU3RvcmFnZVF1b3RhVXNlciB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
ICAgIHB1YmxpYzoKLSAgICAgICAgUXVvdGFVc2VyKElEQlNlcnZlciYsIFN0b3JhZ2VRdW90YU1h
bmFnZXIqLCBDbGllbnRPcmlnaW4mJik7Ci0gICAgICAgIH5RdW90YVVzZXIoKTsKLQotICAgICAg
ICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBtYW5hZ2VyKCkgeyByZXR1cm4gbV9tYW5hZ2VyLmdldCgp
OyB9Ci0KLSAgICAgICAgdm9pZCBzZXRTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKSB7IG1f
c3BhY2VVc2VkID0gc3BhY2VVc2VkOyB9Ci0gICAgICAgIHZvaWQgcmVzZXRTcGFjZVVzZWQoKTsK
LQotICAgICAgICB2b2lkIGluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKHVpbnQ2NF90IGluY3Jl
YXNlKSB7IG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSArPSBpbmNyZWFzZTsgfQotICAgICAgICB2
b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKHVpbnQ2NF90IGRlY3JlYXNlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlID49IGRlY3Jl
YXNlKTsKLSAgICAgICAgICAgIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSAtPSBkZWNyZWFzZTsK
LSAgICAgICAgfQotICAgICAgICB2b2lkIGluY3JlYXNlU3BhY2VVc2VkKHVpbnQ2NF90IHNpemUp
OwotICAgICAgICB2b2lkIGRlY3JlYXNlU3BhY2VVc2VkKHVpbnQ2NF90IHNpemUpOwotCi0gICAg
ICAgIHZvaWQgaW5pdGlhbGl6ZVNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpOwotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgZmluYWwKLSAgICAg
ICAgewotICAgICAgICAgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9zcGFjZVVzZWQgKyBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgdm9pZCBjb21wdXRlU3BhY2VVc2VkKCkgZmluYWw7Ci0gICAgICAgIHZvaWQgd2hl
bkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgZmluYWw7Ci0KLSAgICAg
ICAgSURCU2VydmVyJiBtX3NlcnZlcjsKLSAgICAgICAgV2Vha1B0cjxTdG9yYWdlUXVvdGFNYW5h
Z2VyPiBtX21hbmFnZXI7Ci0gICAgICAgIENsaWVudE9yaWdpbiBtX29yaWdpbjsKLSAgICAgICAg
Ym9vbCBtX2lzSW5pdGlhbGl6ZWQgeyBmYWxzZSB9OwotICAgICAgICB1aW50NjRfdCBtX3NwYWNl
VXNlZCB7IDAgfTsKLSAgICAgICAgdWludDY0X3QgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlIHsg
MCB9OwotICAgICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IG1faW5pdGlhbGl6YXRpb25D
YWxsYmFjazsKLSAgICB9OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgUXVvdGFVc2VyJiBlbnN1cmVR
dW90YVVzZXIoY29uc3QgQ2xpZW50T3JpZ2luJik7Ci0gICAgdm9pZCBzdGFydENvbXB1dGluZ1Nw
YWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mKTsKLSAgICB2b2lkIGNvbXB1dGVT
cGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJik7Ci0gICAgdm9pZCBmaW5pc2hD
b21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qg
c3BhY2VVc2VkKTsKLQogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogICAgIEhhc2hN
YXA8SURCQ29ubmVjdGlvbklkZW50aWZpZXIsIFJlZlB0cjxJREJDb25uZWN0aW9uVG9DbGllbnQ+
PiBtX2Nvbm5lY3Rpb25NYXA7CiAgICAgSGFzaE1hcDxJREJEYXRhYmFzZUlkZW50aWZpZXIsIHN0
ZDo6dW5pcXVlX3B0cjxVbmlxdWVJREJEYXRhYmFzZT4+IG1fdW5pcXVlSURCRGF0YWJhc2VNYXA7
CkBAIC0xOTgsOCArMTQ2LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBtX2RhdGFiYXNlRGly
ZWN0b3J5UGF0aDsKIAotICAgIEhhc2hNYXA8Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8
UXVvdGFVc2VyPj4gbV9xdW90YVVzZXJzOwotICAgIFF1b3RhTWFuYWdlckdldHRlciBtX3F1b3Rh
TWFuYWdlckdldHRlcjsKKyAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyIG1fcXVvdGFNYW5h
Z2VyR2V0dGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlLmNwcAppbmRleCBmZGVkYTYzNWViN2RjMDVmN2ZmN2UwNTgyY2M0OTJmMGMyZDgzMmJi
Li4yNzY3MjI4MTc5YzVjOWM4MTFlNmNjMjMwZDFlMzY4ZDhmZTFjZDIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5jcHAKQEAgLTE4Niw1NiArMTg2LDYgQEAgc3RhdGljIGlubGluZSBTdHJpbmcg
cXVvdGFFcnJvck1lc3NhZ2VOYW1lKGNvbnN0IGNoYXIqIHRhc2tOYW1lKQogICAgIHJldHVybiBt
YWtlU3RyaW5nKCJGYWlsZWQgdG8gIiwgdGFza05hbWUsICIgaW4gZGF0YWJhc2UgYmVjYXVzZSBu
b3QgZW5vdWdoIHNwYWNlIGZvciBkb21haW4iKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cmVxdWVzdFNwYWNlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
LCB1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgY2hhciogdGFza05hbWUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoSURCRXJyb3ImJik+JiYgY2FsbGJhY2spCi17Ci0gICAgbV9zZXJ2ZXItPnJlcXVl
c3RTcGFjZShtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplLCBbd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cih0aGlzKSwgdGhpcywgd2Vha1RyYW5zYWN0aW9uID0gbWFrZVdlYWtQdHIodHJhbnNh
Y3Rpb24pLCB0YXNrTmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBkZWNp
c2lvbikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpIHsKLSAgICAgICAgICAgIGNh
bGxiYWNrKElEQkVycm9yIHsgVW5rbm93bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF3ZWFrVHJhbnNhY3Rpb24pIHsKLSAgICAgICAgICAg
IGNhbGxiYWNrKElEQkVycm9yIHsgVW5rbm93bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX293bmluZ1BvaW50ZXJGb3JDbG9zZSkgewotICAg
ICAgICAgICAgLy8gV2UgYXJlIGNsb3NpbmcgdGhlIGRhdGFiYXNlLCB0aGVyZSBpcyBubyBwb2lu
dCBpbiB0cnlpbmcgdG8gbW9kaWZ5IHRoZSBkYXRhYmFzZSBhdCB0aGF0IHBvaW50LgotICAgICAg
ICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3duRXJyb3IgfSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7Ci0gICAgICAg
IGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk6Ci0gICAgICAgICAgICBj
YWxsYmFjayhJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VO
YW1lKHRhc2tOYW1lKSB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQ6Ci0gICAgICAgICAgICBjYWxsYmFjayhJ
REJFcnJvciB7IH0pOwotICAgICAgICB9OwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjp3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYm
KT4mJiBjYWxsYmFjaykKLXsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIDAsICIiLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3Bh
Y2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgdGFza1NpemUpCi17
Ci0gICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5v
cmlnaW4oKSwgdGFza1NpemUpOwotICAgIEFTU0VSVCghbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRh
c2tzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKLSAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFz
a3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgYm9vbCBpc1Rh
c2tTdWNjZXNzZnVsKQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX3BlbmRpbmdTcGFjZUluY3Jl
YXNlVGFza3MuZmluZChpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9wZW5k
aW5nU3BhY2VJbmNyZWFzZVRhc2tzLmVuZCgpKTsKLSAgICBtX3NlcnZlci0+ZGVjcmVhc2VQb3Rl
bnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+dmFsdWUpOwot
ICAgIGlmIChpc1Rhc2tTdWNjZXNzZnVsKQotICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VTcGFj
ZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+dmFsdWUpOwotICAgIG1fcGVu
ZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5yZW1vdmUoaXRlcmF0b3IpOwotfQotCiB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24oKQogewogICAgIExPRyhJ
bmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9w
ZXJhdGlvbiAoJXApIiwgdGhpcyk7CkBAIC0yNDYsMjkgKzE5Niw3IEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiAgICAgaWYgKCFtX2RhdGFi
YXNlSW5mbykgewogICAgICAgICBpZiAoIW1faXNPcGVuaW5nQmFja2luZ1N0b3JlKSB7CiAgICAg
ICAgICAgICBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSA9IHRydWU7Ci0gICAgICAgICAgICAvLyBX
ZSBkbyBub3Qga25vdyB3aGV0aGVyIHRoaXMgaXMgYW4gZXhpc3Rpbmcgb3IgYSBuZXcgZGF0YWJh
c2UuCi0gICAgICAgICAgICAvLyBXZSBzZXQgYSBzbWFsbCBjb3N0IHNvIHRoYXQgaXQgaXMgbm90
IHBvc3NpYmxlIHRvIG9wZW4gYW4gaW5maW5pdGUgbnVtYmVyIG9mIGRhdGFiYXNlLgotICAgICAg
ICAgICAgbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX2lkZW50aWZpZXIub3JpZ2luKCksIGRlZmF1
bHRXcml0ZU9wZXJhdGlvbkNvc3QsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMp
XShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlz
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9v
d25pbmdQb2ludGVyRm9yQ2xvc2UpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAgICAgICAgIHN3aXRjaCAoZGVjaXNpb24pIHsKLSAgICAgICAgICAgICAgICBjYXNlIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OiB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gSURCUmVzdWx0RGF0YTo6ZXJyb3IobV9jdXJyZW50T3BlbkRCUmVxdWVz
dC0+cmVxdWVzdERhdGEoKS5yZXF1ZXN0SWRlbnRpZmllcigpLCBJREJFcnJvciB7IFF1b3RhRXhj
ZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJvcGVuRGF0YWJhc2UiKSB9KTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdC0+Y29ubmVjdGlvbigpLmRp
ZE9wZW5EYXRhYmFzZShyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRPcGVu
REJSZXF1ZXN0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgbV9pc09wZW5pbmdCYWNr
aW5nU3RvcmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b246OkdyYW50OgotICAgICAgICAgICAgICAgICAgICBhdXRvIGNhbGxiYWNrSUQgPSB0aGlzLT5n
ZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAgICAgICBz
dGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNv
c3QpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLT5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3Jl
LCBtX2lkZW50aWZpZXIsIGNhbGxiYWNrSUQpKTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50
aWZpZXIpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODIxLDIzICs3
NDksMzAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWRkT3BlbkRhdGFiYXNlQ29ubmVjdGlv
bihSZWY8VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW8KICAgICBtX29wZW5EYXRhYmFzZUNvbm5l
Y3Rpb25zLmFkZChhZG9wdFJlZihjb25uZWN0aW9uLmxlYWtSZWYoKSkpOwogfQogCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRp
ZmllciYgaWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYg
aWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5k
ZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSAoJXApIiwg
dGhpcyk7CiAKKworICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CisgICAgLy8gUXVv
dGEgY2hlY2suCisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UoaWRl
bnRpZmllci5vcmlnaW4oKSwgZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCk7CisgICAgaWYgKGRl
Y2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBJREJFcnJv
cihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiT3BlbkJhY2tpbmdT
dG9yZSIpKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQVNTRVJUKCFtX2JhY2tp
bmdTdG9yZSk7CiAgICAgbV9iYWNraW5nU3RvcmUgPSBtX3NlcnZlci0+Y3JlYXRlQmFja2luZ1N0
b3JlKGlkZW50aWZpZXIpOwogICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNU
cmFuc2FjdGlvbnMgPSBtX2JhY2tpbmdTdG9yZS0+c3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2Fj
dGlvbnMoKTsKICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gbV9iYWNraW5nU3RvcmUt
PmlzRXBoZW1lcmFsKCk7CiAKLSAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJbmZvOwogICAg
IGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8o
ZGF0YWJhc2VJbmZvKTsKLQotICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwg
ZGF0YWJhc2VJbmZvLCBlcnJvciwgIHRhc2tJZGVudGlmaWVyKSk7CisgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yKSk7CiB9CiAKLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
bmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVy
KQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJE
YXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBlcnJvcikKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0
YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUiKTsKQEAgLTg0OCw4ICs3ODMsNiBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5m
byYgaW5mbywgY29uc3QgSQogICAgIEFTU0VSVChtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSk7CiAg
ICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSBmYWxzZTsKIAotICAgIGZpbmlzaFNwYWNlSW5j
cmVhc2VUYXNrKHRhc2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7Ci0KICAgICBpZiAobV9o
YXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04NjEsMzMgKzc5
NCwyMyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRl
T2JqZWN0U3RvcmUiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRp
b25Db3N0ICsgZXN0aW1hdGVTaXplKGluZm8pOwotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2FjdGlv
biwgdGFza1NpemUsICJjcmVhdGVPYmplY3RTdG9yZSIsIFt0aGlzLCB0YXNrU2l6ZSwgJnRyYW5z
YWN0aW9uLCBpbmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9
IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJv
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNyZWF0
ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgaW5mbywg
V1RGTW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1Np
emUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJP
YmplY3RTdG9yZUluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVy
cm9yJiBxdW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxi
YWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lE
LCB0YXNrU2l6ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxs
YmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvLCAgcXVvdGFFcnJv
cikpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgbV9pZGVudGlmaWVy
Lm9yaWdpbigpLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBp
bmZvKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RT
dG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGlu
Zm8sIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8pCiB7CiAg
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKCFx
dW90YUVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNy
ZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIHF1b3RhRXJyb3IsIGluZm8pKTsK
KyAgICAvLyBRdW90YSBjaGVjay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3Bl
cmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsKKyAgICBhdXRvIGRlY2lzaW9uID0gbV9z
ZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIHRhc2tTaXplKTsKKyAgICBpZiAoZGVjaXNpb24g
PT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwg
SURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIkNyZWF0
ZU9iamVjdFN0b3JlIikpLCBpbmZvKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTkw
Myw3ICs4MjYsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2Jq
ZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLAogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlIik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNl
VGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKICAgICBpZiAoZXJyb3Iu
aXNOdWxsKCkpCiAgICAgICAgIG1fZGF0YWJhc2VJbmZvLT5hZGRFeGlzdGluZ09iamVjdFN0b3Jl
KGluZm8pOwogCkBAIC05MTUsMTcgKzgzNyw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRl
bGV0ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSIpOwogCi0gICAgd2FpdEZvclJlcXVl
c3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rpb24sIG9iamVj
dFN0b3JlTmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2Fs
bGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIHRoaXMtPmRlbGV0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9u
LCBvYmplY3RTdG9yZU5hbWUsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2soVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0U3RvcmVOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNh
bGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwog
ICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtOTM2LDE0ICs4NDcsMTkg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hl
Y2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2EKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rp
b24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mby0+aWRlbnRpZmllcigpKSk7CisgICAgcG9zdERh
dGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxi
YWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8tPmlkZW50aWZpZXIo
KSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlT2JqZWN0U3Rv
cmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
KQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKGNvbnN0
IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVP
YmplY3RTdG9yZSIpOwogCisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAw
KSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVy
LCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiRGVs
ZXRlT2JqZWN0U3RvcmUiKSksIG9iamVjdFN0b3JlSWRlbnRpZmllcikpOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBtX2JhY2tpbmdT
dG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIpOwogCkBAIC05NjcsMzggKzg4MywyOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpyZW5hbWVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIiht
YWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmUiKTsKIAotICAgIGF1dG8g
dGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgbmV3TmFtZS5zaXplSW5CeXRl
cygpOwotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2FjdGlvbiwgdGFza1NpemUsICJyZW5hbWVPYmpl
Y3RTdG9yZSIsIFt0aGlzLCB0YXNrU2l6ZSwgJnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIG5ld05hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3Ip
IG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkg
IT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVy
cm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+cmVu
YW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0aW9uLCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlQWZ0
ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBx
dW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBxdW90YUVycm9yOworICAgIElEQkVy
cm9yIGVycm9yOwogICAgIGF1dG8qIGluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0
aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICBpZiAoIWluZm8pCiAg
ICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJBdHRlbXB0IHRvIHJlbmFt
ZSBub24tZXhpc3RhbnQgb2JqZWN0IHN0b3JlIl9zIH07CiAKLSAgICBzdGFydFNwYWNlSW5jcmVh
c2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1l
T2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCks
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKKyAgICBwb3N0RGF0YWJh
c2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJ
RCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBuZXdOYW1lLCBlcnJvcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
UmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElEQkVycm9yJiBl
cnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZShj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElE
QkVycm9yJiBlcnJvcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0co
SW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0
b3JlIik7CiAKLSAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
LCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKKyAgICAvLyBRdW90YSBjaGVjay4K
KyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUu
c2l6ZUluQnl0ZXMoKTsKKyAgICBhdXRvIGRlY2lzaW9uID0gbV9zZXJ2ZXItPnJlcXVlc3RTcGFj
ZShvcmlnaW4sIHRhc2tTaXplKTsKKyAgICBpZiAoZGVjaXNpb24gPT0gU3RvcmFnZVF1b3RhTWFu
YWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
UmVuYW1lT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNl
ZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIlJlbmFtZU9iamVjdFN0b3JlIikpLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMTAxMyw3ICs5MTksNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
UmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLAogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlIik7CiAKLSAgICBmaW5pc2hTcGFj
ZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKICAgICBp
ZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fZGF0YWJhc2VJbmZvLT5yZW5hbWVPYmplY3RT
dG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpOwogCkBAIC0xMDI1LDI4ICs5MzAs
MjIgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZShVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2Jq
ZWN0U3RvcmUiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0
aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlm
ICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3Ip
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5jbGVhck9i
amVjdFN0b3JlQWZldFF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpjbGVhck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgRXJy
b3JDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVD
YWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNr
SUQpCiAgICAgICAgIHJldHVybjsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9y
ZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUsIG1f
aWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50
aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1DbGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1DbGVhck9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpCiB7CiAgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1DbGVhck9iamVjdFN0b3JlIik7CiAKKyAgICBpZiAobV9zZXJ2
ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNsZWFyT2JqZWN0
U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBx
dW90YUVycm9yTWVzc2FnZU5hbWUoIkNsZWFyT2JqZWN0U3RvcmUiKSkpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgbV9iYWNraW5n
U3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIpOwogCkBAIC0xMDY3LDMzICs5NjYsMjIgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6Y3JlYXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIGMKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIo
bWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4Iik7CiAKLSAgICBhdXRvIHRhc2tT
aXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsKLSAg
ICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAiY3JlYXRlSW5kZXgiLCBbdGhp
cywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkg
JiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNh
bGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICB0aGlzLT5jcmVhdGVJbmRleEFmdGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgdHJhbnNh
Y3Rpb24sIGluZm8sIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90
IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29u
c3QgSURCSW5kZXhJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJF
cnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJ
RCwgdGFza1NpemUpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJhY2tJ
RCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbywgcXVvdGFFcnJvcikpOwor
ICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBj
YWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvKSk7CiB9CiAK
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBxdW90
YUVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4KGNvbnN0
IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJ
bmRleEluZm8mIGluZm8pCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9H
KEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCIp
OwogCi0gICAgaWYgKCFxdW90YUVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIHF1b3RhRXJyb3Is
IGluZm8pKTsKKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCAr
IGVzdGltYXRlU2l6ZShpbmZvKTsKKyAgICBhdXRvIGRlY2lzaW9uID0gbV9zZXJ2ZXItPnJlcXVl
c3RTcGFjZShvcmlnaW4sIHRhc2tTaXplKTsKKyAgICBpZiAoZGVjaXNpb24gPT0gU3RvcmFnZVF1
b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNl
ZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIkNyZWF0ZUluZGV4IikpLCBpbmZvKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTExMTUsOCArMTAwMyw2IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5k
ZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgi
KTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IuaXNOdWxsKCkpOwotCiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CiAgICAgICAgIEFTU0VS
VChtX2RhdGFiYXNlSW5mbyk7CiAgICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0
YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvLm9iamVjdFN0b3JlSWRl
bnRpZmllcigpKTsKQEAgLTExMzIsMTcgKzEwMTgsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
dQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWlu
KSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXgiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0
U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0o
YXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewot
ICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHRy
YW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSwgV1RGTW92ZShjYWxs
YmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRl
eEFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFt
ZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0g
c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNh
bGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTExNTksMTQgKzEwMzQsMTkgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHBvc3REYXRh
YmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1EZWxldGVJbmRleCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50
aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleEluZm8tPmlkZW50aWZpZXIoKSkp
OworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVJbmRleCwgbV9pZGVudGlmaWVyLm9yaWdpbigp
LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGluZGV4SW5mby0+aWRlbnRpZmllcigpKSk7CiB9CiAKLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IHVpbnQ2NF90IGluZGV4SWRlbnRp
ZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVJbmRleChjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIpCiB7CiAg
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVJbmRleCIpOwogCisgICAgaWYgKG1fc2VydmVy
LT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lv
bjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVJbmRleCwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJy
b3JNZXNzYWdlTmFtZSgiRGVsZXRlSW5kZXgiKSksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5k
ZXhJZGVudGlmaWVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBBU1NFUlQobV9i
YWNraW5nU3RvcmUpOwogICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleCh0cmFuc2FjdGlv
bklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyKTsKIApA
QCAtMTE5MywyMyArMTA3MywxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRl
eChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdQogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJE
YXRhYmFzZTo6cmVuYW1lSW5kZXgiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3Jp
dGVPcGVyYXRpb25Db3N0ICsgbmV3TmFtZS5zaXplSW5CeXRlcygpOwotICAgIHJlcXVlc3RTcGFj
ZSh0cmFuc2FjdGlvbiwgdGFza1NpemUsICJyZW5hbWVJbmRleCIsIFt0aGlzLCB0YXNrU2l6ZSwg
JnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3
TmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7
Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4
Y2VlZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5yZW5hbWVJbmRleEFm
dGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwot
ICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVv
dGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5k
ZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJh
Y2ssIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNr
SUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlm
ICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBx
dW90YUVycm9yOworICAgIElEQkVycm9yIGVycm9yOwogICAgIGF1dG8qIG9iamVjdFN0b3JlSW5m
byA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9y
ZUlkZW50aWZpZXIpOwogICAgIGlmICghb2JqZWN0U3RvcmVJbmZvKQogICAgICAgICBlcnJvciA9
IElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQXR0ZW1wdCB0byByZW5hbWUgaW5kZXggaW4gbm9u
LWV4aXN0YW50IG9iamVjdCBzdG9yZSJfcyB9OwpAQCAtMTIxOCwxNyArMTA4NiwxOSBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0
YXNrU2l6ZSwgVW5pcXVlSURCRAogICAgIGlmICghaW5kZXhJbmZvKQogICAgICAgICBlcnJvciA9
IElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQXR0ZW1wdCB0byByZW5hbWUgbm9uLWV4aXN0YW50
IGluZGV4Il9zIH07CiAKLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRh
c2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgsIGNhbGxiYWNrSUQsIHRy
YW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5k
ZXhJZGVudGlmaWVyLCBuZXdOYW1lLCBlcnJvcikpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5h
bWVJbmRleCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5p
bmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmll
ciwgbmV3TmFtZSwgZXJyb3IpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05h
bWUsIGNvbnN0IElEQkVycm9yJiBlcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1SZW5hbWVJbmRleChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImIGVycm9yKQog
ewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIp
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAotICAgIGlmICghZXJy
b3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5k
ZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5k
ZXhJZGVudGlmaWVyLCBuZXdOYW1lKSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0
YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBuZXdOYW1lLnNpemVJbkJ5dGVz
KCk7CisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCB0
YXNrU2l6ZSk7CisgICAgaWYgKGRlY2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4
LCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFF
cnJvck1lc3NhZ2VOYW1lKCJSZW5hbWVJbmRleCIpKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBp
bmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MTI0Myw3ICsxMTEzLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFt
ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRh
c2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlz
TnVsbCgpKSB7CiAgICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZv
LT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAg
ICAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZvKTsKQEAgLTEyNTcsNTIgKzExMjYsNDAgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQo
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVl
c3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURC
VmFsdWUmIHZhbHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3Jp
dGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktl
eURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RT
dG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNr
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIiht
YWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQiKTsKIAotICAgIGF1dG8gdGFza1NpemUg
PSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGtleURhdGEpICsgZXN0
aW1hdGVTaXplKHZhbHVlKTsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOwotICAgIGF1dG8q
IG9iamVjdFN0b3JlID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3Jl
KHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKLSAgICBpZiAob2JqZWN0U3Rv
cmUpCi0gICAgICAgIHRhc2tTaXplICs9IG9iamVjdFN0b3JlLT5pbmRleE5hbWVzKCkuc2l6ZSgp
ICogdGFza1NpemU7Ci0KLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAi
cHV0T3JBZGQiLCBbdGhpcywgdGFza1NpemUsIHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgb3ZlcndyaXRlTW9kZV0oYXV0byBlcnJvcikg
bXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAh
PSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJy
b3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMt
PnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCByZXF1ZXN0RGF0YSwga2V5RGF0YSwg
dmFsdWUsIG92ZXJ3cml0ZU1vZGUsIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVp
bnQ2NF90IHRhc2tTaXplLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpP
YmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNh
bGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxs
YmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAg
ICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXJ0U3BhY2VJbmNy
ZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRP
ckFkZCwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJl
cXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBrZXlEYXRhLCB2YWx1ZSwgb3Zlcndy
aXRlTW9kZSwgcXVvdGFFcnJvcikpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCwgbV9p
ZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklk
ZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGtleURhdGEs
IHZhbHVlLCBvdmVyd3JpdGVNb2RlKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiBv
cmlnaW5hbFJlY29yZFZhbHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBv
dmVyd3JpdGVNb2RlLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKK3ZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWlu
dDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25z
dCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgb3JpZ2luYWxSZWNvcmRWYWx1
ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSkKIHsK
ICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkIik7CiAKLSAgICBBU1NFUlQobV9iYWNr
aW5nU3RvcmUpOwotICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOwotCiAgICAgSURC
S2V5RGF0YSB1c2VkS2V5OwogICAgIElEQkVycm9yIGVycm9yOwogCi0gICAgaWYgKCFxdW90YUVy
cm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRk
LCBjYWxsYmFja0lkZW50aWZpZXIsIHF1b3RhRXJyb3IsIHVzZWRLZXkpKTsKKyAgICAvLyBRdW90
YSBjaGVjay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCAr
IGVzdGltYXRlU2l6ZShrZXlEYXRhKSArIGVzdGltYXRlU2l6ZShvcmlnaW5hbFJlY29yZFZhbHVl
KTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOworICAgIGF1dG8qIG9iamVjdFN0b3JlID0g
bV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRl
bnRpZmllcik7CisgICAgaWYgKG9iamVjdFN0b3JlKQorICAgICAgICB0YXNrU2l6ZSArPSBvYmpl
Y3RTdG9yZS0+aW5kZXhOYW1lcygpLnNpemUoKSAqIHRhc2tTaXplOworICAgIGF1dG8gZGVjaXNp
b24gPSBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgdGFza1NpemUpOworICAgIGlmIChk
ZWNpc2lvbiA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAg
ICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJ
REJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiUHV0T3JB
ZGQiKSksIHVzZWRLZXkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIEFTU0VSVCht
X2JhY2tpbmdTdG9yZSk7CisgICAgQVNTRVJUKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAg
aWYgKCFtX2JhY2tpbmdTdG9yZSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihJbmRleGVk
REIsICIlcCAtIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQ6IG1fYmFja2luZ1N0
b3JlIGlzIG51bGwiLCB0aGlzKTsKICAgICAgICAgZXJyb3IgPSBJREJFcnJvcihJbnZhbGlkU3Rh
dGVFcnJvciwgIkJhY2tpbmcgc3RvcmUgaXMgaW52YWxpZCBmb3IgY2FsbCB0byBwdXQgb3IgYWRk
Il9zKTsKQEAgLTEzNzYsODAgKzEyMzMsNjUgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSUQKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCIpOwogCi0gICAgZmluaXNoU3BhY2VJ
bmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgcGVy
Zm9ybUtleURhdGFDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHRLZXkp
OwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQoVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0
RGF0YSwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYgZ2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2Fs
bGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQoY29uc3Qg
SURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiBnZXRS
ZWNvcmREYXRhLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJh
c2U6OmdldFJlY29yZCIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJh
bnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFl
cnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsg
fSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Z2V0UmVj
b3JkQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCBnZXRSZWNvcmREYXRhLCBXVEZNb3ZlKGNh
bGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29y
ZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQkdldFJlY29yZERhdGEmIGdldFJlY29yZERhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxi
YWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJy
b3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciA9IHJlcXVlc3REYXRhLmlu
ZGV4SWRlbnRpZmllcigpKQotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQs
IGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0
RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwgaW5kZXhJZGVudGlmaWVyLCByZXF1ZXN0RGF0
YS5pbmRleFJlY29yZFR5cGUoKSwgZ2V0UmVjb3JkRGF0YS5rZXlSYW5nZURhdGEpKTsKKyAgICAg
ICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkLCBtX2lkZW50aWZpZXIub3JpZ2luKCks
IGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0
RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwgaW5kZXhJZGVudGlmaWVyLCByZXF1ZXN0RGF0
YS5pbmRleFJlY29yZFR5cGUoKSwgZ2V0UmVjb3JkRGF0YS5rZXlSYW5nZURhdGEpKTsKICAgICBl
bHNlCi0gICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSUQsIHJlcXVl
c3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlk
ZW50aWZpZXIoKSwgZ2V0UmVjb3JkRGF0YS5rZXlSYW5nZURhdGEsIGdldFJlY29yZERhdGEudHlw
ZSkpOworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkLCBtX2lkZW50aWZpZXIub3Jp
Z2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCBy
ZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwgZ2V0UmVjb3JkRGF0YS5rZXlSYW5n
ZURhdGEsIGdldFJlY29yZERhdGEudHlwZSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpnZXRBbGxSZWNvcmRzKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
LCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldEFsbFJlY29y
ZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSwgR2V0QWxsUmVzdWx0c0NhbGxiYWNrIGNhbGxiYWNr
KQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3Jkcyhjb25zdCBJREJSZXF1ZXN0
RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNv
cmRzRGF0YSwgR2V0QWxsUmVzdWx0c0NhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0QWxsUmVjb3JkcyIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRp
b24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jkc0RhdGEsIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAg
ICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUo
ZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRo
aXMtPmdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGdldEFsbFJlY29y
ZHNEYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jk
c0RhdGEsIEdldEFsbFJlc3VsdHNDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBj
YWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsK
ICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1HZXRBbGxSZWNvcmRzLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklk
ZW50aWZpZXIoKSwgZ2V0QWxsUmVjb3Jkc0RhdGEpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0
QWxsUmVjb3JkcywgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0
YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgZ2V0QWxsUmVjb3Jkc0RhdGEpKTsKIH0KIAotdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYga2V5UmFuZ2VEYXRhLCBJREJHZXRSZWNvcmREYXRhVHlwZSB0eXBlKQordm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwg
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBj
b25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgSURCR2V0UmVjb3JkRGF0YVR5cGUg
dHlwZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCIpOwogCi0gICAgQVNT
RVJUKG1fYmFja2luZ1N0b3JlKTsKLQogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7CisgICAgaWYg
KG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRS
ZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwg
cmVzdWx0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9iYWNraW5n
U3RvcmUpOwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldFJlY29yZCh0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5UmFuZ2VEYXRh
LCB0eXBlLCByZXN1bHQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3Jk
LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKIH0KIAotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVy
LCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSByZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmIHJhbmdlKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVj
b3JkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwg
SW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJiByYW5nZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5k
ZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkIik7
CiAKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotCiAgICAgSURCR2V0UmVzdWx0IHJlc3Vs
dDsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VR
dW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tS
ZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybUdldFJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2Vl
ZGVkRXJyb3IpLCByZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VChtX2JhY2tpbmdTdG9yZSk7CiAgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+
Z2V0SW5kZXhSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGluZGV4SWRlbnRpZmllciwgcmVjb3JkVHlwZSwgcmFuZ2UsIHJlc3VsdCk7CiAKICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IsIHJlc3VsdCkpOwpAQCAtMTQ2MywxNCArMTMwNSwxOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSQogICAgIHBlcmZvcm1HZXRSZXN1bHRDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yLCByZXN1bHQpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0QWxs
UmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0
YSYgZ2V0QWxsUmVjb3Jkc0RhdGEpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0
QWxsUmVjb3Jkcyhjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhKQogewog
ICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3JkcyIpOwogCi0gICAgQVNTRVJUKG1f
YmFja2luZ1N0b3JlKTsKLQogICAgIElEQkdldEFsbFJlc3VsdCByZXN1bHQ7CisgICAgaWYgKG1f
c2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRBbGxS
ZWNvcmRzLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciks
IFdURk1vdmUocmVzdWx0KSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJU
KG1fYmFja2luZ1N0b3JlKTsKICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5n
ZXRBbGxSZWNvcmRzKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZ2V0QWxsUmVjb3Jkc0RhdGEsIHJl
c3VsdCk7CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRBbGxSZWNvcmRzLCBjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yLCBXVEZNb3ZlKHJlc3VsdCkpKTsKQEAgLTE0ODQsMzcgKzEz
MzAsMzAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldEFsbFJlY29yZHMo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb24KICAgICBwZXJmb3JtR2V0QWxsUmVzdWx0
c0NhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCk7CiB9CiAKLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmdldENvdW50KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYgcmFuZ2UsIENvdW50Q2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIENvdW50Q2FsbGJhY2sgY2FsbGJhY2spCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4p
IFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudCIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFj
ZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgcmFuZ2UsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAg
IGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJy
b3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMt
PmdldENvdW50QWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCByYW5nZSwgV1RGTW92ZShjYWxs
YmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudEFm
dGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYgcmFuZ2UsIENvdW50Q2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWlu
dDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxi
YWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47Ci0gICAgcG9zdERh
dGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUdldENvdW50LCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklk
ZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIHJlcXVlc3RE
YXRhLmluZGV4SWRlbnRpZmllcigpLCByYW5nZSkpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRD
b3VudCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFu
c2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCks
IHJlcXVlc3REYXRhLmluZGV4SWRlbnRpZmllcigpLCByYW5nZSkpOwogfQogCi12b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhKQordm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUdldENvdW50KGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGlu
ZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEpCiB7CiAg
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCIpOwogCisgICAgdWludDY0X3QgY291bnQ7
CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVw
bHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1HZXRDb3VudCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVk
RXJyb3IpLCBjb3VudCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQVNTRVJUKG1f
YmFja2luZ1N0b3JlKTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKLQotICAg
IHVpbnQ2NF90IGNvdW50OwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdl
dENvdW50KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRl
eElkZW50aWZpZXIsIGtleVJhbmdlRGF0YSwgY291bnQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtR2V0Q291bnQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGNvdW50KSk7CkBA
IC0xNTI4LDM1ICsxMzY3LDI4IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1H
ZXRDb3VudCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElECiAgICAgcGVyZm9y
bUNvdW50Q2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgY291bnQpOwogfQogCi12
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEsIEVycm9yQ2FsbGJhY2sgY2FsbGJh
Y2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQoY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwg
RXJyb3JDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29y
ZCIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0
aGlzLCByZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNo
ZWNrKHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9
KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNo
ZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJiBrZXlSYW5nZURhdGEsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0
X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNr
KSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47Ci0gICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybURlbGV0ZVJlY29yZCwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25J
ZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBrZXlSYW5n
ZURhdGEpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkLCBtX2lkZW50aWZpZXIu
b3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigp
LCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwga2V5UmFuZ2VEYXRhKSk7CiB9
CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJL
ZXlSYW5nZURhdGEmIHJhbmdlKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0
ZVJlY29yZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
IHJhbmdlKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkIik7CiAKLSAg
ICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVSYW5nZSh0cmFuc2FjdGlv
bklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgcmFuZ2UpOworICAgIGlmIChtX3Nl
cnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVj
aXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlUmVj
b3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvcikpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5n
U3RvcmUtPmRlbGV0ZVJhbmdlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCByYW5nZSk7CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlUmVjb3Jk
LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKSk7CiB9CiAKQEAgLTE1NjgsMzQgKzE0MDAsMjcg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnMKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3Bl
bkN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3Qg
SURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvLCBH
ZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5D
dXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJDdXJzb3JJ
bmZvJiBpbmZvLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJh
c2U6Om9wZW5DdXJzb3IiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRy
YW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGluZm8sIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPm9wZW5DdXJzb3JBZnRl
clF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGluZm8sIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9
KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvckFmdGVyUXVvdGFDaGVj
ayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkN1cnNvckluZm8m
IGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAg
IGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3REYXRhYmFzZVRhc2so
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1P
cGVuQ3Vyc29yLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIo
KSwgaW5mbykpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1PcGVuQ3Vyc29yLCBtX2lkZW50aWZpZXIu
b3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigp
LCBpbmZvKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1PcGVuQ3Vyc29y
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtT3BlbkN1cnNvcihjb25zdCBDbGllbnRPcmlnaW4m
IG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5m
bykKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAi
KGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJzb3IiKTsKIAogICAgIElEQkdl
dFJlc3VsdCByZXN1bHQ7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAw
KSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1PcGVuQ3Vyc29yLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIHJlc3VsdCkpOworICAgICAgICByZXR1cm47CisgICAg
fQogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5DdXJzb3IodHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBpbmZvLCByZXN1bHQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtT3BlbkN1cnNvciwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KSk7CkBA
IC0xNjA5LDM0ICsxNDM0LDI3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1P
cGVuQ3Vyc29yKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBwZXJmb3Jt
R2V0UmVzdWx0Q2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KTsKIH0K
IAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvcihVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3RE
YXRhLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sg
Y2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yKGNvbnN0IElE
QlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmIGRh
dGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6aXRl
cmF0ZUN1cnNvciIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNh
Y3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgZGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwo
KSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+aXRlcmF0ZUN1cnNvckFmdGVy
UXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgZGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0p
OwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yQWZ0ZXJRdW90YUNo
ZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSXRlcmF0ZUN1
cnNvckRhdGEmIGRhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2
NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFj
aykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwotICAgIHBvc3REYXRh
YmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1JdGVyYXRlQ3Vyc29yLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlv
bklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEuY3Vyc29ySWRlbnRpZmllcigpLCBkYXRhKSk7Cisg
ICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IsIG1faWRlbnRpZmllci5vcmlnaW4oKSwg
Y2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3RE
YXRhLmN1cnNvcklkZW50aWZpZXIoKSwgZGF0YSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVD
dXJzb3JEYXRhJiBkYXRhKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVD
dXJzb3IoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgSURC
SXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVy
YXRlQ3Vyc29yIik7CiAKICAgICBJREJHZXRSZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3NlcnZl
ci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtSXRlcmF0ZUN1cnNv
ciwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IpLCByZXN1
bHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFj
a2luZ1N0b3JlLT5pdGVyYXRlQ3Vyc29yKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY3Vyc29ySWRl
bnRpZmllciwgZGF0YSwgcmVzdWx0KTsKIAogICAgIGlmIChlcnJvci5pc051bGwoKSkgewpAQCAt
MTY4OCwxNyArMTUwNiw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0
aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAKICAgICBBU1NFUlQo
dHJhbnNhY3Rpb24uZGF0YWJhc2VDb25uZWN0aW9uKCkuZGF0YWJhc2UoKSA9PSB0aGlzKTsKIAot
ICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRy
YW5zYWN0aW9uLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11
dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxs
YmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgdGhpcy0+Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2sodHJhbnNhY3Rpb24s
IFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWlu
dDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxi
YWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xNzE0LDEz
ICsxNTIxLDE1IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uQWZ0
ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSUQs
IHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
Q29tbWl0VHJhbnNhY3Rpb24sIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJh
bnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikKK3Zv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlvbihjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikKIHsKLSAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKLSAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uIC0gJXMiLCB0cmFuc2FjdGlvbklkZW50aWZp
ZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChtX3NlcnZlci0+cmVx
dWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRl
bnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24s
IGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBJREJFcnJv
ciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5jb21taXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklk
ZW50aWZpZXIpOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9u
LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKQEAg
LTE3NTIsMjQgKzE1NjEsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNv
bW1pdFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICB0cmFuc2Fj
dGlvbkNvbXBsZXRlZChtX2ZpbmlzaGluZ1RyYW5zYWN0aW9ucy50YWtlKHRyYW5zYWN0aW9uSWRl
bnRpZmllcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5zYWN0aW9u
KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXYWl0Rm9yUGVuZGlu
Z1Rhc2tzIHdhaXRGb3JQZW5kaW5nVGFza3MsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbiAtICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlk
ZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBBU1NFUlQo
dHJhbnNhY3Rpb24uZGF0YWJhc2VDb25uZWN0aW9uKCkuZGF0YWJhc2UoKSA9PSB0aGlzKTsKIAot
ICAgIGlmICh3YWl0Rm9yUGVuZGluZ1Rhc2tzID09IFdhaXRGb3JQZW5kaW5nVGFza3M6Olllcykg
ewotICAgICAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3Ro
aXMsICZ0cmFuc2FjdGlvbiwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVy
cm9yKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAg
ICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy0+YWJvcnRUcmFuc2FjdGlvbih0
cmFuc2FjdGlvbiwgV2FpdEZvclBlbmRpbmdUYXNrczo6Tm8sIFdURk1vdmUoY2FsbGJhY2spKTsK
LSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICB1aW50NjRfdCBjYWxs
YmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAg
ICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTE3ODUsNyArMTU4Myw3IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYgdHJhbnNhY3RpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBw
b3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24u
aW5mbygpLmlkZW50aWZpZXIoKSkpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1BYm9ydFRyYW5zYWN0
aW9uLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8o
KS5pZGVudGlmaWVyKCkpKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRmluaXNo
SGFuZGxpbmdWZXJzaW9uQ2hhbmdlKFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIp
CkBAIC0xODA3LDExICsxNjA1LDE2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZEZpbmlz
aEhhbmRsaW5nVmVyc2lvbkNoYW5nZShVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3RpCiAgICAgaW52
b2tlT3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lcigpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQor
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24oY29uc3QgQ2xp
ZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uIC0gJXMiLCB0cmFuc2FjdGlvbklkZW50aWZp
ZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCisgICAgaWYgKG1fc2VydmVyLT5y
ZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6
RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1BYm9ydFRyYW5zYWN0aW9u
LCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIHRyYW5z
YWN0aW9uSWRlbnRpZmllcikpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgSURCRXJy
b3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklk
ZW50aWZpZXIpOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUFib3J0VHJhbnNhY3Rpb24s
IGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCBlYzNmYzBjNzNlYTMwZTI0ZTdhMGNlZTU4ODlmMzk2
MWYwY2M0YzI3Li43NDQ5ODUyNGY5MTcxMjgzOGE5NmQyN2ZmODU2YzM0Zjc3Y2EwNWRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2UuaApAQCAtNDQsNiArNDQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK3N0cnVjdCBDbGllbnRPcmlnaW47CiBjbGFzcyBJREJFcnJvcjsKIGNsYXNzIElEQkdl
dEFsbFJlc3VsdDsKIHN0cnVjdCBJREJHZXRSZWNvcmREYXRhOwpAQCAtODksMTcgKzkwLDE1IEBA
IHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mLCBjb25zdCBJREJJbmRleEluZm8mLCBFcnJvckNhbGxiYWNrKTsKICAgICB2b2lkIGRlbGV0
ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBFcnJvckNhbGxiYWNrKTsKICAg
ICB2b2lkIHJlbmFtZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrKTsKLSAgICB2b2lkIHB1dE9yQWRkKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElE
QktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3Jp
dGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0UmVjb3JkKFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdldFJl
Y29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRBbGxSZWNvcmRzKFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0
IElEQkdldEFsbFJlY29yZHNEYXRhJiwgR2V0QWxsUmVzdWx0c0NhbGxiYWNrKTsKLSAgICB2b2lk
IGdldENvdW50KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0
RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIENvdW50Q2FsbGJhY2spOwotICAgIHZvaWQg
ZGVsZXRlUmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1
ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEVycm9yQ2FsbGJhY2spOwotICAgIHZv
aWQgb3BlbkN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVx
dWVzdERhdGEmLCBjb25zdCBJREJDdXJzb3JJbmZvJiwgR2V0UmVzdWx0Q2FsbGJhY2spOwotICAg
IHZvaWQgaXRlcmF0ZUN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYsIEdldFJlc3VsdENh
bGxiYWNrKTsKKyAgICB2b2lkIHB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3Qg
SURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3
cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayk7CisgICAgdm9pZCBnZXRSZWNvcmQoY29uc3QgSURC
UmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2sp
OworICAgIHZvaWQgZ2V0QWxsUmVjb3Jkcyhjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElE
QkdldEFsbFJlY29yZHNEYXRhJiwgR2V0QWxsUmVzdWx0c0NhbGxiYWNrKTsKKyAgICB2b2lkIGdl
dENvdW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgQ291
bnRDYWxsYmFjayk7CisgICAgdm9pZCBkZWxldGVSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEm
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFcnJvckNhbGxiYWNrKTsKKyAgICB2b2lkIG9wZW5D
dXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJDdXJzb3JJbmZvJiwgR2V0UmVz
dWx0Q2FsbGJhY2spOworICAgIHZvaWQgaXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0
YSYsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2spOwogICAg
IHZvaWQgY29tbWl0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIEVy
cm9yQ2FsbGJhY2spOwotCi0gICAgZW51bSBjbGFzcyBXYWl0Rm9yUGVuZGluZ1Rhc2tzIHsgTm8s
IFllcyB9OwotICAgIHZvaWQgYWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiwgV2FpdEZvclBlbmRpbmdUYXNrcywgRXJyb3JDYWxsYmFjayk7CisgICAgdm9pZCBh
Ym9ydFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBFcnJvckNhbGxi
YWNrKTsKIAogICAgIHZvaWQgZGlkRmluaXNoSGFuZGxpbmdWZXJzaW9uQ2hhbmdlKFVuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbiYsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uRGVzdHJveWVkKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mKTsKQEAgLTEzOSw0NCArMTM4LDI3IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHNjaGVkdWxlU2h1dGRvd25Gb3JDbG9zZSgpOwogCi0gICAgdm9pZCBjcmVhdGVP
YmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIEVycm9yQ2FsbGJh
Y2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCByZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVv
dGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBF
cnJvckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgY3JlYXRlSW5kZXhBZnRl
clF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mLCBjb25zdCBJREJJbmRleEluZm8mLCBFcnJvckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYp
OwotICAgIHZvaWQgcmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUs
IFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBF
cnJvckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgcHV0T3JBZGRBZnRlclF1
b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3Qg
SURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3
cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIGRl
bGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYsIEVycm9yQ2FsbGJhY2spOwotCi0gICAgdm9pZCBkZWxldGVPYmplY3RT
dG9yZUFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3Qg
U3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIEVycm9yQ2FsbGJhY2spOwotICAgIHZvaWQgY2xlYXJP
YmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIEVycm9yQ2FsbGJhY2spOwotICAgIHZvaWQg
ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiwgRXJyb3JDYWxs
YmFjayk7Ci0gICAgdm9pZCBnZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVz
dERhdGEmLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2spOwotICAg
IHZvaWQgZ2V0QWxsUmVjb3Jkc0FmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYs
IGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgR2V0QWxsUmVzdWx0c0NhbGxiYWNrKTsKLSAg
ICB2b2lkIGdldENvdW50QWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29u
c3QgSURCS2V5UmFuZ2VEYXRhJiwgQ291bnRDYWxsYmFjayk7Ci0gICAgdm9pZCBvcGVuQ3Vyc29y
QWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCQ3Vyc29ySW5m
byYsIEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGl0ZXJhdGVDdXJzb3JBZnRlclF1b3Rh
Q2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYs
IEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uQWZ0ZXJRdW90
YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBFcnJvckNhbGxiYWNrKTsKLQog
ICAgIC8vIERhdGFiYXNlIHRocmVhZCBvcGVyYXRpb25zCiAgICAgdm9pZCBkZWxldGVCYWNraW5n
U3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7Ci0gICAgdm9pZCBvcGVuQmFja2lu
Z1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIHVpbnQ2NF90IHRhc2tJZGVudGlm
aWVyKTsKLSAgICB2b2lkIHBlcmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyKTsKLSAgICB2b2lkIHBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIpOworICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlk
ZW50aWZpZXImKTsKKyAgICB2b2lkIHBlcmZvcm1Db21taXRUcmFuc2FjdGlvbihjb25zdCBDbGll
bnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICB2b2lkIHBlcmZvcm1BYm9y
dFRyYW5zYWN0aW9uKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIp
OwogICAgIHZvaWQgYmVnaW5UcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKGNvbnN0IElEQlRyYW5z
YWN0aW9uSW5mbyYpOwotICAgIHZvaWQgcGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIGNvbnN0IElEQkVycm9y
Jik7Ci0gICAgdm9pZCBwZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKLSAgICB2b2lkIHBlcmZvcm1S
ZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImKTsK
LSAgICB2b2lkIHBlcmZvcm1DbGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtQ3JlYXRl
SW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiwgY29uc3Qg
SURCRXJyb3ImKTsKLSAgICB2b2lkIHBlcmZvcm1EZWxldGVJbmRleCh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRl
bnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lk
IHBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIEluZGV4
ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZv
aWQgcGVyZm9ybUdldFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElEQkdldFJlY29yZERh
dGFUeXBlKTsKLSAgICB2b2lkIHBlcmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJik7Ci0gICAgdm9pZCBwZXJmb3JtR2V0
SW5kZXhSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNv
cmRUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKLSAgICB2b2lkIHBlcmZvcm1HZXRDb3Vu
dCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7Ci0gICAg
dm9pZCBwZXJmb3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7Ci0gICAgdm9p
ZCBwZXJmb3JtT3BlbkN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJDdXJz
b3JJbmZvJik7Ci0gICAgdm9pZCBwZXJmb3JtSXRlcmF0ZUN1cnNvcih1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNv
bnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJik7CisgICAgdm9pZCBwZXJmb3JtQ3JlYXRlT2JqZWN0
U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3Qg
SURCT2JqZWN0U3RvcmVJbmZvJik7CisgICAgdm9pZCBwZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUo
Y29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICB2b2lkIHBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZShj
b25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3Im
KTsKKyAgICB2b2lkIHBlcmZvcm1DbGVhck9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYs
IHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7
CisgICAgdm9pZCBwZXJmb3JtQ3JlYXRlSW5kZXgoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJik7CisgICAgdm9pZCBwZXJmb3Jt
RGVsZXRlSW5kZXgoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIp
OworICAgIHZvaWQgcGVyZm9ybVJlbmFtZUluZGV4KGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0
X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElEQkVycm9y
Jik7CisgICAgdm9pZCBwZXJmb3JtUHV0T3JBZGQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJ
REJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zlcndy
aXRlTW9kZSk7CisgICAgdm9pZCBwZXJmb3JtR2V0UmVjb3JkKGNvbnN0IENsaWVudE9yaWdpbiYs
IHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSURCR2V0UmVjb3JkRGF0YVR5cGUpOworICAgIHZvaWQg
cGVyZm9ybUdldEFsbFJlY29yZHMoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmKTsKKyAgICB2b2lkIHBlcmZvcm1H
ZXRJbmRleFJlY29yZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmll
ciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwor
ICAgIHZvaWQgcGVyZm9ybUdldENvdW50KGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5k
ZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKKyAgICB2b2lkIHBlcmZvcm1E
ZWxldGVSZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsK
KyAgICB2b2lkIHBlcmZvcm1PcGVuQ3Vyc29yKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkN1cnNvckluZm8mKTsKKyAgICB2b2lkIHBlcmZvcm1J
dGVyYXRlQ3Vyc29yKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgSURC
SXRlcmF0ZUN1cnNvckRhdGEmKTsKICAgICB2b2lkIHBlcmZvcm1QcmVmZXRjaEN1cnNvcihjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyKTsKIAogICAgIHZvaWQgcGVyZm9y
bVN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYp
OwpAQCAtMTg2LDcgKzE2OCw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBNYWluIHRocmVhZCBjYWxs
YmFja3MKICAgICB2b2lkIGRpZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVy
c2lvbik7Ci0gICAgdm9pZCBkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5m
byYsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpOworICAgIHZvaWQg
ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJv
ciYpOwogICAgIHZvaWQgZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8m
KTsKICAgICB2b2lkIGRpZFBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyKTsKICAgICB2b2lkIGRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpOwpAQCAtMjQ2LDkgKzIyOCw2IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBpc0RvbmVXaXRoSGFyZENsb3NlKCk7CiAKICAgICB2b2lkIHJlcXVlc3RT
cGFjZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3QgdGFza1NpemUsIGNv
bnN0IGNoYXIqIGVycm9yTWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYm
KT4mJik7Ci0gICAgdm9pZCB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4m
Jik7Ci0gICAgdm9pZCBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIs
IHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHVp
bnQ2NF90IGlkZW50aWZpZXIsIGJvb2wgaXNUYXNrU3VjY2Vzc2Z1bCk7CiAKICAgICB2b2lkIGNs
ZWFyVHJhbnNhY3Rpb25zT25Db25uZWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwCmluZGV4IGZl
OTEwZmFmOTg0OWRjMmIwNDdlYmE5N2FlNTY2NTc5ZmQxM2QyMTAuLjgwMDYwNjk4ODM0NGYxYjM5
YjhiOWZiYzE5OTk4MjFkODI2MjFiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZUNvbm5lY3Rpb24uY3BwCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VD
b25uZWN0aW9uOjphYm9ydFRyYW5zYWN0aW9uV2l0aG91dENhbGxiYWNrKFVuaXF1ZUlEQkRhdGFi
CiAgICAgaWYgKCFtX2RhdGFiYXNlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbV9kYXRh
YmFzZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgVW5pcXVlSURCRGF0YWJhc2U6Oldh
aXRGb3JQZW5kaW5nVGFza3M6Ok5vLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyXShjb25zdCBJREJFcnJvciYpIHsKKyAgICBtX2RhdGFiYXNlLT5hYm9ydFRyYW5z
YWN0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyXShjb25zdCBJREJFcnJvciYpIHsKICAgICAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25N
YXAuY29udGFpbnModHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiAgICAgICAgIG1fdHJhbnNhY3Rp
b25NYXAucmVtb3ZlKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgfSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKaW5kZXggYThkMmJkYzc0MGM4OTcx
YTVhN2MwNGU3NmMwMzI5YjQ3NmFkYzQyNi4uNzZlZGRjNDViMDc2YmUzZTY5NzI4NDVkMTFlMjE1
MGI2ZjA3ZDg2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
LmNwcApAQCAtNzksNyArNzksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
OmFib3J0KCkKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFi
YXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKIAotICAgIGRhdGFiYXNlLT5hYm9ydFRyYW5z
YWN0aW9uKCp0aGlzLCBVbmlxdWVJREJEYXRhYmFzZTo6V2FpdEZvclBlbmRpbmdUYXNrczo6WWVz
LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKGF1dG8mIGVycm9yKSB7Cisg
ICAgZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24oKnRoaXMsIFt0aGlzLCB3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKV0oYXV0byYgZXJyb3IpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwg
IlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmFib3J0IChjYWxsYmFjaykiKTsKICAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI4Niw3ICsyODYsNyBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkKGNvbnN0IElEQlJl
cXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgYwogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNl
Q29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAg
IGRhdGFiYXNlLT5wdXRPckFkZCgqdGhpcywgcmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBv
dmVyd3JpdGVNb2RlLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVl
c3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCS2V5RGF0YSYga2V5KSB7CisgICAgZGF0YWJh
c2UtPnB1dE9yQWRkKHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwg
W3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYg
ZXJyb3IsIGNvbnN0IElEQktleURhdGEmIGtleSkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAi
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6cHV0T3JBZGQgKGNhbGxiYWNrKSIpOwogICAg
ICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzA3LDcgKzMwNyw3
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkKGNvbnN0IElE
QlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFz
ZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAg
ICBkYXRhYmFzZS0+Z2V0UmVjb3JkKCp0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwg
W3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYg
ZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPmdldFJl
Y29yZChyZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3Vs
dCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uOjpnZXRSZWNvcmQgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlz
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzI4LDcgKzMyOCw3IEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jkcyhjb25zdCBJREJSZXF1ZXN0RGF0YSYg
cmVxdWVzdERhCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRh
YmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmdldEFs
bFJlY29yZHMoKnRoaXMsIHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgW3RoaXMsIHdl
YWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNv
bnN0IElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPmdldEFsbFJlY29y
ZHMocmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0QWxs
UmVzdWx0JiByZXN1bHQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAo
IXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQoY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhLCBjCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0
aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJh
c2UtPmdldENvdW50KCp0aGlzLCByZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgdWlu
dDY0X3QgY291bnQpIHsKKyAgICBkYXRhYmFzZS0+Z2V0Q291bnQocmVxdWVzdERhdGEsIGtleVJh
bmdlRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0
YV0oYXV0byYgZXJyb3IsIHVpbnQ2NF90IGNvdW50KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIs
ICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRDb3VudCAoY2FsbGJhY2spIik7CiAg
ICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zNzAsNyArMzcw
LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmQoY29u
c3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXQKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRh
YmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAK
LSAgICBkYXRhYmFzZS0+ZGVsZXRlUmVjb3JkKCp0aGlzLCByZXF1ZXN0RGF0YSwga2V5UmFuZ2VE
YXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShh
dXRvJiBlcnJvcikgeworICAgIGRhdGFiYXNlLT5kZWxldGVSZWNvcmQocmVxdWVzdERhdGEsIGtl
eVJhbmdlRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0
RGF0YV0oYXV0byYgZXJyb3IpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZCAoY2FsbGJhY2spIik7CiAgICAgICAgIGlm
ICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zOTEsNyArMzkxLDcgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yKGNvbnN0IElEQlJlcXVl
c3REYXRhJiByZXF1ZXN0RGF0YSwKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5l
Y3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRh
YmFzZS0+b3BlbkN1cnNvcigqdGhpcywgcmVxdWVzdERhdGEsIGluZm8sIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJ
REJHZXRSZXN1bHQmIHJlc3VsdCkgeworICAgIGRhdGFiYXNlLT5vcGVuQ3Vyc29yKHJlcXVlc3RE
YXRhLCBpbmZvLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3RE
YXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKICAgICAgICAg
TE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9wZW5DdXJzb3Ig
KGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtNDEyLDcgKzQxMiw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
aXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhCiAgICAgYXV0byBk
YXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChk
YXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPml0ZXJhdGVDdXJzb3IoKnRoaXMsIHJlcXVl
c3REYXRhLCBkYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVl
c3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKKyAgICBk
YXRhYmFzZS0+aXRlcmF0ZUN1cnNvcihyZXF1ZXN0RGF0YSwgZGF0YSwgW3RoaXMsIHdlYWtUaGlz
ID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElE
QkdldFJlc3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yIChjYWxsYmFjaykiKTsKICAgICAgICAg
aWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZl
ci5jcHAKaW5kZXggOTExMWY1OTc4ZTNiODA2MTg1NWMyMGY1YWZhYTViNjU1ZGNjZWEyMS4uZDUy
YzAxMjNmZGMyMzAwOGIxZTRiYWU5MTRlZjMzZTI0NDljMjU0YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lE
QlNlcnZlci5jcHAKQEAgLTYxLDE4ICs2MSwyMCBAQCBSZWY8SW5Qcm9jZXNzSURCU2VydmVyPiBJ
blByb2Nlc3NJREJTZXJ2ZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbgog
CiBJblByb2Nlc3NJREJTZXJ2ZXI6On5JblByb2Nlc3NJREJTZXJ2ZXIoKSA9IGRlZmF1bHQ7CiAK
LVN0b3JhZ2VRdW90YU1hbmFnZXIqIEluUHJvY2Vzc0lEQlNlcnZlcjo6cXVvdGFNYW5hZ2VyKGNv
bnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQorUmVmUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IElu
UHJvY2Vzc0lEQlNlcnZlcjo6cXVvdGFNYW5hZ2VyKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2lu
KQogewogICAgIHJldHVybiBtX3F1b3RhTWFuYWdlcnMuZW5zdXJlKG9yaWdpbiwgW10gewotICAg
ICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTdG9yYWdlUXVvdGFNYW5hZ2VyPihTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSwgW10odWludDY0X3QgcXVvdGEsIHVpbnQ2NF90IGN1cnJl
bnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgYXV0byBjYWxsYmFjaykgeworICAgICAg
ICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKFN0b3JhZ2VRdW90YU1hbmFnZXI6
OmRlZmF1bHRRdW90YSgpLCBbXSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwg
W10odWludDY0X3QgcXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSwgYXV0byBjYWxsYmFjaykgewogICAgICAgICAgICAgY2FsbGJhY2socXVvdGEgKyBj
dXJyZW50U3BhY2UgKyBzcGFjZUluY3JlYXNlKTsKICAgICAgICAgfSk7Ci0gICAgfSkuaXRlcmF0
b3ItPnZhbHVlLmdldCgpOworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotc3RhdGljIGlu
bGluZSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFNYW5hZ2VyR2V0dGVyIHN0b3JhZ2VRdW90
YU1hbmFnZXJHZXR0ZXIoSW5Qcm9jZXNzSURCU2VydmVyJiBzZXJ2ZXIpCitzdGF0aWMgaW5saW5l
IElEQlNlcnZlcjo6SURCU2VydmVyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyIHN0b3JhZ2VR
dW90YU1hbmFnZXJHZXR0ZXIoSW5Qcm9jZXNzSURCU2VydmVyJiBzZXJ2ZXIpCiB7Ci0gICAgcmV0
dXJuIFt3ZWFrU2VydmVyID0gbWFrZVdlYWtQdHIoc2VydmVyKV0oUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IGF1dG8mIG9yaWdpbikgeworICAgIHJldHVybiBbd2Vha1NlcnZlciA9IG1ha2VXZWFrUHRy
KHNlcnZlcildKGNvbnN0IGF1dG8mIG9yaWdpbikgewogICAgICAgICByZXR1cm4gd2Vha1NlcnZl
ciA/IHdlYWtTZXJ2ZXItPnF1b3RhTWFuYWdlcihvcmlnaW4pIDogbnVsbHB0cjsKICAgICB9Owog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lu
UHJvY2Vzc0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCmluZGV4IGM3YjUzMjFjYTM2MWM3NDFlNTJkNDVlYzE4
YTgzMThmYWQwODI5YzAuLmEyN2E2MjkyZjUwODVhMjNiM2RiYjQ5Y2Q0YTIyN2E3Mjk2Mzk1ZDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblBy
b2Nlc3NJREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCByZWYoKSBvdmVycmlkZSB7IFJlZkNvdW50ZWQ8SW5Qcm9jZXNzSURCU2VydmVyPjo6
cmVmKCk7IH0KICAgICB2b2lkIGRlcmVmKCkgb3ZlcnJpZGUgeyBSZWZDb3VudGVkPEluUHJvY2Vz
c0lEQlNlcnZlcj46OmRlcmVmKCk7IH0KIAotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIHF1b3Rh
TWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mKTsKKyAgICBSZWZQdHI8U3RvcmFnZVF1b3RhTWFu
YWdlcj4gcXVvdGFNYW5hZ2VyKGNvbnN0IENsaWVudE9yaWdpbiYpOwogCiBwcml2YXRlOgogICAg
IGV4cGxpY2l0IEluUHJvY2Vzc0lEQlNlcnZlcihQQUw6OlNlc3Npb25JRCk7CkBAIC0xMzUsNyAr
MTM1LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9T
ZXJ2ZXI+IG1fY29ubmVjdGlvblRvU2VydmVyOwogICAgIFJlZlB0cjxJREJTZXJ2ZXI6OklEQkNv
bm5lY3Rpb25Ub0NsaWVudD4gbV9jb25uZWN0aW9uVG9DbGllbnQ7CiAKLSAgICBIYXNoTWFwPENs
aWVudE9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3F1b3Rh
TWFuYWdlcnM7CisgICAgSGFzaE1hcDxDbGllbnRPcmlnaW4sIFJlZlB0cjxTdG9yYWdlUXVvdGFN
YW5hZ2VyPj4gbV9xdW90YU1hbmFnZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDgyMjE1Zjc5NGU3OTcxYjQyYWJhOGExMjk1ZjExNmQxMTU2NzFkMDguLjVlNjRhOWRiYzMx
ZjhjMTE1MDExZjU4NjczMDc3ZjEzMjdmZjJjZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMzAsNyArMTEzMCw2IEBACiAJ
CTQxRDI4RDBEMjEzOUUwNTgwMEY0MjA2RiAvKiBMaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUQyOEQwQjIx
MzlFMDFEMDBGNDIwNkYgLyogTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuY3BwICovOyB9OwogCQk0
MUQ0MUM2NzIyNTY4NzRGMDA2OTc5NDIgLyogU2VydmljZVdvcmtlckludGVybmFscy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRDQxQzY1MjI1Njg1
OTIwMDY5Nzk0MiAvKiBTZXJ2aWNlV29ya2VySW50ZXJuYWxzLm1tICovOyB9OwogCQk0MURFN0M3
QzIyMkRBMTQzMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFERTdDN0IyMjJEQTEzRTAwNTMyQjY1
IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk0MURFN0M3RDIyMkRBMTQ4MDA1MzJCNjUgLyogU3RvcmFnZVF1
b3RhVXNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDFERTdDNzgyMjJEQTEzQzAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YVVzZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MURFRkNCNjFFNTZDMUJE
MDAwRDlFNUYgLyogSlNET01NYXBMaWtlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MURFRkNCNDFFNTZDMUI5MDAwRDlFNUYgLyogSlNET01NYXBMaWtl
LmggKi87IH07CiAJCTQxRTFCMUQxMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFFMUIxQ0Iw
RkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggKi87IH07CiAJCTQxRTlEQ0U3MjMx
OTc0QkYwMEYzNTk0OSAvKiBCbG9iTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUU5RENFNDIzMTk3M0ZFMDBGMzU5NDkgLyogQmxvYkxvYWRl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02
NDc0LDggKzY0NzMsOCBAQAogCQkxQ0ZBRTMyMjBBNkQ2QTNGMDAzMjU5M0QgLyogbGlib2JqYy5k
eWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJj
b21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGlib2JqYy5keWxpYjsgcGF0aCA9IC91c3Iv
bGliL2xpYm9iamMuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTFEMDAy
NkEyMjM3NEQ2MjMwMENBNkNERiAvKiBKU1BpY3R1cmVJblBpY3R1cmVXaW5kb3cuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQaWN0dXJlSW5QaWN0dXJlV2luZG93Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFEMDAyNkEzMjM3NEQ2MjQwMENBNkNERiAvKiBK
U1BpY3R1cmVJblBpY3R1cmVXaW5kb3cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNQaWN0dXJlSW5QaWN0dXJlV2luZG93LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMUQwMDI2QTgyMzc0RjlEOTAwQ0E2Q0RGIC8qIEpTRW50ZXJQaWN0dXJlSW5Q
aWN0dXJlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNFbnRlclBp
Y3R1cmVJblBpY3R1cmVFdmVudC5oOyBwYXRoID0gSlNFbnRlclBpY3R1cmVJblBpY3R1cmVFdmVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxRDAwMjZBOTIzNzRGOUQ5MDBDQTZD
REYgLyogSlNFbnRlclBpY3R1cmVJblBpY3R1cmVFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBKU0VudGVyUGljdHVyZUluUGljdHVyZUV2ZW50LmNwcDsgcGF0
aCA9IEpTRW50ZXJQaWN0dXJlSW5QaWN0dXJlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxRDAwMjZBODIzNzRGOUQ5MDBDQTZDREYgLyogSlNFbnRlclBpY3R1cmVJblBp
Y3R1cmVFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VudGVyUGlj
dHVyZUluUGljdHVyZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFEMDAy
NkE5MjM3NEY5RDkwMENBNkNERiAvKiBKU0VudGVyUGljdHVyZUluUGljdHVyZUV2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRW50ZXJQaWN0dXJlSW5QaWN0
dXJlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRDJDODJCNjIzNkEz
RjZBMDA1NUQ2QzUgLyogUGljdHVyZUluUGljdHVyZVN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGljdHVyZUluUGljdHVyZVN1cHBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MURCQzFCNTUyMzQ3QjNEMjAwQjkwMUFGIC8qIFBpY3R1cmVJblBpY3R1cmVPYnNlcnZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQaWN0dXJlSW5QaWN0dXJlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMURDNTUzRkQyMTFCQTEyQTAwNEI3ODBFIC8qIE5hdmlnYXRvclNoYXJl
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JTaGFyZS5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NDY0LDcgKzc0NjMsNiBAQAogCQk0MUQyOEQwQzIxMzlF
MDFFMDBGNDIwNkYgLyogTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuaDsgcGF0aCA9IGxpYndl
YnJ0Yy9MaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MUQ0MUM2NTIyNTY4NTkyMDA2OTc5NDIgLyogU2VydmljZVdvcmtlckludGVybmFscy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNlcnZpY2VXb3JrZXJJ
bnRlcm5hbHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRDUxQkIyMUU0RTJF
ODEwMDEzMUE1QiAvKiBMaWJXZWJSVENBdWRpb0Zvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBMaWJXZWJSVENBdWRpb0Zvcm1hdC5oOyBwYXRoID0gbGlid2VicnRjL0xp
YldlYlJUQ0F1ZGlvRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxREU3
Qzc4MjIyREExM0MwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VRdW90YVVzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDFERTdDN0EyMjJEQTEzRDAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFn
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVF1b3Rh
TWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxREU3QzdCMjIyREEx
M0UwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0b3JhZ2VRdW90YU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDFERUZDQjIxRTU2QzFCOTAwMEQ5RTVGIC8qIEpTRE9NQmluZGluZ0ludGVybmFs
cy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEpTRE9NQmluZGlu
Z0ludGVybmFscy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MDk4LDcgKzE3
MDk2LDYgQEAKIAkJCQkxQTM3NjM2QTFBMkU2OEJCMDA5QTdFRTIgLyogU3RvcmFnZU5hbWVzcGFj
ZVByb3ZpZGVyLmggKi8sCiAJCQkJNDFERTdDN0EyMjJEQTEzRDAwNTMyQjY1IC8qIFN0b3JhZ2VR
dW90YU1hbmFnZXIuY3BwICovLAogCQkJCTQxREU3QzdCMjIyREExM0UwMDUzMkI2NSAvKiBTdG9y
YWdlUXVvdGFNYW5hZ2VyLmggKi8sCi0JCQkJNDFERTdDNzgyMjJEQTEzQzAwNTMyQjY1IC8qIFN0
b3JhZ2VRdW90YVVzZXIuaCAqLywKIAkJCQk1MTY2RDNDQzFFOEVENDExMDBBRDYyRTMgLyogU3Rv
cmFnZVR5cGUuaCAqLywKIAkJCSk7CiAJCQlpbmRlbnRXaWR0aCA9IDQ7CkBAIC0yOTI2OSw3ICsy
OTI2Niw2IEBACiAJCQkJNTcyMUE5OEIxRUNFNTcwNDAwODEyOTVBIC8qIENyeXB0b0FsZ29yaXRo
bVJzYVBzc1BhcmFtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCRDMzMUExODJEOERERDAwQzA1
RDlGIC8qIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMTI1RjgyQzE4MjJDRkVDMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJRTQ1QkE2QjYyMzc2MjJBMzAwNERGQzA3IC8qIFN0eWxlQWRqdXN0
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOUFDM0VGMTgyNERDNzkwMDM0OTQyNiAvKiBDcnlw
dG9BbGdvcml0aG1TSEEyMjQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOUFDM0YxMTgyNERDNzkw
MDM0OTQyNiAvKiBDcnlwdG9BbGdvcml0aG1TSEEyNTYuaCBpbiBIZWFkZXJzICovLAogCQkJCUUx
OUFDM0YzMTgyNERDNzkwMDM0OTQyNiAvKiBDcnlwdG9BbGdvcml0aG1TSEEzODQuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzIyMDcsNyArMzIyMDMsNiBAQAogCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFD
MjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTM3NjM2QzFB
MkU2OEJCMDA5QTdFRTIgLyogU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MURFN0M3QzIyMkRBMTQzMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJNDFERTdDN0QyMjJEQTE0ODAwNTMyQjY1IC8qIFN0b3JhZ2VR
dW90YVVzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDOUVGMkYzMjFGMDYxOTAwMDNCREM1NiAv
KiBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTY2RDNDRDFF
OEVENDhGMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2ODJE
MjAwMUY3OTc4MzAwMEM4NjNEQiAvKiBTdG9yZWRDcmVkZW50aWFsc1BvbGljeS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMjIxOSw2ICszMjIxNCw3IEBACiAJCQkJOUI2QzQxNTMxMzQ0OTQ5MDAwMDg1
QjYyIC8qIFN0cmluZ1dpdGhEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg0OUY3Nzc2
MEVGRUM2MjAwMDkwODQ5RCAvKiBTdHJva2VTdHlsZUFwcGxpZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxNEI4MjA1MUQ2REYwRTUwMDc3RUJFMyAvKiBTdHJ1Y3R1cmVkQ2xvbmUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUU0NUJBNkI2MjM3NjIyQTMwMDRERkMwNyAvKiBTdHlsZUFkanVzdGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjZBMzBFODFEQzRGMDBCMjU5NjUgLyogU3R5bGVCYWNr
Z3JvdW5kRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI2N0IwRTgxRDNCRTAwQjI1OTY1
IC8qIFN0eWxlQm94RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRBQkFDMDYyMzZCMDE2RDAw
RkE0MzQ1IC8qIFN0eWxlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAppbmRleCA4NTI1NzUyZTYzMzQ3OTUz
MGVmMTRlY2I3NGY4NWJhZjY4ZDljNTViLi4wMTkzZWE4NDg1YWI2ODY2NmU1MTQ4ZDU1MDNmNjNl
ZWMxZjlhZTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90
YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFu
YWdlci5jcHAKQEAgLTI3LDIxMyArMjcsMTIwIEBACiAjaW5jbHVkZSAiU3RvcmFnZVF1b3RhTWFu
YWdlci5oIgogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VRdW90YVVz
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1TdG9yYWdlUXVvdGFNYW5hZ2VyOjp+U3RvcmFnZVF1b3RhTWFuYWdl
cigpCitSZWY8U3RvcmFnZVF1b3RhTWFuYWdlcj4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6Y3JlYXRl
KHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmIHVzYWdlR2V0dGVyLCBRdW90YUluY3JlYXNl
UmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3RlcikKIHsKLSAgICB3aGlsZSAoIW1fcGVu
ZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZp
cnN0KCkuY2FsbGJhY2soRGVjaXNpb246OkRlbnkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFN0b3JhZ2VRdW90YU1hbmFnZXIocXVvdGEsIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3Zl
KHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKSk7CiB9CiAKLXVpbnQ2NF90IFN0b3JhZ2VRdW90YU1h
bmFnZXI6OnNwYWNlVXNhZ2UoKSBjb25zdAorU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RvcmFnZVF1
b3RhTWFuYWdlcih1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgUXVv
dGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpCisgICAgOiBtX3F1
b3RhKHF1b3RhKQorICAgICwgbV91c2FnZUdldHRlcihXVEZNb3ZlKHVzYWdlR2V0dGVyKSkKKyAg
ICAsIG1fcXVvdGFJbmNyZWFzZVJlcXVlc3RlcihXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0
ZXIpKQorICAgICwgbV93b3JrUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlN0b3JhZ2VRdW90YU1h
bmFnZXIgQmFja2dyb3VuZCBRdWV1ZSIpKQorICAgICwgbV9pbml0aWFsUXVvdGEocXVvdGEpCiB7
Ci0gICAgdWludDY0X3QgdXNhZ2UgPSAwOwotICAgIGZvciAoYXV0byYgdXNlciA6IG1fdXNlcnMp
Ci0gICAgICAgIHVzYWdlICs9IHVzZXItPnNwYWNlVXNlZCgpOwotICAgIHJldHVybiB1c2FnZTsK
IH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVz
YWdlKCkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25NYWluVGhyZWFk
KHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkLCBSZXF1ZXN0Q2FsbGJhY2smJiBjYWxsYmFjaykKIHsK
LSAgICBpZiAoIW1fcXVvdGEpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogCi0gICAgYXV0byBkZWZhdWx0UXVvdGFTdGVwID0gbV9xdW90YSAvIDEwOwotICAg
IG1fcXVvdGEgPSBzdGQ6Om1heChtX3F1b3RhLCBkZWZhdWx0UXVvdGFTdGVwICogKChzcGFjZVVz
YWdlKCkgLyBkZWZhdWx0UXVvdGFTdGVwKSArIDEpKTsKLX0KLQotdm9pZCBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjppbml0aWFsaXplVXNlcnNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fcGVuZGluZ0lu
aXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0
b3I8U3RvcmFnZVF1b3RhVXNlcio+IHVzZXJzVG9Jbml0aWFsaXplOwotICAgIGZvciAoYXV0byYg
a2V5VmFsdWUgOiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzKSB7Ci0gICAgICAgIGlmIChr
ZXlWYWx1ZS52YWx1ZSA9PSBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ6Ok5vKSB7Ci0gICAgICAgICAg
ICBrZXlWYWx1ZS52YWx1ZSA9IFdoZW5Jbml0aWFsaXplZENhbGxlZDo6WWVzOwotICAgICAgICAg
ICAgdXNlcnNUb0luaXRpYWxpemUuYXBwZW5kKGtleVZhbHVlLmtleSk7CisgICAgLy8gRmFzdCBw
YXRoLgorICAgIGlmIChtX3F1b3RhQ291bnREb3duTG9jay50cnlMb2NrKCkpIHsKKyAgICAgICAg
aWYgKHRyeUdyYW50UmVxdWVzdChzcGFjZVJlcXVlc3RlZCkpIHsKKyAgICAgICAgICAgIG1fcXVv
dGFDb3VudERvd25Mb2NrLnVubG9jaygpOworICAgICAgICAgICAgY2FsbGJhY2soRGVjaXNpb246
OkdyYW50KTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBtX3F1b3Rh
Q291bnREb3duTG9jay51bmxvY2soKTsKICAgICB9Ci0gICAgZm9yIChhdXRvKiB1c2VyIDogdXNl
cnNUb0luaXRpYWxpemUpIHsKLSAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNl
cnMuY29udGFpbnModXNlcikpCi0gICAgICAgICAgICBhc2tVc2VyVG9Jbml0aWFsaXplKCp1c2Vy
KTsKLSAgICB9CisKKyAgICBtX2NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjYWxsYmFjaykpOwor
ICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBzcGFjZVJlcXVlc3RlZF0geworICAgICAgICBhdXRvIGRlY2lzaW9uID0gcmVxdWVz
dFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHNwYWNlUmVxdWVzdGVkKTsKKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkZWNpc2lv
bl0geworICAgICAgICAgICAgQVNTRVJUKCFtX2NhbGxiYWNrcy5pc0VtcHR5KCkpOworICAgICAg
ICAgICAgYXV0byBjYWxsYmFjayA9IG1fY2FsbGJhY2tzLnRha2VGaXJzdCgpOworICAgICAgICAg
ICAgY2FsbGJhY2soZGVjaXNpb24pOworICAgICAgICB9KTsKKyAgICB9KTsKIH0KIAotdm9pZCBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tVc2VyVG9Jbml0aWFsaXplKFN0b3JhZ2VRdW90YVVzZXIm
IHVzZXIpCitTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpyZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQodWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQp
CiB7Ci0gICAgdXNlci53aGVuSW5pdGlhbGl6ZWQoW3RoaXMsICZ1c2VyLCB3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKHRoaXMpXSgpIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgICAgICBpZiAobV9w
ZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5yZW1vdmUoJnVzZXIpKQotICAgICAgICAgICAgbV91
c2Vycy5hZGQoJnVzZXIpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcXVvdGFDb3VudERvd25M
b2NrKTsKIAotICAgICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0
eSgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICh0cnlHcmFudFJlcXVlc3Qoc3BhY2VS
ZXF1ZXN0ZWQpKQorICAgICAgICByZXR1cm4gRGVjaXNpb246OkdyYW50OwogCi0gICAgICAgIC8v
IE1ha2Ugc3VyZSBxdW90YSBpcyBzZXQgYmVmb3JlIGhhbmRsaW5nIGZpcnN0IHJlcXVlc3QuCi0g
ICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpVbmluaXRpYWxpemVkKSB7Ci0gICAgICAgICAg
ICB1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCk7Ci0gICAgICAgICAgICBtX3N0YXRlID0g
U3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKLSAgICAgICAgfQorICAgIG1fdXNhZ2Ug
PSBtX3VzYWdlR2V0dGVyKCk7CisgICAgdXBkYXRlUXVvdGFCYXNlZE9uVXNhZ2UoKTsKKyAgICBt
X3F1b3RhQ291bnREb3duID0gbV91c2FnZSA8IG1fcXVvdGEgPyBtX3F1b3RhIC0gbV91c2FnZSA6
IDA7CisgICAgaWYgKHRyeUdyYW50UmVxdWVzdChzcGFjZVJlcXVlc3RlZCkpCisgICAgICAgIHJl
dHVybiBEZWNpc2lvbjo6R3JhbnQ7CiAKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyh7
IH0pOwotICAgIH0pOwotfQorICAgIC8vIEJsb2NrIHRoaXMgdGhyZWFkIHVudGlsIGdldHRpbmcg
ZGVjc2lvbiBmb3IgcXVvdGEgaW5jcmVhc2UuCisgICAgQmluYXJ5U2VtYXBob3JlIHNlbWFwaG9y
ZTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIHNwYWNlUmVxdWVzdGVkLCAmc2VtYXBob3JlXSB7CisgICAgICAgIFJFTEVBU0VfTE9H
KFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXIgYXNrcyBmb3IgcXVvdGEgaW5jcmVh
c2UgJSIgUFJJdTY0LCB0aGlzLCBzcGFjZVJlcXVlc3RlZCk7CisgICAgICAgIG1fcXVvdGFJbmNy
ZWFzZVJlcXVlc3RlcihtX3F1b3RhLCBtX3VzYWdlLCBzcGFjZVJlcXVlc3RlZCwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgJnNlbWFwaG9yZV0oT3B0aW9uYWw8dWludDY0
X3Q+IG5ld1F1b3RhKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBT
dG9yYWdlUXVvdGFNYW5hZ2VyIHJlY2VpdmVzIHF1b3RhIGluY3JlYXNlIHJlc3BvbnNlICUiIFBS
SXU2NCwgdGhpcywgbmV3UXVvdGEgPyAqbmV3UXVvdGEgOiAwKTsKKyAgICAgICAgICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YWRkVXNlcihT
dG9yYWdlUXVvdGFVc2VyJiB1c2VyKQotewotICAgIEFTU0VSVCghbV9wZW5kaW5nSW5pdGlhbGl6
YXRpb25Vc2Vycy5jb250YWlucygmdXNlcikpOwotICAgIEFTU0VSVCghbV91c2Vycy5jb250YWlu
cygmdXNlcikpOwotICAgIG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuYWRkKCZ1c2VyLCBX
aGVuSW5pdGlhbGl6ZWRDYWxsZWQ6Ok5vKTsKKyAgICAgICAgICAgIGlmIChuZXdRdW90YSkKKyAg
ICAgICAgICAgICAgICBtX3F1b3RhID0gKm5ld1F1b3RhOwogCi0gICAgaWYgKCFtX3BlbmRpbmdS
ZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIGFza1VzZXJUb0luaXRpYWxpemUodXNlcik7Ci19
CisgICAgICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CisgICAgICAgIH0pOworICAgIH0pOwog
Ci1ib29sIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSh1aW50NjRf
dCBzcGFjZUluY3JlYXNlKSBjb25zdAotewotICAgIGlmICghc3BhY2VJbmNyZWFzZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHNlbWFwaG9yZS53YWl0KCk7CiAKLSAgICByZXR1cm4gc3Bh
Y2VVc2FnZSgpICsgc3BhY2VJbmNyZWFzZSA+IG1fcXVvdGE7CisgICAgbV91c2FnZSA9IG1fdXNh
Z2VHZXR0ZXIoKTsKKyAgICBtX3F1b3RhQ291bnREb3duID0gbV91c2FnZSA8IG1fcXVvdGEgPyBt
X3F1b3RhIC0gbV91c2FnZSA6IDA7CisgICAgYXV0byBkZWNpc2lvbiA9IHRyeUdyYW50UmVxdWVz
dChzcGFjZVJlcXVlc3RlZCkgPyBEZWNpc2lvbjo6R3JhbnQgOiBEZWNpc2lvbjo6RGVueTsKKyAg
ICByZXR1cm4gZGVjaXNpb247CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3Zl
VXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQorYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp0
cnlHcmFudFJlcXVlc3QodWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQpCiB7Ci0gICAgQVNTRVJUKG1f
dXNlcnMuY29udGFpbnMoJnVzZXIpIHx8IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29u
dGFpbnMoJnVzZXIpKTsKLSAgICBtX3VzZXJzLnJlbW92ZSgmdXNlcik7Ci0gICAgaWYgKG1fcGVu
ZGluZ0luaXRpYWxpemF0aW9uVXNlcnMucmVtb3ZlKCZ1c2VyKSAmJiBtX3BlbmRpbmdJbml0aWFs
aXphdGlvblVzZXJzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBXaGVuIGJlaW5nIGNsZWFyZWQs
IHF1b3RhIHVzZXJzIG1heSByZW1vdmUgdGhlbXNlbHZlcyBhbmQgYWRkIHRoZW1zZWx2ZXMgdG8g
dHJpZ2dlciByZWluaXRpYWxpemF0aW9uLgotICAgICAgICAvLyBMZXQncyB3YWl0IGZvciBhZGRV
c2VyIHRvIGJlIGNhbGxlZCBiZWZvcmUgcHJvY2Vzc2luZyBwZW5kaW5nIHJlcXVlc3RzLgotICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMp
XSB7Ci0gICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKLSAg
ICAgICAgfSk7CisgICAgQVNTRVJUKG1fcXVvdGFDb3VudERvd25Mb2NrLmlzTG9ja2VkKCkpOwor
ICAgIGlmIChzcGFjZVJlcXVlc3RlZCA8PSBtX3F1b3RhQ291bnREb3duKSB7CisgICAgICAgIG1f
cXVvdGFDb3VudERvd24gLT0gc3BhY2VSZXF1ZXN0ZWQ7CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9Ci0KLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIFJlcXVlc3RDYWxsYmFjayYmIGNh
bGxiYWNrKQorICAgIAordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVRdW90YUJhc2Vk
T25Vc2FnZSgpCiB7Ci0gICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShj
YWxsYmFjaykgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXNwYWNlSW5j
cmVhc2UpIHsKLSAgICAgICAgY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAo
IW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcGVu
ZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spIH0p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZEFza0Zvck1vcmVTcGFj
ZShzcGFjZUluY3JlYXNlKSkgewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBz
cGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKLQotICAgICAgICAvLyBUcnkgcHJv
Y2Vzc2luZyByZXF1ZXN0IGFnYWluIGFmdGVyIG1ha2luZyBzdXJlIHVzYWdlIGlzIGFjY3VyYXRl
LgotICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKLSAgICAgICAg
Zm9yIChhdXRvJiB1c2VyIDogY29weVRvVmVjdG9yKG1fdXNlcnMpKQotICAgICAgICAgICAgdXNl
ci0+Y29tcHV0ZVNwYWNlVXNlZCgpOwotCi0gICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6
YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9z
dGF0ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgIGFza0Zvck1vcmVTcGFj
ZShzcGFjZUluY3JlYXNlKTsKLSAgICAgICAgcmV0dXJuOworICAgIC8vIFdoZW4gU3RvcmFnZVF1
b3RhTWFuYWdlciBpcyB1c2VkIGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugd2FudCB0byBtYWtlIHN1
cmUgaXRzIGluaXRpYWwgcXVvdGEgaXMgYmlnZ2VyIHRoYW4gY3VycmVudCBkaXNrIHVzYWdlLAor
ICAgIC8vIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHF1b3RhIHdhcyBpbmNyZWFz
ZWQgdG8gYXQgbGVhc3QgdGhlIGRpc2sgdXNhZ2UgdW5kZXIgdXNlcidzIHBlcm1pc3Npb24gYmVm
b3JlLgorICAgIEFTU0VSVChtX3F1b3RhQ291bnREb3duTG9jay5pc0xvY2tlZCgpKTsKKyAgICBp
ZiAoIW1fcXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlKSB7CisgICAgICAgIG1fcXVvdGFVcGRhdGVk
QmFzZWRPblVzYWdlID0gdHJ1ZTsKKyAgICAgICAgYXV0byBkZWZhdWx0UXVvdGFTdGVwID0gbV9x
dW90YSAvIDEwOworICAgICAgICBtX3F1b3RhID0gc3RkOjptYXgobV9xdW90YSwgZGVmYXVsdFF1
b3RhU3RlcCAqICgobV91c2FnZSAvIGRlZmF1bHRRdW90YVN0ZXApICsgMSkpOwogICAgIH0KLQot
ICAgIG1fc3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgIGNhbGxi
YWNrKERlY2lzaW9uOjpHcmFudCk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNr
Rm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpCit2b2lkIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlKCkKIHsKLSAgICBBU1NFUlQoc2hv
dWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpKTsKLSAgICBBU1NFUlQobV9zdGF0ZSA9
PSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlKTsKLQotICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2Us
ICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSAlIiBQUkl1NjQsIHRo
aXMsIHNwYWNlSW5jcmVhc2UpOwotICAgIG1fc3RhdGUgPSBTdGF0ZTo6V2FpdGluZ0ZvclNwYWNl
SW5jcmVhc2VSZXNwb25zZTsKLSAgICBtX3NwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIobV9xdW90YSwg
c3BhY2VVc2FnZSgpLCBzcGFjZUluY3JlYXNlLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cigqdGhpcyldKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkgewotICAgICAgICBpZiAoIXdl
YWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJFTEVBU0VfTE9HKFN0b3Jh
Z2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSByZWNlaXZlZCBy
ZXNwb25zZSAlIiBQUkl1NjQsIHRoaXMsIG5ld1F1b3RhID8gKm5ld1F1b3RhIDogMCk7Ci0KLSAg
ICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgIHByb2Nl
c3NQZW5kaW5nUmVxdWVzdHMobmV3UXVvdGEpOwotICAgIH0pOworICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fcXVvdGFDb3VudERvd25Mb2NrKTsKKyAgICBtX3F1b3RhID0gbV9pbml0aWFsUXVvdGE7
CisgICAgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgPSBmYWxzZTsKIH0KIAotdm9pZCBTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90
PiBuZXdRdW90YSkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90YSgpCiB7Ci0g
ICAgaWYgKG1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG5ld1F1b3RhKQotICAgICAgICBtX3F1b3RhID0gKm5ld1F1b3RhOwotCi0gICAgaWYg
KG1fc3RhdGUgPT0gU3RhdGU6OldhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpBc2tp
bmdGb3JNb3JlU3BhY2UpIHsKLSAgICAgICAgYXV0byByZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVz
dHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIGJvb2wgc2hvdWxkQWxsb3dSZXF1ZXN0ID0gIXNob3Vs
ZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVhc2UpOwotCi0gICAgICAgIFJFTEVB
U0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5n
UmVxdWVzdHMgZmlyc3QgcmVxdWVzdCBkZWNpc2lvbiBpcyAlZCIsIHRoaXMsIHNob3VsZEFsbG93
UmVxdWVzdCk7Ci0KLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJl
cXVlc3Q7Ci0gICAgICAgIHJlcXVlc3QuY2FsbGJhY2soc2hvdWxkQWxsb3dSZXF1ZXN0ID8gRGVj
aXNpb246OkdyYW50IDogRGVjaXNpb246OkRlbnkpOwotICAgIH0KLQotICAgIHdoaWxlICghbV9w
ZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8mIHJlcXVlc3QgPSBtX3Bl
bmRpbmdSZXF1ZXN0cy5maXJzdCgpOwotCi0gICAgICAgIGlmIChzaG91bGRBc2tGb3JNb3JlU3Bh
Y2UocmVxdWVzdC5zcGFjZUluY3JlYXNlKSkgewotICAgICAgICAgICAgaWYgKG1fc3RhdGUgPT0g
U3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdCkgewotICAgICAgICAgICAgICAgIG1fc3Rh
dGUgPSBTdGF0ZTo6Q29tcHV0aW5nU3BhY2VVc2VkOwotICAgICAgICAgICAgICAgIGZvciAoYXV0
byYgdXNlciA6IGNvcHlUb1ZlY3RvcihtX3VzZXJzKSkKLSAgICAgICAgICAgICAgICAgICAgdXNl
ci0+Y29tcHV0ZVNwYWNlVXNlZCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFtX3BlbmRpbmdJ
bml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkFza2luZ0Zv
ck1vcmVTcGFjZTsKLSAgICAgICAgICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UgPSAwOwotICAg
ICAgICAgICAgZm9yIChhdXRvJiBwZW5kaW5nUmVxdWVzdCA6IG1fcGVuZGluZ1JlcXVlc3RzKQot
ICAgICAgICAgICAgICAgIHNwYWNlSW5jcmVhc2UgKz0gcGVuZGluZ1JlcXVlc3Quc3BhY2VJbmNy
ZWFzZTsKLSAgICAgICAgICAgIGFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6TWFr
aW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy50YWtlRmly
c3QoKS5jYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOwotICAgIH0KKyAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX3F1b3RhQ291bnREb3duTG9jayk7CisgICAgbV9xdW90YSA9IG1faW5pdGlhbFF1b3Rh
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZVF1b3RhTWFuYWdlci5oCmluZGV4IDA5NTY2MzA2ZjU1OTFhYmI1OWQwYWZkOGVlYTQ4
Njc5YTVmNmM2M2MuLjU5OWI4M2QxZjY2MjY4YWFkZmI0NDhkYWRhMWUzYjJmMmI4YTdlMGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCkBAIC0yNSw3
NyArMjUsNTYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDbGllbnRPcmlnaW4uaCIK
ICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU3RvcmFnZVF1b3RhVXNlcjsKLQotY2xhc3MgU3Rv
cmFnZVF1b3RhTWFuYWdlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTdG9yYWdlUXVvdGFNYW5h
Z2VyPiB7CitjbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VyIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFN0b3JhZ2VRdW90YU1hbmFnZXI+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U3RvcmFn
ZVF1b3RhTWFuYWdlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIHVzaW5nIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQodWlu
dDY0X3QgcXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFz
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmKT47Ci0gICAg
U3RvcmFnZVF1b3RhTWFuYWdlcih1aW50NjRfdCBxdW90YSwgU3BhY2VJbmNyZWFzZVJlcXVlc3Rl
ciYmIHNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIpCi0gICAgICAgIDogbV9xdW90YShxdW90YSkKLSAg
ICAgICAgLCBtX3NwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIoV1RGTW92ZShzcGFjZUluY3JlYXNlUmVx
dWVzdGVyKSkKLSAgICB7Ci0gICAgfQotICAgIFdFQkNPUkVfRVhQT1JUIH5TdG9yYWdlUXVvdGFN
YW5hZ2VyKCk7CisgICAgdXNpbmcgVXNhZ2VHZXR0ZXIgPSBXVEY6OkZ1bmN0aW9uPHVpbnQ2NF90
KCk+OworICAgIHVzaW5nIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEY6OkZ1bmN0aW9uPHZv
aWQodWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50VXNhZ2UsIHVpbnQ2NF90
IHJlcXVlc3RlZEluY3JlYXNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVpbnQ2
NF90Pik+JiYpPjsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFN0b3JhZ2VRdW90YU1h
bmFnZXI+IGNyZWF0ZSh1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFz
ZVJlcXVlc3RlciYmKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVmYXVsdFRo
aXJkUGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkgeyByZXR1cm4g
cXVvdGEgLyAxMDsgfQotCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBkZWZhdWx0UXVv
dGEoKSB7IHJldHVybiAxMDAwICogTUI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90
IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB7IHJldHVybiBkZWZhdWx0VGhpcmRQYXJ0eVF1b3Rh
RnJvbVBlck9yaWdpblF1b3RhKGRlZmF1bHRRdW90YSgpKTsgfQogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhZGRVc2VyKFN0b3JhZ2VRdW90YVVzZXImKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlbW92ZVVzZXIoU3RvcmFnZVF1b3RhVXNlciYpOwotCiAgICAgZW51bSBjbGFzcyBEZWNp
c2lvbiB7IERlbnksIEdyYW50IH07CiAgICAgdXNpbmcgUmVxdWVzdENhbGxiYWNrID0gQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChEZWNpc2lvbik+OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVx
dWVzdFNwYWNlKHVpbnQ2NF90LCBSZXF1ZXN0Q2FsbGJhY2smJik7Ci0gICAgdm9pZCByZXNldFF1
b3RhKHVpbnQ2NF90IG5ld1F1b3RhKSB7IG1fcXVvdGEgPSBuZXdRdW90YTsgfQorICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKHVpbnQ2NF90LCBSZXF1ZXN0
Q2FsbGJhY2smJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRGVjaXNpb24gcmVxdWVzdFNwYWNlT25C
YWNrZ3JvdW5kVGhyZWFkKHVpbnQ2NF90KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBk
YXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOwotCi0gICAgZW51bSBjbGFzcyBTdGF0ZSB7Ci0g
ICAgICAgIFVuaW5pdGlhbGl6ZWQsCi0gICAgICAgIENvbXB1dGluZ1NwYWNlVXNlZCwKLSAgICAg
ICAgV2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSwKLSAgICAgICAgQXNraW5nRm9yTW9y
ZVNwYWNlLAotICAgICAgICBNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3QsCi0gICAgfTsKLSAgICBT
dGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICAvLyBUZXN0IG9ubHku
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNldFF1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZSgp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRRdW90YSgpOwogCiBwcml2YXRlOgotICAg
IHVpbnQ2NF90IHNwYWNlVXNhZ2UoKSBjb25zdDsKLSAgICBib29sIHNob3VsZEFza0Zvck1vcmVT
cGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNlKSBjb25zdDsKLSAgICB2b2lkIGFza0Zvck1vcmVT
cGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNlKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZVVzZXJz
SWZOZWVkZWQoKTsKLSAgICB2b2lkIGFza1VzZXJUb0luaXRpYWxpemUoU3RvcmFnZVF1b3RhVXNl
ciYpOworICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVy
JiYsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJik7CisgICAgYm9vbCB0cnlHcmFudFJlcXVlc3Qo
dWludDY0X3QpOwogCi0gICAgdm9pZCBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVp
bnQ2NF90Pik7CisgICAgdm9pZCB1cGRhdGVRdW90YUJhc2VkT25Vc2FnZSgpOwogCisgICAgTG9j
ayBtX3F1b3RhQ291bnREb3duTG9jazsKKyAgICB1aW50NjRfdCBtX3F1b3RhQ291bnREb3duIHsg
MCB9OwogICAgIHVpbnQ2NF90IG1fcXVvdGEgeyAwIH07CisgICAgdWludDY0X3QgbV91c2FnZSB7
IDAgfTsKIAotICAgIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIgbV9zcGFjZUluY3JlYXNlUmVxdWVz
dGVyOworICAgIFVzYWdlR2V0dGVyIG1fdXNhZ2VHZXR0ZXI7CisgICAgUXVvdGFJbmNyZWFzZVJl
cXVlc3RlciBtX3F1b3RhSW5jcmVhc2VSZXF1ZXN0ZXI7CiAKLSAgICBlbnVtIGNsYXNzIFdoZW5J
bml0aWFsaXplZENhbGxlZCB7IE5vLCBZZXMgfTsKLSAgICBIYXNoTWFwPFN0b3JhZ2VRdW90YVVz
ZXIqLCBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ+IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnM7
Ci0gICAgSGFzaFNldDxTdG9yYWdlUXVvdGFVc2VyKj4gbV91c2VyczsKKyAgICBEZXF1ZTxSZXF1
ZXN0Q2FsbGJhY2s+IG1fY2FsbGJhY2tzOworICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVl
OwogCi0gICAgc3RydWN0IFBlbmRpbmdSZXF1ZXN0IHsKLSAgICAgICAgdWludDY0X3Qgc3BhY2VJ
bmNyZWFzZTsKLSAgICAgICAgUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrOwotICAgIH07Ci0gICAg
RGVxdWU8UGVuZGluZ1JlcXVlc3Q+IG1fcGVuZGluZ1JlcXVlc3RzOworICAgIGJvb2wgbV9xdW90
YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgeyBmYWxzZSB9OwogCi0gICAgU3RhdGUgbV9zdGF0ZSB7IFN0
YXRlOjpVbmluaXRpYWxpemVkIH07CisgICAgLy8gVGVzdCBvbmx5LgorICAgIHVpbnQ2NF90IG1f
aW5pdGlhbFF1b3RhIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjcxMGNlZWM2MGM1ZGU1MGM2MDlkMjMxYjBmMGRmOTY3NDk0OTQyMC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFN0b3JhZ2VRdW90YVVzZXIgewotcHVibGljOgotICAgIHZpcnR1YWwg
flN0b3JhZ2VRdW90YVVzZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIHVpbnQ2NF90IHNw
YWNlVXNlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgp
IHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjYWxsYmFjaykgeyBjYWxsYmFjaygpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCmluZGV4IDVmMjNjYzY2YWExMWY3ZDI4ZTc2MTVjY2I4NTEzNjdjMjAzMTViZTMuLjY3
NjcyNmExNjZiZjZjZWUzY2UyMzRmOTE5YzQyY2UxMjliMDY0MWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC02NSw2ICs2NSw3IEBA
CiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZUphci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRE5TLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EZXByZWNhdGVkR2xv
YmFsU2V0dGluZ3MuaD4KQEAgLTMxNiw4ICszMTcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
JiYKICAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRDsKICAgICBzZXRTZXNzaW9u
KHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykp
KTsKIAorICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CisgICAgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90
YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSk7CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAg
ICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKKyAgICBzZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRo
KHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnkpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
CkBAIC0zMjYsNyArMzMxLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKICAgICAgICAgYWRk
U2VydmljZVdvcmtlclNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwg
c2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIH0K
ICNlbmRpZgotICAgIGluaXRpYWxpemVTdG9yYWdlUXVvdGEocGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycyk7CiAKICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lv
bklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURp
cmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCkBAIC00MzQsMjggKzQzOCwzOSBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRlbnRpYWxzKCkKIAogdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6YWRkV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYm
IHBhcmFtZXRlcnMpCiB7CisgICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CisKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25z
dW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOworICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgcGFy
YW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9y
aWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOworCiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lv
bihwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIHBhcmFtZXRl
cnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihz
ZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgc2V0U2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXJJREJSb290UGF0aChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQogICAgIGlmIChwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50KCkp
Ci0gICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rl
cm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNz
aW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9u
RGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFk
ZChwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIHBhcmFtZXRl
cnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBpbml0aWFsaXplU3RvcmFnZVF1b3RhKHBhcmFtZXRl
cnMpOworICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMu
bG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vi
c2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycykpOwogfQogCi12
b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplU3RvcmFnZVF1b3RhKGNvbnN0IFdlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQordm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRk
U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW50
NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0
IFN0cmluZyYgY2FjaGVSb290UGF0aCkKIHsKLSAgICBhdXRvJiBtYW5hZ2VycyA9ICBtX3N0b3Jh
Z2VRdW90YU1hbmFnZXJzLmVuc3VyZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5zZXNzaW9uSUQsIFtdIHsKLSAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsg
fTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgbWFuYWdlcnMuc2V0RGVmYXVsdFF1b3Rh
cyhwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBh
cnR5T3JpZ2luU3RvcmFnZVF1b3RhKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25T
dG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIGF1dG9baXRlciwgaXNOZXdFbnRyeV0gPSBt
X3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKKyAg
ICBpZiAoaXNOZXdFbnRyeSkKKyAgICAgICAgaXRlci0+dmFsdWUgPSBtYWtlVW5pcXVlPFNlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2VyPihjYWNoZVJvb3RQYXRoLCBkZWZhdWx0UXVvdGEsIGRlZmF1
bHRUaGlyZFBhcnR5UXVvdGEpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVTZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAg
ICBBU1NFUlQobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuY29udGFpbnMoc2Vzc2lvbklE
KSk7CisgICAgbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Npb25JRCk7
CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbihjb25zdCBG
dW5jdGlvbjx2b2lkKE5ldHdvcmtTZXNzaW9uJik+JiBmdW5jdG9yKQpAQCAtNTc2LDggKzU5MSw2
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKICNlbmRpZgogCiAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+cmVtb3ZlKHNlc3Np
b25JRCk7Ci0KLSAgICBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLnJlbW92ZShzZXNzaW9uSUQpOwog
fQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTE0NjgsOSArMTQ4
MSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMu
Y29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQuaXNFcGhl
bWVyYWwoKSkKICAgICAgICAgY2xlYXJEaXNrQ2FjaGUobW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFz
a3NIYW5kbGVyID0gV1RGTW92ZShjbGVhclRhc2tzSGFuZGxlcildIHsgfSk7CiAKLSAgICBpZiAo
d2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFi
YXNlcykgfHwgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRPTUNh
Y2hlKSkKLSAgICAgICAgY2xlYXJTdG9yYWdlUXVvdGEoc2Vzc2lvbklEKTsKLQogICAgIGlmICh3
ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6QWRDbGlja0F0dHJpYnV0
aW9ucykpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29y
a1Nlc3Npb24oc2Vzc2lvbklEKSkKICAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5jbGVhckFk
Q2xpY2tBdHRyaWJ1dGlvbigpOwpAQCAtMTU2MywxOSArMTU3Myw2IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIE9wdGlvCiAgICAgICAgIH0KICAgICAgICAgV2ViQ29yZTo6Q3JlZGVudGlhbFN0b3JhZ2U6
OnJlbW92ZVNlc3Npb25DcmVkZW50aWFsc1dpdGhPcmlnaW5zKG9yaWdpbkRhdGFzKTsKICAgICB9
Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHN0b3JhZ2UgcXVvdGEgY2xlYXJpbmcgZm9yIHRo
ZXNlIG9yaWdpbnMuCi19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyU3RvcmFnZVF1b3Rh
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKLXsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9zdG9y
YWdlUXVvdGFNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7Ci0gICAgaWYgKGl0ZXJhdG9yID09IG1f
c3RvcmFnZVF1b3RhTWFuYWdlcnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8m
IG1hbmFnZXJzID0gaXRlcmF0b3ItPnZhbHVlOwotICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1h
bmFnZXJzLm1hbmFnZXJzUGVyT3JpZ2luKCkpCi0gICAgICAgIG1hbmFnZXIudmFsdWUtPnJlc2V0
UXVvdGEobWFuYWdlcnMuZGVmYXVsdFF1b3RhKG1hbmFnZXIua2V5KSk7CiB9CiAKICNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjIxNywxMCArMjIxNCwxMCBAQCBSZWY8
SURCU2VydmVyOjpJREJTZXJ2ZXI+IE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVJREJTZXJ2ZXIoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbgogICAgICAgICBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhzLmdl
dChzZXNzaW9uSUQpOwogICAgIH0KIAotICAgIHJldHVybiBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6
Y3JlYXRlKHNlc3Npb25JRCwgcGF0aCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhp
cyldKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgYXV0byYgb3JpZ2luKSAtPiBTdG9y
YWdlUXVvdGFNYW5hZ2VyKiB7CisgICAgcmV0dXJuIElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVh
dGUoc2Vzc2lvbklELCBwYXRoLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwg
c2Vzc2lvbklEXShjb25zdCBhdXRvJiBvcmlnaW4pIC0+IFJlZlB0cjxTdG9yYWdlUXVvdGFNYW5h
Z2VyPiB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgcmV0dXJuICZ0aGlzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwg
b3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBv
cmlnaW4pOwogICAgIH0pOwogfQogCkBAIC0yMzA5LDYgKzIzMDYsMTUgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6YWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIFN0cmluZyYKICAgICAgICAgICAgIHBvc3RTdG9yYWdlVGFzayhjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0cywgaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5KSk7CiAgICAgfQogfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBpZGJSb290UGF0aCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIGF1dG8qIHNlc3Npb25T
dG9yYWdlUXVvdGFNYW5hZ2VyID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZ2V0KHNl
c3Npb25JRCk7CisgICAgQVNTRVJUKHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKTsKKyAgICBz
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+c2V0SURCUm9vdFBhdGgoaWRiUm9vdFBhdGgpOwor
fQorCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKIHZvaWQgTmV0d29ya1By
b2Nlc3M6OnN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQpAQCAtMjMyNSw5ICsyMzMxLDE0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKCkKIAogdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAgICBhdXRv
JiBtYW5hZ2VyID0gc3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbik7Ci0gICAg
bWFuYWdlci5yZXNldFF1b3RhKG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuZmluZChzZXNzaW9uSUQp
LT52YWx1ZS5kZWZhdWx0UXVvdGEob3JpZ2luKSk7Ci0gICAgbWFuYWdlci51cGRhdGVRdW90YUJh
c2VkT25TcGFjZVVzYWdlKCk7CisgICAgYXV0byBzdG9yYWdlUXVvdGFNYW5hZ2VyID0gdGhpcy0+
c3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbik7CisgICAgc3RvcmFnZVF1b3Rh
TWFuYWdlci0+cmVzZXRRdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UoKTsKK30KKwordm9pZCBOZXR3
b3JrUHJvY2Vzczo6cmVzZXRRdW90YSgpCit7CisgICAgZm9yIChhdXRvJiBzdG9yYWdlUXVvdGFN
YW5hZ2VyIDogZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2VycygpKQorICAgICAgICBzdG9yYWdl
UXVvdGFNYW5hZ2VyLT5yZXNldFF1b3RhKCk7CiB9CiAKICNpZiBFTkFCTEUoU0FOREJPWF9FWFRF
TlNJT05TKQpAQCAtMjQwNCw2MiArMjQxNSw0OCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXF1
ZXN0U3RvcmFnZVNwYWNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50Twog
ICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3NQcm94eTo6UmVxdWVzdFN0b3JhZ2VTcGFjZSB7IHNlc3Npb25JRCwg
b3JpZ2luLCBxdW90YSwgY3VycmVudFNpemUsIHNwYWNlUmVxdWlyZWQgfSwgV1RGTW92ZShjYWxs
YmFjayksIDApOwogfQogCi1jbGFzcyBRdW90YVVzZXJJbml0aWFsaXplciBmaW5hbCA6IHB1Ymxp
YyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBRdW90YVVzZXJJbml0aWFsaXplcihTdG9yYWdlUXVv
dGFNYW5hZ2VyJiBtYW5hZ2VyKQotICAgICAgICA6IG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5h
Z2VyKSkKLSAgICB7Ci0gICAgICAgIG1hbmFnZXIuYWRkVXNlcigqdGhpcyk7Ci0gICAgfQotCi0g
ICAgflF1b3RhVXNlckluaXRpYWxpemVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX21hbmFnZXIp
Ci0gICAgICAgICAgICBtX21hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgICAgICBpZiAo
bV9jYWxsYmFjaykKLSAgICAgICAgICAgIG1fY2FsbGJhY2soKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgLy8gU3RvcmFnZVF1b3RhVXNlciBBUEkuCi0gICAgdWludDY0X3Qgc3BhY2VVc2VkKCkg
Y29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9CitSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gTmV0d29ya1By
b2Nlc3M6OnN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIGF1dG8qIHNlc3Npb25TdG9yYWdlUXVv
dGFNYW5hZ2VyID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7
CisgICAgaWYgKCFzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY2FsbGJhY2spIGZpbmFsCi0gICAgewotICAgICAgICBtX2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayk7Ci0gICAgfQorICAgIFN0cmluZyBpZGJSb290UGF0aDsKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKyAgICBpZGJSb290UGF0aCA9IHNlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2VyLT5pZGJSb290UGF0aCgpOworI2VuZGlmCisgICAgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
VXNhZ2VHZXR0ZXIgdXNhZ2VHZXR0ZXIgPSBbY2FjaGVSb290UGF0aCA9IHNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VyLT5jYWNoZVJvb3RQYXRoKCksIGlkYlJvb3RQYXRoLCBvcmlnaW5dKCkgewor
ICAgICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsgICAgCiAKLSAgICBXZWFrUHRyPFN0b3Jh
Z2VRdW90YU1hbmFnZXI+IG1fbWFuYWdlcjsKLSAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
IG1fY2FsbGJhY2s7Ci19OworICAgICAgICB1aW50NjRfdCB1c2FnZSA9IDA7CisgICAgICAgIHVz
YWdlICs9IENhY2hlU3RvcmFnZTo6RW5naW5lOjpkaXNrVXNhZ2UoY2FjaGVSb290UGF0aCwgb3Jp
Z2luKTsKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICAgICAgdXNhZ2UgKz0gSURC
U2VydmVyOjpJREJTZXJ2ZXI6OmRpc2tVc2FnZShpZGJSb290UGF0aCwgb3JpZ2luKTsKKyNlbmRp
ZgogCi12b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplUXVvdGFVc2VycyhTdG9yYWdlUXVv
dGFNYW5hZ2VyJiBtYW5hZ2VyLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENsaWVu
dE9yaWdpbiYgb3JpZ2luKQotewotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywg
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBvcmlnaW4sIHVzZXIgPSBt
YWtlVW5pcXVlPFF1b3RhVXNlckluaXRpYWxpemVyPihtYW5hZ2VyKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgcmV0dXJuIHVzYWdlOworICAgIH07CisgICAgU3RvcmFnZVF1b3RhTWFuYWdlcjo6UXVv
dGFJbmNyZWFzZVJlcXVlc3RlciBxdW90YUluY3JlYXNlUmVxdWVzdGVyID0gW3RoaXMsIHdlYWtU
aGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzZXNzaW9uSUQsIG9yaWdpbl0gKHVpbnQ2NF90IGN1
cnJlbnRRdW90YSwgdWludDY0X3QgY3VycmVudFNwYWNlLCB1aW50NjRfdCByZXF1ZXN0ZWRJbmNy
ZWFzZSwgYXV0byYmIGNhbGxiYWNrKSB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRo
aXMtPmlkYlNlcnZlcihzZXNzaW9uSUQpLmluaXRpYWxpemVRdW90YVVzZXIob3JpZ2luKTsKLSAg
ICAgICAgQ2FjaGVTdG9yYWdlOjpFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIoKnRoaXMsIHNl
c3Npb25JRCwgb3JpZ2luLCBbdXNlciA9IFdURk1vdmUodXNlcildIHsgfSk7Ci0gICAgfSk7Cisg
ICAgICAgICAgICBjYWxsYmFjayh7IH0pOworICAgICAgICByZXF1ZXN0U3RvcmFnZVNwYWNlKHNl
c3Npb25JRCwgb3JpZ2luLCBjdXJyZW50UXVvdGEsIGN1cnJlbnRTcGFjZSwgcmVxdWVzdGVkSW5j
cmVhc2UsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICB9OworCisgICAgcmV0dXJuIHNlc3Npb25T
dG9yYWdlUXVvdGFNYW5hZ2VyLT5lbnN1cmVPcmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2VyKG9yaWdp
biwgc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPmRlZmF1bHRRdW90YShvcmlnaW4pLCBXVEZN
b3ZlKHVzYWdlR2V0dGVyKSwgV1RGTW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKSk7CiB9CiAK
LVN0b3JhZ2VRdW90YU1hbmFnZXImIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2Vy
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCitW
ZWN0b3I8UmVmUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+PiBOZXR3b3JrUHJvY2Vzczo6ZXhpc3Rp
bmdTdG9yYWdlUXVvdGFNYW5hZ2VycygpCiB7Ci0gICAgYXV0byYgc3RvcmFnZVF1b3RhTWFuYWdl
cnMgPSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmVuc3VyZShzZXNzaW9uSUQsIFtdIHsKLSAgICAg
ICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsgfTsKLSAgICB9KS5pdGVyYXRvci0+dmFs
dWU7Ci0gICAgcmV0dXJuICpzdG9yYWdlUXVvdGFNYW5hZ2Vycy5tYW5hZ2Vyc1Blck9yaWdpbigp
LmVuc3VyZShvcmlnaW4sIFt0aGlzLCAmc3RvcmFnZVF1b3RhTWFuYWdlcnMsIHNlc3Npb25JRCwg
Jm9yaWdpbl0gewotICAgICAgICBhdXRvIG1hbmFnZXIgPSBtYWtlVW5pcXVlPFN0b3JhZ2VRdW90
YU1hbmFnZXI+KHN0b3JhZ2VRdW90YU1hbmFnZXJzLmRlZmF1bHRRdW90YShvcmlnaW4pLCBbdGhp
cywgc2Vzc2lvbklELCBvcmlnaW5dKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3Bh
Y2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKLSAgICAgICAgICAg
IHRoaXMtPnJlcXVlc3RTdG9yYWdlU3BhY2Uoc2Vzc2lvbklELCBvcmlnaW4sIHF1b3RhLCBjdXJy
ZW50U3BhY2UsIHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICAgICAgfSk7
Ci0gICAgICAgIGluaXRpYWxpemVRdW90YVVzZXJzKCptYW5hZ2VyLCBzZXNzaW9uSUQsIG9yaWdp
bik7Ci0gICAgICAgIHJldHVybiBtYW5hZ2VyOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOwor
ICAgIFZlY3RvcjxSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4+IHJlc3VsdDsKKworICAgIGZv
ciAoYXV0byYgc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgOiBtX3Nlc3Npb25TdG9yYWdlUXVv
dGFNYW5hZ2Vycy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8gc3RvcmFnZVF1b3RhTWFu
YWdlciA6IHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5leGlzdGluZ1N0b3JhZ2VRdW90YU1h
bmFnZXJzKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0b3JhZ2VRdW90YU1hbmFnZXIp
OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IGY2
MmYwMWQzODBmNDAxMDU1MmFhZDM4ODlhNDk3ZDUxMjZmOGEzNTMuLmRiMTkwMmEwOTVjYzJjMWE1
MzVlODFlMTQzZmViNDFmNzRmOWYyYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTI4NCw2ICsyODQsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpOwogCiAgICAgdm9pZCB1
cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgY29u
c3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgdm9pZCByZXNldFF1b3RhKCk7CiAKICNp
ZiBFTkFCTEUoU0FOREJPWF9FWFRFTlNJT05TKQogICAgIHZvaWQgZ2V0U2FuZGJveEV4dGVuc2lv
bnNGb3JCbG9iRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYmKT4mJik7CkBAIC0z
MjcsNyArMzI4LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29u
dmVyc2lvblVSTEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQsIFVSTCYmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgbWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGly
ZWRGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OwogCi0gICAgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYgc3RvcmFnZVF1b3RhTWFuYWdl
cihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgUmVm
UHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIoUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIFZlY3RvcjxS
ZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+IGV4aXN0aW5nU3RvcmFnZVF1b3Rh
TWFuYWdlcnMoKTsKIAogICAgIHZvaWQgYWRkS2VwdEFsaXZlTG9hZChSZWY8TmV0d29ya1Jlc291
cmNlTG9hZGVyPiYmKTsKICAgICB2b2lkIHJlbW92ZUtlcHRBbGl2ZUxvYWQoTmV0d29ya1Jlc291
cmNlTG9hZGVyJik7CkBAIC00NDIsNiArNDQ0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbGxl
Y3RJbmRleGVkRGF0YWJhc2VPcmlnaW5zRm9yVmVyc2lvbihjb25zdCBTdHJpbmcmLCBIYXNoU2V0
PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKICAgICBIYXNoU2V0PFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luRGF0YT4gaW5kZXhlZERhdGFiYXNlT3JpZ2lucyhjb25zdCBTdHJpbmcmIHBh
dGgpOwogICAgIFJlZjxXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcj4gY3JlYXRlSURCU2Vy
dmVyKFBBTDo6U2Vzc2lvbklEKTsKKyAgICB2b2lkIHNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VySURCUm9vdFBhdGgoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgaWRiUm9vdFBhdGgp
OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC00NjEsOCArNDY0LDQ0
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwZXJmb3JtTmV4dFN0b3JhZ2VUYXNrKCk7CiAgICAgdm9p
ZCBlbnN1cmVQYXRoRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKLSAgICB2b2lkIGNsZWFy
U3RvcmFnZVF1b3RhKFBBTDo6U2Vzc2lvbklEKTsKLSAgICB2b2lkIGluaXRpYWxpemVTdG9yYWdl
UXVvdGEoY29uc3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmKTsKKyAgICBjbGFzcyBTZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlciB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworICAgIHB1YmxpYzoKKyAgICAgICAgU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoY29uc3Qg
U3RyaW5nJiBjYWNoZVJvb3RQYXRoLCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRl
ZmF1bHRUaGlyZFBhcnR5UXVvdGEpCisgICAgICAgICAgICA6IG1fY2FjaGVSb290UGF0aChjYWNo
ZVJvb3RQYXRoKQorICAgICAgICAgICAgLCBtX2RlZmF1bHRRdW90YShkZWZhdWx0UXVvdGEpCisg
ICAgICAgICAgICAsIG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YShkZWZhdWx0VGhpcmRQYXJ0eVF1
b3RhKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdWludDY0X3QgZGVmYXVsdFF1b3Rh
KGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKSBjb25zdCB7IHJldHVybiBvcmln
aW4udG9wT3JpZ2luID09IG9yaWdpbi5jbGllbnRPcmlnaW4gPyBtX2RlZmF1bHRRdW90YSA6IG1f
ZGVmYXVsdFRoaXJkUGFydHlRdW90YTsgfQorCisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyPiBlbnN1cmVPcmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2VyKFdlYkNvcmU6
OkNsaWVudE9yaWdpbiBvcmlnaW4sIHVpbnQ2NF90IHF1b3RhLCBXZWJDb3JlOjpTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpVc2FnZUdldHRlciYmIHVzYWdlR2V0dGVyLCBXZWJDb3JlOjpTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3Rl
cikKKyAgICAgICAgeworICAgICAgICAgICAgYXV0b1tpdGVyLCBpc05ld0VudHJ5XSA9IG1fc3Rv
cmFnZVF1b3RhTWFuYWdlcnMuYWRkKG9yaWdpbiwgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAo
aXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICBpdGVyLT52YWx1ZSA9IFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXI6OmNyZWF0ZShxdW90YSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdURk1v
dmUocXVvdGFJbmNyZWFzZVJlcXVlc3RlcikpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VSZWZQ
dHIoKml0ZXItPnZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gZXhpc3RpbmdTdG9y
YWdlUXVvdGFNYW5hZ2VycygpIHsgcmV0dXJuIG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMudmFsdWVz
KCk7IH0KKworICAgICAgICBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgoKSBjb25zdCB7IHJl
dHVybiBtX2NhY2hlUm9vdFBhdGg7IH0KKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAg
ICAgICAgdm9pZCBzZXRJREJSb290UGF0aChjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKSB7IG1f
aWRiUm9vdFBhdGggPSBpZGJSb290UGF0aDsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIGlkYlJv
b3RQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9pZGJSb290UGF0aDsgfQorI2VuZGlmCisKKyAgICBw
cml2YXRlOgorICAgICAgICBTdHJpbmcgbV9jYWNoZVJvb3RQYXRoOworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorICAgICAgICBTdHJpbmcgbV9pZGJSb290UGF0aDsKKyNlbmRpZgorICAg
ICAgICB1aW50NjRfdCBtX2RlZmF1bHRRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OmRlZmF1bHRRdW90YSgpIH07CisgICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFRoaXJkUGFy
dHlRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRUaGlyZFBhcnR5
UXVvdGEoKSB9OworICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdpbiwgUmVmUHRy
PFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzOwor
ICAgIH07CisgICAgdm9pZCBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Np
b25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1
b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQpOwogCiAgICAgLy8gQ29ubmVjdGlv
bnMgdG8gV2ViUHJvY2Vzc2VzLgogICAgIEhhc2hNYXA8V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZp
ZXIsIFJlZjxOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4+IG1fd2ViUHJvY2Vzc0Nvbm5l
Y3Rpb25zOwpAQCAtNTMzLDIzICs1NzIsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0lUUERh
dGFiYXNlRW5hYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKICAgICAKLSAgICBjbGFzcyBTdG9yYWdl
UXVvdGFNYW5hZ2VycyB7Ci0gICAgcHVibGljOgotICAgICAgICB1aW50NjRfdCBkZWZhdWx0UXVv
dGEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pIGNvbnN0IHsgcmV0dXJuIG9y
aWdpbi50b3BPcmlnaW4gPT0gb3JpZ2luLmNsaWVudE9yaWdpbiA/IG1fZGVmYXVsdFF1b3RhIDog
bV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhOyB9Ci0gICAgICAgIHZvaWQgc2V0RGVmYXVsdFF1b3Rh
cyh1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZGVmYXVsdFF1b3RhID0gZGVmYXVsdFF1b3RhOwot
ICAgICAgICAgICAgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhID0gZGVmYXVsdFRoaXJkUGFydHlR
dW90YTsKLSAgICAgICAgfQotCi0gICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2lu
LCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+JiBtYW5hZ2Vy
c1Blck9yaWdpbigpIHsgcmV0dXJuIG1fbWFuYWdlcnNQZXJPcmlnaW47IH0KLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCkgfTsKLSAgICAgICAgdWludDY0X3QgbV9kZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRo
aXJkUGFydHlRdW90YSgpIH07Ci0gICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2lu
LCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fbWFuYWdl
cnNQZXJPcmlnaW47Ci0gICAgfTsKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBTdG9yYWdl
UXVvdGFNYW5hZ2Vycz4gbV9zdG9yYWdlUXVvdGFNYW5hZ2VyczsKKyAgICBMb2NrIG1fc2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jazsKKyAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBz
dGQ6OnVuaXF1ZV9wdHI8U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3Nlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyczsKIAogICAgIE9wdGlvblNldDxOZXR3b3JrQ2FjaGU6OkNhY2hlT3B0
aW9uPiBtX2NhY2hlT3B0aW9uczsKICAgICBXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxSZWdp
c3RyeSBtX21lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggMzY3
NzY3NzQ4MGI4MmE0NDMzZjg1ZDI4MmIzZTVmYjgwNmE5MWU2My4uNThmZTVjOWY2MDE4MzZhZWY1
NjhkOWIzOTc4NTJhOTQxZWM1MjAzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0xNTIsNiArMTUyLDcg
QEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogICAgIENsZWFy
TGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKCkKIAogICAgIFVwZGF0ZVF1b3RhQmFz
ZWRPblNwYWNlVXNhZ2VGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgc3RydWN0
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4pCisgICAgUmVzZXRRdW90YSgpCiAKICAgICBT
dG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYkNvcmU6
OkFkQ2xpY2tBdHRyaWJ1dGlvbiBhZENsaWNrQXR0cmlidXRpb24pCiAgICAgRHVtcEFkQ2xpY2tB
dHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChTdHJpbmcgYWRDbGlja0F0
dHJpYnV0aW9uU3RhdGUpIEFzeW5jCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKaW5kZXggYWMxMjk0ZTMxOWJm
M2UwMGQwZmJhYWRiZGI1ZGQ4NTA1NjZjZTQyNS4uYWQxOWRiMGVhODAzYjk2YmVjNzJmZGJiMWEz
MjgxYmVhYzk4NDIzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcApAQCAtNDYsNiArNDYsOCBAQCBuYW1l
c3BhY2UgQ2FjaGVTdG9yYWdlIHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpET01DYWNoZUVu
Z2luZTsKIHVzaW5nIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGU7CiAKK3N0YXRpYyBMb2NrIGdsb2Jh
bFNpemVmaWxlTG9jazsKKwogU3RyaW5nIEVuZ2luZTo6Y2FjaGVzUm9vdFBhdGgoY29uc3QgV2Vi
Q29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7CiAgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkg
fHwgIW1fc2FsdCkKQEAgLTE5MCwxMyArMTkyLDY1IEBAIHZvaWQgRW5naW5lOjpjbGVhckNhY2hl
c0Zvck9yaWdpbihOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIFBBTDo6U2Vzc2lvbklE
CiAgICAgfSk7CiB9CiAKLXZvaWQgRW5naW5lOjppbml0aWFsaXplUXVvdGFVc2VyKE5ldHdvcmtQ
cm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIGNsaWVudE9yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorc3RhdGljIHVpbnQ2NF90IGdldERpcmVjdG9yeVNp
emUoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoKQogewotICAgIGZyb20obmV0d29ya1Byb2Nl
c3MsIHNlc3Npb25JRCwgW2NsaWVudE9yaWdpbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYgZW5naW5lKSBtdXRhYmxlIHsKLSAgICAgICAgZW5n
aW5lLnJlYWRDYWNoZXNGcm9tRGlzayhjbGllbnRPcmlnaW4sIFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgY2FjaGVzT3JFcnJvcikgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICB9
KTsKKyAgICB1aW50NjRfdCBkaXJlY3RvcnlTaXplID0gMDsKKyAgICBEZXF1ZTxTdHJpbmc+IHBh
dGhzOworICAgIHBhdGhzLmFwcGVuZChkaXJlY3RvcnlQYXRoKTsKKyAgICB3aGlsZSAoIXBhdGhz
LmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIHBhdGggPSBwYXRocy50YWtlRmlyc3QoKTsKKyAg
ICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShwYXRoLCBGaWxlU3lzdGVtOjpT
aG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpIHsKKyAgICAgICAgICAgIGF1dG8gbmV3UGF0
aHMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgsICIqIl9zKTsKKyAgICAgICAgICAg
IGZvciAoYXV0byYgbmV3UGF0aCA6IG5ld1BhdGhzKSB7CisgICAgICAgICAgICAgICAgLy8gRmls
ZXMgaW4gQmxvYnMgZGlyZWN0b3J5IGFyZSBoYXJkIGxpbmsuCisgICAgICAgICAgICAgICAgYXV0
byBmaWxlTmFtZSA9IEZpbGVTeXN0ZW06Omxhc3RDb21wb25lbnRPZlBhdGhJZ25vcmluZ1RyYWls
aW5nU2xhc2gobmV3UGF0aCk7CisgICAgICAgICAgICAgICAgaWYgKGZpbGVOYW1lID09ICJCbG9i
cyIpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHBhdGhz
LmFwcGVuZChuZXdQYXRoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKKyAgICAgICAgRmls
ZVN5c3RlbTo6Z2V0RmlsZVNpemUocGF0aCwgZmlsZVNpemUpOworICAgICAgICBkaXJlY3RvcnlT
aXplICs9IGZpbGVTaXplOworICAgIH0KKyAgICByZXR1cm4gZGlyZWN0b3J5U2l6ZTsKK30KKwor
dWludDY0X3QgRW5naW5lOjpkaXNrVXNhZ2UoY29uc3QgU3RyaW5nJiByb290UGF0aCwgY29uc3Qg
V2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CisgICAgaWYgKHJvb3RQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBTdHJpbmcgc2FsdFBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQocm9vdFBhdGgsICJzYWx0Il9zKTsKKyAgICBhdXRvIHNhbHQgPSByZWFkT3JNYWtlU2FsdChz
YWx0UGF0aCk7CisgICAgaWYgKCFzYWx0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIE9y
IHRyYXZlcnNlIGFsbCBkaXJlY3RvcnkKKyAgICBLZXkga2V5KG9yaWdpbi50b3BPcmlnaW4udG9T
dHJpbmcoKSwgb3JpZ2luLmNsaWVudE9yaWdpbi50b1N0cmluZygpLCB7IH0sIHsgfSwgKnNhbHQp
OworICAgIFN0cmluZyBkaXJlY3RvcnlQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KHJvb3RQYXRoLCBrZXkuaGFzaEFzU3RyaW5nKCkpOworCisgICAgLy8gUmVhZCBz
aXplZXN0aW1hdGUgZmlsZQorICAgIFN0cmluZyBzaXplRmlsZVBhdGggPSBDYWNoZXM6OmNhY2hl
c1NpemVGaWxlbmFtZShkaXJlY3RvcnlQYXRoKTsKKyAgICBpZiAoYXV0byByZWNvcmRlZFNpemUg
PSByZWFkU2l6ZUZpbGUoc2l6ZUZpbGVQYXRoKSkKKyAgICAgICAgcmV0dXJuICpyZWNvcmRlZFNp
emU7CisKKyAgICByZXR1cm4gZ2V0RGlyZWN0b3J5U2l6ZShkaXJlY3RvcnlQYXRoKTsKK30KKwor
dm9pZCBFbmdpbmU6OnJlcXVlc3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWlu
dDY0X3Qgc3BhY2VSZXF1ZXN0ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmIGNhbGxiYWNrKQoreworICAgIGlmICghbV9u
ZXR3b3JrUHJvY2VzcykKKyAgICAgICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFu
YWdlcjo6RGVjaXNpb246OkRlbnkpOworCisgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIgPSBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdl
UXVvdGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmlnaW4pOworICAgIGlmICghc3RvcmFnZVF1b3Rh
TWFuYWdlcikKKyAgICAgICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6
RGVjaXNpb246OkRlbnkpOworCisgICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNl
T25NYWluVGhyZWFkKHNwYWNlUmVxdWVzdGVkLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIEVu
Z2luZTo6RW5naW5lKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgTmV0d29ya1Byb2Nlc3MmIHBy
b2Nlc3MsIFN0cmluZyYmIHJvb3RQYXRoKQpAQCAtMzMwLDcgKzM4NCw3IEBAIHZvaWQgRW5naW5l
OjpyZWFkQ2FjaGVzRnJvbURpc2soY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4s
IENhY2hlc0NhbGxiCiAKICAgICAgICAgYXV0byYgY2FjaGVzID0gbV9jYWNoZXMuZW5zdXJlKG9y
aWdpbiwgWyZvcmlnaW4sIHRoaXNdIHsKICAgICAgICAgICAgIGF1dG8gcGF0aCA9IGNhY2hlc1Jv
b3RQYXRoKG9yaWdpbik7Ci0gICAgICAgICAgICByZXR1cm4gQ2FjaGVzOjpjcmVhdGUoKnRoaXMs
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IG9yaWdpbiB9LCBXVEZNb3ZlKHBhdGgpLCBtX25ldHdv
cmtQcm9jZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmlnaW4pKTsKKyAg
ICAgICAgICAgIHJldHVybiBDYWNoZXM6OmNyZWF0ZSgqdGhpcywgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luIHsgb3JpZ2luIH0sIFdURk1vdmUocGF0aCkpOwogICAgICAgICB9KS5pdGVyYXRvci0+dmFs
dWU7CiAKICAgICAgICAgaWYgKGNhY2hlcy0+aXNJbml0aWFsaXplZCgpKSB7CkBAIC00NjgsMTYg
KzUyMiwxNiBAQCB2b2lkIEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgs
IHVpbnQ2NF90IHNpemUpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faW9RdWV1ZS0+ZGlzcGF0
Y2goW3BhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpLCBzaXplXSgpIHsKLSAgICAgICAgYXV0byBm
aWxlSGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkFuZExvY2tGaWxlKHBhdGgsIEZpbGVTeXN0ZW06
OkZpbGVPcGVuTW9kZTo6V3JpdGUsIHsgRmlsZVN5c3RlbTo6RmlsZUxvY2tNb2RlOjpFeGNsdXNp
dmUgfSk7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFNpemVmaWxlTG9jayk7Cisg
ICAgICAgIGF1dG8gZmlsZUhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVT
eXN0ZW06OkZpbGVPcGVuTW9kZTo6V3JpdGUpOwogICAgICAgICBhdXRvIGNsb3NlRmlsZUhhbmRs
ZSA9IG1ha2VTY29wZUV4aXQoWyZdIHsKLSAgICAgICAgICAgIEZpbGVTeXN0ZW06OnVubG9ja0Fu
ZENsb3NlRmlsZShmaWxlSGFuZGxlKTsKKyAgICAgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmls
ZShmaWxlSGFuZGxlKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgaWYgKCFGaWxlU3lzdGVtOjpp
c0hhbmRsZVZhbGlkKGZpbGVIYW5kbGUpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IEZpbGVTeXN0ZW06OnRydW5jYXRlRmlsZShmaWxlSGFuZGxlLCAwKTsKLQogICAgICAgICBGaWxl
U3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlSGFuZGxlLCBTdHJpbmc6Om51bWJlcihzaXplKS51dGY4
KCkuZGF0YSgpLCBTdHJpbmc6Om51bWJlcihzaXplKS51dGY4KCkubGVuZ3RoKCkpOwogICAgIH0p
OwogfQpAQCAtNDg1LDExICs1MzksMTEgQEAgdm9pZCBFbmdpbmU6OndyaXRlU2l6ZUZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCBzaXplKQogT3B0aW9uYWw8dWludDY0X3Q+IEVuZ2lu
ZTo6cmVhZFNpemVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhwYXRoKSk7
CiAKLSAgICBhdXRvIGZpbGVIYW5kbGUgPSBGaWxlU3lzdGVtOjpvcGVuQW5kTG9ja0ZpbGUocGF0
aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkLCB7IEZpbGVTeXN0ZW06OkZpbGVMb2Nr
TW9kZTo6RXhjbHVzaXZlIH0pOworICAgIExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFNpemVmaWxl
TG9jayk7CisgICAgYXV0byBmaWxlSGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwg
RmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpSZWFkKTsKICAgICBhdXRvIGNsb3NlRmlsZUhhbmRs
ZSA9IG1ha2VTY29wZUV4aXQoWyZdIHsKLSAgICAgICAgRmlsZVN5c3RlbTo6dW5sb2NrQW5kQ2xv
c2VGaWxlKGZpbGVIYW5kbGUpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZmlsZUhh
bmRsZSk7CiAgICAgfSk7CiAKICAgICBpZiAoIUZpbGVTeXN0ZW06OmlzSGFuZGxlVmFsaWQoZmls
ZUhhbmRsZSkpCkBAIC02MTUsNiArNjY5LDcgQEAgdm9pZCBFbmdpbmU6OmNsZWFyQWxsQ2FjaGVz
RnJvbURpc2soQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGUKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgbV9pb1F1ZXVlLT5kaXNwYXRjaChb
cGF0aCA9IG1fcm9vdFBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKGdsb2JhbFNpemVmaWxlTG9jayk7CiAgICAgICAgIGZvciAoYXV0byYgZmlsZW5hbWUg
OiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgsICIqIikpIHsKICAgICAgICAgICAgIGlm
IChGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkoZmlsZW5hbWUsIEZpbGVTeXN0ZW06OlNob3Vs
ZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSkKICAgICAgICAgICAgICAgICBkZWxldGVEaXJlY3Rv
cnlSZWN1cnNpdmVseShmaWxlbmFtZSk7CkBAIC02NzMsOCArNzI4LDggQEAgdm9pZCBFbmdpbmU6
OmRlbGV0ZURpcmVjdG9yeVJlY3Vyc2l2ZWx5T25CYWNrZ3JvdW5kVGhyZWFkKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgQ28KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgbV9pb1F1
ZXVlLT5kaXNwYXRjaChbcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKGdsb2JhbFNpemVmaWxlTG9jayk7CiAgICAgICAgIGRlbGV0ZURpcmVj
dG9yeVJlY3Vyc2l2ZWx5KHBhdGgpOwotCiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaApp
bmRleCAzOGQ2ZmMxMzRmZTAwZDRiMDRmMzgwOGMwYmI4OTdiM2Q2MjE2NTRmLi5jYzkxZWNjMDYz
MzNmZTJlN2QxZjgwNWQ5ZTNiNmFmMGZlYjYzMTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmgKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEYXRhLmgiCiAjaW5jbHVkZSAiV2Vic2l0
ZURhdGEuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBA
IC03OSw2ICs4MCw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVRdW90
YVVzZXIoTmV0d29ya1Byb2Nlc3MmLCBQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIHN0YXRpYyB1
aW50NjRfdCBkaXNrVXNhZ2UoY29uc3QgU3RyaW5nJiByb290UGF0aCwgY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJik7CisgICAgdm9pZCByZXF1ZXN0U3BhY2UoY29uc3QgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJiwgdWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKKwogICAgIGJv
b2wgc2hvdWxkUGVyc2lzdCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pb1F1ZXVlO30KIAogICAgIHZv
aWQgd3JpdGVGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIE5ldHdvcmtDYWNoZTo6RGF0YSYm
LCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmluZGV4IGJiMGU2YmJlZDAzY2ZmZTI3ZjNiYzZjNTM3NjAz
OTE4ZDZiMWY0MjEuLjEyNjU3YzIwMDllZmFhZGE5MDBhYzZhYzhjMTE4MDNkYWY4NjFlNmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKQEAgLTUxLDQxICs1MSwyNiBAQCBzdGF0aWMg
aW5saW5lIFN0cmluZyBjYWNoZXNPcmlnaW5GaWxlbmFtZShjb25zdCBTdHJpbmcmIGNhY2hlc1Jv
b3RQYXRoKQogICAgIHJldHVybiBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
Y2FjaGVzUm9vdFBhdGgsICJvcmlnaW4iX3MpOwogfQogCi1zdGF0aWMgaW5saW5lIFN0cmluZyBj
YWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBjYWNoZXNSb290c1BhdGgpCitTdHJpbmcg
Q2FjaGVzOjpjYWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBjYWNoZXNSb290c1BhdGgp
CiB7CiAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNo
ZXNSb290c1BhdGgsICJlc3RpbWF0ZWRzaXplIl9zKTsKIH0KIAotUmVmPENhY2hlcz4gQ2FjaGVz
OjpjcmVhdGUoRW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwg
U3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXImIHF1b3RhTWFu
YWdlcikKK1JlZjxDYWNoZXM+IENhY2hlczo6Y3JlYXRlKEVuZ2luZSYgZW5naW5lLCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQYXRoKQogewotICAgIGF1dG8g
Y2FjaGVzID0gYWRvcHRSZWYoKm5ldyBDYWNoZXMgeyBlbmdpbmUsIFdURk1vdmUob3JpZ2luKSwg
V1RGTW92ZShyb290UGF0aCksIHF1b3RhTWFuYWdlciB9KTsKLSAgICBxdW90YU1hbmFnZXIuYWRk
VXNlcihjYWNoZXMuZ2V0KCkpOwotICAgIHJldHVybiBjYWNoZXM7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ2FjaGVzIHsgZW5naW5lLCBXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUocm9vdFBh
dGgpIH0pOwogfQogCi1DYWNoZXM6OkNhY2hlcyhFbmdpbmUmIGVuZ2luZSwgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlciYgcXVvdGFNYW5hZ2VyKQorQ2FjaGVzOjpDYWNoZXMoRW5naW5lJiBlbmdpbmUs
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgpCiAgICAg
OiBtX2VuZ2luZSgmZW5naW5lKQogICAgICwgbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAg
ICwgbV9yb290UGF0aChXVEZNb3ZlKHJvb3RQYXRoKSkKLSAgICAsIG1fcXVvdGFNYW5hZ2VyKG1h
a2VXZWFrUHRyKHF1b3RhTWFuYWdlcikpCiB7CiB9CiAKIENhY2hlczo6fkNhY2hlcygpCiB7CiAg
ICAgQVNTRVJUKG1fcGVuZGluZ1dyaXRpbmdDYWNoZXNUb0Rpc2tDYWxsYmFja3MuaXNFbXB0eSgp
KTsKLQotICAgIGlmIChtX3F1b3RhTWFuYWdlcikKLSAgICAgICAgbV9xdW90YU1hbmFnZXItPnJl
bW92ZVVzZXIoKnRoaXMpOwotfQotCi12b2lkIENhY2hlczo6d2hlbkluaXRpYWxpemVkKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKLXsKLSAgICBpbml0aWFsaXplKFtjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAg
ICBpZiAoZXJyb3IpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihDYWNoZVN0b3JhZ2Us
ICJDYWNoZXM6OmluaXRpYWxpemUgZmFpbGVkLCByZXBvcnRlZCBzcGFjZSB1c2VkIHdpbGwgYmUg
emVybyIpOwotICAgICAgICBjYWxsYmFjaygpOwotICAgIH0pOwogfQogCiB2b2lkIENhY2hlczo6
cmV0cmlldmVPcmlnaW5Gcm9tRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZm9sZGVyUGF0aCwgV29y
a1F1ZXVlJiBxdWV1ZSwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNv
cmU6OkNsaWVudE9yaWdpbj4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yNzMsMTMgKzI1
OCwxMSBAQCB2b2lkIENhY2hlczo6Y2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogICAgICAgICBtX3N0b3JhZ2UtPmNsZWFyKFN0cmluZyB7IH0sIC1X
YWxsVGltZTo6aW5maW5pdHkoKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
ICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5jbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5yZXNldFNwYWNlVXNlZCgpOwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2xlYXJNZW1v
cnlSZXByZXNlbnRhdGlvbigpOwotICAgIHJlc2V0U3BhY2VVc2VkKCk7CiAgICAgY2xlYXJQZW5k
aW5nV3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrcygpOwogICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CiB9CkBAIC01MjUsMTIgKzUwOCwxMiBAQCB2b2lkIENhY2hlczo6cmVhZFJlY29yZHNMaXN0
KENhY2hlJiBjYWNoZSwgTmV0d29ya0NhY2hlOjpTdG9yYWdlOjpUcmF2ZXJzZUhhbmRsZQogCiB2
b2lkIENhY2hlczo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlUmVxdWlyZWQsIFdlYkNvcmU6
OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBp
ZiAoIW1fcXVvdGFNYW5hZ2VyKSB7CisgICAgaWYgKCFtX2VuZ2luZSkgewogICAgICAgICBjYWxs
YmFjayhFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX3F1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHNwYWNlUmVxdWlyZWQsIFtjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKKyAgICBtX2VuZ2lu
ZS0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCBzcGFjZVJlcXVpcmVkLCBbY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CiAgICAgICAgIHN3aXRjaCAo
ZGVjaXNpb24pIHsKICAgICAgICAgY2FzZSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6RGVueToKICAgICAgICAgICAgIGNhbGxiYWNrKEVycm9yOjpRdW90YUV4Y2VlZGVk
KTsKQEAgLTYyMSwxNyArNjA0LDYgQEAgdm9pZCBDYWNoZXM6OnJlbW92ZUNhY2hlRW50cnkoY29u
c3QgTmV0d29ya0NhY2hlOjpLZXkmIGtleSkKICAgICBtX3N0b3JhZ2UtPnJlbW92ZShrZXkpOwog
fQogCi12b2lkIENhY2hlczo6cmVzZXRTcGFjZVVzZWQoKQotewotICAgIG1fc2l6ZSA9IDA7Ci0g
ICAgdXBkYXRlU2l6ZUZpbGUoKTsKLQotICAgIGlmIChtX3F1b3RhTWFuYWdlcikgewotICAgICAg
ICBtX3F1b3RhTWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci0gICAgICAgIG1fcXVvdGFNYW5h
Z2VyLT5hZGRVc2VyKCp0aGlzKTsKLSAgICB9Ci19Ci0KIHZvaWQgQ2FjaGVzOjpjbGVhck1lbW9y
eVJlcHJlc2VudGF0aW9uKCkKIHsKICAgICBpZiAoIW1faXNJbml0aWFsaXplZCkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGVzLmgKaW5kZXggNTVhOWVlZWZlOTU5NTIzZmI5YzI2NGYxYTJmZjQxYjA3
MGJjNTkyNi4uNjgzMmI1YzgxODU2OTY4NTVlM2E5MTUyY2VlZDc4YTllNGQyNjNlMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZUNhY2hlcy5oCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGUuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3Jh
Z2VRdW90YVVzZXIuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNs
dWRlIDx3dGYvRGVxdWUuaD4KIApAQCAtNDIsOSArNDEsMTAgQEAgbmFtZXNwYWNlIENhY2hlU3Rv
cmFnZSB7CiAKIGNsYXNzIEVuZ2luZTsKIAotY2xhc3MgQ2FjaGVzIGZpbmFsIDogcHVibGljIFJl
ZkNvdW50ZWQ8Q2FjaGVzPiwgcHJpdmF0ZSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyIHsKK2Ns
YXNzIENhY2hlcyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENhY2hlcz4gewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8Q2FjaGVzPiBjcmVhdGUoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luJiYsIFN0cmluZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJik7
CisgICAgc3RhdGljIFN0cmluZyBjYWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBjYWNo
ZXNSb290c1BhdGgpOworICAgIHN0YXRpYyBSZWY8Q2FjaGVzPiBjcmVhdGUoRW5naW5lJiwgV2Vi
Q29yZTo6Q2xpZW50T3JpZ2luJiYsIFN0cmluZyYmIHJvb3RQYXRoKTsKICAgICB+Q2FjaGVzKCk7
CiAKICAgICBzdGF0aWMgdm9pZCByZXRyaWV2ZU9yaWdpbkZyb21EaXJlY3RvcnkoY29uc3QgU3Ry
aW5nJiBmb2xkZXJQYXRoLCBXb3JrUXVldWUmLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQo
T3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiYmKT4mJik7CkBAIC03OCwyMiArNzgsMTYg
QEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcihXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CiAgICAgdm9pZCBjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgdm9pZCBy
ZXNldFNwYWNlVXNlZCgpOwogCiAgICAgdWludDY0X3Qgc3RvcmFnZVNpemUoKSBjb25zdDsKIAog
cHJpdmF0ZToKLSAgICBDYWNoZXMoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYsIFN0
cmluZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJik7Ci0KLSAgICAv
LyBTdG9yYWdlUXVvdGFVc2VyIEFQSS4KLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBDYWNoZXMoRW5naW5lJiwgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJiYsIFN0cmluZyYmIHJvb3RQYXRoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVNp
emUoKTsKICAgICB2b2lkIHJlYWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZvaWQoRXhw
ZWN0ZWQ8VmVjdG9yPENhY2hlPiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4m
Jik7CiAgICAgdm9pZCB3cml0ZUNhY2hlc1RvRGlzayhXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6
Q29tcGxldGlvbkNhbGxiYWNrJiYpOwogCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKLQogICAgIHZvaWQgc3RvcmVPcmlnaW4oV2Vi
Q29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKICAgICBzdGF0aWMg
T3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiByZWFkT3JpZ2luKGNvbnN0IE5ldHdvcmtD
YWNoZTo6RGF0YSYpOwogCkBAIC0xMjEsNyArMTE1LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8
V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjaz4gbV9wZW5kaW5nSW5p
dGlhbGl6YXRpb25DYWxsYmFja3M7CiAgICAgYm9vbCBtX2lzV3JpdGluZ0NhY2hlc1RvRGlzayB7
IGZhbHNlIH07CiAgICAgRGVxdWU8Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxXZWJD
b3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+KT4+IG1fcGVuZGluZ1dyaXRpbmdDYWNoZXNUb0Rp
c2tDYWxsYmFja3M7Ci0gICAgV2Vha1B0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBt
X3F1b3RhTWFuYWdlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIENhY2hlU3RvcmFnZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3Bw
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmlu
ZGV4IGMwZmNmOWM1ZjYwMGFhNWFjMTE2M2U0N2E0YjI2ZGFjNDIwNjVhYTkuLjZkMGMxMjlhNzQw
NTEwZDM4Njk3MzcwNWFkMDkyZWYxMzJjYzA3NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKQEAgLTU1LDYgKzU1LDggQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIAogICAgIGVuY29kZXIgPDwgbG9jYWxTdG9yYWdlRGlyZWN0b3J5IDw8IGxv
Y2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKIAorICAgIGVuY29kZXIgPDwgY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5IDw8IGNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZTsKKwogICAgIGVuY29kZXIgPDwgcGVyT3JpZ2luU3RvcmFnZVF1b3RhOwogICAgIGVuY29kZXIg
PDwgcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YTsKIH0KQEAgLTE0MSw2ICsxNDMsMTgg
QEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdU
Rk1vdmUoKmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKKyAgICBPcHRp
b25hbDxTdHJpbmc+IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICBkZWNvZGVyID4+IGNhY2hl
U3RvcmFnZURpcmVjdG9yeTsKKyAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVj
dG9yeSA9IFdURk1vdmUoKmNhY2hlU3RvcmFnZURpcmVjdG9yeSk7CisKKyAgICBPcHRpb25hbDxT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKKyAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZTsKKyAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CisKICAgICBPcHRpb25hbDx1aW50NjRfdD4gcGVyT3JpZ2luU3RvcmFnZVF1
b3RhOwogICAgIGRlY29kZXIgPj4gcGVyT3JpZ2luU3RvcmFnZVF1b3RhOwogICAgIGlmICghcGVy
T3JpZ2luU3RvcmFnZVF1b3RhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzLmgKaW5kZXggMDk1ZjA5ZDZhZjkzZjkxM2ViYjI5ZjcwMjY3YWU5
YzFiNzRiZTg4ZS4uZjI3ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5o
CkBAIC03MSw2ICs3MSw5IEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAg
ICAgU3RyaW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUgbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwogCisgICAgU3RyaW5n
IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworCiAgICAgdWludDY0X3QgcGVyT3Jp
Z2luU3RvcmFnZVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1
b3RhKCkgfTsKICAgICB1aW50NjRfdCBwZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhIHsg
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgpIH07
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKaW5kZXgg
ZmFmOGE1MjhlYTIzMDlhYmZhZTE3N2JkZWVhYjI3YzVkNWYwNzMyOS4uOWVhODlmYjViZDgwMzA4
YTQ4NTk4MTYzMDA1MWIxMTE4ZjFiODQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHQuY3BwCkBAIC02NzIsMyArNjcyLDggQEAgdm9pZCBXS0NvbnRleHRTZXRV
c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBi
b29sIHUKIHsKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVT
ZXJ2aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0K
Kwordm9pZCBXS0NvbnRleHRSZXNldFF1b3RhKFdLQ29udGV4dFJlZiBjb250ZXh0KQoreworICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT5yZXNldFF1b3RhKCk7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKaW5kZXggNzIzYjVlNDdl
NmU2YWJjNjY0MmRlYmU4NGFjY2RlMWZhNTY4Yzc5MC4uMWQ3MmEwMGE4ZGVhYjQwZDAxNGNmMTQx
MzFlOGI4YTE4Mjg1ZDQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dFByaXZhdGUuaApAQCAtMTI2LDYgKzEyNiw4IEBAIFdLX0VYUE9SVCB2b2lkIFdL
Q29udGV4dENsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKFdLQ29udGV4dFJl
ZiBjb250CiAKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgZm9yY2VTZXJ2aWNlV29ya2Vy
UHJvY2Vzcyk7CiAKK1dLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFJlc2V0UXVvdGEoV0tDb250ZXh0
UmVmKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5kZXggZjk0
MjlmOGIwOWM5YzY2YTE4ZDA5MzBjNWFhNDIzYzVhMzg3MjQ0Zi4uMzA3MjhjMGUwNzQxYjY4NDBi
MGE0N2Y4NTAxNDdjMzFiMmRhM2QyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTU2LDYgKzU2LDcgQEAgZW51
bSBjbGFzcyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gOiBib29sOwogZW51bSBjbGFzcyBT
dG9yYWdlQWNjZXNzV2FzR3JhbnRlZCA6IGJvb2w7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIHN0
cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7CitzdHJ1Y3QgQ2xpZW50T3JpZ2luOwogfQogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cAppbmRleCAwZTM3ODg5OTM5NjBhMzc3ZmE4ZTg5Y2I2OGUyYzJhNmMzOTVmMzg5Li5kYTczZmU3
MjA4MWI2ZmM2OWUyZDNkOWY1Y2Q2ZTYxNDFkNmU4MDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC01NTIsNiArNTUyLDEzIEBAIE5ldHdvcmtQcm9j
ZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0
YVN0b3JlKiB3aXRoCiAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5s
b2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFn
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCisgICAgYXV0byBjYWNoZVN0b3JhZ2VE
aXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hl
U3RvcmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOworICAgIGlmICghY2FjaGVTdG9yYWdl
RGlyZWN0b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IGNhY2hlU3RvcmFnZURpcmVjdG9y
eTsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGly
ZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIH0K
KworCiAgICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAgaWYgKHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMTcxMyw2ICsxNzIwLDE0IEBAIHZv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKICAgICBtX25ldHdv
cmtQcm9jZXNzID0gbnVsbHB0cjsKIH0KIAordm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVzZXRRdW90
YSgpCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRR
dW90YSgpLCAwKTsKK30KKwogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNz
V2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCiB7CiAgICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCA5ZGUy
MTcyMmQ5ZWJkY2MzMjZmOGMzNjBmZDI4OGVjYzdlNmIzOTg0Li41Mzk0OWEyNjAwNGI3ODhlZmU4
OGY0MzRiNTlkYTE3YzY2Y2U2ZmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmgKQEAgLTUyOCw2ICs1MjgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VTZXBh
cmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOwogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29y
a2VyUHJvY2VzczsgfQogCisgICAgdm9pZCByZXNldFF1b3RhKCk7CisKIHByaXZhdGU6CiAgICAg
dm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNv
Y29hLm1tCmluZGV4IDI5ZTkwMDNmMDQ2ZjIxNzRjNzZiODRmNzFiNWVjODkyZThhNDYwMjUuLjg3
MDYyYWJkNmM0MjFlMjNmNWJhMmVlMzE2M2YxMzk5Yzg5NTRhYzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJz
aXRlRGF0YVN0b3JlQ29jb2EubW0KQEAgLTE5MCw2ICsxOTAsMTAgQEAgV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgaWYgKCFwYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCiAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmxv
Y2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwogCisgICAgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBj
YWNoZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMuY2FjaGVTdG9yYWdl
RGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKICAg
ICBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHBlck9yaWdpblN0b3JhZ2VRdW90
YSgpOwogICAgIHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCBi
Yjk4NDE2NjQ1NGI1NmFlYTRjOGRiZDQ4NWI3MjE0MDBiYjE4NmNhLi40YjI3ZGZiNGYzMzI0NjEy
MzU5NTYzYTg3YzQ4NDkxYWQ0ZGY1MWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMjA4Myw2ICsy
MDgzLDEyIEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBh
cmFtZXRlcnMoKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3Rv
cmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgfQogCisgICAgYXV0byBjYWNoZVN0
b3JhZ2VEaXJlY3RvcnkgPSB0aGlzLT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBpZiAo
IWNhY2hlU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcGFyYW1ldGVycy5j
YWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNoZVN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKyAgICB9CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBwYXJh
bWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IHJlc29sdmVkSW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5KCk7CiAgICAgaWYgKCFwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggNjc2NDcxYWMxNWExYWM0NzQwYzIyMzEwNzMwZjdhYjBlYjA5YWQ3MC4uZTQzODlm
ZGQ2ZDI0N2VkOTM1ZWE5NmE3MzBjNDBhM2ViNDM0NDFmOCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE5LTExLTEy
ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENyb3NzLXRocmVh
ZCB2ZXJzaW9uIFN0b3JhZ2VRdW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzk3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOiBSZW1vdmVkLiBUaGlzIHVuaXQgdGVzdCB3YXMg
dXNlZCB0byBtYWtlIHN1cmUgdGhlIHN0YXRlIAorICAgICAgICBjaGFuZ2UgaW5zaWRlIFN0b3Jh
Z2VRdW90YU1hbmFnZXIgaXMgY29ycmVjdC4gU2luY2Ugd2UgaGF2ZSBjaGFuZ2VkIG91ciBpbXBs
ZW1lbnRhdGlvbiwgdGhlIHRlc3QgaXMgbm90IG5lZWRlZC4KKworICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxl
cjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6IFJlc2V0IFN0b3JhZ2VRdW90YU1hbmFn
ZXIncyBxdW90YSB2YWx1ZSBiZXR3ZWVuIHRlc3RzLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6cmVzZXRRdW90YSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oOgorCiAyMDE5LTExLTEyICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dUS10gQWRkICd0ZXN0MjYyLXRlc3QnIHN0ZXAgdG8gR1RLIGFuZCBX
UEUgYnVpbGQgYm90cwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlMzJiODVlNDJkYzFmMTky
NWI3Y2ZkOGE5YjkzM2ViNzIxZDFhY2VjLi5hNzBlMTQ2NDRjMTM4N2M0ZDdkODUwN2Y2OGIyMmUw
YzFlMTIxNzFhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzM0LDcgKzczNCw2IEBACiAJ
CTkzOTlCQTA2MjM3MTExNEYwMDgzOTJCRiAvKiBJbmRleGVkREJOb3RJblBhZ2VDYWNoZS5odG1s
IGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
OTlCQTAzMjM3MTEwQkYwMDgzOTJCRiAvKiBJbmRleGVkREJOb3RJblBhZ2VDYWNoZS5odG1sICov
OyB9OwogCQk5M0FGNEVDRTE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0FGNEVDRDE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RW
aXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgKi87IH07CiAJCTkzQUY0
RUQxMTUwNkYxMzAwMDdGRDU3RSAvKiBsb3RzLW9mLWltYWdlcy5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNGMTUwNkYxMjMw
MDdGRDU3RSAvKiBsb3RzLW9mLWltYWdlcy5odG1sICovOyB9OwotCQk5M0I2MjA1NDIzNEVBNjJD
MDBENDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I2MjA1MzIzNEVBMzJCMDBENDlCOTcgLyogU3Rv
cmFnZVF1b3RhTWFuYWdlci5jcHAgKi87IH07CiAJCTkzQ0ZBODY3MUNFQjlFMzgwMDA1NjVBOCAv
KiBhdXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDRkE4NjYxQ0VCOURFMTAwMDU2NUE4IC8qIGF1
dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCAqLzsgfTsKIAkJOTNEMTE5RkMyMkM2ODBGNzAwOUJF
M0M3IC8qIGxvY2Fsc3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNEMTE5RkIyMkM1NzEx
MjAwOUJFM0M3IC8qIGxvY2Fsc3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwgKi87IH07
CiAJCTkzRTJDNTU1MUZEMzIwNDEwMEUxREY2QSAvKiBMaW5lRW5kaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTJDNTU0MUZEMzIwNDEwMEUx
REY2QSAvKiBMaW5lRW5kaW5nLmNwcCAqLzsgfTsKQEAgLTIxMzgsNyArMjEzNyw2IEBACiAJCTkz
QUY0RUNBMTUwNkYwMzUwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRG
b3JJbWFnZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV3Rmly
c3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTNBRjRFQ0QxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlO
b25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1
bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQUY0RUNGMTUwNkYxMjMw
MDdGRDU3RSAvKiBsb3RzLW9mLWltYWdlcy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRo
ID0gImxvdHMtb2YtaW1hZ2VzLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5
M0I2MjA1MzIzNEVBMzJCMDBENDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDRkE4NjYxQ0VCOURFMTAwMDU2NUE4IC8q
IGF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9
ICJhdXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5M0NGQTg2ODFDRUJDRkVEMDAwNTY1QTggLyogQ2FuZGlkYXRlVGVzdHMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDYW5kaWRhdGVUZXN0cy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNEMTE5RkIyMkM1NzExMjAwOUJFM0M3IC8qIGxv
Y2Fsc3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7
IHBhdGggPSAibG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMTEwLDcgKzMxMDgsNiBAQAogCQkJCTQxOTczQjVDMUFG
MjI4NzUwMDZDN0IzNiAvKiBTaGFyZWRCdWZmZXIuY3BwICovLAogCQkJCUExNzk5MTg5MUUxQ0Ey
NDEwMEE1MDVFRCAvKiBTaGFyZWRCdWZmZXJUZXN0LmNwcCAqLywKIAkJCQlBMTc5OTE4QTFFMUNB
MjQxMDBBNTA1RUQgLyogU2hhcmVkQnVmZmVyVGVzdC5oICovLAotCQkJCTkzQjYyMDUzMjM0RUEz
MkIwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLywKIAkJCQlFQ0E2ODBDRDFF
NjhDQzA5MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLm1tICovLAogCQkJCUNFNEQ1REU1MUY2
NzQzQkEwMDcyQ0ZDNiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmNwcCAqLywKIAkJCQk5M0EyNTg5
ODFGOTJGRjE1MDAzRTUxMEMgLyogVGV4dENvZGVjLmNwcCAqLywKQEAgLTQ4NDYsNyArNDg0Myw2
IEBACiAJCQkJN0NDRTdFQ0YxQTQxMUE3RTAwNDQ3QzRDIC8qIFN0b3BMb2FkaW5nRnJvbURpZFJl
Y2VpdmVSZXNwb25zZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEQzA5MzJFMjFDOTkzNDQwMDMw
QzRCMCAvKiBTdG9wU3VzcGVuZFJlc3VtZUFsbE1lZGlhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDE0QUQ2ODYyMjg1RDFDMDAwNzc3RjJEIC8qIFN0b3JhZ2VRdW90YS5tbSBpbiBTb3VyY2VzICov
LAotCQkJCTkzQjYyMDU0MjM0RUE2MkMwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxNUJFMTcxMUQ0MjhFNEIwMEREN0M2OCAvKiBTdG9yZUJs
b2JUaGVuRGVsZXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRDAxQTQxMUE3RTAwNDQ3
QzRDIC8qIFN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0NDRTdFRDExQTQxMUE3RTAwNDQ3QzRDIC8qIFN0cmluZ1RydW5jYXRvci5t
bSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhZDFjNjdiZjA1MmY3YjBhMzQ1M2QwNTRmMjUyOTE5MWVlZjNmMTcyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDEwMyArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6
Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvU3RvcmFnZVF1b3RhVXNlci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewotCi1zdGF0aWMgY29uc3QgaW50IGRlZmF1bHRR
dW90YSA9IDEgKiBLQjsKLQotY2xhc3MgTW9ja1F1b3RhVXNlciBmaW5hbCA6IHB1YmxpYyBXZWJD
b3JlOjpTdG9yYWdlUXVvdGFVc2VyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBNb2NrUXVvdGFV
c2VyKFN0b3JhZ2VRdW90YU1hbmFnZXImIG1hbmFnZXIpCi0gICAgICAgIDogbV9tYW5hZ2VyKCZt
YW5hZ2VyKQotICAgIHsKLSAgICAgICAgbWFuYWdlci5hZGRVc2VyKCp0aGlzKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHNldFNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpIHsgbV9zcGFjZVVzZWQg
PSBzcGFjZVVzZWQ7IH0KLQotcHJpdmF0ZToKLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25z
dCBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3BhY2VVc2VkOwotICAgIH0KLQotICAg
IHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFj
aykgZmluYWwKLSAgICB7Ci0gICAgICAgIGlmICghbV9zcGFjZVVzZWQpCi0gICAgICAgICAgICBB
U1NFUlRfRVEobV9tYW5hZ2VyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6
VW5pbml0aWFsaXplZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFTU0VSVF9FUShtX21h
bmFnZXItPnN0YXRlKCksIFN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0YXRlOjpDb21wdXRpbmdTcGFj
ZVVzZWQpOwotCi0gICAgICAgIC8vIFJlc2V0IHVzYWdlIHRvIG1vY2sgZGVsZXRpb24uCi0gICAg
ICAgIG1fc3BhY2VVc2VkID0gMDsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICB9Ci0KLSAgICB1
aW50NjRfdCBtX3NwYWNlVXNlZCB7IDAgfTsKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBtX21h
bmFnZXI7Ci19OwotICAgIAotVEVTVChTdG9yYWdlUXVvdGFNYW5hZ2VyVGVzdCwgQmFzaWMpCi17
Ci0gICAgU3RvcmFnZVF1b3RhTWFuYWdlciogc3RvcmFnZVF1b3RhTWFuYWdlclB0ciA9IG51bGxw
dHI7Ci0gICAgU3RvcmFnZVF1b3RhTWFuYWdlciBzdG9yYWdlUXVvdGFNYW5hZ2VyKGRlZmF1bHRR
dW90YSwgWyZzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyXSh1aW50NjRfdCBxdW90YSwgdWludDY0X3Qg
Y3VycmVudFNwYWNlLCB1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKE9wdGlvbmFsPHVpbnQ2NF90Pik+JiYgY29tcGxldGlvbkhhbmxkZXIpIHsKLSAgICAgICAg
QVNTRVJUX1RSVUUoc3RvcmFnZVF1b3RhTWFuYWdlclB0cik7Ci0gICAgICAgIEFTU0VSVF9FUShz
dG9yYWdlUXVvdGFNYW5hZ2VyUHRyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0
ZTo6V2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8gQWxsb3cg
YWxsIHNwYWNlIGluY3JlYXNlIHJlcXVlc3RzLgotICAgICAgICBjb21wbGV0aW9uSGFubGRlcihz
cGFjZUluY3JlYXNlICsgY3VycmVudFNwYWNlKTsKLSAgICB9KTsKLSAgICBzdG9yYWdlUXVvdGFN
YW5hZ2VyUHRyID0gJnN0b3JhZ2VRdW90YU1hbmFnZXI7Ci0KLQotICAgIE1vY2tRdW90YVVzZXIg
bW9ja1VzZXIoc3RvcmFnZVF1b3RhTWFuYWdlcik7Ci0KLSAgICAvLyBHcmFudCBkaXJlY3RseS4K
LSAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLnJlcXVlc3RTcGFjZSgwLjEgKiBLQiwgWyZdKFdlYkNv
cmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIGRlY2lzaW9uKSB7Ci0gICAgICAgIEFT
U0VSVF9FUShkZWNpc2lvbiwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246
OkdyYW50KTsKLSAgICAgICAgbW9ja1VzZXIuc2V0U3BhY2VVc2VkKDAuMSAqIEtCKTsKLSAgICB9
KTsKLQotICAgIC8vIEdyYW50IGFmdGVyIGNvbXB1dGluZyBhY2N1cmF0ZSB1c2FnZS4KLSAgICBz
dG9yYWdlUXVvdGFNYW5hZ2VyLnJlcXVlc3RTcGFjZSgxLjAgKiBLQiwgWyZdKFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIGRlY2lzaW9uKSB7Ci0gICAgICAgIEFTU0VSVF9F
UShkZWNpc2lvbiwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50
KTsKLSAgICAgICAgbW9ja1VzZXIuc2V0U3BhY2VVc2VkKDEuMCAqIEtCKTsKLSAgICB9KTsKLQot
ICAgIC8vIEdyYW50IGFmdGVyIGNvbXB1dGluZyBhY2N1cmF0ZSB1c2FnZSBhbmQgcmVxdWVzdGlu
ZyBzcGFjZSBpbmNyZWFzZS4KLSAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLnJlcXVlc3RTcGFjZSgx
MCAqIEtCLCBbJl0oV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNp
b24pIHsKLSAgICAgICAgQVNTRVJUX0VRKHN0b3JhZ2VRdW90YU1hbmFnZXJQdHItPnN0YXRlKCks
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3QpOwot
ICAgICAgICBBU1NFUlRfRVEoZGVjaXNpb24sIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6
OkRlY2lzaW9uOjpHcmFudCk7Ci0gICAgfSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
Y3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggNGU0
OGYyN2NmZmExMDhmMDc3Y2U5OGJhZGJkYThkYTFhMjk1NmQwOS4uODExZDVmMDFhY2VjZWVkOTY1
NzFlZDBkMmJkOTA0MWZmNmFjYzk4NyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHAKQEAgLTk4MCw2ICs5ODAsOCBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNl
dFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZQog
ICAgIGNsZWFyU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMoKTsKICAgICBjbGVhckRPTUNhY2hl
cygpOwogCisgICAgcmVzZXRRdW90YSgpOworCiAgICAgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGVGb3JTZXJ2aWNlV29ya2VyVGVzdGluZyhwbGF0Zm9ybUNvbnRleHQoKSwgdHJ1
ZSk7CiAKICAgICBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZyhU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpKTsKQEAgLTI5OTIsNiArMjk5NCwx
MSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcygp
CiAgICAgV0tDb250ZXh0VGVybWluYXRlU2VydmljZVdvcmtlclByb2Nlc3MocGxhdGZvcm1Db250
ZXh0KCkpOwogfQogCit2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFF1b3RhKCkKK3sKKyAgICBX
S0NvbnRleHRSZXNldFF1b3RhKHBsYXRmb3JtQ29udGV4dCgpKTsKK30KKwogI2lmICFQTEFURk9S
TShDT0NPQSkKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtV2lsbFJ1blRlc3QoY29uc3Qg
VGVzdEludm9jYXRpb24mKQogewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5o
CmluZGV4IGVkMTY5ZWEyYzA3ZjU1MDYxMjYxNjI2ODMwNTRmNWY2NTBiM2Y2N2QuLjVlOGRkM2Ew
MDUxNzgzYzhlMGY4NmEzMzRiMjdjZDc2NmE0ODUwZDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmgKQEAgLTI2OCw2ICsyNjgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB0
ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwogICAgIHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtl
clByb2Nlc3MoKTsKIAorICAgIHZvaWQgcmVzZXRRdW90YSgpOworCiAgICAgdm9pZCByZW1vdmVB
bGxTZXNzaW9uQ3JlZGVudGlhbHMoKTsKIAogICAgIHZvaWQgY2xlYXJJbmRleGVkRGF0YWJhc2Vz
KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383414</attachid>
            <date>2019-11-12 17:50:15 -0800</date>
            <delta_ts>2019-11-13 12:49:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203971-20191112175014.patch</filename>
            <type>text/plain</type>
            <size>178649</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjc1OGIzOWY0NTM5NDU5
OTMwOGM2ODQ2OTU2M2E5NjgxYTk1ZWY2NS4uYTgzZjQ2NDFjYmZmNWM5MGVjZWJmMDUzMmYzY2Jk
N2ZhMTA0NDQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NiBAQAorMjAxOS0xMS0xMiAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVy
c2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgYSBsb2NrLWJhc2VkIFN0b3JhZ2VRdW90YU1hbmFn
ZXIgc28gdGhhdCBxdW90YSBjaGVjayBjYW4gYmUgZG9uZSBvbiBkaWZmZXJlbnQgdGhyZWFkcy4K
KworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVy
cy5jbWFrZToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRl
RGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpyZXF1
ZXN0U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRpc2tV
c2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2Vy
OjpRdW90YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpj
b21wdXRlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
SURCU2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3Bh
Y2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVy
OjpRdW90YVVzZXI6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjplbnN1cmVR
dW90YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2
ZXI6OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2lu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5p
c2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGVjcmVhc2VT
cGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2
ZXI6OmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCk6IERl
bGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluaXRpYWxpemVRdW90YVVz
ZXIpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5C
YWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybUNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmpl
Y3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtRGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6cmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
UHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVj
b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1HZXRBbGxSZWNvcmRzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1PcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6Oml0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRy
YW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OmFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVxdWVzdFNwYWNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OndhaXRGb3JS
ZXF1ZXN0U3BhY2VDb21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2spOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNo
U3BhY2VJbmNyZWFzZVRhc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
ZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRl
clF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUlu
ZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFt
ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmdldFJl
Y29yZEFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Omdl
dENvdW50QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpv
cGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hlY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rp
b246OmFib3J0VHJhbnNhY3Rpb25XaXRob3V0Q2FsbGJhY2spOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6YWJv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uOjpwdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpn
ZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9wZW5DdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vy
c29yKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2Vy
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6cXVvdGFNYW5h
Z2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dHJ5R3JhbnRSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblVz
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlc2V0UXVvdGFV
cGRhdGVkQmFzZWRPblVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OnJlc2V0UXVvdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6
flN0b3JhZ2VRdW90YU1hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6c3BhY2VVc2FnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmluaXRpYWxp
emVVc2Vyc0lmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YWRkVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzaG91bGRBc2tGb3JNb3JlU3BhY2UgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3ZlVXNl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1
ZXN0U3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
cjo6YXNrRm9yTW9yZVNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMpOiBEZWxldGVkLgorICAgICAgICAq
IHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YSk6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJl
c2V0UXVvdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
cjo6c3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVF1b3Rh
VXNlci5oOiBSZW1vdmVkLgorCiAyMDE5LTExLTEyICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW0xGQ10gSW5saW5lRm9ybWF0dGluZ1N0YXRlOjphZGRJbmxpbmVS
dW4gc2hvdWxkIHRha2UgYSB1bmlxdWVfcHRyPERpc3BsYXk6OlJ1bj4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZGYy
YzQ4ZWNjMzFmMGNjOGU4MTg3NTNmODE5MjQzNDZlYzA0YjlhNS4uMjU2OTQ2YTVhYWE4MWQ5NDkz
Y2MzODJmNTJlNjk1M2Q5YzI2NDQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MyBAQAorMjAxOS0x
MS0xMiAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10
aHJlYWQgdmVyc2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3Jr
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0
YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlbW92
ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmRlbGV0ZVdlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmRl
bGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpjcmVhdGVJREJTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
c2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJJREJSb290UGF0aCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZXNldFF1b3RhKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2Vycyk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplU3RvcmFnZVF1b3Rh
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFyU3RvcmFn
ZVF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplUXVvdGFVc2Vycyk6IERlbGV0ZWQuCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjpTZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjplbnN1cmVPcmlnaW5T
dG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjpleGlzdGluZ1N0b3JhZ2VRdW90YU1hbmFnZXJzKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VyOjpjYWNoZVJvb3RQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjpzZXRJREJSb290UGF0aCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6aWRi
Um9vdFBhdGggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U3RvcmFn
ZVF1b3RhTWFuYWdlcnM6OmRlZmF1bHRRdW90YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yYWdlUXVvdGFNYW5hZ2Vyczo6c2V0RGVmYXVsdFF1
b3Rhcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yYWdl
UXVvdGFNYW5hZ2Vyczo6bWFuYWdlcnNQZXJPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Z2V0RGlyZWN0b3J5U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6RW5naW5lOjpkaXNrVXNhZ2UpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3Jh
Z2U6OkVuZ2luZTo6cmVxdWVzdFNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdl
OjpFbmdpbmU6OnJlYWRDYWNoZXNGcm9tRGlzayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3Rv
cmFnZTo6RW5naW5lOjppbml0aWFsaXplUXVvdGFVc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaDoKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OkNhY2hlcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3Rv
cmFnZTo6Q2FjaGVzOjp+Q2FjaGVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpD
YWNoZXM6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJl
cXVlc3RTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjp3aGVu
SW5pdGlhbGl6ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlczo6cmVzZXRTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oOgorICAgICAgICAqIFNoYXJlZC9XZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdLQ29udGV4dFJlc2V0UXVvdGEpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJv
Y2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpyZXNldFF1b3RhKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tOgorICAgICAgICAoV2Vi
S2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorCiAyMDE5LTExLTEyICBTaWh1aSBMaXUgIDxzaWh1
aV9saXVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzaXplIGZpbGUgZm9yIENhY2hlU3RvcmFn
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UKaW5kZXggNDllOTRkZWYxMjkxYjdkZTBiNjFkMzgwNjAxY2ZmNzZk
ZWYyNWQ0Ny4uNzk1NzJmMWY0YzZiNDI3OGI5YjhjZjQxNDVmOWMzY2NlYTJjZTNiMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCkBAIC0xMzc4LDcgKzEzNzgsNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgKICAgICBzdG9y
YWdlL1N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oCiAgICAgc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmgKLSAgICBzdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaAogICAgIHN0b3JhZ2UvU3Rv
cmFnZVR5cGUuaAogCiAgICAgc3R5bGUvU3R5bGVDaGFuZ2UuaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCBlNjFk
YjhjOTQyOGQ5ODRkYTY0Njk2ZTdjODQyNzg3NDI2OWMyN2U2Li4wMDgzNGJmMmVkNTU2ZTI4OTg0
ZTkzY2Y3M2VjNTI0MWRhMzY0OGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtNDYsMjQgKzQ2LDI0IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIAotUmVmPElEQlNlcnZl
cj4gSURCU2VydmVyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBRdW90YU1hbmFn
ZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitSZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6
OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0
ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURC
U2VydmVyKHNlc3Npb25JRCwgV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKSk7CiB9CiAKLVJl
ZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYm
IHF1b3RhTWFuYWdlckdldHRlcikKK1JlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBh
dGgsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiB7CiAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCU2VydmVyKHNlc3Npb25JRCwgZGF0YWJhc2VEaXJl
Y3RvcnlQYXRoLCBXVEZNb3ZlKHF1b3RhTWFuYWdlckdldHRlcikpKTsKIH0KIAotSURCU2VydmVy
OjpJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXIm
JiBxdW90YU1hbmFnZXJHZXR0ZXIpCitJREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0
ZXIpCiAgICAgOiBDcm9zc1RocmVhZFRhc2tIYW5kbGVyKCJJbmRleGVkRGF0YWJhc2UgU2VydmVy
IiwgQXV0b2RyYWluZWRQb29sRm9yUnVuTG9vcDo6VXNlKQogICAgICwgbV9zZXNzaW9uSUQoc2Vz
c2lvbklEKQogICAgICwgbV9xdW90YU1hbmFnZXJHZXR0ZXIoV1RGTW92ZShxdW90YU1hbmFnZXJH
ZXR0ZXIpKQogewogfQogCi1JREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBRdW90YU1hbmFnZXJH
ZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitJREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBT
dG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQogICAgIDogQ3Jv
c3NUaHJlYWRUYXNrSGFuZGxlcigiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIsIEF1dG9kcmFpbmVk
UG9vbEZvclJ1bkxvb3A6OlVzZSkKICAgICAsIG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKICAgICAs
IG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKQEAgLTY4Mywx
NTcgKzY4MywyOCBAQCB2b2lkIElEQlNlcnZlcjo6cGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJh
c2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcgogCiB2b2lkIElEQlNlcnZlcjo6
ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7
Ci0gICAgZm9yIChhdXRvJiB1c2VyIDogbV9xdW90YVVzZXJzLnZhbHVlcygpKQotICAgICAgICB1
c2VyLT5yZXNldFNwYWNlVXNlZCgpOwotCiAgICAgYXV0byBjYWxsYmFjayA9IG1fZGVsZXRlRGF0
YWJhc2VDb21wbGV0aW9uSGFuZGxlcnMudGFrZShjYWxsYmFja0lEKTsKICAgICBBU1NFUlQoY2Fs
bGJhY2spOwogICAgIGNhbGxiYWNrKCk7CiB9CiAKLUlEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90
YVVzZXIoSURCU2VydmVyJiBzZXJ2ZXIsIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1hbmFnZXIsIENs
aWVudE9yaWdpbiYmIG9yaWdpbikKLSAgICA6IG1fc2VydmVyKHNlcnZlcikKLSAgICAsIG1fbWFu
YWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKLSAgICAsIG1fb3JpZ2luKFdURk1vdmUob3JpZ2lu
KSkKLSAgICAsIG1faXNJbml0aWFsaXplZChtX3NlcnZlci5tX3Nlc3Npb25JRC5pc0VwaGVtZXJh
bCgpKQotewotICAgIGlmIChtYW5hZ2VyKQotICAgICAgICBtYW5hZ2VyLT5hZGRVc2VyKCp0aGlz
KTsKLX0KLQotSURCU2VydmVyOjpRdW90YVVzZXI6On5RdW90YVVzZXIoKQotewotICAgIGlmICht
X21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci19Ci0KLXZv
aWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKCkKLXsKLSAgICBtX3NwYWNl
VXNlZCA9IDA7Ci0KLSAgICBpZiAoIW1fbWFuYWdlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1fc2VydmVyLm1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NF
UlQoIW1faW5pdGlhbGl6YXRpb25DYWxsYmFjayk7Ci0KLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSBm
YWxzZTsKLQotICAgIC8vIERvIGFkZC9yZW1vdmUgdG8gdHJpZ2dlciBjYWxsIHRvIHdoZW5Jbml0
aWFsaXplZC4KLSAgICBtX21hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgIG1fbWFuYWdl
ci0+YWRkVXNlcigqdGhpcyk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmNvbXB1
dGVTcGFjZVVzZWQoKQotewotICAgIHJlc2V0U3BhY2VVc2VkKCk7Ci19Ci0KLXZvaWQgSURCU2Vy
dmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKHVpbnQ2NF90IHNpemUpCi17Ci0gICAg
aWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9zcGFj
ZVVzZWQgKyBzaXplID4gbV9zcGFjZVVzZWQpOwotICAgIG1fc3BhY2VVc2VkICs9IHNpemU7Ci19
Ci12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpkZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBz
aXplKQotewotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0gICAg
QVNTRVJUKG1fc3BhY2VVc2VkID49IHNpemUpOwotICAgIG1fc3BhY2VVc2VkIC09IHNpemU7Ci19
Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OndoZW5Jbml0aWFsaXplZChDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCi17Ci0gICAgaWYgKG1faXNJbml0aWFsaXplZCkg
ewotICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1faW5p
dGlhbGl6YXRpb25DYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwotICAgIG1fc2VydmVyLnN0
YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKG1fb3JpZ2luKTsKLX0KLQotdm9pZCBJREJT
ZXJ2ZXI6OlF1b3RhVXNlcjo6aW5pdGlhbGl6ZVNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQp
Ci17Ci0gICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCB8fCAhbV9lc3RpbWF0ZWRTcGFjZUluY3Jl
YXNlKTsKLSAgICBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsKLSAgICBtX2lzSW5pdGlhbGl6ZWQg
PSB0cnVlOwotCi0gICAgaWYgKGF1dG8gY2FsbGJhY2sgPSBXVEZNb3ZlKG1faW5pdGlhbGl6YXRp
b25DYWxsYmFjaykpCi0gICAgICAgIGNhbGxiYWNrKCk7Ci19Ci0KLUlEQlNlcnZlcjo6UXVvdGFV
c2VyJiBJREJTZXJ2ZXI6OmVuc3VyZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdp
bikKLXsKLSAgICByZXR1cm4gKm1fcXVvdGFVc2Vycy5lbnN1cmUob3JpZ2luLCBbdGhpcywgJm9y
aWdpbl0gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxRdW90YVVzZXI+KCp0aGlzLCBtX3F1
b3RhTWFuYWdlckdldHRlcihtX3Nlc3Npb25JRCwgb3JpZ2luKSwgQ2xpZW50T3JpZ2luIHsgb3Jp
Z2luIH0pOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OnN0
YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2lu
KQotewotICAgIEFTU0VSVCghbV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7Ci0gICAgcG9zdERh
dGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmNvbXB1
dGVTcGFjZVVzZWRGb3JPcmlnaW4sIG9yaWdpbikpOwotfQotCi12b2lkIElEQlNlcnZlcjo6Y29t
cHV0ZVNwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK1N0b3Jh
Z2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIElEQlNlcnZlcjo6cmVxdWVzdFNwYWNlKGNvbnN0IENs
aWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0YXNrU2l6ZSkKIHsKICAgICBBU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKKyAgICBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1
b3RhTWFuYWdlciA9IG1fcXVvdGFNYW5hZ2VyR2V0dGVyKG9yaWdpbik7CisgICAgaWYgKCFzdG9y
YWdlUXVvdGFNYW5hZ2VyKQorICAgICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVj
aXNpb246OkRlbnk7CiAKLSAgICBhdXRvIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCA9IHRoaXMtPmRh
dGFiYXNlRGlyZWN0b3J5UGF0aElzb2xhdGVkQ29weSgpOwotICAgIGF1dG8gb2xkVmVyc2lvbk9y
aWdpbkRpcmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlS
ZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCBkYXRh
YmFzZURpcmVjdG9yeVBhdGgsICJ2MCIpOwotICAgIGF1dG8gbmV3VmVyc2lvbk9yaWdpbkRpcmVj
dG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRv
Um9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCBkYXRhYmFzZURpcmVj
dG9yeVBhdGgsICJ2MSIpOwotICAgIGF1dG8gc2l6ZSA9IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KSArIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9u
T3JpZ2luRGlyZWN0b3J5KTsKLQotICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZv
ck9yaWdpbiwgb3JpZ2luLCBzaXplKSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpmaW5pc2hDb21w
dXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2
NF90IHNwYWNlVXNlZCkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbml0aWFsaXpl
U3BhY2VVc2VkKHNwYWNlVXNlZCk7CisgICAgcmV0dXJuIHN0b3JhZ2VRdW90YU1hbmFnZXItPnJl
cXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCh0YXNrU2l6ZSk7CiB9CiAKLXZvaWQgSURCU2Vy
dmVyOjpyZXF1ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRh
c2tTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uKT4mJiBjYWxsYmFjaykKK3VpbnQ2NF90IElEQlNlcnZlcjo6ZGlza1VzYWdlKGNvbnN0IFN0
cmluZyYgcm9vdERpcmVjdG9yeSwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAg
YXV0byogcXVvdGFNYW5hZ2VyID0gZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikubWFuYWdlcigpOwot
ICAgIGlmICghcXVvdGFNYW5hZ2VyKSB7Ci0gICAgICAgIGNhbGxiYWNrKFN0b3JhZ2VRdW90YU1h
bmFnZXI6OkRlY2lzaW9uOjpEZW55KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHF1
b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHRhc2tTaXplLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19
Ci0KLXZvaWQgSURCU2VydmVyOjpyZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9y
aWdpbikKLXsKLSAgICBpZiAoYXV0byogdXNlciA9IG1fcXVvdGFVc2Vycy5nZXQob3JpZ2luKSkK
LSAgICAgICAgdXNlci0+cmVzZXRTcGFjZVVzZWQoKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6Omlu
Y3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzaXpl
KQotewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmluY3JlYXNlU3BhY2VVc2VkKHNpemUp
OwotfQotCi12b2lkIElEQlNlcnZlcjo6ZGVjcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3Jp
Z2luJiBvcmlnaW4sIHVpbnQ2NF90IHNpemUpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdp
bikuZGVjcmVhc2VTcGFjZVVzZWQoc2l6ZSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjppbmNyZWFz
ZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qg
dGFza1NpemUpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuaW5jcmVhc2VQb3RlbnRp
YWxTcGFjZVVzZWQodGFza1NpemUpOwotfQorICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwog
Ci12b2lkIElEQlNlcnZlcjo6ZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50
T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlVXNlZCkKLXsKLSAgICBlbnN1cmVRdW90YVVz
ZXIob3JpZ2luKS5kZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChzcGFjZVVzZWQpOworICAgIGF1
dG8gb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0
YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xp
ZW50T3JpZ2luLCByb290RGlyZWN0b3J5LCAidjAiKTsKKyAgICBhdXRvIG5ld1ZlcnNpb25Pcmln
aW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZpZXI6OmRhdGFiYXNlRGlyZWN0b3J5UmVs
YXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3JpZ2luLmNsaWVudE9yaWdpbiwgcm9vdERp
cmVjdG9yeSwgInYxIik7CisgICAgcmV0dXJuIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJh
c2VzU2l6ZUZvckRpcmVjdG9yeShvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KSArIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9uT3JpZ2lu
RGlyZWN0b3J5KTsKIH0KIAogdm9pZCBJREJTZXJ2ZXI6OnVwZ3JhZGVGaWxlc0lmTmVjZXNzYXJ5
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJ2ZXIuaAppbmRleCBkM2EyMjNkOTMyZDkxNTlkNTQ2NjYyOWY3MTdlZmZiNTc3NDEzY2FmLi5i
ZjJiNDc4ODQ1NDY4ZjNhMzQ5NWJiZmU5NTJlYTkwMzcwYzM2M2NkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0zMCw3
ICszMCw2IEBACiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvQ2xpZW50LmgiCiAjaW5jbHVkZSAi
SURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU3RvcmFnZVF1b3RhTWFuYWdlci5o
IgotI2luY2x1ZGUgIlN0b3JhZ2VRdW90YVVzZXIuaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRh
YmFzZS5oIgogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oIgogI2luY2x1
ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0aXZpdHkuaD4KQEAgLTU4LDkgKzU3LDkgQEAgZW51bSBjbGFz
cyBTaG91bGRGb3JjZVN0b3AgOiBib29sIHsgTm8sIFllcyB9OwogCiBjbGFzcyBJREJTZXJ2ZXIg
OiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2ZXI+LCBwdWJsaWMgQ3Jvc3NUaHJlYWRUYXNrSGFu
ZGxlciwgcHVibGljIENhbk1ha2VXZWFrUHRyPElEQlNlcnZlcj4gewogcHVibGljOgotICAgIHVz
aW5nIFF1b3RhTWFuYWdlckdldHRlciA9IFdURjo6RnVuY3Rpb248U3RvcmFnZVF1b3RhTWFuYWdl
ciooUEFMOjpTZXNzaW9uSUQsIGNvbnN0IENsaWVudE9yaWdpbiYpPjsKLSAgICBzdGF0aWMgUmVm
PElEQlNlcnZlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6OlNl
c3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdl
ckdldHRlciYmKTsKKyAgICB1c2luZyBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyID0gV1RGOjpG
dW5jdGlvbjxSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4oY29uc3QgQ2xpZW50T3JpZ2luJik+
OworICAgIHN0YXRpYyBSZWY8SURCU2VydmVyPiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIFN0b3Jh
Z2VRdW90YU1hbmFnZXJHZXR0ZXImJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJ
REJTZXJ2ZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURp
cmVjdG9yeVBhdGgsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXImJik7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlZ2lzdGVyQ29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVucmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rp
b25Ub0NsaWVudCYpOwpAQCAtMTExLDIxICsxMTAsMTUgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1l
LCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8
U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpOwogCi0gICAgdm9pZCByZXF1ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0
X3QgdGFza1NpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6
RGVjaXNpb24pPiYmKTsKLSAgICB2b2lkIGluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0
IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGRlY3JlYXNlUG90
ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsK
LSAgICB2b2lkIGluY3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90
IHNpemUpOwotICAgIHZvaWQgZGVjcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwg
dWludDY0X3Qgc2l6ZSk7Ci0gICAgdm9pZCByZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmln
aW4mKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4m
IG9yaWdpbikgeyBlbnN1cmVRdW90YVVzZXIob3JpZ2luKTsgfQorICAgIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OkRlY2lzaW9uIHJlcXVlc3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRf
dCB0YXNrU2l6ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHVpbnQ2NF90IGRpc2tVc2Fn
ZShjb25zdCBTdHJpbmcmLCBjb25zdCBDbGllbnRPcmlnaW4mKTsKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgdHJ5U3RvcChTaG91bGRGb3JjZVN0b3ApOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVzdW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBR
dW90YU1hbmFnZXJHZXR0ZXImJik7Ci0gICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOwor
ICAgIElEQlNlcnZlcihQQUw6OlNlc3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlckdldHRlciYm
KTsKKyAgICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VE
aXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOwogCiAgICAgVW5pcXVl
SURCRGF0YWJhc2UmIGdldE9yQ3JlYXRlVW5pcXVlSURCRGF0YWJhc2UoY29uc3QgSURCRGF0YWJh
c2VJZGVudGlmaWVyJik7CiAgICAgCkBAIC0xNDIsNTEgKzEzNSw2IEBAIHByaXZhdGU6CiAgICAg
dm9pZCByZW1vdmVEYXRhYmFzZXNNb2RpZmllZFNpbmNlRm9yVmVyc2lvbihXYWxsVGltZSwgY29u
c3QgU3RyaW5nJik7CiAgICAgdm9pZCByZW1vdmVEYXRhYmFzZXNXaXRoT3JpZ2luc0ZvclZlcnNp
b24oY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mLCBjb25zdCBTdHJpbmcmKTsKIAot
ICAgIGNsYXNzIFF1b3RhVXNlciBmaW5hbCA6IHB1YmxpYyBTdG9yYWdlUXVvdGFVc2VyIHsKLSAg
ICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBRdW90
YVVzZXIoSURCU2VydmVyJiwgU3RvcmFnZVF1b3RhTWFuYWdlciosIENsaWVudE9yaWdpbiYmKTsK
LSAgICAgICAgflF1b3RhVXNlcigpOwotCi0gICAgICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1h
bmFnZXIoKSB7IHJldHVybiBtX21hbmFnZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIHNldFNw
YWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpIHsgbV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7IH0K
LSAgICAgICAgdm9pZCByZXNldFNwYWNlVXNlZCgpOwotCi0gICAgICAgIHZvaWQgaW5jcmVhc2VQ
b3RlbnRpYWxTcGFjZVVzZWQodWludDY0X3QgaW5jcmVhc2UpIHsgbV9lc3RpbWF0ZWRTcGFjZUlu
Y3JlYXNlICs9IGluY3JlYXNlOyB9Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFj
ZVVzZWQodWludDY0X3QgZGVjcmVhc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCht
X2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgPj0gZGVjcmVhc2UpOwotICAgICAgICAgICAgbV9lc3Rp
bWF0ZWRTcGFjZUluY3JlYXNlIC09IGRlY3JlYXNlOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQg
aW5jcmVhc2VTcGFjZVVzZWQodWludDY0X3Qgc2l6ZSk7Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VT
cGFjZVVzZWQodWludDY0X3Qgc2l6ZSk7Ci0KLSAgICAgICAgdm9pZCBpbml0aWFsaXplU3BhY2VV
c2VkKHVpbnQ2NF90IHNwYWNlVXNlZCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB1aW50NjRf
dCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
bV9pc0luaXRpYWxpemVkKTsKLSAgICAgICAgICAgIHJldHVybiBtX3NwYWNlVXNlZCArIG1fZXN0
aW1hdGVkU3BhY2VJbmNyZWFzZTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGNvbXB1dGVTcGFj
ZVVzZWQoKSBmaW5hbDsKLSAgICAgICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKLQotICAgICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwot
ICAgICAgICBXZWFrUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IG1fbWFuYWdlcjsKLSAgICAgICAg
Q2xpZW50T3JpZ2luIG1fb3JpZ2luOwotICAgICAgICBib29sIG1faXNJbml0aWFsaXplZCB7IGZh
bHNlIH07Ci0gICAgICAgIHVpbnQ2NF90IG1fc3BhY2VVc2VkIHsgMCB9OwotICAgICAgICB1aW50
NjRfdCBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgeyAwIH07Ci0gICAgICAgIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4gbV9pbml0aWFsaXphdGlvbkNhbGxiYWNrOwotICAgIH07Ci0KLSAgICBX
RUJDT1JFX0VYUE9SVCBRdW90YVVzZXImIGVuc3VyZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmln
aW4mKTsKLSAgICB2b2lkIHN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENs
aWVudE9yaWdpbiYpOwotICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbihjb25zdCBD
bGllbnRPcmlnaW4mKTsKLSAgICB2b2lkIGZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdp
bihjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzcGFjZVVzZWQpOwotCiAgICAgUEFMOjpT
ZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAgICAgSGFzaE1hcDxJREJDb25uZWN0aW9uSWRlbnRpZmll
ciwgUmVmUHRyPElEQkNvbm5lY3Rpb25Ub0NsaWVudD4+IG1fY29ubmVjdGlvbk1hcDsKICAgICBI
YXNoTWFwPElEQkRhdGFiYXNlSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFVuaXF1ZUlEQkRh
dGFiYXNlPj4gbV91bmlxdWVJREJEYXRhYmFzZU1hcDsKQEAgLTE5OCw4ICsxNDYsNyBAQCBwcml2
YXRlOgogCiAgICAgU3RyaW5nIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoOwogCi0gICAgSGFzaE1h
cDxDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxRdW90YVVzZXI+PiBtX3F1b3RhVXNlcnM7
Ci0gICAgUXVvdGFNYW5hZ2VyR2V0dGVyIG1fcXVvdGFNYW5hZ2VyR2V0dGVyOworICAgIFN0b3Jh
Z2VRdW90YU1hbmFnZXJHZXR0ZXIgbV9xdW90YU1hbmFnZXJHZXR0ZXI7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IGZkZWRhNjM1
ZWI3ZGMwNWY3ZmY3ZTA1ODJjYzQ5MmYwYzJkODMyYmIuLjI3NjcyMjgxNzljNWM5YzgxMWU2Y2My
MzBkMWUzNjhkOGZlMWNkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMTg2LDU2
ICsxODYsNiBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBxdW90YUVycm9yTWVzc2FnZU5hbWUoY29u
c3QgY2hhciogdGFza05hbWUpCiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkZhaWxlZCB0byAiLCB0
YXNrTmFtZSwgIiBpbiBkYXRhYmFzZSBiZWNhdXNlIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGRvbWFp
biIpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZXF1ZXN0U3BhY2UoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IHRhc2tTaXplLCBjb25z
dCBjaGFyKiB0YXNrTmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJiBj
YWxsYmFjaykKLXsKLSAgICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmln
aW4oKSwgdGFza1NpemUsIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCB0aGlzLCB3ZWFr
VHJhbnNhY3Rpb24gPSBtYWtlV2Vha1B0cih0cmFuc2FjdGlvbiksIHRhc2tOYW1lLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKLSAgICAgICAg
aWYgKCF3ZWFrVGhpcykgewotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3du
RXJyb3IgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
IXdlYWtUcmFuc2FjdGlvbikgewotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1fb3duaW5nUG9pbnRlckZvckNsb3NlKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgY2xvc2lu
ZyB0aGUgZGF0YWJhc2UsIHRoZXJlIGlzIG5vIHBvaW50IGluIHRyeWluZyB0byBtb2RpZnkgdGhl
IGRhdGFiYXNlIGF0IHRoYXQgcG9pbnQuCi0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7
IFVua25vd25FcnJvciB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIHN3aXRjaCAoZGVjaXNpb24pIHsKLSAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpEZWNpc2lvbjo6RGVueToKLSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgUXVvdGFF
eGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUodGFza05hbWUpIH0pOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
OjpHcmFudDoKLSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgfSk7Ci0gICAgICAgIH07
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OndhaXRGb3JSZXF1ZXN0U3Bh
Y2VDb21wbGV0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKElEQkVycm9yJiYpPiYmIGNhbGxiYWNrKQotewotICAgIHJl
cXVlc3RTcGFjZSh0cmFuc2FjdGlvbiwgMCwgIiIsIFdURk1vdmUoY2FsbGJhY2spKTsKLX0KLQot
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBp
ZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrU2l6ZSkKLXsKLSAgICBtX3NlcnZlci0+aW5jcmVhc2VQ
b3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6ZSk7Ci0gICAg
QVNTRVJUKCFtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuY29udGFpbnMoaWRlbnRpZmllcikp
OwotICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1Np
emUpOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3JlYXNlVGFz
ayh1aW50NjRfdCBpZGVudGlmaWVyLCBib29sIGlzVGFza1N1Y2Nlc3NmdWwpCi17Ci0gICAgYXV0
byBpdGVyYXRvciA9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5maW5kKGlkZW50aWZpZXIp
OwotICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZW5k
KCkpOwotICAgIG1fc2VydmVyLT5kZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZp
ZXIub3JpZ2luKCksIGl0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgaWYgKGlzVGFza1N1Y2Nlc3NmdWwp
Ci0gICAgICAgIG1fc2VydmVyLT5pbmNyZWFzZVNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2lu
KCksIGl0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLnJl
bW92ZShpdGVyYXRvcik7Ci19Ci0KIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJy
ZW50T3Blbk9wZXJhdGlvbigpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uICglcCkiLCB0aGlzKTsKQEAg
LTI0NiwyOSArMTk2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRP
cGVuT3BlcmF0aW9uKCkKICAgICBpZiAoIW1fZGF0YWJhc2VJbmZvKSB7CiAgICAgICAgIGlmICgh
bV9pc09wZW5pbmdCYWNraW5nU3RvcmUpIHsKICAgICAgICAgICAgIG1faXNPcGVuaW5nQmFja2lu
Z1N0b3JlID0gdHJ1ZTsKLSAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBrbm93IHdoZXRoZXIgdGhp
cyBpcyBhbiBleGlzdGluZyBvciBhIG5ldyBkYXRhYmFzZS4KLSAgICAgICAgICAgIC8vIFdlIHNl
dCBhIHNtYWxsIGNvc3Qgc28gdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gb3BlbiBhbiBpbmZp
bml0ZSBudW1iZXIgb2YgZGF0YWJhc2UuCi0gICAgICAgICAgICBtX3NlcnZlci0+cmVxdWVzdFNw
YWNlKG1faWRlbnRpZmllci5vcmlnaW4oKSwgZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCwgW3Ro
aXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldKGF1dG8gZGVjaXNpb24pIG11dGFibGUg
ewotICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAgICAgICAgIGlmIChtX293bmluZ1BvaW50ZXJGb3JDbG9zZSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgc3dpdGNoIChkZWNp
c2lvbikgewotICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b246OkRlbnk6IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBJREJSZXN1bHRE
YXRhOjplcnJvcihtX2N1cnJlbnRPcGVuREJSZXF1ZXN0LT5yZXF1ZXN0RGF0YSgpLnJlcXVlc3RJ
ZGVudGlmaWVyKCksIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVz
c2FnZU5hbWUoIm9wZW5EYXRhYmFzZSIpIH0pOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRPcGVuREJSZXF1ZXN0LT5jb25uZWN0aW9uKCkuZGlkT3BlbkRhdGFiYXNlKHJlc3VsdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fY3VycmVudE9wZW5EQlJlcXVlc3QgPSBudWxscHRyOwotICAg
ICAgICAgICAgICAgICAgICBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Y2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQ6Ci0gICAgICAgICAgICAg
ICAgICAgIGF1dG8gY2FsbGJhY2tJRCA9IHRoaXMtPmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVu
dGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2Fs
bGJhY2tJRCwgZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCk7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMtPnBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUsIG1faWRlbnRpZmllciwgY2FsbGJhY2tJ
RCkpOwotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHBv
c3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUsIG1faWRlbnRpZmllcikpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC04MjEsMjMgKzc0OSwzMCBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjphZGRPcGVuRGF0YWJhc2VDb25uZWN0aW9uKFJlZjxVbmlxdWVJREJEYXRhYmFzZUNv
bm5lY3RpbwogICAgIG1fb3BlbkRhdGFiYXNlQ29ubmVjdGlvbnMuYWRkKGFkb3B0UmVmKGNvbm5l
Y3Rpb24ubGVha1JlZigpKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNr
aW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCB1aW50NjRf
dCB0YXNrSWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3Rv
cmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRh
dGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlICglcCkiLCB0aGlzKTsKIAorCisgICAgSURCRGF0YWJh
c2VJbmZvIGRhdGFiYXNlSW5mbzsKKyAgICAvLyBRdW90YSBjaGVjay4KKyAgICBhdXRvIGRlY2lz
aW9uID0gbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShpZGVudGlmaWVyLm9yaWdpbigpLCBkZWZhdWx0
V3JpdGVPcGVyYXRpb25Db3N0KTsKKyAgICBpZiAoZGVjaXNpb24gPT0gU3RvcmFnZVF1b3RhTWFu
YWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFj
a2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVv
dGFFcnJvck1lc3NhZ2VOYW1lKCJPcGVuQmFja2luZ1N0b3JlIikpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlKTsKICAgICBtX2JhY2tpbmdT
dG9yZSA9IG1fc2VydmVyLT5jcmVhdGVCYWNraW5nU3RvcmUoaWRlbnRpZmllcik7CiAgICAgbV9i
YWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IG1fYmFja2luZ1N0
b3JlLT5zdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucygpOwogICAgIG1fYmFja2luZ1N0
b3JlSXNFcGhlbWVyYWwgPSBtX2JhY2tpbmdTdG9yZS0+aXNFcGhlbWVyYWwoKTsKIAotICAgIElE
QkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0
b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOwotCi0gICAgcG9z
dERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yLCAgdGFz
a0lkZW50aWZpZXIpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRh
dGFiYXNlSW5mbywgZXJyb3IpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3Bl
bkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9y
JiBlcnJvciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3Qg
SURCRXJyb3ImIGVycm9yKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9H
KEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9y
ZSIpOwpAQCAtODQ4LDggKzc4Myw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5C
YWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJCiAgICAgQVNT
RVJUKG1faXNPcGVuaW5nQmFja2luZ1N0b3JlKTsKICAgICBtX2lzT3BlbmluZ0JhY2tpbmdTdG9y
ZSA9IGZhbHNlOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodGFza0lkZW50aWZpZXIs
IGVycm9yLmlzTnVsbCgpKTsKLQogICAgIGlmIChtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTg2MSwzMyArNzk0LDIzIEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAi
KG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSIpOwogCi0gICAgYXV0
byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5m
byk7Ci0gICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNrU2l6ZSwgImNyZWF0ZU9iamVj
dFN0b3JlIiwgW3RoaXMsIHRhc2tTaXplLCAmdHJhbnNhY3Rpb24sIGluZm8sIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVy
cm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0g
ICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hl
Y2sodGFza1NpemUsIHRyYW5zYWN0aW9uLCBpbmZvLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3Ip
OwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9y
ZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbywgRXJy
b3JDYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCi17CiAgICAg
dWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNh
bGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAKLSAgICBz
dGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKLSAgICBwb3N0RGF0
YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8o
KS5pZGVudGlmaWVyKCksIGluZm8sICBxdW90YUVycm9yKSk7CisgICAgcG9zdERhdGFiYXNlVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUNyZWF0ZU9iamVjdFN0b3JlLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHRy
YW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIAotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIHF1b3Rh
RXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUo
Y29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0
IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbykKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNy
ZWF0ZU9iamVjdFN0b3JlIik7CiAKLSAgICBpZiAoIXF1b3RhRXJyb3IuaXNOdWxsKCkpIHsKLSAg
ICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNr
SWRlbnRpZmllciwgcXVvdGFFcnJvciwgaW5mbykpOworICAgIC8vIFF1b3RhIGNoZWNrLgorICAg
IGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXpl
KGluZm8pOworICAgIGF1dG8gZGVjaXNpb24gPSBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdp
biwgdGFza1NpemUpOworICAgIGlmIChkZWNpc2lvbiA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVP
YmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJy
b3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiQ3JlYXRlT2JqZWN0U3RvcmUiKSksIGluZm8pKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTAzLDcgKzgyNiw2IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhl
ZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3Rv
cmUiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IuaXNOdWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkKICAgICAgICAgbV9kYXRh
YmFzZUluZm8tPmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAKQEAgLTkxNSwxNyArODM3
LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9i
amVjdFN0b3JlIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2Fj
dGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVOYW1lLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVy
cm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+ZGVsZXRlT2JqZWN0
U3RvcmVBZnRlclF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTmFtZSwgV1RGTW92
ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxl
dGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIEVycm9yQ2FsbGJh
Y2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tP
ckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAg
ICAgICByZXR1cm47CkBAIC05MzYsMTQgKzg0NywxOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkZWxldGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9i
amVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBp
bmZvLT5pZGVudGlmaWVyKCkpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlT2JqZWN0U3Rv
cmUsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygp
LmlkZW50aWZpZXIoKSwgaW5mby0+aWRlbnRpZmllcigpKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikKIHsK
ICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlIik7CiAKKyAgICBpZiAo
bV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6
OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0
ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRF
cnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJEZWxldGVPYmplY3RTdG9yZSIpKSwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBBU1NFUlQo
bV9iYWNraW5nU3RvcmUpOwogICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSh0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAKQEAgLTk2Nywz
OCArODgzLDI4IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlKFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpy
ZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9w
ZXJhdGlvbkNvc3QgKyBuZXdOYW1lLnNpemVJbkJ5dGVzKCk7Ci0gICAgcmVxdWVzdFNwYWNlKHRy
YW5zYWN0aW9uLCB0YXNrU2l6ZSwgInJlbmFtZU9iamVjdFN0b3JlIiwgW3RoaXMsIHRhc2tTaXpl
LCAmdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICgh
ZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsK
LSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5yZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFD
aGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFt
ZSwgV1RGTW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFz
a1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxs
YmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCi17CiAgICAgdWludDY0
X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNr
KSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAKLSAgICBJREJFcnJv
ciBlcnJvciA9IHF1b3RhRXJyb3I7CisgICAgSURCRXJyb3IgZXJyb3I7CiAgICAgYXV0byogaW5m
byA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9y
ZUlkZW50aWZpZXIpOwogICAgIGlmICghaW5mbykKICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7
IFVua25vd25FcnJvciwgIkF0dGVtcHQgdG8gcmVuYW1lIG5vbi1leGlzdGFudCBvYmplY3Qgc3Rv
cmUiX3MgfTsKIAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1Np
emUpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwg
dHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBu
ZXdOYW1lLCBlcnJvcikpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwg
bV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRl
bnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIGVycm9yKSk7CiB9CiAK
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImIGVycm9yKQordm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2lu
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImIGVycm9yKQogewogICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUiKTsKIAotICAgIGlmICghZXJyb3Iu
aXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0
U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
bmV3TmFtZSkpOworICAgIC8vIFF1b3RhIGNoZWNrLgorICAgIGF1dG8gdGFza1NpemUgPSBkZWZh
dWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgbmV3TmFtZS5zaXplSW5CeXRlcygpOworICAgIGF1dG8g
ZGVjaXNpb24gPSBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgdGFza1NpemUpOworICAg
IGlmIChkZWNpc2lvbiA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgewor
ICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNz
YWdlTmFtZSgiUmVuYW1lT2JqZWN0U3RvcmUiKSksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3
TmFtZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDEzLDcgKzkxOSw2IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1l
T2JqZWN0U3RvcmUiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkKICAgICAg
ICAgbV9kYXRhYmFzZUluZm8tPnJlbmFtZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgbmV3TmFtZSk7CiAKQEAgLTEwMjUsMjggKzkzMCwyMiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpjbGVhck9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIiht
YWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZSIpOwogCi0gICAgd2FpdEZv
clJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rpb24s
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0
byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAg
ICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNsZWFyT2JqZWN0U3RvcmVBZmV0UXVvdGFDaGVjayh0
cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmVBZmV0
UXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQotewog
ICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92
ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwotICAg
IHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1DbGVhck9iamVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlv
bi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpKTsKKyAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxs
YmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50
aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNsZWFyT2JqZWN0
U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUoY29u
c3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
ICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNsZWFy
T2JqZWN0U3RvcmUiKTsKIAorICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwg
MCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9z
dERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVy
LCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiQ2xl
YXJPYmplY3RTdG9yZSIpKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQVNTRVJU
KG1fYmFja2luZ1N0b3JlKTsKICAgICBtX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9yZSh0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAKQEAgLTEwNjcs
MzMgKzk2NiwyMiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleChVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgYwogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6
Y3JlYXRlSW5kZXgiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRp
b25Db3N0ICsgZXN0aW1hdGVTaXplKGluZm8pOwotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2FjdGlv
biwgdGFza1NpemUsICJjcmVhdGVJbmRleCIsIFt0aGlzLCB0YXNrU2l6ZSwgJnRyYW5zYWN0aW9u
LCBpbmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9IFF1b3Rh
RXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNyZWF0ZUluZGV4
QWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgaW5mbywgV1RGTW92ZShjYWxs
YmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3Jl
YXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8sIEVy
cm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQotewogICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShj
YWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
c3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7Ci0gICAgcG9zdERh
dGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRl
bnRpZmllcigpLCBpbmZvLCBxdW90YUVycm9yKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0
ZUluZGV4LCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmlu
Zm8oKS5pZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4
SW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKIHsKICAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4Iik7CiAKLSAgICBpZiAoIXF1b3RhRXJyb3Iu
aXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgs
IGNhbGxiYWNrSWRlbnRpZmllciwgcXVvdGFFcnJvciwgaW5mbykpOworICAgIGF1dG8gdGFza1Np
emUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGluZm8pOworICAg
IGF1dG8gZGVjaXNpb24gPSBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgdGFza1NpemUp
OworICAgIGlmIChkZWNpc2lvbiA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVu
eSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNz
YWdlTmFtZSgiQ3JlYXRlSW5kZXgiKSksIGluZm8pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMTExNSw4ICsxMDAzLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNy
ZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7Ci0KICAgICBpZiAo
ZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKICAgICAg
ICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGlu
Z09iamVjdFN0b3JlKGluZm8ub2JqZWN0U3RvcmVJZGVudGlmaWVyKCkpOwpAQCAtMTEzMiwxNyAr
MTAxOCw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4KFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxl
dGVJbmRleCIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rp
b24sIFt0aGlzLCAmdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhOYW1l
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewot
ICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZN
b3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhp
cy0+ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRl
bnRpZmllciwgaW5kZXhOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNr
KQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3Io
V1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTE1OSwxNCArMTAzNCwxOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJ
bmRleEFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJgogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZUluZGV4LCBjYWxs
YmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIGluZGV4SW5mby0+aWRlbnRpZmllcigpKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURl
bGV0ZUluZGV4LCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9u
LmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJbmZvLT5p
ZGVudGlmaWVyKCkpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0
ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgY29uc3QgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybURlbGV0ZUluZGV4KGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IHVpbnQ2NF90IGluZGV4SWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURl
bGV0ZUluZGV4Iik7CiAKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDAp
ID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3RE
YXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJEZWxldGVJbmRl
eCIpKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgbV9iYWNr
aW5nU3RvcmUtPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIpOwogCkBAIC0xMTkzLDIzICsxMDczLDExIEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24mIHRyYW5zYWN0aW9uLCB1CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleCIpOwog
Ci0gICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBuZXdOYW1l
LnNpemVJbkJ5dGVzKCk7Ci0gICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNrU2l6ZSwg
InJlbmFtZUluZGV4IiwgW3RoaXMsIHRhc2tTaXplLCAmdHJhbnNhY3Rpb24sIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051
bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAg
ICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIHRoaXMtPnJlbmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0
cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05h
bWUsIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnJlbmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXpl
LCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3Rh
RXJyb3IpCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBJREJFcnJvciBlcnJvciA9IHF1b3RhRXJyb3I7CisgICAgSURCRXJyb3Ig
ZXJyb3I7CiAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9G
b3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgaWYgKCFv
YmplY3RTdG9yZUluZm8pCiAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3Is
ICJBdHRlbXB0IHRvIHJlbmFtZSBpbmRleCBpbiBub24tZXhpc3RhbnQgb2JqZWN0IHN0b3JlIl9z
IH07CkBAIC0xMjE4LDE3ICsxMDg2LDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFt
ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJECiAgICAg
aWYgKCFpbmRleEluZm8pCiAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3Is
ICJBdHRlbXB0IHRvIHJlbmFtZSBub24tZXhpc3RhbnQgaW5kZXgiX3MgfTsKIAotICAgIHN0YXJ0
U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwotICAgIHBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZp
ZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGVy
cm9yKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4LCBtX2lkZW50aWZpZXIub3Jp
Z2luKCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVj
dFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lLCBlcnJvcikpOwogfQog
Ci12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRl
eElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImIGVycm9y
KQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KGNvbnN0IENsaWVu
dE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBu
ZXdOYW1lLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1SZW5hbWVJbmRleCIpOwogCi0gICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBl
cnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsK
KyAgICAvLyBRdW90YSBjaGVjay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3Bl
cmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKKyAgICBhdXRvIGRlY2lzaW9uID0g
bV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIHRhc2tTaXplKTsKKyAgICBpZiAoZGVjaXNp
b24gPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9z
dERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgSURC
RXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIlJlbmFtZUlu
ZGV4IikpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMjQzLDcgKzExMTMsNiBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4
Iik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yLmlzTnVsbCgpKTsKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgYXV0byog
b2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0
b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgICAgIEFTU0VSVChvYmplY3RTdG9yZUlu
Zm8pOwpAQCAtMTI1Nyw1MiArMTEyNiw0MCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAg
IHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOwogfQogCi12
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25z
dCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6
T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayBj
YWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKGNvbnN0IElEQlJlcXVl
c3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURC
VmFsdWUmIHZhbHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3Jp
dGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
dXRPckFkZCIpOwogCi0gICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNv
c3QgKyBlc3RpbWF0ZVNpemUoa2V5RGF0YSkgKyBlc3RpbWF0ZVNpemUodmFsdWUpOwotICAgIEFT
U0VSVChtX2RhdGFiYXNlSW5mbyk7Ci0gICAgYXV0byogb2JqZWN0U3RvcmUgPSBtX2RhdGFiYXNl
SW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUocmVxdWVzdERhdGEub2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKCkpOwotICAgIGlmIChvYmplY3RTdG9yZSkKLSAgICAgICAgdGFza1NpemUgKz0g
b2JqZWN0U3RvcmUtPmluZGV4TmFtZXMoKS5zaXplKCkgKiB0YXNrU2l6ZTsKLQotICAgIHJlcXVl
c3RTcGFjZSh0cmFuc2FjdGlvbiwgdGFza1NpemUsICJwdXRPckFkZCIsIFt0aGlzLCB0YXNrU2l6
ZSwgcmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBvdmVyd3JpdGVNb2RlXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFl
cnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9IFF1b3RhRXhjZWVkZWRFcnJvcikgewot
ICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2so
dGFza1NpemUsIHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgV1RG
TW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIGNvbnN0IElE
QlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29u
c3QgSURCVmFsdWUmIHZhbHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBv
dmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBx
dW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNr
U2l6ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lELCByZXF1ZXN0
RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVu
dGlmaWVyKCksIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBxdW90YUVycm9yKSk7Cisg
ICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxi
YWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5v
YmplY3RTdG9yZUlkZW50aWZpZXIoKSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUpKTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5
RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIG9yaWdpbmFsUmVjb3JkVmFsdWUsIEluZGV4
ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIGNvbnN0IElEQkVy
cm9yJiBxdW90YUVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRk
KGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNv
bnN0IElEQlZhbHVlJiBvcmlnaW5hbFJlY29yZFZhbHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3Jl
T3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
UHV0T3JBZGQiKTsKIAotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgQVNTRVJUKG9i
amVjdFN0b3JlSWRlbnRpZmllcik7Ci0KICAgICBJREJLZXlEYXRhIHVzZWRLZXk7CiAgICAgSURC
RXJyb3IgZXJyb3I7CiAKLSAgICBpZiAoIXF1b3RhRXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAg
cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgcXVv
dGFFcnJvciwgdXNlZEtleSkpOworICAgIC8vIFF1b3RhIGNoZWNrLgorICAgIGF1dG8gdGFza1Np
emUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGtleURhdGEpICsg
ZXN0aW1hdGVTaXplKG9yaWdpbmFsUmVjb3JkVmFsdWUpOworICAgIEFTU0VSVChtX2RhdGFiYXNl
SW5mbyk7CisgICAgYXV0byogb2JqZWN0U3RvcmUgPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4
aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICBpZiAob2JqZWN0
U3RvcmUpCisgICAgICAgIHRhc2tTaXplICs9IG9iamVjdFN0b3JlLT5pbmRleE5hbWVzKCkuc2l6
ZSgpICogdGFza1NpemU7CisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0U3Bh
Y2Uob3JpZ2luLCB0YXNrU2l6ZSk7CisgICAgaWYgKGRlY2lzaW9uID09IFN0b3JhZ2VRdW90YU1h
bmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJv
ciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJQdXRPckFkZCIpKSwgdXNlZEtleSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKKyAgICBBU1NF
UlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICBpZiAoIW1fYmFja2luZ1N0b3JlKSB7CiAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKEluZGV4ZWREQiwgIiVwIC0gVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1QdXRPckFkZDogbV9iYWNraW5nU3RvcmUgaXMgbnVsbCIsIHRoaXMpOwogICAg
ICAgICBlcnJvciA9IElEQkVycm9yKEludmFsaWRTdGF0ZUVycm9yLCAiQmFja2luZyBzdG9yZSBp
cyBpbnZhbGlkIGZvciBjYWxsIHRvIHB1dCBvciBhZGQiX3MpOwpAQCAtMTM3Niw4MCArMTIzMyw2
NSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bVB1dE9yQWRkIik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50
aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKICAgICBwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKGNhbGxi
YWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdEtleSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmdldFJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRSZWNvcmRE
YXRhJiBnZXRSZWNvcmREYXRhLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERh
dGEsIGNvbnN0IElEQkdldFJlY29yZERhdGEmIGdldFJlY29yZERhdGEsIEdldFJlc3VsdENhbGxi
YWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkIik7CiAKLSAgICB3
YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3RE
YXRhLCBnZXRSZWNvcmREYXRhLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYg
ZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICB0aGlzLT5nZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2socmVxdWVz
dERhdGEsIGdldFJlY29yZERhdGEsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElE
QlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYgZ2V0UmVj
b3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2Fs
bGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAg
ICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAodWludDY0X3Qg
aW5kZXhJZGVudGlmaWVyID0gcmVxdWVzdERhdGEuaW5kZXhJZGVudGlmaWVyKCkpCi0gICAgICAg
IHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEu
dHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmll
cigpLCBpbmRleElkZW50aWZpZXIsIHJlcXVlc3REYXRhLmluZGV4UmVjb3JkVHlwZSgpLCBnZXRS
ZWNvcmREYXRhLmtleVJhbmdlRGF0YSkpOworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5k
ZXhSZWNvcmQsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEu
dHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmll
cigpLCBpbmRleElkZW50aWZpZXIsIHJlcXVlc3REYXRhLmluZGV4UmVjb3JkVHlwZSgpLCBnZXRS
ZWNvcmREYXRhLmtleVJhbmdlRGF0YSkpOwogICAgIGVsc2UKLSAgICAgICAgcG9zdERhdGFiYXNl
VGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUdldFJlY29yZCwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlm
aWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBnZXRSZWNvcmREYXRh
LmtleVJhbmdlRGF0YSwgZ2V0UmVjb3JkRGF0YS50eXBlKSk7CisgICAgICAgIHBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1HZXRSZWNvcmQsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgcmVxdWVz
dERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRl
bnRpZmllcigpLCBnZXRSZWNvcmREYXRhLmtleVJhbmdlRGF0YSwgZ2V0UmVjb3JkRGF0YS50eXBl
KSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHMoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRh
LCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3Qg
SURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBHZXRBbGxSZXN1bHRzQ2Fs
bGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0co
SW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzIik7CiAK
LSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJl
cXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkg
ewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Z2V0QWxsUmVjb3Jkc0FmdGVyUXVv
dGFDaGVjayhyZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jkc0RhdGEsIFdURk1vdmUoY2FsbGJhY2sp
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3Jkc0Fm
dGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElE
QkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSwgR2V0QWxsUmVzdWx0c0NhbGxi
YWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJlY29yZHMsIGNhbGxi
YWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCBnZXRBbGxSZWNvcmRz
RGF0YSkpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRzLCBtX2lkZW50aWZpZXIu
b3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigp
LCBnZXRBbGxSZWNvcmRzRGF0YSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtR2V0UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEsIElEQkdldFJl
Y29yZERhdGFUeXBlIHR5cGUpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVj
b3JkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5
UmFuZ2VEYXRhLCBJREJHZXRSZWNvcmREYXRhVHlwZSB0eXBlKQogewogICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtR2V0UmVjb3JkIik7CiAKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotCiAg
ICAgSURCR2V0UmVzdWx0IHJlc3VsdDsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShv
cmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAg
ICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVy
LCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IpLCByZXN1bHQpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgSURCRXJyb3IgZXJy
b3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlSYW5nZURhdGEsIHR5cGUsIHJlc3VsdCk7CiAKICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IsIHJlc3VsdCkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5k
ZXhSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRU
eXBlIHJlY29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCit2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlw
ZSByZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQogewogICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQiKTsKIAotICAgIEFTU0VSVChtX2JhY2tpbmdT
dG9yZSk7Ci0KICAgICBJREJHZXRSZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3NlcnZlci0+cmVx
dWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRl
bnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFj
a0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIHJlc3VsdCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBJ
REJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRJbmRleFJlY29yZCh0cmFuc2FjdGlv
bklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCByZWNv
cmRUeXBlLCByYW5nZSwgcmVzdWx0KTsKIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdl
dFJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KSk7CkBAIC0xNDYzLDE0
ICsxMzA1LDE4IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJCiAgICAgcGVyZm9ybUdldFJlc3Vs
dENhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCk7CiB9CiAKLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSkKK3Zv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRzKGNvbnN0IENsaWVudE9y
aWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNv
cmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1H
ZXRBbGxSZWNvcmRzIik7CiAKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotCiAgICAgSURC
R2V0QWxsUmVzdWx0IHJlc3VsdDsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmln
aW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldEFsbFJlY29yZHMsIGNhbGxiYWNrSWRlbnRpZmll
ciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgV1RGTW92ZShyZXN1bHQpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIElE
QkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldEFsbFJlY29yZHModHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBnZXRBbGxSZWNvcmRzRGF0YSwgcmVzdWx0KTsKIAogICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUdldEFsbFJlY29yZHMsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIFdU
Rk1vdmUocmVzdWx0KSkpOwpAQCAtMTQ4NCwzNyArMTMzMCwzMCBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtR2V0QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbgogICAgIHBlcmZvcm1HZXRBbGxSZXN1bHRzQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlm
aWVyLCBlcnJvciwgcmVzdWx0KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291
bnQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJl
cXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgQ291
bnRDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldENvdW50KGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBy
YW5nZSwgQ291bnRDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmdldENv
dW50Iik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwg
W3RoaXMsIHJlcXVlc3REYXRhLCByYW5nZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0o
YXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewot
ICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Z2V0Q291bnRBZnRlclF1b3RhQ2hlY2so
cmVxdWVzdERhdGEsIHJhbmdlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldENvdW50QWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJl
cXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgQ291
bnRDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVD
YWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNr
SUQpCiAgICAgICAgIHJldHVybjsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQsIGNhbGxi
YWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5v
YmplY3RTdG9yZUlkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEuaW5kZXhJZGVudGlmaWVyKCksIHJh
bmdlKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldENvdW50LCBtX2lkZW50aWZpZXIub3JpZ2lu
KCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1
ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEuaW5kZXhJZGVudGlm
aWVyKCksIHJhbmdlKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRD
b3VudCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlS
YW5nZURhdGEpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQoY29uc3Qg
Q2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJL
ZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdl
dENvdW50Iik7CiAKKyAgICB1aW50NjRfdCBjb3VudDsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVl
c3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55
KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldENvdW50LCBjYWxsYmFja0lk
ZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIGNvdW50KSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIEFTU0VS
VChvYmplY3RTdG9yZUlkZW50aWZpZXIpOwotCi0gICAgdWludDY0X3QgY291bnQ7CiAgICAgSURC
RXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0Q291bnQodHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwga2V5UmFuZ2VEYXRh
LCBjb3VudCk7CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRDb3VudCwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvciwgY291bnQpKTsKQEAgLTE1MjgsMzUgKzEzNjcsMjggQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldENvdW50KHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSUQKICAgICBwZXJmb3JtQ291bnRDYWxsYmFjayhjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yLCBjb3VudCk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRl
bGV0ZVJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29u
c3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtl
eVJhbmdlRGF0YSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRlbGV0ZVJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWlu
KSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVz
dFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBrZXlSYW5n
ZURhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJs
ZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNr
KFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICB0aGlzLT5kZWxldGVSZWNvcmRBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGtleVJhbmdl
RGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkZWxldGVSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEm
IHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgRXJyb3JD
YWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQp
CiAgICAgICAgIHJldHVybjsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkLCBjYWxs
YmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEu
b2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGtleVJhbmdlRGF0YSkpOworICAgIHBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1EZWxldGVSZWNvcmQsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgcmVx
dWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3Jl
SWRlbnRpZmllcigpLCBrZXlSYW5nZURhdGEpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybURlbGV0ZVJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkKGNvbnN0IENsaWVudE9yaWdp
biYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCiB7CiAgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1EZWxldGVSZWNvcmQiKTsKIAotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNr
aW5nU3RvcmUtPmRlbGV0ZVJhbmdlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCByYW5nZSk7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2lu
LCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwg
SURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSkpOworICAgICAgICByZXR1cm47CisgICAgfQog
CisgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmFuZ2UodHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHJhbmdlKTsKICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IpKTsKIH0KIApAQCAtMTU2OCwzNCArMTQwMCwyNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
cwogICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOwog
fQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERh
dGEsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNr
KQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0
YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8sIEdldFJlc3VsdENhbGxi
YWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvciIpOwogCi0gICAg
d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0
RGF0YSwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2Fs
bGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy0+b3BlbkN1cnNvckFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwg
aW5mbywgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpvcGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sg
Y2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAg
ICByZXR1cm47Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJzb3IsIGNhbGxiYWNrSUQsIHJl
cXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCBpbmZvKSk7CisgICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybU9wZW5DdXJzb3IsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgcmVx
dWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIAotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJzb3IodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1PcGVuQ3Vyc29yKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQogewogICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtT3BlbkN1cnNvciIpOwogCiAgICAgSURCR2V0UmVzdWx0IHJlc3VsdDsKKyAgICBpZiAo
bV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6
OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybU9wZW5D
dXJzb3IsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwg
cmVzdWx0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgSURCRXJyb3IgZXJyb3IgPSBt
X2JhY2tpbmdTdG9yZS0+b3BlbkN1cnNvcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGluZm8sIHJl
c3VsdCk7CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1PcGVuQ3Vyc29yLCBjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKQEAgLTE2MDksMzQgKzE0MzQsMjcgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybU9wZW5DdXJzb3IodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdAogICAgIHBlcmZvcm1HZXRSZXN1bHRDYWxsYmFjayhjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjppdGVyYXRlQ3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
LCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkl0ZXJhdGVDdXJz
b3JEYXRhJiBkYXRhLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
LCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2Fs
bGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yIik7CiAKLSAgICB3YWl0
Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRh
LCBkYXRhLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFi
bGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFj
ayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICB0aGlzLT5pdGVyYXRlQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCBk
YXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6Oml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEm
IHJlcXVlc3REYXRhLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSwgR2V0UmVzdWx0
Q2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2Fs
bGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lE
KQogICAgICAgICByZXR1cm47Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IsIGNh
bGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0
YS5jdXJzb3JJZGVudGlmaWVyKCksIGRhdGEpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0
ZUN1cnNvciwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50
cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEuY3Vyc29ySWRlbnRpZmllcigpLCBk
YXRhKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29y
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vy
c29ySWRlbnRpZmllciwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEpCit2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvcihjb25zdCBDbGllbnRPcmlnaW4m
IG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSkK
IHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRi
KSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IiKTsKIAogICAgIElEQkdl
dFJlc3VsdCByZXN1bHQ7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAw
KSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1JdGVyYXRlQ3Vyc29yLCBjYWxsYmFja0lkZW50aWZpZXIsIElE
QkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIHJlc3VsdCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPml0ZXJhdGVDdXJzb3Io
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjdXJzb3JJZGVudGlmaWVyLCBkYXRhLCByZXN1bHQpOwog
CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CkBAIC0xNjg4LDE3ICsxNTA2LDYgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3QKIAogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5l
Y3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNv
bXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rpb24sIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJy
b3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5jb21taXRUcmFuc2Fj
dGlvbkFmdGVyUXVvdGFDaGVjayh0cmFuc2FjdGlvbiwgV1RGTW92ZShjYWxsYmFjaykpOwotICAg
IH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbkFmdGVy
UXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgRXJy
b3JDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVD
YWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNr
SUQpCiAgICAgICAgIHJldHVybjsKQEAgLTE3MTQsMTMgKzE1MjEsMTUgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2EKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHBvc3REYXRhYmFzZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1Db21taXRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50
aWZpZXIoKSkpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwgbV9pZGVu
dGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmll
cigpKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2Fj
dGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyKQogewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIExP
RyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNh
Y3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uSWRlbnRpZmllci5sb2dnaW5nU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJF
cnJvcihRdW90YUV4Y2VlZGVkRXJyb3IpLCB0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUt
PmNvbW1pdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgcG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IsIHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwpAQCAtMTc1MiwyNCArMTU2MSwxMyBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLAogICAgIHRyYW5zYWN0aW9uQ29tcGxldGVkKG1fZmluaXNoaW5n
VHJhbnNhY3Rpb25zLnRha2UodHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiB9CiAKLXZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIFdhaXRGb3JQZW5kaW5nVGFza3Mgd2FpdEZvclBlbmRpbmdUYXNr
cywgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmFib3J0
VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIEVy
cm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5zYWN0
aW9uIC0gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKIAogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5l
Y3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwogCi0gICAgaWYgKHdhaXRGb3JQZW5kaW5nVGFz
a3MgPT0gV2FpdEZvclBlbmRpbmdUYXNrczo6WWVzKSB7Ci0gICAgICAgIHdhaXRGb3JSZXF1ZXN0
U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICAg
ICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1v
dmUoZXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB0aGlzLT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBXYWl0Rm9yUGVuZGlu
Z1Rhc2tzOjpObywgV1RGTW92ZShjYWxsYmFjaykpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTc4NSw3ICsxNTgzLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
YWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1BYm9ydFRyYW5z
YWN0aW9uLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7Cisg
ICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24sIG1faWRlbnRpZmllci5vcmlnaW4o
KSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSkpOwogfQogCiB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoVW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikKQEAgLTE4MDcsMTEgKzE2MDUsMTYgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRmluaXNoSGFuZGxpbmdWZXJzaW9uQ2hhbmdlKFVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGkKICAgICBpbnZva2VPcGVyYXRpb25BbmRUcmFuc2FjdGlv
blRpbWVyKCk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1BYm9ydFRyYW5z
YWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtQWJvcnRUcmFuc2FjdGlvbihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNh
Y3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uSWRlbnRpZmllci5sb2dnaW5nU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CiAKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybUFib3J0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSWRlbnRpZmllciwgSURC
RXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgcG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJv
ciwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4
IGVjM2ZjMGM3M2VhMzBlMjRlN2EwY2VlNTg4OWYzOTYxZjBjYzRjMjcuLjc0NDk4NTI0ZjkxNzEy
ODM4YTk2ZDI3ZmY4NTZjMzRmNzdjYTA1ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC00
NCw2ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IENsaWVudE9yaWdp
bjsKIGNsYXNzIElEQkVycm9yOwogY2xhc3MgSURCR2V0QWxsUmVzdWx0Owogc3RydWN0IElEQkdl
dFJlY29yZERhdGE7CkBAIC04OSwxNyArOTAsMTUgQEAgcHVibGljOgogICAgIHZvaWQgY3JlYXRl
SW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQkluZGV4SW5mbyYs
IEVycm9yQ2FsbGJhY2spOwogICAgIHZvaWQgZGVsZXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBpbmRleE5hbWUsIEVycm9yQ2FsbGJhY2spOwogICAgIHZvaWQgcmVuYW1lSW5kZXgoVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
dWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2Fs
bGJhY2spOwotICAgIHZvaWQgcHV0T3JBZGQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYs
IGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVl
JiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayk7
Ci0gICAgdm9pZCBnZXRSZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0
IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYsIEdldFJlc3VsdENhbGxi
YWNrKTsKLSAgICB2b2lkIGdldEFsbFJlY29yZHMoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmLCBH
ZXRBbGxSZXN1bHRzQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0Q291bnQoVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJiwgQ291bnRDYWxsYmFjayk7Ci0gICAgdm9pZCBkZWxldGVSZWNvcmQoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBvcGVuQ3Vyc29yKFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkN1cnNv
ckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBpdGVyYXRlQ3Vyc29yKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElE
Qkl0ZXJhdGVDdXJzb3JEYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2spOworICAgIHZvaWQgcHV0T3JB
ZGQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFs
dWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNr
KTsKKyAgICB2b2lkIGdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdl
dFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CisgICAgdm9pZCBnZXRBbGxSZWNvcmRz
KGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmLCBHZXRB
bGxSZXN1bHRzQ2FsbGJhY2spOworICAgIHZvaWQgZ2V0Q291bnQoY29uc3QgSURCUmVxdWVzdERh
dGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBDb3VudENhbGxiYWNrKTsKKyAgICB2b2lkIGRl
bGV0ZVJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYs
IEVycm9yQ2FsbGJhY2spOworICAgIHZvaWQgb3BlbkN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0
YSYsIGNvbnN0IElEQkN1cnNvckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7CisgICAgdm9pZCBp
dGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCSXRlcmF0ZUN1cnNv
ckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CiAgICAgdm9pZCBjb21taXRUcmFuc2FjdGlvbihV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgRXJyb3JDYWxsYmFjayk7Ci0KLSAgICBlbnVt
IGNsYXNzIFdhaXRGb3JQZW5kaW5nVGFza3MgeyBObywgWWVzIH07Ci0gICAgdm9pZCBhYm9ydFRy
YW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBXYWl0Rm9yUGVuZGluZ1Rh
c2tzLCBFcnJvckNhbGxiYWNrKTsKKyAgICB2b2lkIGFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwogCiAgICAgdm9pZCBkaWRGaW5p
c2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHZv
aWQgdHJhbnNhY3Rpb25EZXN0cm95ZWQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYpOwpA
QCAtMTM5LDQ0ICsxMzgsMjcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2NoZWR1bGVTaHV0ZG93
bkZvckNsb3NlKCk7CiAKLSAgICB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNr
KHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3Qg
SURCT2JqZWN0U3RvcmVJbmZvJiwgRXJyb3JDYWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsKLSAg
ICB2b2lkIHJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXpl
LCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVy
cm9yJik7Ci0gICAgdm9pZCBjcmVhdGVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNr
U2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQkluZGV4SW5mbyYs
IEVycm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCByZW5hbWVJbmRleEFm
dGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVy
cm9yJik7Ci0gICAgdm9pZCBwdXRPckFkZEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6
ZSwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFs
dWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNr
LCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNoZWNr
KGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXJyb3JDYWxs
YmFjayk7Ci0KLSAgICB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwg
RXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBjbGVhck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2so
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBkZWxldGVJbmRleEFmdGVyUXVvdGFDaGVj
ayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmLCBFcnJvckNhbGxiYWNrKTsKLSAgICB2b2lkIGdldFJlY29y
ZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdldFJlY29y
ZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRBbGxSZWNvcmRzQWZ0ZXJR
dW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0Rh
dGEmLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0Q291bnRBZnRlclF1b3Rh
Q2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBDb3Vu
dENhbGxiYWNrKTsKLSAgICB2b2lkIG9wZW5DdXJzb3JBZnRlclF1b3RhQ2hlY2soY29uc3QgSURC
UmVxdWVzdERhdGEmLCBjb25zdCBJREJDdXJzb3JJbmZvJiwgR2V0UmVzdWx0Q2FsbGJhY2spOwot
ICAgIHZvaWQgaXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0
YSYsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2spOwotICAg
IHZvaWQgY29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwotCiAgICAgLy8gRGF0YWJhc2UgdGhyZWFkIG9w
ZXJhdGlvbnMKICAgICB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlk
ZW50aWZpZXImKTsKLSAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
ZGVudGlmaWVyJiwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpOwotICAgIHZvaWQgcGVyZm9ybUNv
bW1pdFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwotICAgIHZvaWQgcGVyZm9y
bUFib3J0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisgICAgdm9pZCBvcGVu
QmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOworICAgIHZvaWQgcGVy
Zm9ybUNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIpOworICAgIHZvaWQgcGVyZm9ybUFib3J0VHJhbnNhY3Rpb24oY29uc3QgQ2xpZW50
T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCBiZWdpblRyYW5zYWN0
aW9uSW5CYWNraW5nU3RvcmUoY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJik7Ci0gICAgdm9pZCBw
ZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURC
T2JqZWN0U3RvcmVJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHBlcmZvcm1EZWxl
dGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIpOwotICAgIHZvaWQgcGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgcGVyZm9ybUNsZWFyT2Jq
ZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyKTsKLSAgICB2b2lkIHBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBjb25zdCBJREJJbmRleEluZm8mLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgcGVy
Zm9ybURlbGV0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyKTsKLSAgICB2b2lkIHBlcmZv
cm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdO
YW1lLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgcGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURC
S2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0
ZU1vZGUsIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtR2V0UmVjb3JkKHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
SURCS2V5UmFuZ2VEYXRhJiwgSURCR2V0UmVjb3JkRGF0YVR5cGUpOwotICAgIHZvaWQgcGVyZm9y
bUdldEFsbFJlY29yZHModWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCR2V0QWxsUmVj
b3Jkc0RhdGEmKTsKLSAgICB2b2lkIHBlcmZvcm1HZXRJbmRleFJlY29yZCh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4
SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYpOwotICAgIHZvaWQgcGVyZm9ybUdldENvdW50KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVy
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKLSAgICB2b2lkIHBlcmZvcm1EZWxldGVSZWNvcmQo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBj
b25zdCBJREJLZXlSYW5nZURhdGEmKTsKLSAgICB2b2lkIHBlcmZvcm1PcGVuQ3Vyc29yKHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkN1cnNvckluZm8mKTsKLSAgICB2b2lkIHBlcmZv
cm1JdGVyYXRlQ3Vyc29yKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEm
KTsKKyAgICB2b2lkIHBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZShjb25zdCBDbGllbnRPcmlnaW4m
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKKyAg
ICB2b2lkIHBlcmZvcm1EZWxldGVPYmplY3RTdG9yZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAg
IHZvaWQgcGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgcGVyZm9ybUNsZWFy
T2JqZWN0U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICB2b2lkIHBlcmZvcm1DcmVhdGVJ
bmRleChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJ
REJJbmRleEluZm8mKTsKKyAgICB2b2lkIHBlcmZvcm1EZWxldGVJbmRleChjb25zdCBDbGllbnRP
cmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllcik7CisgICAgdm9pZCBwZXJmb3JtUmVuYW1l
SW5kZXgoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIHBlcmZvcm1QdXRP
ckFkZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1
ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKTsKKyAgICB2b2lkIHBlcmZv
cm1HZXRSZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJ
REJHZXRSZWNvcmREYXRhVHlwZSk7CisgICAgdm9pZCBwZXJmb3JtR2V0QWxsUmVjb3Jkcyhjb25z
dCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxS
ZWNvcmRzRGF0YSYpOworICAgIHZvaWQgcGVyZm9ybUdldEluZGV4UmVjb3JkKGNvbnN0IENsaWVu
dE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3Jk
VHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CisgICAgdm9pZCBwZXJmb3JtR2V0Q291bnQo
Y29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktl
eVJhbmdlRGF0YSYpOworICAgIHZvaWQgcGVyZm9ybURlbGV0ZVJlY29yZChjb25zdCBDbGllbnRP
cmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOworICAgIHZvaWQgcGVyZm9ybU9wZW5DdXJz
b3IoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURC
Q3Vyc29ySW5mbyYpOworICAgIHZvaWQgcGVyZm9ybUl0ZXJhdGVDdXJzb3IoY29uc3QgQ2xpZW50
T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYpOwogICAg
IHZvaWQgcGVyZm9ybVByZWZldGNoQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1cnNv
cklkZW50aWZpZXIpOwogCiAgICAgdm9pZCBwZXJmb3JtU3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJik7CkBAIC0xODYsNyArMTY4LDcgQEAgcHJp
dmF0ZToKIAogICAgIC8vIE1haW4gdGhyZWFkIGNhbGxiYWNrcwogICAgIHZvaWQgZGlkRGVsZXRl
QmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKTsKLSAgICB2b2lkIGRpZE9wZW5C
YWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImLCB1aW50
NjRfdCB0YXNrSWRlbnRpZmllcik7CisgICAgdm9pZCBkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0
IElEQkRhdGFiYXNlSW5mbyYsIGNvbnN0IElEQkVycm9yJik7CiAgICAgdm9pZCBkaWRQZXJmb3Jt
Q3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJF
cnJvciYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOwogICAgIHZvaWQgZGlkUGVyZm9ybURl
bGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJy
b3ImLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkUGVyZm9y
bVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
RXJyb3ImLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3
TmFtZSk7CkBAIC0yNDYsOSArMjI4LDYgQEAgcHJpdmF0ZToKICAgICBib29sIGlzRG9uZVdpdGhI
YXJkQ2xvc2UoKTsKIAogICAgIHZvaWQgcmVxdWVzdFNwYWNlKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mLCB1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKElEQkVycm9yJiYpPiYmKTsKLSAgICB2b2lkIHdhaXRGb3JS
ZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKElEQkVycm9yJiYpPiYmKTsKLSAgICB2b2lkIHN0YXJ0U3BhY2VJ
bmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgdGFza1NpemUpOwotICAg
IHZvaWQgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgYm9vbCBp
c1Rhc2tTdWNjZXNzZnVsKTsKIAogICAgIHZvaWQgY2xlYXJUcmFuc2FjdGlvbnNPbkNvbm5lY3Rp
b24oVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAKaW5kZXggZmU5MTBmYWY5ODQ5ZGMyYjA0N2ViYTk3YWU1
NjY1NzlmZDEzZDIxMC4uODAwNjA2OTg4MzQ0ZjFiMzliOGI5ZmJjMTk5OTgyMWQ4MjYyMWI4NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAKQEAgLTc2LDcg
Kzc2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmFib3J0VHJhbnNhY3Rp
b25XaXRob3V0Q2FsbGJhY2soVW5pcXVlSURCRGF0YWIKICAgICBpZiAoIW1fZGF0YWJhc2UpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX2RhdGFiYXNlLT5hYm9ydFRyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uLCBVbmlxdWVJREJEYXRhYmFzZTo6V2FpdEZvclBlbmRpbmdUYXNrczo6Tm8sIFt0
aGlzLCBwcm90ZWN0ZWRUaGlzLCB0cmFuc2FjdGlvbklkZW50aWZpZXJdKGNvbnN0IElEQkVycm9y
JikgeworICAgIG1fZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzLCB0cmFuc2FjdGlvbklkZW50aWZpZXJdKGNvbnN0IElEQkVycm9yJikg
ewogICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbk1hcC5jb250YWlucyh0cmFuc2FjdGlvbklk
ZW50aWZpZXIpKTsKICAgICAgICAgbV90cmFuc2FjdGlvbk1hcC5yZW1vdmUodHJhbnNhY3Rpb25J
ZGVudGlmaWVyKTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uLmNwcAppbmRleCBhOGQyYmRjNzQwYzg5NzFhNWE3YzA0ZTc2YzAzMjliNDc2YWRjNDI2
Li43NmVkZGM0NWIwNzZiZTNlNjk3Mjg0NWQxMWUyMTUwYjZmMDdkODY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCkBAIC03OSw3ICs3OSw3IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6YWJvcnQoKQogICAgIGF1dG8gZGF0YWJh
c2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJh
c2UpOwogCi0gICAgZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24oKnRoaXMsIFVuaXF1ZUlEQkRh
dGFiYXNlOjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpZZXMsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKV0oYXV0byYgZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+YWJvcnRUcmFuc2Fj
dGlvbigqdGhpcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShhdXRvJiBl
cnJvcikgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6YWJvcnQgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBj
CiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwog
ICAgIEFTU0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPnB1dE9yQWRkKCp0aGlz
LCByZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25z
dCBJREJLZXlEYXRhJiBrZXkpIHsKKyAgICBkYXRhYmFzZS0+cHV0T3JBZGQocmVxdWVzdERhdGEs
IGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCS2V5RGF0YSYg
a2V5KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpwdXRPckFkZCAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0zMDcsNyArMzA3LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
LAogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsK
ICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5nZXRSZWNvcmQoKnRo
aXMsIHJlcXVlc3REYXRhLCBnZXRSZWNvcmREYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0
JiByZXN1bHQpIHsKKyAgICBkYXRhYmFzZS0+Z2V0UmVjb3JkKHJlcXVlc3REYXRhLCBnZXRSZWNv
cmREYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRh
XShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKICAgICAgICAgTE9H
KEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldFJlY29yZCAoY2Fs
bGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0zMjgsNyArMzI4LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRB
bGxSZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGEKICAgICBhdXRvIGRhdGFi
YXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFi
YXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+Z2V0QWxsUmVjb3JkcygqdGhpcywgcmVxdWVzdERh
dGEsIGdldEFsbFJlY29yZHNEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhp
cyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0QWxsUmVzdWx0JiByZXN1
bHQpIHsKKyAgICBkYXRhYmFzZS0+Z2V0QWxsUmVjb3JkcyhyZXF1ZXN0RGF0YSwgZ2V0QWxsUmVj
b3Jkc0RhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERh
dGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgewogICAgICAg
ICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVj
b3JkcyAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0zNDksNyArMzQ5LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGMKICAgICBh
dXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNT
RVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+Z2V0Q291bnQoKnRoaXMsIHJlcXVl
c3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCB1aW50NjRfdCBjb3VudCkgeworICAgIGRhdGFi
YXNlLT5nZXRDb3VudChyZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhpcywgd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgdWludDY0X3Qg
Y291bnQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb246OmdldENvdW50IChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTM3MCw3ICszNzAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdAogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2Uo
KTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5kZWxldGVSZWNv
cmQoKnRoaXMsIHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yKSB7CisgICAgZGF0YWJh
c2UtPmRlbGV0ZVJlY29yZChyZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhpcywgd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvcikgewogICAg
ICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRl
UmVjb3JkIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb246Om9wZW5DdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLAogICAg
IGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBB
U1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5vcGVuQ3Vyc29yKCp0aGlzLCBy
ZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBy
ZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0KSB7Cisg
ICAgZGF0YWJhc2UtPm9wZW5DdXJzb3IocmVxdWVzdERhdGEsIGluZm8sIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJ
REJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvciAoY2FsbGJhY2spIik7CiAgICAgICAgIGlm
ICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00MTIsNyArNDEyLDcgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJl
cXVlc3REYXRhJiByZXF1ZXN0RGEKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5l
Y3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRh
YmFzZS0+aXRlcmF0ZUN1cnNvcigqdGhpcywgcmVxdWVzdERhdGEsIGRhdGEsIFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25z
dCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgeworICAgIGRhdGFiYXNlLT5pdGVyYXRlQ3Vyc29yKHJl
cXVlc3REYXRhLCBkYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJl
cXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKICAg
ICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJh
dGVDdXJzb3IgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAppbmRleCA5MTExZjU5NzhlM2I4
MDYxODU1YzIwZjVhZmFhNWI2NTVkY2NlYTIxLi5kNTJjMDEyM2ZkYzIzMDA4YjFlNGJhZTkxNGVm
MzNlMjQ0OWMyNTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcApAQCAtNjEsMTggKzYx
LDIwIEBAIFJlZjxJblByb2Nlc3NJREJTZXJ2ZXI+IEluUHJvY2Vzc0lEQlNlcnZlcjo6Y3JlYXRl
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uCiAKIEluUHJvY2Vzc0lEQlNlcnZlcjo6fklu
UHJvY2Vzc0lEQlNlcnZlcigpID0gZGVmYXVsdDsKIAotU3RvcmFnZVF1b3RhTWFuYWdlciogSW5Q
cm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4p
CitSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gSW5Qcm9jZXNzSURCU2VydmVyOjpxdW90YU1h
bmFnZXIoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7CiAgICAgcmV0dXJuIG1fcXVvdGFN
YW5hZ2Vycy5lbnN1cmUob3JpZ2luLCBbXSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFN0
b3JhZ2VRdW90YU1hbmFnZXI+KFN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpLCBb
XSh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3VycmVudFNwYWNlLCB1aW50NjRfdCBzcGFjZUlu
Y3JlYXNlLCBhdXRvIGNhbGxiYWNrKSB7CisgICAgICAgIHJldHVybiBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpjcmVhdGUoU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCksIFtdIHsKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9LCBbXSh1aW50NjRfdCBxdW90YSwgdWludDY0
X3QgY3VycmVudFNwYWNlLCB1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBhdXRvIGNhbGxiYWNrKSB7
CiAgICAgICAgICAgICBjYWxsYmFjayhxdW90YSArIGN1cnJlbnRTcGFjZSArIHNwYWNlSW5jcmVh
c2UpOwogICAgICAgICB9KTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgfSku
aXRlcmF0b3ItPnZhbHVlOwogfQogCi1zdGF0aWMgaW5saW5lIElEQlNlcnZlcjo6SURCU2VydmVy
OjpRdW90YU1hbmFnZXJHZXR0ZXIgc3RvcmFnZVF1b3RhTWFuYWdlckdldHRlcihJblByb2Nlc3NJ
REJTZXJ2ZXImIHNlcnZlcikKK3N0YXRpYyBpbmxpbmUgSURCU2VydmVyOjpJREJTZXJ2ZXI6OlN0
b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIgc3RvcmFnZVF1b3RhTWFuYWdlckdldHRlcihJblByb2Nl
c3NJREJTZXJ2ZXImIHNlcnZlcikKIHsKLSAgICByZXR1cm4gW3dlYWtTZXJ2ZXIgPSBtYWtlV2Vh
a1B0cihzZXJ2ZXIpXShQQUw6OlNlc3Npb25JRCwgY29uc3QgYXV0byYgb3JpZ2luKSB7CisgICAg
cmV0dXJuIFt3ZWFrU2VydmVyID0gbWFrZVdlYWtQdHIoc2VydmVyKV0oY29uc3QgYXV0byYgb3Jp
Z2luKSB7CiAgICAgICAgIHJldHVybiB3ZWFrU2VydmVyID8gd2Vha1NlcnZlci0+cXVvdGFNYW5h
Z2VyKG9yaWdpbikgOiBudWxscHRyOwogICAgIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgK
aW5kZXggYzdiNTMyMWNhMzYxYzc0MWU1MmQ0NWVjMThhODMxOGZhZDA4MjljMC4uYTI3YTYyOTJm
NTA4NWEyM2IzZGJiNDljZDRhMjI3YTcyOTYzOTVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIu
aApAQCAtMTI1LDcgKzEyNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZigpIG92ZXJyaWRlIHsg
UmVmQ291bnRlZDxJblByb2Nlc3NJREJTZXJ2ZXI+OjpyZWYoKTsgfQogICAgIHZvaWQgZGVyZWYo
KSBvdmVycmlkZSB7IFJlZkNvdW50ZWQ8SW5Qcm9jZXNzSURCU2VydmVyPjo6ZGVyZWYoKTsgfQog
Ci0gICAgU3RvcmFnZVF1b3RhTWFuYWdlciogcXVvdGFNYW5hZ2VyKGNvbnN0IENsaWVudE9yaWdp
biYpOworICAgIFJlZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXIoY29uc3Qg
Q2xpZW50T3JpZ2luJik7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgSW5Qcm9jZXNzSURCU2Vy
dmVyKFBBTDo6U2Vzc2lvbklEKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlcj4gbV9jb25uZWN0aW9uVG9TZXJ2
ZXI7CiAgICAgUmVmUHRyPElEQlNlcnZlcjo6SURCQ29ubmVjdGlvblRvQ2xpZW50PiBtX2Nvbm5l
Y3Rpb25Ub0NsaWVudDsKIAotICAgIEhhc2hNYXA8Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9w
dHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fcXVvdGFNYW5hZ2VyczsKKyAgICBIYXNoTWFwPENs
aWVudE9yaWdpbiwgUmVmUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3F1b3RhTWFuYWdlcnM7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODIyMTVmNzk0ZTc5NzFiNDJhYmE4
YTEyOTVmMTE2ZDExNTY3MWQwOC4uNWU2NGE5ZGJjMzFmOGMxMTUwMTFmNTg2NzMwNzdmMTMyN2Zm
MmNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTEzMCw3ICsxMTMwLDYgQEAKIAkJNDFEMjhEMEQyMTM5RTA1ODAwRjQyMDZG
IC8qIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRDI4RDBCMjEzOUUwMUQwMEY0MjA2RiAvKiBMaWJXZWJS
VENTdGF0c0NvbGxlY3Rvci5jcHAgKi87IH07CiAJCTQxRDQxQzY3MjI1Njg3NEYwMDY5Nzk0MiAv
KiBTZXJ2aWNlV29ya2VySW50ZXJuYWxzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDFENDFDNjUyMjU2ODU5MjAwNjk3OTQyIC8qIFNlcnZpY2VXb3Jr
ZXJJbnRlcm5hbHMubW0gKi87IH07CiAJCTQxREU3QzdDMjIyREExNDMwMDUzMkI2NSAvKiBTdG9y
YWdlUXVvdGFNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MURFN0M3QjIyMkRBMTNFMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTQxREU3
QzdEMjIyREExNDgwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MURFN0M3ODIyMkRBMTNDMDA1MzJCNjUg
LyogU3RvcmFnZVF1b3RhVXNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTQxREVGQ0I2MUU1NkMxQkQwMDBEOUU1RiAvKiBKU0RPTU1hcExpa2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxREVGQ0I0
MUU1NkMxQjkwMDBEOUU1RiAvKiBKU0RPTU1hcExpa2UuaCAqLzsgfTsKIAkJNDFFMUIxRDEwRkY1
OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUUxQjFDQjBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJh
Y3RXb3JrZXIuaCAqLzsgfTsKIAkJNDFFOURDRTcyMzE5NzRCRjAwRjM1OTQ5IC8qIEJsb2JMb2Fk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRTlE
Q0U0MjMxOTczRkUwMEYzNTk0OSAvKiBCbG9iTG9hZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTY0NzQsOCArNjQ3Myw4IEBACiAJCTFDRkFF
MzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5h
bWUgPSBsaWJvYmpjLmR5bGliOyBwYXRoID0gL3Vzci9saWIvbGlib2JqYy5keWxpYjsgc291cmNl
VHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJMUQwMDI2QTIyMzc0RDYyMzAwQ0E2Q0RGIC8qIEpT
UGljdHVyZUluUGljdHVyZVdpbmRvdy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1BpY3R1cmVJblBpY3R1cmVXaW5kb3cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUQwMDI2QTMyMzc0RDYyNDAwQ0E2Q0RGIC8qIEpTUGljdHVyZUluUGljdHVyZVdpbmRvdy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1BpY3R1cmVJblBpY3R1
cmVXaW5kb3cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxRDAwMjZBODIzNzRG
OUQ5MDBDQTZDREYgLyogSlNFbnRlclBpY3R1cmVJblBpY3R1cmVFdmVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0VudGVyUGljdHVyZUluUGljdHVyZUV2ZW50Lmg7IHBh
dGggPSBKU0VudGVyUGljdHVyZUluUGljdHVyZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTFEMDAyNkE5MjM3NEY5RDkwMENBNkNERiAvKiBKU0VudGVyUGljdHVyZUluUGlj
dHVyZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTRW50
ZXJQaWN0dXJlSW5QaWN0dXJlRXZlbnQuY3BwOyBwYXRoID0gSlNFbnRlclBpY3R1cmVJblBpY3R1
cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFEMDAyNkE4MjM3NEY5
RDkwMENBNkNERiAvKiBKU0VudGVyUGljdHVyZUluUGljdHVyZUV2ZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRW50ZXJQaWN0dXJlSW5QaWN0dXJlRXZlbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUQwMDI2QTkyMzc0RjlEOTAwQ0E2Q0RGIC8qIEpT
RW50ZXJQaWN0dXJlSW5QaWN0dXJlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNFbnRlclBpY3R1cmVJblBpY3R1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFEMkM4MkI2MjM2QTNGNkEwMDU1RDZDNSAvKiBQaWN0dXJlSW5Q
aWN0dXJlU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxREJDMUI1NTIzNDdCM0QyMDBCOTAxQUYg
LyogUGljdHVyZUluUGljdHVyZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBpY3R1cmVJblBp
Y3R1cmVPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxREM1NTNGRDIx
MUJBMTJBMDA0Qjc4MEUgLyogTmF2aWdhdG9yU2hhcmUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IE5hdmlnYXRvclNoYXJlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc0
NjQsNyArNzQ2Myw2IEBACiAJCTQxRDI4RDBDMjEzOUUwMUUwMEY0MjA2RiAvKiBMaWJXZWJSVENT
dGF0c0NvbGxlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMaWJXZWJS
VENTdGF0c0NvbGxlY3Rvci5oOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJUQ1N0YXRzQ29sbGVj
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRDQxQzY1MjI1Njg1OTIwMDY5
Nzk0MiAvKiBTZXJ2aWNlV29ya2VySW50ZXJuYWxzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU2VydmljZVdvcmtlckludGVybmFscy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDFENTFCQjIxRTRFMkU4MTAwMTMxQTVCIC8qIExpYldlYlJUQ0F1
ZGlvRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpYldlYlJUQ0F1
ZGlvRm9ybWF0Lmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDQXVkaW9Gb3JtYXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDFERTdDNzgyMjJEQTEzQzAwNTMyQjY1IC8qIFN0
b3JhZ2VRdW90YVVzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFn
ZVF1b3RhVXNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURFN0M3QTIyMkRB
MTNEMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDFERTdDN0IyMjJEQTEzRTAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90
YU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVF1b3Rh
TWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURFRkNCMjFFNTZDMUI5
MDAwRDlFNUYgLyogSlNET01CaW5kaW5nSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5qYXZhc2NyaXB0OyBwYXRoID0gSlNET01CaW5kaW5nSW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTcwOTgsNyArMTcwOTYsNiBAQAogCQkJCTFBMzc2MzZBMUEy
RTY4QkIwMDlBN0VFMiAvKiBTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCAqLywKIAkJCQk0MURF
N0M3QTIyMkRBMTNEMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8sCiAJCQkJ
NDFERTdDN0IyMjJEQTEzRTAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuaCAqLywKLQkJ
CQk0MURFN0M3ODIyMkRBMTNDMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhVXNlci5oICovLAogCQkJ
CTUxNjZEM0NDMUU4RUQ0MTEwMEFENjJFMyAvKiBTdG9yYWdlVHlwZS5oICovLAogCQkJKTsKIAkJ
CWluZGVudFdpZHRoID0gNDsKQEAgLTI5MjY5LDcgKzI5MjY2LDYgQEAKIAkJCQk1NzIxQTk4QjFF
Q0U1NzA0MDA4MTI5NUEgLyogQ3J5cHRvQWxnb3JpdGhtUnNhUHNzUGFyYW1zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMUJEMzMxQTE4MkQ4REREMDBDMDVEOUYgLyogQ3J5cHRvQWxnb3JpdGhtUlNB
U1NBX1BLQ1MxX3YxXzUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMjVGODJDMTgyMkNGRUMwMEQ4
NENEOSAvKiBDcnlwdG9BbGdvcml0aG1TSEExLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDVCQTZC
NjIzNzYyMkEzMDA0REZDMDcgLyogU3R5bGVBZGp1c3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTE5QUMzRUYxODI0REM3OTAwMzQ5NDI2IC8qIENyeXB0b0FsZ29yaXRobVNIQTIyNC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTE5QUMzRjExODI0REM3OTAwMzQ5NDI2IC8qIENyeXB0b0FsZ29yaXRo
bVNIQTI1Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5QUMzRjMxODI0REM3OTAwMzQ5NDI2IC8q
IENyeXB0b0FsZ29yaXRobVNIQTM4NC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjIwNyw3ICszMjIw
Myw2IEBACiAJCQkJQzUwRDBFODMwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBMzc2MzZDMUEyRTY4QkIwMDlBN0VFMiAvKiBTdG9yYWdl
TmFtZXNwYWNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxREU3QzdDMjIyREExNDMw
MDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MURF
N0M3RDIyMkRBMTQ4MDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhVXNlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUM5RUYyRjMyMUYwNjE5MDAwM0JEQzU2IC8qIFN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxNjZEM0NEMUU4RUQ0OEYwMEFENjJFMyAvKiBTdG9yYWdl
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDY4MkQyMDAxRjc5NzgzMDAwQzg2M0RCIC8qIFN0
b3JlZENyZWRlbnRpYWxzUG9saWN5LmggaW4gSGVhZGVycyAqLywKQEAgLTMyMjE5LDYgKzMyMjE0
LDcgQEAKIAkJCQk5QjZDNDE1MzEzNDQ5NDkwMDAwODVCNjIgLyogU3RyaW5nV2l0aERpcmVjdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ5Rjc3NzYwRUZFQzYyMDAwOTA4NDlEIC8qIFN0cm9r
ZVN0eWxlQXBwbGllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE0QjgyMDUxRDZERjBFNTAwNzdF
QkUzIC8qIFN0cnVjdHVyZWRDbG9uZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ1QkE2QjYyMzc2
MjJBMzAwNERGQzA3IC8qIFN0eWxlQWRqdXN0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVC
NkEzMEU4MURDNEYwMEIyNTk2NSAvKiBTdHlsZUJhY2tncm91bmREYXRhLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzVFQjY3QjBFODFEM0JFMDBCMjU5NjUgLyogU3R5bGVCb3hEYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNEFCQUMwNjIzNkIwMTZEMDBGQTQzNDUgLyogU3R5bGVCdWlsZGVyLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZVF1b3RhTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1h
bmFnZXIuY3BwCmluZGV4IDg1MjU3NTJlNjMzNDc5NTMwZWYxNGVjYjc0Zjg1YmFmNjhkOWM1NWIu
LjAxOTNlYTg0ODVhYjY4NjY2ZTUxNDhkNTUwM2Y2M2VlYzFmOWFlNjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcApAQCAtMjcsMjEzICsyNywx
MjAgQEAKICNpbmNsdWRlICJTdG9yYWdlUXVvdGFNYW5hZ2VyLmgiCiAKICNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSAiU3RvcmFnZVF1b3RhVXNlci5oIgorI2luY2x1ZGUgPHd0Zi90aHJl
YWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0b3JhZ2VR
dW90YU1hbmFnZXI6On5TdG9yYWdlUXVvdGFNYW5hZ2VyKCkKK1JlZjxTdG9yYWdlUXVvdGFNYW5h
Z2VyPiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0
dGVyJiYgdXNhZ2VHZXR0ZXIsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiBxdW90YUluY3JlYXNl
UmVxdWVzdGVyKQogewotICAgIHdoaWxlICghbV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQot
ICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy50YWtlRmlyc3QoKS5jYWxsYmFjayhEZWNpc2lvbjo6
RGVueSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZVF1b3RhTWFuYWdlcihxdW90
YSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdURk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3Rlcikp
KTsKIH0KIAotdWludDY0X3QgU3RvcmFnZVF1b3RhTWFuYWdlcjo6c3BhY2VVc2FnZSgpIGNvbnN0
CitTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyKHVpbnQ2NF90IHF1b3Rh
LCBVc2FnZUdldHRlciYmIHVzYWdlR2V0dGVyLCBRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYgcXVv
dGFJbmNyZWFzZVJlcXVlc3RlcikKKyAgICA6IG1fcXVvdGEocXVvdGEpCisgICAgLCBtX3VzYWdl
R2V0dGVyKFdURk1vdmUodXNhZ2VHZXR0ZXIpKQorICAgICwgbV9xdW90YUluY3JlYXNlUmVxdWVz
dGVyKFdURk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3RlcikpCisgICAgLCBtX3dvcmtRdWV1ZShX
b3JrUXVldWU6OmNyZWF0ZSgiU3RvcmFnZVF1b3RhTWFuYWdlciBCYWNrZ3JvdW5kIFF1ZXVlIikp
CisgICAgLCBtX2luaXRpYWxRdW90YShxdW90YSkKIHsKLSAgICB1aW50NjRfdCB1c2FnZSA9IDA7
Ci0gICAgZm9yIChhdXRvJiB1c2VyIDogbV91c2VycykKLSAgICAgICAgdXNhZ2UgKz0gdXNlci0+
c3BhY2VVc2VkKCk7Ci0gICAgcmV0dXJuIHVzYWdlOwogfQogCi12b2lkIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKQordm9pZCBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQodWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQs
IFJlcXVlc3RDYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIGlmICghbV9xdW90YSkKLSAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBhdXRvIGRlZmF1
bHRRdW90YVN0ZXAgPSBtX3F1b3RhIC8gMTA7Ci0gICAgbV9xdW90YSA9IHN0ZDo6bWF4KG1fcXVv
dGEsIGRlZmF1bHRRdW90YVN0ZXAgKiAoKHNwYWNlVXNhZ2UoKSAvIGRlZmF1bHRRdW90YVN0ZXAp
ICsgMSkpOwotfQotCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmluaXRpYWxpemVVc2Vyc0lm
TmVlZGVkKCkKLXsKLSAgICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxTdG9yYWdlUXVvdGFVc2VyKj4gdXNl
cnNUb0luaXRpYWxpemU7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IG1fcGVuZGluZ0luaXRp
YWxpemF0aW9uVXNlcnMpIHsKLSAgICAgICAgaWYgKGtleVZhbHVlLnZhbHVlID09IFdoZW5Jbml0
aWFsaXplZENhbGxlZDo6Tm8pIHsKLSAgICAgICAgICAgIGtleVZhbHVlLnZhbHVlID0gV2hlbklu
aXRpYWxpemVkQ2FsbGVkOjpZZXM7Ci0gICAgICAgICAgICB1c2Vyc1RvSW5pdGlhbGl6ZS5hcHBl
bmQoa2V5VmFsdWUua2V5KTsKKyAgICAvLyBGYXN0IHBhdGguCisgICAgaWYgKG1fcXVvdGFDb3Vu
dERvd25Mb2NrLnRyeUxvY2soKSkgeworICAgICAgICBpZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNl
UmVxdWVzdGVkKSkgeworICAgICAgICAgICAgbV9xdW90YUNvdW50RG93bkxvY2sudW5sb2NrKCk7
CisgICAgICAgICAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOworICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CisgICAgICAgIG1fcXVvdGFDb3VudERvd25Mb2NrLnVubG9jaygpOwog
ICAgIH0KLSAgICBmb3IgKGF1dG8qIHVzZXIgOiB1c2Vyc1RvSW5pdGlhbGl6ZSkgewotICAgICAg
ICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5jb250YWlucyh1c2VyKSkKLSAgICAg
ICAgICAgIGFza1VzZXJUb0luaXRpYWxpemUoKnVzZXIpOwotICAgIH0KKworICAgIG1fY2FsbGJh
Y2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgbV93b3JrUXVldWUtPmRpc3BhdGNo
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNwYWNlUmVxdWVzdGVkXSB7
CisgICAgICAgIGF1dG8gZGVjaXNpb24gPSByZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQo
c3BhY2VSZXF1ZXN0ZWQpOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRlY2lzaW9uXSB7CisgICAgICAgICAgICBBU1NFUlQo
IW1fY2FsbGJhY2tzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBhdXRvIGNhbGxiYWNrID0gbV9j
YWxsYmFja3MudGFrZUZpcnN0KCk7CisgICAgICAgICAgICBjYWxsYmFjayhkZWNpc2lvbik7Cisg
ICAgICAgIH0pOworICAgIH0pOwogfQogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1Vz
ZXJUb0luaXRpYWxpemUoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKK1N0b3JhZ2VRdW90YU1hbmFn
ZXI6OkRlY2lzaW9uIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uQmFja2dyb3Vu
ZFRocmVhZCh1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCkKIHsKLSAgICB1c2VyLndoZW5Jbml0aWFs
aXplZChbdGhpcywgJnVzZXIsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldKCkgewotICAg
ICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOwogCi0gICAgICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJz
LnJlbW92ZSgmdXNlcikpCi0gICAgICAgICAgICBtX3VzZXJzLmFkZCgmdXNlcik7CisgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9xdW90YUNvdW50RG93bkxvY2spOwogCi0gICAgICAgIGlmICghbV9w
ZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47
CisgICAgaWYgKHRyeUdyYW50UmVxdWVzdChzcGFjZVJlcXVlc3RlZCkpCisgICAgICAgIHJldHVy
biBEZWNpc2lvbjo6R3JhbnQ7CiAKLSAgICAgICAgLy8gTWFrZSBzdXJlIHF1b3RhIGlzIHNldCBi
ZWZvcmUgaGFuZGxpbmcgZmlyc3QgcmVxdWVzdC4KLSAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3Rh
dGU6OlVuaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNl
VXNhZ2UoKTsKLSAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JS
ZXF1ZXN0OwotICAgICAgICB9CisgICAgbV91c2FnZSA9IG1fdXNhZ2VHZXR0ZXIoKTsKKyAgICB1
cGRhdGVRdW90YUJhc2VkT25Vc2FnZSgpOworICAgIG1fcXVvdGFDb3VudERvd24gPSBtX3VzYWdl
IDwgbV9xdW90YSA/IG1fcXVvdGEgLSBtX3VzYWdlIDogMDsKKyAgICBpZiAodHJ5R3JhbnRSZXF1
ZXN0KHNwYWNlUmVxdWVzdGVkKSkKKyAgICAgICAgcmV0dXJuIERlY2lzaW9uOjpHcmFudDsKIAot
ICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKHsgfSk7Ci0gICAgfSk7Ci19CisgICAgLy8g
QmxvY2sgdGhpcyB0aHJlYWQgdW50aWwgZ2V0dGluZyBkZWNzaW9uIGZvciBxdW90YSBpbmNyZWFz
ZS4KKyAgICBCaW5hcnlTZW1hcGhvcmUgc2VtYXBob3JlOworICAgIGNhbGxPbk1haW5UaHJlYWQo
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc3BhY2VSZXF1ZXN0ZWQsICZz
ZW1hcGhvcmVdIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1
b3RhTWFuYWdlciBhc2tzIGZvciBxdW90YSBpbmNyZWFzZSAlIiBQUkl1NjQsIHRoaXMsIHNwYWNl
UmVxdWVzdGVkKTsKKyAgICAgICAgbV9xdW90YUluY3JlYXNlUmVxdWVzdGVyKG1fcXVvdGEsIG1f
dXNhZ2UsIHNwYWNlUmVxdWVzdGVkLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCAmc2VtYXBob3JlXShPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEpIHsKKyAgICAgICAg
ICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXIgcmVjZWl2
ZXMgcXVvdGEgaW5jcmVhc2UgcmVzcG9uc2UgJSIgUFJJdTY0LCB0aGlzLCBuZXdRdW90YSA/ICpu
ZXdRdW90YSA6IDApOworICAgICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotdm9p
ZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphZGRVc2VyKFN0b3JhZ2VRdW90YVVzZXImIHVzZXIpCi17
Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmNvbnRhaW5zKCZ1c2Vy
KSk7Ci0gICAgQVNTRVJUKCFtX3VzZXJzLmNvbnRhaW5zKCZ1c2VyKSk7Ci0gICAgbV9wZW5kaW5n
SW5pdGlhbGl6YXRpb25Vc2Vycy5hZGQoJnVzZXIsIFdoZW5Jbml0aWFsaXplZENhbGxlZDo6Tm8p
OworICAgICAgICAgICAgaWYgKG5ld1F1b3RhKQorICAgICAgICAgICAgICAgIG1fcXVvdGEgPSAq
bmV3UXVvdGE7CiAKLSAgICBpZiAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAg
ICAgYXNrVXNlclRvSW5pdGlhbGl6ZSh1c2VyKTsKLX0KKyAgICAgICAgICAgIHNlbWFwaG9yZS5z
aWduYWwoKTsKKyAgICAgICAgfSk7CisgICAgfSk7CiAKLWJvb2wgU3RvcmFnZVF1b3RhTWFuYWdl
cjo6c2hvdWxkQXNrRm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpIGNvbnN0Ci17
Ci0gICAgaWYgKCFzcGFjZUluY3JlYXNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc2Vt
YXBob3JlLndhaXQoKTsKIAotICAgIHJldHVybiBzcGFjZVVzYWdlKCkgKyBzcGFjZUluY3JlYXNl
ID4gbV9xdW90YTsKKyAgICBtX3VzYWdlID0gbV91c2FnZUdldHRlcigpOworICAgIG1fcXVvdGFD
b3VudERvd24gPSBtX3VzYWdlIDwgbV9xdW90YSA/IG1fcXVvdGEgLSBtX3VzYWdlIDogMDsKKyAg
ICBhdXRvIGRlY2lzaW9uID0gdHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSA/IERlY2lz
aW9uOjpHcmFudCA6IERlY2lzaW9uOjpEZW55OworICAgIHJldHVybiBkZWNpc2lvbjsKIH0KIAot
dm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKFN0b3JhZ2VRdW90YVVzZXImIHVz
ZXIpCitib29sIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnRyeUdyYW50UmVxdWVzdCh1aW50NjRfdCBz
cGFjZVJlcXVlc3RlZCkKIHsKLSAgICBBU1NFUlQobV91c2Vycy5jb250YWlucygmdXNlcikgfHwg
bV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5jb250YWlucygmdXNlcikpOwotICAgIG1fdXNl
cnMucmVtb3ZlKCZ1c2VyKTsKLSAgICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5y
ZW1vdmUoJnVzZXIpICYmIG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIC8vIFdoZW4gYmVpbmcgY2xlYXJlZCwgcXVvdGEgdXNlcnMgbWF5IHJlbW92ZSB0
aGVtc2VsdmVzIGFuZCBhZGQgdGhlbXNlbHZlcyB0byB0cmlnZ2VyIHJlaW5pdGlhbGl6YXRpb24u
Ci0gICAgICAgIC8vIExldCdzIHdhaXQgZm9yIGFkZFVzZXIgdG8gYmUgY2FsbGVkIGJlZm9yZSBw
cm9jZXNzaW5nIHBlbmRpbmcgcmVxdWVzdHMuCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Ro
aXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldIHsKLSAgICAgICAgICAgIGlmICghd2Vh
a1RoaXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAobV9wZW5k
aW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdGhpcy0+
cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyh7IH0pOwotICAgICAgICB9KTsKKyAgICBBU1NFUlQobV9x
dW90YUNvdW50RG93bkxvY2suaXNMb2NrZWQoKSk7CisgICAgaWYgKHNwYWNlUmVxdWVzdGVkIDw9
IG1fcXVvdGFDb3VudERvd24pIHsKKyAgICAgICAgbV9xdW90YUNvdW50RG93biAtPSBzcGFjZVJl
cXVlc3RlZDsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJldHVybiBmYWxzZTsK
IH0KLQotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3Bh
Y2VJbmNyZWFzZSwgUmVxdWVzdENhbGxiYWNrJiYgY2FsbGJhY2spCisgICAgCit2b2lkIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblVzYWdlKCkKIHsKLSAgICBpZiAoIW1f
cGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5h
cHBlbmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghc3BhY2VJbmNyZWFzZSkgewotICAgICAgICBjYWxsYmFj
ayhEZWNpc2lvbjo6R3JhbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW5pdGlh
bGl6ZVVzZXJzSWZOZWVkZWQoKTsKLQotICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25V
c2Vycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3Bh
Y2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpKSB7Ci0gICAg
ICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2Fs
bGJhY2spIH0pOwotCi0gICAgICAgIC8vIFRyeSBwcm9jZXNzaW5nIHJlcXVlc3QgYWdhaW4gYWZ0
ZXIgbWFraW5nIHN1cmUgdXNhZ2UgaXMgYWNjdXJhdGUuCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0
ZTo6Q29tcHV0aW5nU3BhY2VVc2VkOwotICAgICAgICBmb3IgKGF1dG8mIHVzZXIgOiBjb3B5VG9W
ZWN0b3IobV91c2VycykpCi0gICAgICAgICAgICB1c2VyLT5jb21wdXRlU3BhY2VVc2VkKCk7Ci0K
LSAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkFza2luZ0Zvck1v
cmVTcGFjZTsKLSAgICAgICAgYXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwotICAgICAg
ICByZXR1cm47CisgICAgLy8gV2hlbiBTdG9yYWdlUXVvdGFNYW5hZ2VyIGlzIHVzZWQgZm9yIHRo
ZSBmaXJzdCB0aW1lLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBpdHMgaW5pdGlhbCBxdW90YSBpcyBi
aWdnZXIgdGhhbiBjdXJyZW50IGRpc2sgdXNhZ2UsCisgICAgLy8gYmFzZWQgb24gdGhlIGFzc3Vt
cHRpb24gdGhhdCB0aGUgcXVvdGEgd2FzIGluY3JlYXNlZCB0byBhdCBsZWFzdCB0aGUgZGlzayB1
c2FnZSB1bmRlciB1c2VyJ3MgcGVybWlzc2lvbiBiZWZvcmUuCisgICAgQVNTRVJUKG1fcXVvdGFD
b3VudERvd25Mb2NrLmlzTG9ja2VkKCkpOworICAgIGlmICghbV9xdW90YVVwZGF0ZWRCYXNlZE9u
VXNhZ2UpIHsKKyAgICAgICAgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgPSB0cnVlOworICAg
ICAgICBhdXRvIGRlZmF1bHRRdW90YVN0ZXAgPSBtX3F1b3RhIC8gMTA7CisgICAgICAgIG1fcXVv
dGEgPSBzdGQ6Om1heChtX3F1b3RhLCBkZWZhdWx0UXVvdGFTdGVwICogKChtX3VzYWdlIC8gZGVm
YXVsdFF1b3RhU3RlcCkgKyAxKSk7CiAgICAgfQotCi0gICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtp
bmdEZWNpc2lvbkZvclJlcXVlc3Q7Ci0gICAgY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKIH0K
IAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3Bh
Y2VJbmNyZWFzZSkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90YVVwZGF0ZWRC
YXNlZE9uVXNhZ2UoKQogewotICAgIEFTU0VSVChzaG91bGRBc2tGb3JNb3JlU3BhY2Uoc3BhY2VJ
bmNyZWFzZSkpOwotICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3Bh
Y2UpOwotCi0gICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdl
cjo6YXNrRm9yTW9yZVNwYWNlICUiIFBSSXU2NCwgdGhpcywgc3BhY2VJbmNyZWFzZSk7Ci0gICAg
bV9zdGF0ZSA9IFN0YXRlOjpXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlOwotICAgIG1f
c3BhY2VJbmNyZWFzZVJlcXVlc3RlcihtX3F1b3RhLCBzcGFjZVVzYWdlKCksIHNwYWNlSW5jcmVh
c2UsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0oT3B0aW9uYWw8dWludDY0
X3Q+IG5ld1F1b3RhKSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFu
YWdlcjo6YXNrRm9yTW9yZVNwYWNlIHJlY2VpdmVkIHJlc3BvbnNlICUiIFBSSXU2NCwgdGhpcywg
bmV3UXVvdGEgPyAqbmV3UXVvdGEgOiAwKTsKLQotICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkFz
a2luZ0Zvck1vcmVTcGFjZTsKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhuZXdRdW90
YSk7Ci0gICAgfSk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9xdW90YUNvdW50RG93bkxvY2sp
OworICAgIG1fcXVvdGEgPSBtX2luaXRpYWxRdW90YTsKKyAgICBtX3F1b3RhVXBkYXRlZEJhc2Vk
T25Vc2FnZSA9IGZhbHNlOwogfQogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQ
ZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+IG5ld1F1b3RhKQordm9pZCBTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpyZXNldFF1b3RhKCkKIHsKLSAgICBpZiAobV9wZW5kaW5nUmVxdWVzdHMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobmV3UXVvdGEpCi0gICAgICAg
IG1fcXVvdGEgPSAqbmV3UXVvdGE7Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6V2FpdGlu
Z0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFt
X3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZSkgewotICAgICAg
ICBhdXRvIHJlcXVlc3QgPSBtX3BlbmRpbmdSZXF1ZXN0cy50YWtlRmlyc3QoKTsKLSAgICAgICAg
Ym9vbCBzaG91bGRBbGxvd1JlcXVlc3QgPSAhc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHJlcXVlc3Qu
c3BhY2VJbmNyZWFzZSk7Ci0KLSAgICAgICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyBmaXJzdCByZXF1ZXN0IGRl
Y2lzaW9uIGlzICVkIiwgdGhpcywgc2hvdWxkQWxsb3dSZXF1ZXN0KTsKLQotICAgICAgICBtX3N0
YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKLSAgICAgICAgcmVxdWVzdC5j
YWxsYmFjayhzaG91bGRBbGxvd1JlcXVlc3QgPyBEZWNpc2lvbjo6R3JhbnQgOiBEZWNpc2lvbjo6
RGVueSk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgYXV0byYgcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLmZpcnN0KCk7Ci0K
LSAgICAgICAgaWYgKHNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVhc2Up
KSB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JS
ZXF1ZXN0KSB7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDb21wdXRpbmdTcGFj
ZVVzZWQ7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiB1c2VyIDogY29weVRvVmVjdG9yKG1f
dXNlcnMpKQotICAgICAgICAgICAgICAgICAgICB1c2VyLT5jb21wdXRlU3BhY2VVc2VkKCk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlOwotICAgICAgICAgICAg
dWludDY0X3Qgc3BhY2VJbmNyZWFzZSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHBlbmRp
bmdSZXF1ZXN0IDogbV9wZW5kaW5nUmVxdWVzdHMpCi0gICAgICAgICAgICAgICAgc3BhY2VJbmNy
ZWFzZSArPSBwZW5kaW5nUmVxdWVzdC5zcGFjZUluY3JlYXNlOwotICAgICAgICAgICAgYXNrRm9y
TW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3Q7Ci0g
ICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpLmNhbGxiYWNrKERlY2lzaW9uOjpH
cmFudCk7Ci0gICAgfQorICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcXVvdGFDb3VudERvd25Mb2Nr
KTsKKyAgICBtX3F1b3RhID0gbV9pbml0aWFsUXVvdGE7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFu
YWdlci5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKaW5k
ZXggMDk1NjYzMDZmNTU5MWFiYjU5ZDBhZmQ4ZWVhNDg2NzlhNWY2YzYzYy4uNTk5YjgzZDFmNjYy
NjhhYWRmYjQ0OGRhZGExZTNiMmYyYjhhN2UwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKQEAgLTI1LDc3ICsyNSw1NiBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgIkNsaWVudE9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9u
SGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgor
I2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBTdG9yYWdlUXVvdGFVc2VyOwotCi1jbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VyIDogcHVibGlj
IENhbk1ha2VXZWFrUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IHsKK2NsYXNzIFN0b3JhZ2VRdW90
YU1hbmFnZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U3RvcmFnZVF1b3RhTWFuYWdl
cj4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgdXNpbmcgU3BhY2VJbmNyZWFzZVJl
cXVlc3RlciA9IFdURjo6RnVuY3Rpb248dm9pZCh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3Vy
cmVudFNwYWNlLCB1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KE9wdGlvbmFsPHVpbnQ2NF90Pik+JiYpPjsKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKHVpbnQ2
NF90IHF1b3RhLCBTcGFjZUluY3JlYXNlUmVxdWVzdGVyJiYgc3BhY2VJbmNyZWFzZVJlcXVlc3Rl
cikKLSAgICAgICAgOiBtX3F1b3RhKHF1b3RhKQotICAgICAgICAsIG1fc3BhY2VJbmNyZWFzZVJl
cXVlc3RlcihXVEZNb3ZlKHNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIpKQotICAgIHsKLSAgICB9Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgflN0b3JhZ2VRdW90YU1hbmFnZXIoKTsKKyAgICB1c2luZyBVc2Fn
ZUdldHRlciA9IFdURjo6RnVuY3Rpb248dWludDY0X3QoKT47CisgICAgdXNpbmcgUXVvdGFJbmNy
ZWFzZVJlcXVlc3RlciA9IFdURjo6RnVuY3Rpb248dm9pZCh1aW50NjRfdCBjdXJyZW50UXVvdGEs
IHVpbnQ2NF90IGN1cnJlbnRVc2FnZSwgdWludDY0X3QgcmVxdWVzdGVkSW5jcmVhc2UsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8dWludDY0X3Q+KT4mJik+OworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWY8U3RvcmFnZVF1b3RhTWFuYWdlcj4gY3JlYXRlKHVpbnQ2NF90IHF1
b3RhLCBVc2FnZUdldHRlciYmLCBRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYpOwogCiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdp
blF1b3RhKHVpbnQ2NF90IHF1b3RhKSB7IHJldHVybiBxdW90YSAvIDEwOyB9Ci0KICAgICBzdGF0
aWMgY29uc3RleHByIHVpbnQ2NF90IGRlZmF1bHRRdW90YSgpIHsgcmV0dXJuIDEwMDAgKiBNQjsg
fQogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YSgp
IHsgcmV0dXJuIGRlZmF1bHRUaGlyZFBhcnR5UXVvdGFGcm9tUGVyT3JpZ2luUXVvdGEoZGVmYXVs
dFF1b3RhKCkpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXIoU3RvcmFnZVF1
b3RhVXNlciYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlcihTdG9yYWdlUXVv
dGFVc2VyJik7Ci0KICAgICBlbnVtIGNsYXNzIERlY2lzaW9uIHsgRGVueSwgR3JhbnQgfTsKICAg
ICB1c2luZyBSZXF1ZXN0Q2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKERlY2lzaW9u
KT47Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXF1ZXN0U3BhY2UodWludDY0X3QsIFJlcXVl
c3RDYWxsYmFjayYmKTsKLSAgICB2b2lkIHJlc2V0UXVvdGEodWludDY0X3QgbmV3UXVvdGEpIHsg
bV9xdW90YSA9IG5ld1F1b3RhOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXF1ZXN0U3Bh
Y2VPbk1haW5UaHJlYWQodWludDY0X3QsIFJlcXVlc3RDYWxsYmFjayYmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBEZWNpc2lvbiByZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQodWludDY0X3Qp
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdl
KCk7Ci0KLSAgICBlbnVtIGNsYXNzIFN0YXRlIHsKLSAgICAgICAgVW5pbml0aWFsaXplZCwKLSAg
ICAgICAgQ29tcHV0aW5nU3BhY2VVc2VkLAotICAgICAgICBXYWl0aW5nRm9yU3BhY2VJbmNyZWFz
ZVJlc3BvbnNlLAotICAgICAgICBBc2tpbmdGb3JNb3JlU3BhY2UsCi0gICAgICAgIE1ha2luZ0Rl
Y2lzaW9uRm9yUmVxdWVzdCwKLSAgICB9OwotICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZTsgfQorICAgIC8vIFRlc3Qgb25seS4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZXNldFF1b3RhKCk7CiAKIHByaXZhdGU6Ci0gICAgdWludDY0X3Qgc3BhY2VVc2FnZSgpIGNv
bnN0OwotICAgIGJvb2wgc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVh
c2UpIGNvbnN0OwotICAgIHZvaWQgYXNrRm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVh
c2UpOwotCi0gICAgdm9pZCBpbml0aWFsaXplVXNlcnNJZk5lZWRlZCgpOwotICAgIHZvaWQgYXNr
VXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJik7CisgICAgU3RvcmFnZVF1b3RhTWFu
YWdlcih1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJlcXVlc3Rl
ciYmKTsKKyAgICBib29sIHRyeUdyYW50UmVxdWVzdCh1aW50NjRfdCk7CiAKLSAgICB2b2lkIHBy
b2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+KTsKKyAgICB2b2lkIHVwZGF0
ZVF1b3RhQmFzZWRPblVzYWdlKCk7CiAKKyAgICBMb2NrIG1fcXVvdGFDb3VudERvd25Mb2NrOwor
ICAgIHVpbnQ2NF90IG1fcXVvdGFDb3VudERvd24geyAwIH07CiAgICAgdWludDY0X3QgbV9xdW90
YSB7IDAgfTsKKyAgICB1aW50NjRfdCBtX3VzYWdlIHsgMCB9OwogCi0gICAgU3BhY2VJbmNyZWFz
ZVJlcXVlc3RlciBtX3NwYWNlSW5jcmVhc2VSZXF1ZXN0ZXI7CisgICAgVXNhZ2VHZXR0ZXIgbV91
c2FnZUdldHRlcjsKKyAgICBRdW90YUluY3JlYXNlUmVxdWVzdGVyIG1fcXVvdGFJbmNyZWFzZVJl
cXVlc3RlcjsKIAotICAgIGVudW0gY2xhc3MgV2hlbkluaXRpYWxpemVkQ2FsbGVkIHsgTm8sIFll
cyB9OwotICAgIEhhc2hNYXA8U3RvcmFnZVF1b3RhVXNlciosIFdoZW5Jbml0aWFsaXplZENhbGxl
ZD4gbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2VyczsKLSAgICBIYXNoU2V0PFN0b3JhZ2VRdW90
YVVzZXIqPiBtX3VzZXJzOworICAgIERlcXVlPFJlcXVlc3RDYWxsYmFjaz4gbV9jYWxsYmFja3M7
CisgICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CiAKLSAgICBzdHJ1Y3QgUGVuZGluZ1Jl
cXVlc3QgewotICAgICAgICB1aW50NjRfdCBzcGFjZUluY3JlYXNlOwotICAgICAgICBSZXF1ZXN0
Q2FsbGJhY2sgY2FsbGJhY2s7Ci0gICAgfTsKLSAgICBEZXF1ZTxQZW5kaW5nUmVxdWVzdD4gbV9w
ZW5kaW5nUmVxdWVzdHM7CisgICAgYm9vbCBtX3F1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZSB7IGZh
bHNlIH07CiAKLSAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlVuaW5pdGlhbGl6ZWQgfTsKKyAg
ICAvLyBUZXN0IG9ubHkuCisgICAgdWludDY0X3QgbV9pbml0aWFsUXVvdGEgeyAwIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VRdW90YVVzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1
b3RhVXNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzEwY2VlYzYwYzVkZTUw
YzYwOWQyMzFiMGYwZGY5Njc0OTQ5NDIwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5o
CisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL0NvbXBs
ZXRpb25IYW5kbGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU3RvcmFnZVF1
b3RhVXNlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U3RvcmFnZVF1b3RhVXNlcigpID0gZGVm
YXVsdDsKLQotICAgIHZpcnR1YWwgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlU3BhY2VVc2VkKCkgeyB9OwotICAgIHZpcnR1YWwgdm9pZCB3
aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSB7IGNh
bGxiYWNrKCk7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggNWYyM2NjNjZhYTEx
ZjdkMjhlNzYxNWNjYjg1MTM2N2MyMDMxNWJlMy4uNjc2NzI2YTE2NmJmNmNlZTNjZTIzNGY5MTlj
NDJjZTEyOWIwNjQxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0
b3JlLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKICNpbmNsdWRl
ICJXZWJzaXRlRGF0YVR5cGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9ETlMuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0RlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oPgpAQCAtMzE2LDgg
KzMxNywxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJgogICAgIGF1dG8gc2Vzc2lvbklEID0g
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklEOwogICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lv
bjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwogCisgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBhZGRTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKKwog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Np
b24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIHNldFNlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTMyNiw3ICszMzEsNiBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMmJgogICAgICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1p
bmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgfQogI2VuZGlmCi0gICAgaW5pdGlhbGl6ZVN0
b3JhZ2VRdW90YShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzKTsKIAogICAg
IG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7CiAKQEAgLTQzNCwyOCArNDM4LDM5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyQ2Fj
aGVkQ3JlZGVudGlhbHMoKQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRXZWJzaXRlRGF0YVN0
b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKIHsKKyAgICBhdXRv
IHNlc3Npb25JRCA9IHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25J
RDsKKworICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJz
LmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgYWRkU2Vzc2lvblN0
b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VR
dW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0
ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSk7CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
KyAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBzZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJv
b3RQYXRoKHNlc3Npb25JRCwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgaWYgKHBhcmVudFByb2Nl
c3NIYXNTZXJ2aWNlV29ya2VyRW50aXRsZW1lbnQoKSkKLSAgICAgICAgYWRkU2VydmljZVdvcmtl
clNlc3Npb24ocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklELCBw
YXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdU
Rk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKKyAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJz
LnNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUocGFy
YW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVycy5z
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRp
ZgogCi0gICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQotICAg
IGluaXRpYWxpemVTdG9yYWdlUXVvdGEocGFyYW1ldGVycyk7CisgICAgbV9zdG9yYWdlTWFuYWdl
clNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBh
cmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIAogICAgIFJl
bW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVXZWJzaXRlRGF0YVN0b3JlU2Vzc2lvbigqdGhp
cywgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRp
YWxpemVTdG9yYWdlUXVvdGEoY29uc3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMpCit2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIHVpbnQ2NF90IGRlZmF1bHRRdW90YSwgdWludDY0
X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YSwgY29uc3QgU3RyaW5nJiBjYWNoZVJvb3RQYXRoKQog
ewotICAgIGF1dG8mIG1hbmFnZXJzID0gIG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuZW5zdXJlKHBh
cmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgW10gewotICAgICAg
ICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcnMgeyB9OwotICAgIH0pLml0ZXJhdG9yLT52YWx1
ZTsKLSAgICBtYW5hZ2Vycy5zZXREZWZhdWx0UXVvdGFzKHBhcmFtZXRlcnMucGVyT3JpZ2luU3Rv
cmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEpOwor
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jayk7
CisgICAgYXV0b1tpdGVyLCBpc05ld0VudHJ5XSA9IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXJzLmFkZChzZXNzaW9uSUQsIG51bGxwdHIpOworICAgIGlmIChpc05ld0VudHJ5KQorICAgICAg
ICBpdGVyLT52YWx1ZSA9IG1ha2VVbmlxdWU8U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI+KGNh
Y2hlUm9vdFBhdGgsIGRlZmF1bHRRdW90YSwgZGVmYXVsdFRoaXJkUGFydHlRdW90YSk7Cit9CisK
K3ZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIEFTU0VSVChtX3Nlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2Vycy5jb250YWlucyhzZXNzaW9uSUQpKTsKKyAgICBtX3Nlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2Vycy5yZW1vdmUoc2Vzc2lvbklEKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vz
czo6Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoTmV0d29ya1Nlc3Np
b24mKT4mIGZ1bmN0b3IpCkBAIC01NzYsOCArNTkxLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogI2VuZGlmCiAKICAgICBt
X3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW1vdmUoc2Vzc2lvbklEKTsKLQotICAgIG1fc3RvcmFnZVF1
b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Npb25JRCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQpAQCAtMTQ2OCw5ICsxNDgxLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
czo6ZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8
V2Vic2kKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
OkRpc2tDYWNoZSkgJiYgIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICBjbGVhckRp
c2tDYWNoZShtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXIgPSBXVEZNb3ZlKGNsZWFy
VGFza3NIYW5kbGVyKV0geyB9KTsKIAotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKSB8fCB3ZWJzaXRlRGF0YVR5cGVz
LmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RE9NQ2FjaGUpKQotICAgICAgICBjbGVhclN0b3Jh
Z2VRdW90YShzZXNzaW9uSUQpOwotCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMo
V2Vic2l0ZURhdGFUeXBlOjpBZENsaWNrQXR0cmlidXRpb25zKSkgewogICAgICAgICBpZiAoYXV0
byogbmV0d29ya1Nlc3Npb24gPSB0aGlzLT5uZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQogICAg
ICAgICAgICAgbmV0d29ya1Nlc3Npb24tPmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKCk7CkBAIC0x
NTYzLDE5ICsxNTczLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFG
b3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICAgICAgICAgfQogICAg
ICAgICBXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFnZTo6cmVtb3ZlU2Vzc2lvbkNyZWRlbnRpYWxz
V2l0aE9yaWdpbnMob3JpZ2luRGF0YXMpOwogICAgIH0KLQotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgc3RvcmFnZSBxdW90YSBjbGVhcmluZyBmb3IgdGhlc2Ugb3JpZ2lucy4KLX0KLQotdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6Y2xlYXJTdG9yYWdlUXVvdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
KQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmZpbmQoc2Vz
c2lvbklEKTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbmQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgbWFuYWdlcnMgPSBpdGVyYXRvci0+dmFs
dWU7Ci0gICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbWFuYWdlcnMubWFuYWdlcnNQZXJPcmlnaW4o
KSkKLSAgICAgICAgbWFuYWdlci52YWx1ZS0+cmVzZXRRdW90YShtYW5hZ2Vycy5kZWZhdWx0UXVv
dGEobWFuYWdlci5rZXkpKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCkBAIC0yMjE3LDEwICsyMjE0LDEwIEBAIFJlZjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gTmV0
d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uCiAgICAg
ICAgIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0aHMuZ2V0KHNlc3Npb25JRCk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklELCBwYXRoLCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBhdXRvJiBvcmlnaW4pIC0+IFN0b3JhZ2VRdW90YU1hbmFnZXIqIHsKKyAgICBy
ZXR1cm4gSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIHBhdGgsIFt0aGlz
LCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSURdKGNvbnN0IGF1dG8mIG9y
aWdpbikgLT4gUmVmUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IHsKICAgICAgICAgaWYgKCF3ZWFr
VGhpcykKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gJnRoaXMt
PnN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBvcmlnaW4pOworICAgICAgICByZXR1cm4g
c3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbik7CiAgICAgfSk7CiB9CiAKQEAg
LTIzMDksNiArMjMwNiwxNSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRJbmRleGVkRGF0YWJh
c2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJgogICAgICAgICAgICAg
cG9zdFN0b3JhZ2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJk5ldHdvcmtQcm9j
ZXNzOjplbnN1cmVQYXRoRXhpc3RzLCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpKTsKICAgICB9
CiB9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vy
SURCUm9vdFBhdGgoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGlkYlJv
b3RQYXRoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1h
bmFnZXJzTG9jayk7CisgICAgYXV0byogc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgPSBtX3Nl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5nZXQoc2Vzc2lvbklEKTsKKyAgICBBU1NFUlQoc2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpOworICAgIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vy
LT5zZXRJREJSb290UGF0aChpZGJSb290UGF0aCk7Cit9CisKICNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c3luY0xvY2FsU3RvcmFnZShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yMzI1LDkg
KzIzMzEsMTQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3Np
bmdMb2NhbFN0b3JhZ2UoKQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjp1cGRhdGVRdW90YUJhc2Vk
T25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENs
aWVudE9yaWdpbiYgb3JpZ2luKQogewotICAgIGF1dG8mIG1hbmFnZXIgPSBzdG9yYWdlUXVvdGFN
YW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsKLSAgICBtYW5hZ2VyLnJlc2V0UXVvdGEobV9zdG9y
YWdlUXVvdGFNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCktPnZhbHVlLmRlZmF1bHRRdW90YShvcmln
aW4pKTsKLSAgICBtYW5hZ2VyLnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKKyAgICBh
dXRvIHN0b3JhZ2VRdW90YU1hbmFnZXIgPSB0aGlzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Np
b25JRCwgb3JpZ2luKTsKKyAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5yZXNldFF1b3RhVXBkYXRl
ZEJhc2VkT25Vc2FnZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXNldFF1b3RhKCkK
K3sKKyAgICBmb3IgKGF1dG8mIHN0b3JhZ2VRdW90YU1hbmFnZXIgOiBleGlzdGluZ1N0b3JhZ2VR
dW90YU1hbmFnZXJzKCkpCisgICAgICAgIHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlc2V0UXVvdGEo
KTsKIH0KIAogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCkBAIC0yNDA0LDYyICsyNDE1
LDQ4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlcXVlc3RTdG9yYWdlU3BhY2UoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPCiAgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpS
ZXF1ZXN0U3RvcmFnZVNwYWNlIHsgc2Vzc2lvbklELCBvcmlnaW4sIHF1b3RhLCBjdXJyZW50U2l6
ZSwgc3BhY2VSZXF1aXJlZCB9LCBXVEZNb3ZlKGNhbGxiYWNrKSwgMCk7CiB9CiAKLWNsYXNzIFF1
b3RhVXNlckluaXRpYWxpemVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVz
ZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0
IFF1b3RhVXNlckluaXRpYWxpemVyKFN0b3JhZ2VRdW90YU1hbmFnZXImIG1hbmFnZXIpCi0gICAg
ICAgIDogbV9tYW5hZ2VyKG1ha2VXZWFrUHRyKG1hbmFnZXIpKQotICAgIHsKLSAgICAgICAgbWFu
YWdlci5hZGRVc2VyKCp0aGlzKTsKLSAgICB9Ci0KLSAgICB+UXVvdGFVc2VySW5pdGlhbGl6ZXIo
KQotICAgIHsKLSAgICAgICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgICAgIG1fbWFuYWdlci0+
cmVtb3ZlVXNlcigqdGhpcyk7Ci0gICAgICAgIGlmIChtX2NhbGxiYWNrKQotICAgICAgICAgICAg
bV9jYWxsYmFjaygpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICAvLyBTdG9yYWdlUXVvdGFVc2Vy
IEFQSS4KLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KK1JlZlB0
cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVF1b3RhTWFuYWdl
cihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQor
eworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9j
ayk7CisgICAgYXV0byogc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgPSBtX3Nlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2Vycy5nZXQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHZvaWQgd2hlbklu
aXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykgZmluYWwKLSAg
ICB7Ci0gICAgICAgIG1fY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKLSAgICB9CisgICAg
U3RyaW5nIGlkYlJvb3RQYXRoOworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgIGlk
YlJvb3RQYXRoID0gc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPmlkYlJvb3RQYXRoKCk7Cisj
ZW5kaWYKKyAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpVc2FnZUdldHRlciB1c2FnZUdldHRlciA9
IFtjYWNoZVJvb3RQYXRoID0gc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPmNhY2hlUm9vdFBh
dGgoKSwgaWRiUm9vdFBhdGgsIG9yaWdpbl0oKSB7CisgICAgICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOyAgICAKIAotICAgIFdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gbV9tYW5hZ2Vy
OwotICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gbV9jYWxsYmFjazsKLX07CisgICAgICAg
IHVpbnQ2NF90IHVzYWdlID0gMDsKKyAgICAgICAgdXNhZ2UgKz0gQ2FjaGVTdG9yYWdlOjpFbmdp
bmU6OmRpc2tVc2FnZShjYWNoZVJvb3RQYXRoLCBvcmlnaW4pOworI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorICAgICAgICB1c2FnZSArPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlza1Vz
YWdlKGlkYlJvb3RQYXRoLCBvcmlnaW4pOworI2VuZGlmCiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6
OmluaXRpYWxpemVRdW90YVVzZXJzKFN0b3JhZ2VRdW90YU1hbmFnZXImIG1hbmFnZXIsIFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRo
aXMpLCBzZXNzaW9uSUQsIG9yaWdpbiwgdXNlciA9IG1ha2VVbmlxdWU8UXVvdGFVc2VySW5pdGlh
bGl6ZXI+KG1hbmFnZXIpXSgpIG11dGFibGUgeworICAgICAgICByZXR1cm4gdXNhZ2U7CisgICAg
fTsKKyAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpRdW90YUluY3JlYXNlUmVxdWVzdGVyIHF1b3Rh
SW5jcmVhc2VSZXF1ZXN0ZXIgPSBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyks
IHNlc3Npb25JRCwgb3JpZ2luXSAodWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJy
ZW50U3BhY2UsIHVpbnQ2NF90IHJlcXVlc3RlZEluY3JlYXNlLCBhdXRvJiYgY2FsbGJhY2spIHsK
KyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy0+aWRiU2VydmVyKHNlc3Npb25JRCku
aW5pdGlhbGl6ZVF1b3RhVXNlcihvcmlnaW4pOwotICAgICAgICBDYWNoZVN0b3JhZ2U6OkVuZ2lu
ZTo6aW5pdGlhbGl6ZVF1b3RhVXNlcigqdGhpcywgc2Vzc2lvbklELCBvcmlnaW4sIFt1c2VyID0g
V1RGTW92ZSh1c2VyKV0geyB9KTsKLSAgICB9KTsKKyAgICAgICAgICAgIGNhbGxiYWNrKHsgfSk7
CisgICAgICAgIHJlcXVlc3RTdG9yYWdlU3BhY2Uoc2Vzc2lvbklELCBvcmlnaW4sIGN1cnJlbnRR
dW90YSwgY3VycmVudFNwYWNlLCByZXF1ZXN0ZWRJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykp
OworICAgIH07CisKKyAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPmVuc3Vy
ZU9yaWdpblN0b3JhZ2VRdW90YU1hbmFnZXIob3JpZ2luLCBzZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlci0+ZGVmYXVsdFF1b3RhKG9yaWdpbiksIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3Zl
KHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKTsKIH0KIAotU3RvcmFnZVF1b3RhTWFuYWdlciYgTmV0
d29ya1Byb2Nlc3M6OnN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK1ZlY3RvcjxSZWZQdHI8U3RvcmFnZVF1b3Rh
TWFuYWdlcj4+IE5ldHdvcmtQcm9jZXNzOjpleGlzdGluZ1N0b3JhZ2VRdW90YU1hbmFnZXJzKCkK
IHsKLSAgICBhdXRvJiBzdG9yYWdlUXVvdGFNYW5hZ2VycyA9IG1fc3RvcmFnZVF1b3RhTWFuYWdl
cnMuZW5zdXJlKHNlc3Npb25JRCwgW10gewotICAgICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFu
YWdlcnMgeyB9OwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLSAgICByZXR1cm4gKnN0b3JhZ2VR
dW90YU1hbmFnZXJzLm1hbmFnZXJzUGVyT3JpZ2luKCkuZW5zdXJlKG9yaWdpbiwgW3RoaXMsICZz
dG9yYWdlUXVvdGFNYW5hZ2Vycywgc2Vzc2lvbklELCAmb3JpZ2luXSB7Ci0gICAgICAgIGF1dG8g
bWFuYWdlciA9IG1ha2VVbmlxdWU8U3RvcmFnZVF1b3RhTWFuYWdlcj4oc3RvcmFnZVF1b3RhTWFu
YWdlcnMuZGVmYXVsdFF1b3RhKG9yaWdpbiksIFt0aGlzLCBzZXNzaW9uSUQsIG9yaWdpbl0odWlu
dDY0X3QgcXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFz
ZSwgYXV0byBjYWxsYmFjaykgewotICAgICAgICAgICAgdGhpcy0+cmVxdWVzdFN0b3JhZ2VTcGFj
ZShzZXNzaW9uSUQsIG9yaWdpbiwgcXVvdGEsIGN1cnJlbnRTcGFjZSwgc3BhY2VJbmNyZWFzZSwg
V1RGTW92ZShjYWxsYmFjaykpOwotICAgICAgICB9KTsKLSAgICAgICAgaW5pdGlhbGl6ZVF1b3Rh
VXNlcnMoKm1hbmFnZXIsIHNlc3Npb25JRCwgb3JpZ2luKTsKLSAgICAgICAgcmV0dXJuIG1hbmFn
ZXI7Ci0gICAgfSkuaXRlcmF0b3ItPnZhbHVlOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jayk7CisgICAgVmVjdG9yPFJlZlB0cjxTdG9yYWdl
UXVvdGFNYW5hZ2VyPj4gcmVzdWx0OworCisgICAgZm9yIChhdXRvJiBzZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlciA6IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzLnZhbHVlcygpKSB7Cisg
ICAgICAgIGZvciAoYXV0byBzdG9yYWdlUXVvdGFNYW5hZ2VyIDogc2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXItPmV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMoKSkKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoc3RvcmFnZVF1b3RhTWFuYWdlcik7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggZjYyZjAxZDM4MGY0MDEwNTUyYWFkMzg4OWE0
OTdkNTEyNmY4YTM1My4uZGIxOTAyYTA5NWNjMmMxYTUzNWU4MWUxNDNmZWI0MWY3NGY5ZjJjOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAt
Mjg0LDYgKzI4NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dz
aW5nTG9jYWxTdG9yYWdlKCk7CiAKICAgICB2b2lkIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNh
Z2VGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4m
KTsKKyAgICB2b2lkIHJlc2V0UXVvdGEoKTsKIAogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lP
TlMpCiAgICAgdm9pZCBnZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZUFycmF5JiYpPiYmKTsKQEAgLTMyNyw3ICszMjgsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhQQUw6
OlNlc3Npb25JRCwgVVJMJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9p
ZCBtYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoUEFMOjpTZXNzaW9u
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKLSAgICBXZWJDb3JlOjpTdG9yYWdl
UXVvdGFNYW5hZ2VyJiBzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luJik7CisgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVv
dGFNYW5hZ2VyPj4gZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2VycygpOwogCiAgICAgdm9pZCBh
ZGRLZXB0QWxpdmVMb2FkKFJlZjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+JiYpOwogICAgIHZvaWQg
cmVtb3ZlS2VwdEFsaXZlTG9hZChOZXR3b3JrUmVzb3VyY2VMb2FkZXImKTsKQEAgLTQ0Miw2ICs0
NDQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29sbGVjdEluZGV4ZWREYXRhYmFzZU9yaWdpbnNG
b3JWZXJzaW9uKGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhPiYpOwogICAgIEhhc2hTZXQ8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBpbmRleGVk
RGF0YWJhc2VPcmlnaW5zKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAgICAgUmVmPFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCU2VydmVyPiBjcmVhdGVJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQpOworICAg
IHZvaWQgc2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJJREJSb290UGF0aChQQUw6OlNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBpZGJSb290UGF0aCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKQEAgLTQ2MSw4ICs0NjQsNDQgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBl
cmZvcm1OZXh0U3RvcmFnZVRhc2soKTsKICAgICB2b2lkIGVuc3VyZVBhdGhFeGlzdHMoY29uc3Qg
U3RyaW5nJiBwYXRoKTsKIAotICAgIHZvaWQgY2xlYXJTdG9yYWdlUXVvdGEoUEFMOjpTZXNzaW9u
SUQpOwotICAgIHZvaWQgaW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShjb25zdCBXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycyYpOworICAgIGNsYXNzIFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyIHsK
KyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgsIHVp
bnQ2NF90IGRlZmF1bHRRdW90YSwgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YSkKKyAg
ICAgICAgICAgIDogbV9jYWNoZVJvb3RQYXRoKGNhY2hlUm9vdFBhdGgpCisgICAgICAgICAgICAs
IG1fZGVmYXVsdFF1b3RhKGRlZmF1bHRRdW90YSkKKyAgICAgICAgICAgICwgbV9kZWZhdWx0VGhp
cmRQYXJ0eVF1b3RhKGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEpCisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICB1aW50NjRfdCBkZWZhdWx0UXVvdGEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luJiBvcmlnaW4pIGNvbnN0IHsgcmV0dXJuIG9yaWdpbi50b3BPcmlnaW4gPT0gb3JpZ2luLmNs
aWVudE9yaWdpbiA/IG1fZGVmYXVsdFF1b3RhIDogbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhOyB9
CisKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+IGVuc3VyZU9y
aWdpblN0b3JhZ2VRdW90YU1hbmFnZXIoV2ViQ29yZTo6Q2xpZW50T3JpZ2luIG9yaWdpbiwgdWlu
dDY0X3QgcXVvdGEsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OlVzYWdlR2V0dGVyJiYg
dXNhZ2VHZXR0ZXIsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OlF1b3RhSW5jcmVhc2VS
ZXF1ZXN0ZXImJiBxdW90YUluY3JlYXNlUmVxdWVzdGVyKQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvW2l0ZXIsIGlzTmV3RW50cnldID0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5hZGQob3Jp
Z2luLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmIChpc05ld0VudHJ5KQorICAgICAgICAgICAg
ICAgIGl0ZXItPnZhbHVlID0gV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKHF1
b3RhLCBXVEZNb3ZlKHVzYWdlR2V0dGVyKSwgV1RGTW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVy
KSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVJlZlB0cigqaXRlci0+dmFsdWUpOworICAgICAg
ICB9CisKKyAgICAgICAgYXV0byBleGlzdGluZ1N0b3JhZ2VRdW90YU1hbmFnZXJzKCkgeyByZXR1
cm4gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy52YWx1ZXMoKTsgfQorCisgICAgICAgIGNvbnN0IFN0
cmluZyYgY2FjaGVSb290UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVSb290UGF0aDsgfQor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgICAgICB2b2lkIHNldElEQlJvb3RQYXRo
KGNvbnN0IFN0cmluZyYgaWRiUm9vdFBhdGgpIHsgbV9pZGJSb290UGF0aCA9IGlkYlJvb3RQYXRo
OyB9CisgICAgICAgIGNvbnN0IFN0cmluZyYgaWRiUm9vdFBhdGgoKSBjb25zdCB7IHJldHVybiBt
X2lkYlJvb3RQYXRoOyB9CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAgIFN0cmluZyBt
X2NhY2hlUm9vdFBhdGg7CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisgICAgICAgIFN0
cmluZyBtX2lkYlJvb3RQYXRoOworI2VuZGlmCisgICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFF1
b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCkgfTsKKyAg
ICAgICAgdWludDY0X3QgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgpIH07CisgICAgICAgIEhhc2hN
YXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFu
YWdlcj4+IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnM7CisgICAgfTsKKyAgICB2b2lkIGFkZFNlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCB1aW50NjRfdCBkZWZhdWx0UXVv
dGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0cmluZyYgY2FjaGVS
b290UGF0aCk7CisgICAgdm9pZCByZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6
OlNlc3Npb25JRCk7CiAKICAgICAvLyBDb25uZWN0aW9ucyB0byBXZWJQcm9jZXNzZXMuCiAgICAg
SGFzaE1hcDxXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgUmVmPE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzPj4gbV93ZWJQcm9jZXNzQ29ubmVjdGlvbnM7CkBAIC01MzMsMjMgKzU3Miw4
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzSVRQRGF0YWJhc2VFbmFibGVkIHsgZmFsc2UgfTsK
ICNlbmRpZgogICAgIAotICAgIGNsYXNzIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHVpbnQ2NF90IGRlZmF1bHRRdW90YShjb25zdCBXZWJDb3JlOjpDbGllbnRP
cmlnaW4mIG9yaWdpbikgY29uc3QgeyByZXR1cm4gb3JpZ2luLnRvcE9yaWdpbiA9PSBvcmlnaW4u
Y2xpZW50T3JpZ2luID8gbV9kZWZhdWx0UXVvdGEgOiBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGE7
IH0KLSAgICAgICAgdm9pZCBzZXREZWZhdWx0UXVvdGFzKHVpbnQ2NF90IGRlZmF1bHRRdW90YSwg
dWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YSkKLSAgICAgICAgewotICAgICAgICAgICAg
bV9kZWZhdWx0UXVvdGEgPSBkZWZhdWx0UXVvdGE7Ci0gICAgICAgICAgICBtX2RlZmF1bHRUaGly
ZFBhcnR5UXVvdGEgPSBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhOwotICAgICAgICB9Ci0KLSAgICAg
ICAgSGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyPj4mIG1hbmFnZXJzUGVyT3JpZ2luKCkgeyByZXR1cm4gbV9t
YW5hZ2Vyc1Blck9yaWdpbjsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdWludDY0X3QgbV9k
ZWZhdWx0UXVvdGEgeyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEo
KSB9OwotICAgICAgICB1aW50NjRfdCBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGEgeyBXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkgfTsKLSAgICAg
ICAgSGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9tYW5hZ2Vyc1Blck9yaWdpbjsKLSAgICB9OwotICAg
IEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJzPiBtX3N0b3JhZ2VR
dW90YU1hbmFnZXJzOworICAgIExvY2sgbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2Nr
OworICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcj4+IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzOwogCiAgICAg
T3B0aW9uU2V0PE5ldHdvcmtDYWNoZTo6Q2FjaGVPcHRpb24+IG1fY2FjaGVPcHRpb25zOwogICAg
IFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5IG1fbWVzc2FnZVBvcnRDaGFubmVs
UmVnaXN0cnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzNjc3Njc3NDgwYjgyYTQ0MzNmODVkMjgyYjNl
NWZiODA2YTkxZTYzLi41OGZlNWM5ZjYwMTgzNmFlZjU2OGQ5YjM5Nzg1MmE5NDFlYzUyMDNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MubWVzc2FnZXMuaW4KQEAgLTE1Miw2ICsxNTIsNyBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJv
Y2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgQ2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2Nh
bFN0b3JhZ2UoKQogCiAgICAgVXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3Rpbmco
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBzdHJ1Y3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIG9y
aWdpbikKKyAgICBSZXNldFF1b3RhKCkKIAogICAgIFN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uIGFkQ2xp
Y2tBdHRyaWJ1dGlvbikKICAgICBEdW1wQWRDbGlja0F0dHJpYnV0aW9uKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkgLT4gKFN0cmluZyBhZENsaWNrQXR0cmlidXRpb25TdGF0ZSkgQXN5bmMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lLmNwcAppbmRleCBmZjhhOGM1ZjYyNTBmMmRjMDc5NWEyNzVkOTJiOWM4ZmIxZDE0
MWZhLi45NzIyMzhmNzJjMTA5MjliNDZlZTQ3NDcyZmZlMTBjNTE0NGJlMTUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VF
bmdpbmUuY3BwCkBAIC00OCw2ICs0OCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGU7
CiAKIHN0YXRpYyBMb2NrIGdsb2JhbFNpemVGaWxlTG9jazsKIAorc3RhdGljIExvY2sgZ2xvYmFs
U2l6ZWZpbGVMb2NrOworCiBTdHJpbmcgRW5naW5lOjpjYWNoZXNSb290UGF0aChjb25zdCBXZWJD
b3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKICAgICBpZiAoIXNob3VsZFBlcnNpc3QoKSB8
fCAhbV9zYWx0KQpAQCAtMTkyLDEzICsxOTQsNjUgQEAgdm9pZCBFbmdpbmU6OmNsZWFyQ2FjaGVz
Rm9yT3JpZ2luKE5ldHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgUEFMOjpTZXNzaW9uSUQK
ICAgICB9KTsKIH0KIAotdm9pZCBFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIoTmV0d29ya1By
b2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFdl
YkNvcmU6OkNsaWVudE9yaWdpbiYgY2xpZW50T3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCitzdGF0aWMgdWludDY0X3QgZ2V0RGlyZWN0b3J5U2l6
ZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpCiB7Ci0gICAgZnJvbShuZXR3b3JrUHJvY2Vz
cywgc2Vzc2lvbklELCBbY2xpZW50T3JpZ2luLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiBlbmdpbmUpIG11dGFibGUgewotICAgICAgICBlbmdp
bmUucmVhZENhY2hlc0Zyb21EaXNrKGNsaWVudE9yaWdpbiwgW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBjYWNoZXNPckVycm9yKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIH0pOwotICAgIH0p
OworICAgIHVpbnQ2NF90IGRpcmVjdG9yeVNpemUgPSAwOworICAgIERlcXVlPFN0cmluZz4gcGF0
aHM7CisgICAgcGF0aHMuYXBwZW5kKGRpcmVjdG9yeVBhdGgpOworICAgIHdoaWxlICghcGF0aHMu
aXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gcGF0aCA9IHBhdGhzLnRha2VGaXJzdCgpOworICAg
ICAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHBhdGgsIEZpbGVTeXN0ZW06OlNo
b3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSkgeworICAgICAgICAgICAgYXV0byBuZXdQYXRo
cyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkocGF0aCwgIioiX3MpOworICAgICAgICAgICAg
Zm9yIChhdXRvJiBuZXdQYXRoIDogbmV3UGF0aHMpIHsKKyAgICAgICAgICAgICAgICAvLyBGaWxl
cyBpbiBCbG9icyBkaXJlY3RvcnkgYXJlIGhhcmQgbGluay4KKyAgICAgICAgICAgICAgICBhdXRv
IGZpbGVOYW1lID0gRmlsZVN5c3RlbTo6bGFzdENvbXBvbmVudE9mUGF0aElnbm9yaW5nVHJhaWxp
bmdTbGFzaChuZXdQYXRoKTsKKyAgICAgICAgICAgICAgICBpZiAoZmlsZU5hbWUgPT0gIkJsb2Jz
IikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcGF0aHMu
YXBwZW5kKG5ld1BhdGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBsb25nIGxvbmcgZmlsZVNpemUgPSAwOworICAgICAgICBGaWxl
U3lzdGVtOjpnZXRGaWxlU2l6ZShwYXRoLCBmaWxlU2l6ZSk7CisgICAgICAgIGRpcmVjdG9yeVNp
emUgKz0gZmlsZVNpemU7CisgICAgfQorICAgIHJldHVybiBkaXJlY3RvcnlTaXplOworfQorCit1
aW50NjRfdCBFbmdpbmU6OmRpc2tVc2FnZShjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKKyAgICBpZiAocm9vdFBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFN0cmluZyBzYWx0UGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChyb290UGF0aCwgInNhbHQiX3MpOworICAgIGF1dG8gc2FsdCA9IHJlYWRPck1ha2VTYWx0KHNh
bHRQYXRoKTsKKyAgICBpZiAoIXNhbHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gT3Ig
dHJhdmVyc2UgYWxsIGRpcmVjdG9yeQorICAgIEtleSBrZXkob3JpZ2luLnRvcE9yaWdpbi50b1N0
cmluZygpLCBvcmlnaW4uY2xpZW50T3JpZ2luLnRvU3RyaW5nKCksIHsgfSwgeyB9LCAqc2FsdCk7
CisgICAgU3RyaW5nIGRpcmVjdG9yeVBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQocm9vdFBhdGgsIGtleS5oYXNoQXNTdHJpbmcoKSk7CisKKyAgICAvLyBSZWFkIHNp
emVlc3RpbWF0ZSBmaWxlCisgICAgU3RyaW5nIHNpemVGaWxlUGF0aCA9IENhY2hlczo6Y2FjaGVz
U2l6ZUZpbGVuYW1lKGRpcmVjdG9yeVBhdGgpOworICAgIGlmIChhdXRvIHJlY29yZGVkU2l6ZSA9
IHJlYWRTaXplRmlsZShzaXplRmlsZVBhdGgpKQorICAgICAgICByZXR1cm4gKnJlY29yZGVkU2l6
ZTsKKworICAgIHJldHVybiBnZXREaXJlY3RvcnlTaXplKGRpcmVjdG9yeVBhdGgpOworfQorCit2
b2lkIEVuZ2luZTo6cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50
NjRfdCBzcGFjZVJlcXVlc3RlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYgY2FsbGJhY2spCit7CisgICAgaWYgKCFtX25l
dHdvcmtQcm9jZXNzKQorICAgICAgICBjYWxsYmFjayhXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpEZWNpc2lvbjo6RGVueSk7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fbmV0d29ya1Byb2Nlc3MtPnN0b3JhZ2VR
dW90YU1hbmFnZXIobV9zZXNzaW9uSUQsIG9yaWdpbik7CisgICAgaWYgKCFzdG9yYWdlUXVvdGFN
YW5hZ2VyKQorICAgICAgICBjYWxsYmFjayhXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6RGVueSk7CisKKyAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2VP
bk1haW5UaHJlYWQoc3BhY2VSZXF1ZXN0ZWQsIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAogRW5n
aW5lOjpFbmdpbmUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBOZXR3b3JrUHJvY2VzcyYgcHJv
Y2VzcywgU3RyaW5nJiYgcm9vdFBhdGgpCkBAIC0zMzIsNyArMzg2LDcgQEAgdm9pZCBFbmdpbmU6
OnJlYWRDYWNoZXNGcm9tRGlzayhjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwg
Q2FjaGVzQ2FsbGIKIAogICAgICAgICBhdXRvJiBjYWNoZXMgPSBtX2NhY2hlcy5lbnN1cmUob3Jp
Z2luLCBbJm9yaWdpbiwgdGhpc10gewogICAgICAgICAgICAgYXV0byBwYXRoID0gY2FjaGVzUm9v
dFBhdGgob3JpZ2luKTsKLSAgICAgICAgICAgIHJldHVybiBDYWNoZXM6OmNyZWF0ZSgqdGhpcywg
V2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgb3JpZ2luIH0sIFdURk1vdmUocGF0aCksIG1fbmV0d29y
a1Byb2Nlc3MtPnN0b3JhZ2VRdW90YU1hbmFnZXIobV9zZXNzaW9uSUQsIG9yaWdpbikpOworICAg
ICAgICAgICAgcmV0dXJuIENhY2hlczo6Y3JlYXRlKCp0aGlzLCBXZWJDb3JlOjpDbGllbnRPcmln
aW4geyBvcmlnaW4gfSwgV1RGTW92ZShwYXRoKSk7CiAgICAgICAgIH0pLml0ZXJhdG9yLT52YWx1
ZTsKIAogICAgICAgICBpZiAoY2FjaGVzLT5pc0luaXRpYWxpemVkKCkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmgg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5o
CmluZGV4IDM4ZDZmYzEzNGZlMDBkNGIwNGYzODA4YzBiYjg5N2IzZDYyMTY1NGYuLmNjOTFlY2Mw
NjMzM2ZlMmU3ZDFmODA1ZDllM2I2YWYwZmViNjMxMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmgKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaApAQCAtMjks
NiArMjksNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKICNpbmNsdWRlICJXZWJz
aXRlRGF0YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
QEAgLTc5LDYgKzgwLDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVF1
b3RhVXNlcihOZXR3b3JrUHJvY2VzcyYsIFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpD
bGllbnRPcmlnaW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgc3RhdGlj
IHVpbnQ2NF90IGRpc2tVc2FnZShjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mKTsKKyAgICB2b2lkIHJlcXVlc3RTcGFjZShjb25zdCBXZWJDb3JlOjpD
bGllbnRPcmlnaW4mLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYpOworCiAgICAg
Ym9vbCBzaG91bGRQZXJzaXN0KCkgY29uc3QgeyByZXR1cm4gISFtX2lvUXVldWU7fQogCiAgICAg
dm9pZCB3cml0ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgTmV0d29ya0NhY2hlOjpEYXRh
JiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKaW5kZXggM2I0NTNiODg5NmE2OTFkNTExZWMxYzRmZjhm
NGIyNDNjNjZkNWNmNC4uMTI2NTdjMjAwOWVmYWFkYTkwMGFjNmFjOGMxMTgwM2RhZjg2MWU2YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcApAQCAtNTYsMzYgKzU2LDIxIEBAIFN0cmlu
ZyBDYWNoZXM6OmNhY2hlc1NpemVGaWxlbmFtZShjb25zdCBTdHJpbmcmIGNhY2hlc1Jvb3RzUGF0
aCkKICAgICByZXR1cm4gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hl
c1Jvb3RzUGF0aCwgImVzdGltYXRlZHNpemUiX3MpOwogfQogCi1SZWY8Q2FjaGVzPiBDYWNoZXM6
OmNyZWF0ZShFbmdpbmUmIGVuZ2luZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBT
dHJpbmcmJiByb290UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYgcXVvdGFNYW5h
Z2VyKQorUmVmPENhY2hlcz4gQ2FjaGVzOjpjcmVhdGUoRW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgpCiB7Ci0gICAgYXV0byBj
YWNoZXMgPSBhZG9wdFJlZigqbmV3IENhY2hlcyB7IGVuZ2luZSwgV1RGTW92ZShvcmlnaW4pLCBX
VEZNb3ZlKHJvb3RQYXRoKSwgcXVvdGFNYW5hZ2VyIH0pOwotICAgIHF1b3RhTWFuYWdlci5hZGRV
c2VyKGNhY2hlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIGNhY2hlczsKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDYWNoZXMgeyBlbmdpbmUsIFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShyb290UGF0
aCkgfSk7CiB9CiAKLUNhY2hlczo6Q2FjaGVzKEVuZ2luZSYgZW5naW5lLCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVv
dGFNYW5hZ2VyJiBxdW90YU1hbmFnZXIpCitDYWNoZXM6OkNhY2hlcyhFbmdpbmUmIGVuZ2luZSwg
V2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCkKICAgICA6
IG1fZW5naW5lKCZlbmdpbmUpCiAgICAgLCBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCiAgICAg
LCBtX3Jvb3RQYXRoKFdURk1vdmUocm9vdFBhdGgpKQotICAgICwgbV9xdW90YU1hbmFnZXIobWFr
ZVdlYWtQdHIocXVvdGFNYW5hZ2VyKSkKIHsKIH0KIAogQ2FjaGVzOjp+Q2FjaGVzKCkKIHsKICAg
ICBBU1NFUlQobV9wZW5kaW5nV3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrcy5pc0VtcHR5KCkp
OwotCi0gICAgaWYgKG1fcXVvdGFNYW5hZ2VyKQotICAgICAgICBtX3F1b3RhTWFuYWdlci0+cmVt
b3ZlVXNlcigqdGhpcyk7Ci19Ci0KLXZvaWQgQ2FjaGVzOjp3aGVuSW5pdGlhbGl6ZWQoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAgIGluaXRpYWxpemUoW2NhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAg
IGlmIChlcnJvcikKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKENhY2hlU3RvcmFnZSwg
IkNhY2hlczo6aW5pdGlhbGl6ZSBmYWlsZWQsIHJlcG9ydGVkIHNwYWNlIHVzZWQgd2lsbCBiZSB6
ZXJvIik7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgfSk7CiB9CiAKIHZvaWQgQ2FjaGVzOjpy
ZXRyaWV2ZU9yaWdpbkZyb21EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBmb2xkZXJQYXRoLCBXb3Jr
UXVldWUmIHF1ZXVlLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8V2ViQ29y
ZTo6Q2xpZW50T3JpZ2luPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTI3MywxMyArMjU4
LDExIEBAIHZvaWQgQ2FjaGVzOjpjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiAgICAgICAgIG1fc3RvcmFnZS0+Y2xlYXIoU3RyaW5nIHsgfSwgLVdh
bGxUaW1lOjppbmZpbml0eSgpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewog
ICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgICAgIHByb3Rl
Y3RlZFRoaXMtPmNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKLSAgICAgICAgICAgIHByb3Rl
Y3RlZFRoaXMtPnJlc2V0U3BhY2VVc2VkKCk7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhck1lbW9y
eVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgcmVzZXRTcGFjZVVzZWQoKTsKICAgICBjbGVhclBlbmRp
bmdXcml0aW5nQ2FjaGVzVG9EaXNrQ2FsbGJhY2tzKCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKIH0KQEAgLTUyNSwxMiArNTA4LDEyIEBAIHZvaWQgQ2FjaGVzOjpyZWFkUmVjb3Jkc0xpc3Qo
Q2FjaGUmIGNhY2hlLCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlRyYXZlcnNlSGFuZGxlCiAKIHZv
aWQgQ2FjaGVzOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VSZXF1aXJlZCwgV2ViQ29yZTo6
RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIGlm
ICghbV9xdW90YU1hbmFnZXIpIHsKKyAgICBpZiAoIW1fZW5naW5lKSB7CiAgICAgICAgIGNhbGxi
YWNrKEVycm9yOjpRdW90YUV4Y2VlZGVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fcXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2Uoc3BhY2VSZXF1aXJlZCwgW2NhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgeworICAgIG1fZW5naW5l
LT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4sIHNwYWNlUmVxdWlyZWQsIFtjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKICAgICAgICAgc3dpdGNoIChk
ZWNpc2lvbikgewogICAgICAgICBjYXNlIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRl
Y2lzaW9uOjpEZW55OgogICAgICAgICAgICAgY2FsbGJhY2soRXJyb3I6OlF1b3RhRXhjZWVkZWQp
OwpAQCAtNjIxLDE3ICs2MDQsNiBAQCB2b2lkIENhY2hlczo6cmVtb3ZlQ2FjaGVFbnRyeShjb25z
dCBOZXR3b3JrQ2FjaGU6OktleSYga2V5KQogICAgIG1fc3RvcmFnZS0+cmVtb3ZlKGtleSk7CiB9
CiAKLXZvaWQgQ2FjaGVzOjpyZXNldFNwYWNlVXNlZCgpCi17Ci0gICAgbV9zaXplID0gMDsKLSAg
ICB1cGRhdGVTaXplRmlsZSgpOwotCi0gICAgaWYgKG1fcXVvdGFNYW5hZ2VyKSB7Ci0gICAgICAg
IG1fcXVvdGFNYW5hZ2VyLT5yZW1vdmVVc2VyKCp0aGlzKTsKLSAgICAgICAgbV9xdW90YU1hbmFn
ZXItPmFkZFVzZXIoKnRoaXMpOwotICAgIH0KLX0KLQogdm9pZCBDYWNoZXM6OmNsZWFyTWVtb3J5
UmVwcmVzZW50YXRpb24oKQogewogICAgIGlmICghbV9pc0luaXRpYWxpemVkKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZXMuaAppbmRleCAwMzIzMWYzYTliMDU3NjcyZDYzMWJiOTZlNjdhNmViOTll
MWQ3Y2JiLi42ODMyYjVjODE4NTY5Njg1NWUzYTkxNTJjZWVkNzhhOWU0ZDI2M2UxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGVzLmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJDYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFn
ZVF1b3RhVXNlci5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgogCkBAIC00MiwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIENhY2hlU3Rv
cmFnZSB7CiAKIGNsYXNzIEVuZ2luZTsKIAotY2xhc3MgQ2FjaGVzIGZpbmFsIDogcHVibGljIFJl
ZkNvdW50ZWQ8Q2FjaGVzPiwgcHJpdmF0ZSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyIHsKK2Ns
YXNzIENhY2hlcyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENhY2hlcz4gewogcHVibGljOgot
ICAgIHN0YXRpYyBTdHJpbmcgY2FjaGVzU2l6ZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYpOwotICAg
IHN0YXRpYyBSZWY8Q2FjaGVzPiBjcmVhdGUoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiYsIFN0cmluZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJik7Cisg
ICAgc3RhdGljIFN0cmluZyBjYWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBjYWNoZXNS
b290c1BhdGgpOworICAgIHN0YXRpYyBSZWY8Q2FjaGVzPiBjcmVhdGUoRW5naW5lJiwgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luJiYsIFN0cmluZyYmIHJvb3RQYXRoKTsKICAgICB+Q2FjaGVzKCk7CiAK
ICAgICBzdGF0aWMgdm9pZCByZXRyaWV2ZU9yaWdpbkZyb21EaXJlY3RvcnkoY29uc3QgU3RyaW5n
JiBmb2xkZXJQYXRoLCBXb3JrUXVldWUmLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0
aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiYmKT4mJik7CkBAIC03OSwyMiArNzgsMTYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBjbGVhcihXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CiAgICAgdm9pZCBjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgdm9pZCByZXNl
dFNwYWNlVXNlZCgpOwogCiAgICAgdWludDY0X3Qgc3RvcmFnZVNpemUoKSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBDYWNoZXMoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYsIFN0cmlu
ZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJik7Ci0KLSAgICAvLyBT
dG9yYWdlUXVvdGFVc2VyIEFQSS4KLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBDYWNoZXMoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50
T3JpZ2luJiYsIFN0cmluZyYmIHJvb3RQYXRoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVNpemUo
KTsKICAgICB2b2lkIHJlYWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0
ZWQ8VmVjdG9yPENhY2hlPiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7
CiAgICAgdm9pZCB3cml0ZUNhY2hlc1RvRGlzayhXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29t
cGxldGlvbkNhbGxiYWNrJiYpOwogCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKLQogICAgIHZvaWQgc3RvcmVPcmlnaW4oV2ViQ29y
ZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKICAgICBzdGF0aWMgT3B0
aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiByZWFkT3JpZ2luKGNvbnN0IE5ldHdvcmtDYWNo
ZTo6RGF0YSYpOwogCkBAIC0xMjIsNyArMTE1LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8V2Vi
Q29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjaz4gbV9wZW5kaW5nSW5pdGlh
bGl6YXRpb25DYWxsYmFja3M7CiAgICAgYm9vbCBtX2lzV3JpdGluZ0NhY2hlc1RvRGlzayB7IGZh
bHNlIH07CiAgICAgRGVxdWU8Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxXZWJDb3Jl
OjpET01DYWNoZUVuZ2luZTo6RXJyb3I+KT4+IG1fcGVuZGluZ1dyaXRpbmdDYWNoZXNUb0Rpc2tD
YWxsYmFja3M7Ci0gICAgV2Vha1B0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBtX3F1
b3RhTWFuYWdlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIENhY2hlU3RvcmFnZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4
IGMwZmNmOWM1ZjYwMGFhNWFjMTE2M2U0N2E0YjI2ZGFjNDIwNjVhYTkuLjZkMGMxMjlhNzQwNTEw
ZDM4Njk3MzcwNWFkMDkyZWYxMzJjYzA3NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKQEAgLTU1LDYgKzU1LDggQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKIAogICAgIGVuY29kZXIgPDwgbG9jYWxTdG9yYWdlRGlyZWN0b3J5IDw8IGxvY2Fs
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKIAorICAgIGVuY29kZXIgPDwgY2FjaGVT
dG9yYWdlRGlyZWN0b3J5IDw8IGNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsK
KwogICAgIGVuY29kZXIgPDwgcGVyT3JpZ2luU3RvcmFnZVF1b3RhOwogICAgIGVuY29kZXIgPDwg
cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YTsKIH0KQEAgLTE0MSw2ICsxNDMsMTggQEAg
T3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1v
dmUoKmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKKyAgICBPcHRpb25h
bDxTdHJpbmc+IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICBkZWNvZGVyID4+IGNhY2hlU3Rv
cmFnZURpcmVjdG9yeTsKKyAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eSA9IFdURk1vdmUoKmNhY2hlU3RvcmFnZURpcmVjdG9yeSk7CisKKyAgICBPcHRpb25hbDxTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGU+IGNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZTsKKyAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsK
KyAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CisKICAgICBPcHRpb25hbDx1aW50NjRfdD4gcGVyT3JpZ2luU3RvcmFnZVF1b3Rh
OwogICAgIGRlY29kZXIgPj4gcGVyT3JpZ2luU3RvcmFnZVF1b3RhOwogICAgIGlmICghcGVyT3Jp
Z2luU3RvcmFnZVF1b3RhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmgKaW5kZXggMDk1ZjA5ZDZhZjkzZjkxM2ViYjI5ZjcwMjY3YWU5YzFi
NzRiZTg4ZS4uZjI3ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBA
IC03MSw2ICs3MSw5IEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAgICAg
U3RyaW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwogCisgICAgU3RyaW5nIGNh
Y2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgY2FjaGVT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworCiAgICAgdWludDY0X3QgcGVyT3JpZ2lu
U3RvcmFnZVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3Rh
KCkgfTsKICAgICB1aW50NjRfdCBwZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhIHsgV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgpIH07CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKaW5kZXggZmFm
OGE1MjhlYTIzMDlhYmZhZTE3N2JkZWVhYjI3YzVkNWYwNzMyOS4uOWVhODlmYjViZDgwMzA4YTQ4
NTk4MTYzMDA1MWIxMTE4ZjFiODQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHQuY3BwCkBAIC02NzIsMyArNjcyLDggQEAgdm9pZCBXS0NvbnRleHRTZXRVc2VT
ZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBib29s
IHUKIHsKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0VXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2Vzcyh1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIH0KKwor
dm9pZCBXS0NvbnRleHRSZXNldFF1b3RhKFdLQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHQpLT5yZXNldFF1b3RhKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKaW5kZXggNzIzYjVlNDdlNmU2
YWJjNjY0MmRlYmU4NGFjY2RlMWZhNTY4Yzc5MC4uMWQ3MmEwMGE4ZGVhYjQwZDAxNGNmMTQxMzFl
OGI4YTE4Mjg1ZDQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dFByaXZhdGUuaApAQCAtMTI2LDYgKzEyNiw4IEBAIFdLX0VYUE9SVCB2b2lkIFdLQ29u
dGV4dENsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKFdLQ29udGV4dFJlZiBj
b250CiAKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgZm9yY2VTZXJ2aWNlV29ya2VyUHJv
Y2Vzcyk7CiAKK1dLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFJlc2V0UXVvdGEoV0tDb250ZXh0UmVm
KTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5kZXggZjk0Mjlm
OGIwOWM5YzY2YTE4ZDA5MzBjNWFhNDIzYzVhMzg3MjQ0Zi4uMzA3MjhjMGUwNzQxYjY4NDBiMGE0
N2Y4NTAxNDdjMzFiMmRhM2QyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTU2LDYgKzU2LDcgQEAgZW51bSBj
bGFzcyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gOiBib29sOwogZW51bSBjbGFzcyBTdG9y
YWdlQWNjZXNzV2FzR3JhbnRlZCA6IGJvb2w7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIHN0cnVj
dCBTZWN1cml0eU9yaWdpbkRhdGE7CitzdHJ1Y3QgQ2xpZW50T3JpZ2luOwogfQogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApp
bmRleCAwZTM3ODg5OTM5NjBhMzc3ZmE4ZTg5Y2I2OGUyYzJhNmMzOTVmMzg5Li5kYTczZmU3MjA4
MWI2ZmM2OWUyZDNkOWY1Y2Q2ZTYxNDFkNmU4MDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC01NTIsNiArNTUyLDEzIEBAIE5ldHdvcmtQcm9jZXNz
UHJveHkmIFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0
b3JlKiB3aXRoCiAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURp
cmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCisgICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJl
Y3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hlU3Rv
cmFnZURpcmVjdG9yeSgpIDogbnVsbFN0cmluZygpOworICAgIGlmICghY2FjaGVTdG9yYWdlRGly
ZWN0b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsK
KyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIH0KKwor
CiAgICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAgaWYgKHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpAQCAtMTcxMyw2ICsxNzIwLDE0IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCkKICAgICBtX25ldHdvcmtQ
cm9jZXNzID0gbnVsbHB0cjsKIH0KIAordm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVzZXRRdW90YSgp
Cit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRRdW90
YSgpLCAwKTsKK30KKwogdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZE5ldHdvcmtQcm9jZXNzV2ls
bFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZygpCiB7CiAgICAgaWYgKG1fbmV0d29ya1Byb2Nl
c3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCA5ZGUyMTcy
MmQ5ZWJkY2MzMjZmOGMzNjBmZDI4OGVjYzdlNmIzOTg0Li41Mzk0OWEyNjAwNGI3ODhlZmU4OGY0
MzRiNTlkYTE3YzY2Y2U2ZmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmgKQEAgLTUyOCw2ICs1MjgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VTZXBhcmF0
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKGJvb2wpOwogICAgIGJvb2wgdXNlU2VwYXJhdGVTZXJ2aWNl
V29ya2VyUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU2VwYXJhdGVTZXJ2aWNlV29ya2Vy
UHJvY2VzczsgfQogCisgICAgdm9pZCByZXNldFF1b3RhKCk7CisKIHByaXZhdGU6CiAgICAgdm9p
ZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29h
Lm1tCmluZGV4IDI5ZTkwMDNmMDQ2ZjIxNzRjNzZiODRmNzFiNWVjODkyZThhNDYwMjUuLjg3MDYy
YWJkNmM0MjFlMjNmNWJhMmVlMzE2M2YxMzk5Yzg5NTRhYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW0KQEAgLTE5MCw2ICsxOTAsMTAgQEAgV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgaWYgKCFwYXJhbWV0
ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCiAgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmxvY2Fs
U3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwogCisgICAgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBjYWNo
ZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKICAgICBw
YXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHBlck9yaWdpblN0b3JhZ2VRdW90YSgp
OwogICAgIHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHBlclRo
aXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCBiYjk4
NDE2NjQ1NGI1NmFlYTRjOGRiZDQ4NWI3MjE0MDBiYjE4NmNhLi40YjI3ZGZiNGYzMzI0NjEyMzU5
NTYzYTg3YzQ4NDkxYWQ0ZGY1MWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMjA4Myw2ICsyMDgz
LDEyIEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFt
ZXRlcnMoKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3Jp
dGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgfQogCisgICAgYXV0byBjYWNoZVN0b3Jh
Z2VEaXJlY3RvcnkgPSB0aGlzLT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBpZiAoIWNh
Y2hlU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcGFyYW1ldGVycy5jYWNo
ZVN0b3JhZ2VEaXJlY3RvcnkgPSBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNoZVN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKKyAgICB9CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBwYXJhbWV0
ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IHJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5KCk7CiAgICAgaWYgKCFwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5p
c0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggY2I5MTYwYTExNTYxYmIxODE1MGE1YTBlNjBhYzlhZTVlNWIwM2VjZS4uMGI5Y2M4YWVj
N2FhODQ0N2NlYjg1MWIwN2NmYzM1ODRiZTA1OWZlMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE5LTExLTEyICBT
aWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENyb3NzLXRocmVhZCB2
ZXJzaW9uIFN0b3JhZ2VRdW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwMzk3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOiBSZW1vdmVkLiBUaGlzIHVuaXQgdGVzdCB3YXMgdXNl
ZCB0byBtYWtlIHN1cmUgdGhlIHN0YXRlIAorICAgICAgICBjaGFuZ2UgaW5zaWRlIFN0b3JhZ2VR
dW90YU1hbmFnZXIgaXMgY29ycmVjdC4gU2luY2Ugd2UgaGF2ZSBjaGFuZ2VkIG91ciBpbXBsZW1l
bnRhdGlvbiwgdGhlIHRlc3QgaXMgbm90IG5lZWRlZC4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOiBSZXNldCBTdG9yYWdlUXVvdGFNYW5hZ2VyJ3MgcXVv
dGEgdmFsdWUgYmV0d2VlbiB0ZXN0cy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJl
c2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxl
cjo6cmVzZXRRdW90YSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oOgorCiAyMDE5LTExLTEyICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgogCiAgICAgICAgIFtpT1NdIFdLV2ViVmlldyBkb2VzIG5vdCByZXNwZWN0IHN5c3RlbSBzcGVs
bGNoZWNraW5nIHByZWZlcmVuY2UKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTMyYjg1ZTQy
ZGMxZjE5MjViN2NmZDhhOWI5MzNlYjcyMWQxYWNlYy4uYTcwZTE0NjQ0YzEzODdjNGQ3ZDg1MDdm
NjhiMjJlMGMxZTEyMTcxYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTczNCw3ICs3MzQs
NiBAQAogCQk5Mzk5QkEwNjIzNzExMTRGMDA4MzkyQkYgLyogSW5kZXhlZERCTm90SW5QYWdlQ2Fj
aGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5Mzk5QkEwMzIzNzExMEJGMDA4MzkyQkYgLyogSW5kZXhlZERCTm90SW5QYWdlQ2FjaGUu
aHRtbCAqLzsgfTsKIAkJOTNBRjRFQ0UxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBRjRFQ0QxNTA2RjA2NDAwN0ZENTdFIC8qIE5l
d0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwICovOyB9Owog
CQk5M0FGNEVEMTE1MDZGMTMwMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0FGNEVDRjE1
MDZGMTIzMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCAqLzsgfTsKLQkJOTNCNjIwNTQy
MzRFQTYyQzAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNjIwNTMyMzRFQTMyQjAwRDQ5Qjk3
IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwICovOyB9OwogCQk5M0NGQTg2NzFDRUI5RTM4MDAw
NTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQ0ZBODY2MUNFQjlERTEwMDA1NjVB
OCAvKiBhdXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwgKi87IH07CiAJCTkzRDExOUZDMjJDNjgw
RjcwMDlCRTNDNyAvKiBsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sIGluIENv
cHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRDExOUZC
MjJDNTcxMTIwMDlCRTNDNyAvKiBsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1s
ICovOyB9OwogCQk5M0UyQzU1NTFGRDMyMDQxMDBFMURGNkEgLyogTGluZUVuZGluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0UyQzU1NDFGRDMy
MDQxMDBFMURGNkEgLyogTGluZUVuZGluZy5jcHAgKi87IH07CkBAIC0yMTM4LDcgKzIxMzcsNiBA
QAogCQk5M0FGNEVDQTE1MDZGMDM1MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0Rm9ySW1hZ2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzQUY0RUNEMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvcklt
YWdlc19CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FGNEVDRjE1
MDZGMTIzMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRt
bDsgcGF0aCA9ICJsb3RzLW9mLWltYWdlcy5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJOTNCNjIwNTMyMzRFQTMyQjAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVF1b3RhTWFuYWdl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0ZBODY2MUNFQjlERTEwMDA1
NjVBOCAvKiBhdXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7
IHBhdGggPSAiYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTNDRkE4NjgxQ0VCQ0ZFRDAwMDU2NUE4IC8qIENhbmRpZGF0ZVRlc3RzLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2FuZGlkYXRlVGVzdHMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDExOUZCMjJDNTcxMTIwMDlCRTND
NyAvKiBsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5odG1sOyBwYXRoID0gImxvY2Fsc3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzExMCw3ICszMTA4LDYgQEAKIAkJCQk0MTk3
M0I1QzFBRjIyODc1MDA2QzdCMzYgLyogU2hhcmVkQnVmZmVyLmNwcCAqLywKIAkJCQlBMTc5OTE4
OTFFMUNBMjQxMDBBNTA1RUQgLyogU2hhcmVkQnVmZmVyVGVzdC5jcHAgKi8sCiAJCQkJQTE3OTkx
OEExRTFDQTI0MTAwQTUwNUVEIC8qIFNoYXJlZEJ1ZmZlclRlc3QuaCAqLywKLQkJCQk5M0I2MjA1
MzIzNEVBMzJCMDBENDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8sCiAJCQkJRUNB
NjgwQ0QxRTY4Q0MwOTAwNzMxRDIwIC8qIFN0cmluZ1V0aWxpdGllcy5tbSAqLywKIAkJCQlDRTRE
NURFNTFGNjc0M0JBMDA3MkNGQzYgLyogU3RyaW5nV2l0aERpcmVjdGlvbi5jcHAgKi8sCiAJCQkJ
OTNBMjU4OTgxRjkyRkYxNTAwM0U1MTBDIC8qIFRleHRDb2RlYy5jcHAgKi8sCkBAIC00ODQ2LDcg
KzQ4NDMsNiBAQAogCQkJCTdDQ0U3RUNGMUE0MTFBN0UwMDQ0N0M0QyAvKiBTdG9wTG9hZGluZ0Zy
b21EaWRSZWNlaXZlUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLywKIAkJCQlDREMwOTMyRTIxQzk5
MzQ0MDAzMEM0QjAgLyogU3RvcFN1c3BlbmRSZXN1bWVBbGxNZWRpYS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTQxNEFENjg2MjI4NUQxQzAwMDc3N0YyRCAvKiBTdG9yYWdlUXVvdGEubW0gaW4gU291
cmNlcyAqLywKLQkJCQk5M0I2MjA1NDIzNEVBNjJDMDBENDlCOTcgLyogU3RvcmFnZVF1b3RhTWFu
YWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTVCRTE3MTFENDI4RTRCMDBERDdDNjggLyog
U3RvcmVCbG9iVGhlbkRlbGV0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUQwMUE0MTFB
N0UwMDQ0N0M0QyAvKiBTdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUQxMUE0MTFBN0UwMDQ0N0M0QyAvKiBTdHJpbmdUcnVu
Y2F0b3IubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYWQxYzY3YmYwNTJmN2IwYTM0NTNkMDU0ZjI1MjkxOTFlZWYzZjE3Mi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBh
cmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VRdW90YVVzZXIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci0KLW5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKLQotc3RhdGljIGNvbnN0IGludCBk
ZWZhdWx0UXVvdGEgPSAxICogS0I7Ci0KLWNsYXNzIE1vY2tRdW90YVVzZXIgZmluYWwgOiBwdWJs
aWMgV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgTW9j
a1F1b3RhVXNlcihTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5hZ2VyKQotICAgICAgICA6IG1fbWFu
YWdlcigmbWFuYWdlcikKLSAgICB7Ci0gICAgICAgIG1hbmFnZXIuYWRkVXNlcigqdGhpcyk7Ci0g
ICAgfQotCi0gICAgdm9pZCBzZXRTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKSB7IG1fc3Bh
Y2VVc2VkID0gc3BhY2VVc2VkOyB9Ci0KLXByaXZhdGU6Ci0gICAgdWludDY0X3Qgc3BhY2VVc2Vk
KCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NwYWNlVXNlZDsKLSAgICB9
Ci0KLSAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y2FsbGJhY2spIGZpbmFsCi0gICAgewotICAgICAgICBpZiAoIW1fc3BhY2VVc2VkKQotICAgICAg
ICAgICAgQVNTRVJUX0VRKG1fbWFuYWdlci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
U3RhdGU6OlVuaW5pdGlhbGl6ZWQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlRf
RVEobV9tYW5hZ2VyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6Q29tcHV0
aW5nU3BhY2VVc2VkKTsKLQotICAgICAgICAvLyBSZXNldCB1c2FnZSB0byBtb2NrIGRlbGV0aW9u
LgotICAgICAgICBtX3NwYWNlVXNlZCA9IDA7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgfQot
Ci0gICAgdWludDY0X3QgbV9zcGFjZVVzZWQgeyAwIH07Ci0gICAgU3RvcmFnZVF1b3RhTWFuYWdl
ciogbV9tYW5hZ2VyOwotfTsKLSAgICAKLVRFU1QoU3RvcmFnZVF1b3RhTWFuYWdlclRlc3QsIEJh
c2ljKQotewotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIHN0b3JhZ2VRdW90YU1hbmFnZXJQdHIg
PSBudWxscHRyOwotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIgc3RvcmFnZVF1b3RhTWFuYWdlcihk
ZWZhdWx0UXVvdGEsIFsmc3RvcmFnZVF1b3RhTWFuYWdlclB0cl0odWludDY0X3QgcXVvdGEsIHVp
bnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmIGNvbXBsZXRpb25IYW5sZGVyKSB7Ci0g
ICAgICAgIEFTU0VSVF9UUlVFKHN0b3JhZ2VRdW90YU1hbmFnZXJQdHIpOwotICAgICAgICBBU1NF
UlRfRVEoc3RvcmFnZVF1b3RhTWFuYWdlclB0ci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdl
cjo6U3RhdGU6OldhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UpOwotCi0gICAgICAgIC8v
IEFsbG93IGFsbCBzcGFjZSBpbmNyZWFzZSByZXF1ZXN0cy4KLSAgICAgICAgY29tcGxldGlvbkhh
bmxkZXIoc3BhY2VJbmNyZWFzZSArIGN1cnJlbnRTcGFjZSk7Ci0gICAgfSk7Ci0gICAgc3RvcmFn
ZVF1b3RhTWFuYWdlclB0ciA9ICZzdG9yYWdlUXVvdGFNYW5hZ2VyOwotCi0KLSAgICBNb2NrUXVv
dGFVc2VyIG1vY2tVc2VyKHN0b3JhZ2VRdW90YU1hbmFnZXIpOwotCi0gICAgLy8gR3JhbnQgZGly
ZWN0bHkuCi0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2UoMC4xICogS0IsIFsm
XShXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNpc2lvbikgewotICAg
ICAgICBBU1NFUlRfRVEoZGVjaXNpb24sIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRl
Y2lzaW9uOjpHcmFudCk7Ci0gICAgICAgIG1vY2tVc2VyLnNldFNwYWNlVXNlZCgwLjEgKiBLQik7
Ci0gICAgfSk7Ci0KLSAgICAvLyBHcmFudCBhZnRlciBjb21wdXRpbmcgYWNjdXJhdGUgdXNhZ2Uu
Ci0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2UoMS4wICogS0IsIFsmXShXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNpc2lvbikgewotICAgICAgICBB
U1NFUlRfRVEoZGVjaXNpb24sIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
OjpHcmFudCk7Ci0gICAgICAgIG1vY2tVc2VyLnNldFNwYWNlVXNlZCgxLjAgKiBLQik7Ci0gICAg
fSk7Ci0KLSAgICAvLyBHcmFudCBhZnRlciBjb21wdXRpbmcgYWNjdXJhdGUgdXNhZ2UgYW5kIHJl
cXVlc3Rpbmcgc3BhY2UgaW5jcmVhc2UuCi0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0
U3BhY2UoMTAgKiBLQiwgWyZdKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
IGRlY2lzaW9uKSB7Ci0gICAgICAgIEFTU0VSVF9FUShzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyLT5z
dGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1
ZXN0KTsKLSAgICAgICAgQVNTRVJUX0VRKGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQpOwotICAgIH0pOwotfQotCi19IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmlu
ZGV4IDRlNDhmMjdjZmZhMTA4ZjA3N2NlOThiYWRiZGE4ZGExYTI5NTZkMDkuLjgxMWQ1ZjAxYWNl
Y2VlZDk2NTcxZWQwZDJiZDkwNDFmZjZhY2M5ODcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwCkBAIC05ODAsNiArOTgwLDggQEAgYm9vbCBUZXN0Q29udHJvbGxl
cjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9u
cywgUmUKICAgICBjbGVhclNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zKCk7CiAgICAgY2xlYXJE
T01DYWNoZXMoKTsKIAorICAgIHJlc2V0UXVvdGEoKTsKKwogICAgIFdLQ29udGV4dFNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0
KCksIHRydWUpOwogCiAgICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRl
c3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CkBAIC0yOTkyLDYg
KzI5OTQsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoKQogICAgIFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHBsYXRm
b3JtQ29udGV4dCgpKTsKIH0KIAordm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRRdW90YSgpCit7
CisgICAgV0tDb250ZXh0UmVzZXRRdW90YShwbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKICNpZiAh
UExBVEZPUk0oQ09DT0EpCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVdpbGxSdW5UZXN0
KGNvbnN0IFRlc3RJbnZvY2F0aW9uJikKIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuaAppbmRleCBlZDE2OWVhMmMwN2Y1NTA2MTI2MTYyNjgzMDU0ZjVmNjUwYjNmNjdkLi41
ZThkZDNhMDA1MTc4M2M4ZTBmODZhMzM0YjI3Y2Q3NjZhNDg1MGQ0IDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCkBAIC0yNjgsNiArMjY4LDggQEAgcHVibGljOgogICAg
IHZvaWQgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKICAgICB2b2lkIHRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKCk7CiAKKyAgICB2b2lkIHJlc2V0UXVvdGEoKTsKKwogICAgIHZvaWQg
cmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzKCk7CiAKICAgICB2b2lkIGNsZWFySW5kZXhlZERh
dGFiYXNlcygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383482</attachid>
            <date>2019-11-13 12:49:47 -0800</date>
            <delta_ts>2019-11-13 12:53:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203971-20191113124944.patch</filename>
            <type>text/plain</type>
            <size>189474</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E0Y2VlYzIzZDVmYzkz
NDA1ODQxZDU4MDczZDQ2MTRlZjc4NjEwMC4uN2Y3ODY1MjU5YmJmMDNkNTYyOGU2YTVmMjgwN2Mz
YjIzYThiMjBmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAxOS0xMS0xMyAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVy
c2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgYSBsb2NrLWJhc2VkIFN0b3JhZ2VRdW90YU1hbmFn
ZXIgc28gdGhhdCBxdW90YSBjaGVjayBjYW4gYmUgZG9uZSBvbiBkaWZmZXJlbnQgdGhyZWFkcy4K
KworICAgICAgICBBbHNvIGZpeCBzb21lIGJ1Z3MgcmV2ZWFsZWQgYnkgdGhpcyBwYXRjaC4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5j
bWFrZToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0
YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpyZXF1ZXN0
U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRpc2tVc2Fn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpR
dW90YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2
ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21w
dXRlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURC
U2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3BhY2VV
c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpR
dW90YVVzZXI6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjplbnN1cmVRdW90
YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5pc2hD
b21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpJREJTZXJ2ZXI6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGVjcmVhc2VTcGFj
ZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluaXRpYWxpemVRdW90YVVzZXIp
OiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZW5hbWVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6bWF5YmVV
cGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRl
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1S
ZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxl
dGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpyZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtUHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmdldEFsbFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFs
bFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6Z2V0Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aXRl
cmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRU
cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZXF1ZXN0U3BhY2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6d2FpdEZvclJlcXVlc3RTcGFj
ZUNvbXBsZXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3Jl
YXNlVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmpl
Y3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVj
ayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpjbGVhck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhBZnRlclF1
b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRl
clF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkQWZ0ZXJR
dW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnRBZnRl
clF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3JB
ZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRU
cmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6YWJvcnRU
cmFuc2FjdGlvbldpdGhvdXRDYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1
dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bjo6ZGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c3RvcmFnZVF1b3RhTWFuYWdlckdldHRlcik6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oOgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBz
dG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp0cnlHcmFudFJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dXBkYXRlUXVvdGFCYXNlZE9u
VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90
YVVwZGF0ZWRCYXNlZE9uVXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFu
YWdlcjo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
Ojp+U3RvcmFnZVF1b3RhTWFuYWdlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpzcGFjZVVzYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlh
bGl6ZVVzZXJzSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjphZGRVc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVV
c2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJl
cXVlc3RTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjphc2tGb3JNb3JlU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAg
ICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3Rh
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1h
bmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6
cmVzZXRRdW90YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpzdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVv
dGFVc2VyLmg6IFJlbW92ZWQuCisKIDIwMTktMTEtMTIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21p
bGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlcyBsZWFr
IGlmIHRoZXkgaGF2ZSBhbiBhdHRhY2hlZCBvbmVuZGVkIEV2ZW50VGFyZ2V0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IGRmMmM0OGVjYzMxZjBjYzhlODE4NzUzZjgxOTI0MzQ2ZWMwNGI5YTUuLjQwY2I0NWQyZmZkOGJh
MjE2ZTk2YjFiNTliOTU3NzkxNWFiYTgzOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIw
MTktMTEtMTMgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jv
c3MtdGhyZWFkIHZlcnNpb24gU3RvcmFnZVF1b3RhTWFuYWdlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTcxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0
ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpy
ZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpkZWxldGVXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6Y3JlYXRlSURCU2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OnNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdl
cnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVN0b3JhZ2VR
dW90YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhclN0
b3JhZ2VRdW90YSk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVF1b3RhVXNlcnMpOiBEZWxldGVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6U2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZW5zdXJlT3Jp
Z2luU3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2Vy
cyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6Y2FjaGVSb290UGF0aCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6c2V0SURCUm9vdFBhdGgpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6
OmlkYlJvb3RQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlN0
b3JhZ2VRdW90YU1hbmFnZXJzOjpkZWZhdWx0UXVvdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U3RvcmFnZVF1b3RhTWFuYWdlcnM6OnNldERlZmF1
bHRRdW90YXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U3Rv
cmFnZVF1b3RhTWFuYWdlcnM6Om1hbmFnZXJzUGVyT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OmdldERpcmVjdG9yeVNpemUpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkVuZ2luZTo6ZGlza1VzYWdlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVT
dG9yYWdlOjpFbmdpbmU6OnJlcXVlc3RTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3Rv
cmFnZTo6RW5naW5lOjpyZWFkQ2FjaGVzRnJvbURpc2spOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkVuZ2luZTo6d3JpdGVTaXplRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6RW5naW5lOjpyZWFkU2l6ZUZpbGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkVuZ2luZTo6aW5pdGlhbGl6ZVF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmg6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpwdXQpOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3Rv
cmFnZTo6Q2FjaGVzOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlczo6Q2FjaGVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6On5D
YWNoZXMpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6dXBkYXRlU2l6
ZUZpbGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6aW5pdGlhbGl6
ZVNpemUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6Y2xlYXIpOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVxdWVzdFNwYWNlKToKKyAg
ICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OndyaXRlUmVjb3JkKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlbW92ZVJlY29yZCk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjp3aGVuSW5pdGlhbGl6ZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVzZXRTcGFjZVVzZWQp
OiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlcy5oOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6
ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29u
dGV4dFJlc2V0UXVvdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2
YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZXNldFF1b3RhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRl
cnMpOgorCiAyMDE5LTExLTEyICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBzaXplIGZpbGUgZm9yIENhY2hlU3RvcmFnZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5k
ZXggNDllOTRkZWYxMjkxYjdkZTBiNjFkMzgwNjAxY2ZmNzZkZWYyNWQ0Ny4uNzk1NzJmMWY0YzZi
NDI3OGI5YjhjZjQxNDVmOWMzY2NlYTJjZTNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMzc4
LDcgKzEzNzgsNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
c3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgKICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlci5oCiAgICAgc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKLSAgICBzdG9yYWdl
L1N0b3JhZ2VRdW90YVVzZXIuaAogICAgIHN0b3JhZ2UvU3RvcmFnZVR5cGUuaAogCiAgICAgc3R5
bGUvU3R5bGVDaGFuZ2UuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCBlNjFkYjhjOTQyOGQ5ODRkYTY0Njk2ZTdj
ODQyNzg3NDI2OWMyN2U2Li4wMDgzNGJmMmVkNTU2ZTI4OTg0ZTkzY2Y3M2VjNTI0MWRhMzY0OGI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcApAQCAtNDYsMjQgKzQ2LDI0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgSURCU2VydmVyIHsKIAotUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFn
ZXJHZXR0ZXIpCitSZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0
ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCU2VydmVyKHNlc3Npb25JRCwgV1RG
TW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKSk7CiB9CiAKLVJlZjxJREJTZXJ2ZXI+IElEQlNlcnZl
cjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmIHF1b3RhTWFuYWdlckdldHRlcikK
K1JlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VRdW90YU1hbmFn
ZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSURCU2VydmVyKHNlc3Npb25JRCwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBXVEZNb3ZlKHF1
b3RhTWFuYWdlckdldHRlcikpKTsKIH0KIAotSURCU2VydmVyOjpJREJTZXJ2ZXIoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIp
CitJREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0b3JhZ2VR
dW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiAgICAgOiBDcm9zc1RocmVh
ZFRhc2tIYW5kbGVyKCJJbmRleGVkRGF0YWJhc2UgU2VydmVyIiwgQXV0b2RyYWluZWRQb29sRm9y
UnVuTG9vcDo6VXNlKQogICAgICwgbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAgICwgbV9xdW90
YU1hbmFnZXJHZXR0ZXIoV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKQogewogfQogCi1JREJT
ZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJH
ZXR0ZXIpCitJREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0
dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQogICAgIDogQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlcigi
SW5kZXhlZERhdGFiYXNlIFNlcnZlciIsIEF1dG9kcmFpbmVkUG9vbEZvclJ1bkxvb3A6OlVzZSkK
ICAgICAsIG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKICAgICAsIG1fZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoKGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKQEAgLTY4MywxNTcgKzY4MywyOCBAQCB2b2lkIElE
QlNlcnZlcjo6cGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBW
ZWN0b3I8U2VjdXJpdHlPcgogCiB2b2lkIElEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVs
ZXRlRGF0YWJhc2VzKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgZm9yIChhdXRvJiB1c2Vy
IDogbV9xdW90YVVzZXJzLnZhbHVlcygpKQotICAgICAgICB1c2VyLT5yZXNldFNwYWNlVXNlZCgp
OwotCiAgICAgYXV0byBjYWxsYmFjayA9IG1fZGVsZXRlRGF0YWJhc2VDb21wbGV0aW9uSGFuZGxl
cnMudGFrZShjYWxsYmFja0lEKTsKICAgICBBU1NFUlQoY2FsbGJhY2spOwogICAgIGNhbGxiYWNr
KCk7CiB9CiAKLUlEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90YVVzZXIoSURCU2VydmVyJiBzZXJ2
ZXIsIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1hbmFnZXIsIENsaWVudE9yaWdpbiYmIG9yaWdpbikK
LSAgICA6IG1fc2VydmVyKHNlcnZlcikKLSAgICAsIG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5h
Z2VyKSkKLSAgICAsIG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAsIG1faXNJbml0aWFs
aXplZChtX3NlcnZlci5tX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotewotICAgIGlmIChtYW5h
Z2VyKQotICAgICAgICBtYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKLX0KLQotSURCU2VydmVyOjpR
dW90YVVzZXI6On5RdW90YVVzZXIoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVz
ZXI6OnJlc2V0U3BhY2VVc2VkKCkKLXsKLSAgICBtX3NwYWNlVXNlZCA9IDA7Ci0KLSAgICBpZiAo
IW1fbWFuYWdlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2VydmVyLm1fc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0luaXRp
YWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1faW5pdGlhbGl6YXRpb25D
YWxsYmFjayk7Ci0KLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIC8vIERvIGFk
ZC9yZW1vdmUgdG8gdHJpZ2dlciBjYWxsIHRvIHdoZW5Jbml0aWFsaXplZC4KLSAgICBtX21hbmFn
ZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgIG1fbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7Ci19
Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmNvbXB1dGVTcGFjZVVzZWQoKQotewotICAg
IHJlc2V0U3BhY2VVc2VkKCk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluY3Jl
YXNlU3BhY2VVc2VkKHVpbnQ2NF90IHNpemUpCi17Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQp
Ci0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9zcGFjZVVzZWQgKyBzaXplID4gbV9zcGFj
ZVVzZWQpOwotICAgIG1fc3BhY2VVc2VkICs9IHNpemU7Ci19Ci12b2lkIElEQlNlcnZlcjo6UXVv
dGFVc2VyOjpkZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKQotewotICAgIGlmICghbV9p
c0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fc3BhY2VVc2VkID49
IHNpemUpOwotICAgIG1fc3BhY2VVc2VkIC09IHNpemU7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpR
dW90YVVzZXI6OndoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2spCi17Ci0gICAgaWYgKG1faXNJbml0aWFsaXplZCkgewotICAgICAgICBjYWxsYmFjaygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1faW5pdGlhbGl6YXRpb25DYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spOwotICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2Vk
Rm9yT3JpZ2luKG1fb3JpZ2luKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5p
dGlhbGl6ZVNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgQVNTRVJUKG1faXNJ
bml0aWFsaXplZCB8fCAhbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlKTsKLSAgICBtX3NwYWNlVXNl
ZCA9IHNwYWNlVXNlZDsKLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgaWYgKGF1
dG8gY2FsbGJhY2sgPSBXVEZNb3ZlKG1faW5pdGlhbGl6YXRpb25DYWxsYmFjaykpCi0gICAgICAg
IGNhbGxiYWNrKCk7Ci19Ci0KLUlEQlNlcnZlcjo6UXVvdGFVc2VyJiBJREJTZXJ2ZXI6OmVuc3Vy
ZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICByZXR1cm4gKm1f
cXVvdGFVc2Vycy5lbnN1cmUob3JpZ2luLCBbdGhpcywgJm9yaWdpbl0gewotICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxRdW90YVVzZXI+KCp0aGlzLCBtX3F1b3RhTWFuYWdlckdldHRlcihtX3Nl
c3Npb25JRCwgb3JpZ2luKSwgQ2xpZW50T3JpZ2luIHsgb3JpZ2luIH0pOwotICAgIH0pLml0ZXJh
dG9yLT52YWx1ZTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2Vk
Rm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQotewotICAgIEFTU0VSVCghbV9z
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4s
IG9yaWdpbikpOwotfQotCi12b2lkIElEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdp
bihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uIElEQlNlcnZlcjo6cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1
aW50NjRfdCB0YXNrU2l6ZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBS
ZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fcXVvdGFN
YW5hZ2VyR2V0dGVyKG9yaWdpbik7CisgICAgaWYgKCFzdG9yYWdlUXVvdGFNYW5hZ2VyKQorICAg
ICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk7CiAKLSAgICBh
dXRvIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCA9IHRoaXMtPmRhdGFiYXNlRGlyZWN0b3J5UGF0aElz
b2xhdGVkQ29weSgpOwotICAgIGF1dG8gb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRh
dGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4u
dG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsICJ2
MCIpOwotICAgIGF1dG8gbmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRhdGFiYXNlSWRl
bnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2lu
LCBvcmlnaW4uY2xpZW50T3JpZ2luLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsICJ2MSIpOwotICAg
IGF1dG8gc2l6ZSA9IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVj
dG9yeShvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKLQot
ICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJ
REJTZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbiwgb3JpZ2luLCBzaXpl
KSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmln
aW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlVXNlZCkKLXsKLSAg
ICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbml0aWFsaXplU3BhY2VVc2VkKHNwYWNlVXNlZCk7
CisgICAgcmV0dXJuIHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9uQmFja2dyb3Vu
ZFRocmVhZCh0YXNrU2l6ZSk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpyZXF1ZXN0U3BhY2UoY29u
c3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJiBjYWxsYmFjaykKK3Vp
bnQ2NF90IElEQlNlcnZlcjo6ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdERpcmVjdG9yeSwg
Y29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAgYXV0byogcXVvdGFNYW5hZ2VyID0g
ZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikubWFuYWdlcigpOwotICAgIGlmICghcXVvdGFNYW5hZ2Vy
KSB7Ci0gICAgICAgIGNhbGxiYWNrKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHF1b3RhTWFuYWdlci0+cmVxdWVzdFNw
YWNlKHRhc2tTaXplLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpy
ZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBpZiAoYXV0
byogdXNlciA9IG1fcXVvdGFVc2Vycy5nZXQob3JpZ2luKSkKLSAgICAgICAgdXNlci0+cmVzZXRT
cGFjZVVzZWQoKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OmluY3JlYXNlU3BhY2VVc2VkKGNvbnN0
IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzaXplKQotewotICAgIGVuc3VyZVF1b3Rh
VXNlcihvcmlnaW4pLmluY3JlYXNlU3BhY2VVc2VkKHNpemUpOwotfQotCi12b2lkIElEQlNlcnZl
cjo6ZGVjcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90
IHNpemUpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuZGVjcmVhc2VTcGFjZVVzZWQo
c2l6ZSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjppbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgdGFza1NpemUpCi17Ci0gICAgZW5z
dXJlUXVvdGFVc2VyKG9yaWdpbikuaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodGFza1NpemUp
OwotfQorICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi12b2lkIElEQlNlcnZlcjo6ZGVj
cmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2
NF90IHNwYWNlVXNlZCkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5kZWNyZWFzZVBv
dGVudGlhbFNwYWNlVXNlZChzcGFjZVVzZWQpOworICAgIGF1dG8gb2xkVmVyc2lvbk9yaWdpbkRp
cmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2
ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCByb290RGlyZWN0
b3J5LCAidjAiKTsKKyAgICBhdXRvIG5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRh
YmFzZUlkZW50aWZpZXI6OmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRv
cE9yaWdpbiwgb3JpZ2luLmNsaWVudE9yaWdpbiwgcm9vdERpcmVjdG9yeSwgInYxIik7CisgICAg
cmV0dXJuIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShv
bGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJh
c2VzU2l6ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKIH0KIAogdm9p
ZCBJREJTZXJ2ZXI6OnVwZ3JhZGVGaWxlc0lmTmVjZXNzYXJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCBkM2EyMjNk
OTMyZDkxNTlkNTQ2NjYyOWY3MTdlZmZiNTc3NDEzY2FmLi5iZjJiNDc4ODQ1NDY4ZjNhMzQ5NWJi
ZmU5NTJlYTkwMzcwYzM2M2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAi
SURCQ29ubmVjdGlvblRvQ2xpZW50LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VJZGVudGlmaWVy
LmgiCiAjaW5jbHVkZSAiU3RvcmFnZVF1b3RhTWFuYWdlci5oIgotI2luY2x1ZGUgIlN0b3JhZ2VR
dW90YVVzZXIuaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0
aXZpdHkuaD4KQEAgLTU4LDkgKzU3LDkgQEAgZW51bSBjbGFzcyBTaG91bGRGb3JjZVN0b3AgOiBi
b29sIHsgTm8sIFllcyB9OwogCiBjbGFzcyBJREJTZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
REJTZXJ2ZXI+LCBwdWJsaWMgQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlciwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPElEQlNlcnZlcj4gewogcHVibGljOgotICAgIHVzaW5nIFF1b3RhTWFuYWdlckdldHRl
ciA9IFdURjo6RnVuY3Rpb248U3RvcmFnZVF1b3RhTWFuYWdlciooUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IENsaWVudE9yaWdpbiYpPjsKLSAgICBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKFBB
TDo6U2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKKyAgICB1c2lu
ZyBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyID0gV1RGOjpGdW5jdGlvbjxSZWZQdHI8U3RvcmFn
ZVF1b3RhTWFuYWdlcj4oY29uc3QgQ2xpZW50T3JpZ2luJik+OworICAgIHN0YXRpYyBSZWY8SURC
U2VydmVyPiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIm
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6
OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VR
dW90YU1hbmFnZXJHZXR0ZXImJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZ2lzdGVy
Q29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHVucmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwpAQCAtMTEx
LDIxICsxMTAsMTUgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmRE
ZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2b2lkICgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVs
ZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYs
IEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgdm9pZCByZXF1
ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKLSAgICB2
b2lkIGluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2
NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0
IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGluY3JlYXNlU3Bh
Y2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNpemUpOwotICAgIHZvaWQgZGVj
cmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6ZSk7Ci0gICAg
dm9pZCByZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mKTsKLQotICAgIHZvaWQgaW5p
dGlhbGl6ZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikgeyBlbnN1cmVRdW90
YVVzZXIob3JpZ2luKTsgfQorICAgIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIHJlcXVl
c3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHVpbnQ2NF90IGRpc2tVc2FnZShjb25zdCBTdHJpbmcmLCBjb25z
dCBDbGllbnRPcmlnaW4mKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJ5U3RvcChTaG91
bGRGb3JjZVN0b3ApOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lKCk7CiAKIHByaXZh
dGU6Ci0gICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJik7
Ci0gICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGly
ZWN0b3J5UGF0aCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOworICAgIElEQlNlcnZlcihQQUw6OlNl
c3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlckdldHRlciYmKTsKKyAgICBJREJTZXJ2ZXIoUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdl
UXVvdGFNYW5hZ2VyR2V0dGVyJiYpOwogCiAgICAgVW5pcXVlSURCRGF0YWJhc2UmIGdldE9yQ3Jl
YXRlVW5pcXVlSURCRGF0YWJhc2UoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CiAgICAg
CkBAIC0xNDIsNTEgKzEzNSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVEYXRhYmFzZXNN
b2RpZmllZFNpbmNlRm9yVmVyc2lvbihXYWxsVGltZSwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCByZW1vdmVEYXRhYmFzZXNXaXRoT3JpZ2luc0ZvclZlcnNpb24oY29uc3QgVmVjdG9yPFNlY3Vy
aXR5T3JpZ2luRGF0YT4mLCBjb25zdCBTdHJpbmcmKTsKIAotICAgIGNsYXNzIFF1b3RhVXNlciBm
aW5hbCA6IHB1YmxpYyBTdG9yYWdlUXVvdGFVc2VyIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBRdW90YVVzZXIoSURCU2VydmVyJiwgU3Rv
cmFnZVF1b3RhTWFuYWdlciosIENsaWVudE9yaWdpbiYmKTsKLSAgICAgICAgflF1b3RhVXNlcigp
OwotCi0gICAgICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1hbmFnZXIoKSB7IHJldHVybiBtX21h
bmFnZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIHNldFNwYWNlVXNlZCh1aW50NjRfdCBzcGFj
ZVVzZWQpIHsgbV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7IH0KLSAgICAgICAgdm9pZCByZXNldFNw
YWNlVXNlZCgpOwotCi0gICAgICAgIHZvaWQgaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodWlu
dDY0X3QgaW5jcmVhc2UpIHsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlICs9IGluY3JlYXNlOyB9
Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodWludDY0X3QgZGVjcmVh
c2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2VzdGltYXRlZFNwYWNlSW5jcmVh
c2UgPj0gZGVjcmVhc2UpOwotICAgICAgICAgICAgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlIC09
IGRlY3JlYXNlOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VTcGFjZVVzZWQodWlu
dDY0X3Qgc2l6ZSk7Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VTcGFjZVVzZWQodWludDY0X3Qgc2l6
ZSk7Ci0KLSAgICAgICAgdm9pZCBpbml0aWFsaXplU3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNl
ZCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBm
aW5hbAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsKLSAg
ICAgICAgICAgIHJldHVybiBtX3NwYWNlVXNlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZTsK
LSAgICAgICAgfQotICAgICAgICB2b2lkIGNvbXB1dGVTcGFjZVVzZWQoKSBmaW5hbDsKLSAgICAg
ICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5h
bDsKLQotICAgICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwotICAgICAgICBXZWFrUHRyPFN0b3Jh
Z2VRdW90YU1hbmFnZXI+IG1fbWFuYWdlcjsKLSAgICAgICAgQ2xpZW50T3JpZ2luIG1fb3JpZ2lu
OwotICAgICAgICBib29sIG1faXNJbml0aWFsaXplZCB7IGZhbHNlIH07Ci0gICAgICAgIHVpbnQ2
NF90IG1fc3BhY2VVc2VkIHsgMCB9OwotICAgICAgICB1aW50NjRfdCBtX2VzdGltYXRlZFNwYWNl
SW5jcmVhc2UgeyAwIH07Ci0gICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gbV9pbml0
aWFsaXphdGlvbkNhbGxiYWNrOwotICAgIH07Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBRdW90YVVz
ZXImIGVuc3VyZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mKTsKLSAgICB2b2lkIHN0YXJ0
Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZv
aWQgY29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mKTsKLSAgICB2
b2lkIGZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4m
LCB1aW50NjRfdCBzcGFjZVVzZWQpOwotCiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7
CiAgICAgSGFzaE1hcDxJREJDb25uZWN0aW9uSWRlbnRpZmllciwgUmVmUHRyPElEQkNvbm5lY3Rp
b25Ub0NsaWVudD4+IG1fY29ubmVjdGlvbk1hcDsKICAgICBIYXNoTWFwPElEQkRhdGFiYXNlSWRl
bnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFVuaXF1ZUlEQkRhdGFiYXNlPj4gbV91bmlxdWVJREJE
YXRhYmFzZU1hcDsKQEAgLTE5OCw4ICsxNDYsNyBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIG1f
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoOwogCi0gICAgSGFzaE1hcDxDbGllbnRPcmlnaW4sIHN0ZDo6
dW5pcXVlX3B0cjxRdW90YVVzZXI+PiBtX3F1b3RhVXNlcnM7Ci0gICAgUXVvdGFNYW5hZ2VyR2V0
dGVyIG1fcXVvdGFNYW5hZ2VyR2V0dGVyOworICAgIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIg
bV9xdW90YU1hbmFnZXJHZXR0ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJ
REJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggOThjZWQ2MzcwOTFkMzYyZGUyYmRj
MTNhZGZmMjhiOWI5NTA5ZmZjNS4uOTUxOGY0ZjE4ZWU2NTVkMjdjNTk1YWNiMDllNzAzMTFkZmE0
NDExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTE5NCw2ICsxOTQs
OSBAQCBJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdAogICAgIG9iamVjdFN0b3JlLT5yZW5hbWUobmV3
TmFtZSk7CiAgICAgdHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlUmVuYW1lZCgqb2JqZWN0U3RvcmUs
IG9sZE5hbWUpOwogCisgICAgbV9vYmplY3RTdG9yZXNCeU5hbWUucmVtb3ZlKG9sZE5hbWUpOwor
ICAgIG1fb2JqZWN0U3RvcmVzQnlOYW1lLnNldChuZXdOYW1lLCBvYmplY3RTdG9yZSk7CisKICAg
ICBtX2RhdGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBuZXdOYW1lKTsKIAogICAgIHJldHVybiBJREJFcnJvciB7IH07CkBAIC00ODQsNiArNDg3LDEx
IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0
b3JOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJCiAgICAgaWYgKG5ld0tleU51bWJlciA8IG9iamVj
dFN0b3JlLT5jdXJyZW50S2V5R2VuZXJhdG9yVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIElEQkVy
cm9yIHsgfTsKIAorICAgIGlmIChuZXdLZXlOdW1iZXIgPj0gKGRvdWJsZSltYXhHZW5lcmF0ZWRL
ZXlWYWx1ZSkgeworICAgICAgICBvYmplY3RTdG9yZS0+c2V0S2V5R2VuZXJhdG9yVmFsdWUobWF4
R2VuZXJhdGVkS2V5VmFsdWUgKyAxKTsKKyAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAg
ICB9CisKICAgICB1aW50NjRfdCBuZXdLZXlJbnRlZ2VyKG5ld0tleU51bWJlcik7CiAgICAgaWYg
KG5ld0tleUludGVnZXIgPD0gdWludDY0X3QobmV3S2V5TnVtYmVyKSkKICAgICAgICAgKytuZXdL
ZXlJbnRlZ2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggZmRlZGE2MzVlYjdkYzA1
ZjdmZjdlMDU4MmNjNDkyZjBjMmQ4MzJiYi4uMjc2NzIyODE3OWM1YzljODExZTZjYzIzMGQxZTM2
OGQ4ZmUxY2QyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0xODYsNTYgKzE4Niw2
IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIHF1b3RhRXJyb3JNZXNzYWdlTmFtZShjb25zdCBjaGFy
KiB0YXNrTmFtZSkKICAgICByZXR1cm4gbWFrZVN0cmluZygiRmFpbGVkIHRvICIsIHRhc2tOYW1l
LCAiIGluIGRhdGFiYXNlIGJlY2F1c2Ugbm90IGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIik7CiB9
CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlcXVlc3RTcGFjZShVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0IGNoYXIq
IHRhc2tOYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElEQkVycm9yJiYpPiYmIGNhbGxiYWNr
KQotewotICAgIG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0
YXNrU2l6ZSwgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHRoaXMsIHdlYWtUcmFuc2Fj
dGlvbiA9IG1ha2VXZWFrUHRyKHRyYW5zYWN0aW9uKSwgdGFza05hbWUsIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgewotICAgICAgICBpZiAoIXdl
YWtUaGlzKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJvciB9
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghd2Vha1Ry
YW5zYWN0aW9uKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJv
ciB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9vd25p
bmdQb2ludGVyRm9yQ2xvc2UpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBjbG9zaW5nIHRoZSBk
YXRhYmFzZSwgdGhlcmUgaXMgbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIG1vZGlmeSB0aGUgZGF0YWJh
c2UgYXQgdGhhdCBwb2ludC4KLSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgVW5rbm93
bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dp
dGNoIChkZWNpc2lvbikgewotICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uOjpEZW55OgotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVk
RXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSh0YXNrTmFtZSkgfSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50
OgotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyB9KTsKLSAgICAgICAgfTsKLSAgICB9
KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBs
ZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYgY2FsbGJhY2spCi17Ci0gICAgcmVxdWVzdFNw
YWNlKHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92ZShjYWxsYmFjaykpOwotfQotCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZp
ZXIsIHVpbnQ2NF90IHRhc2tTaXplKQotewotICAgIG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlh
bFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplKTsKLSAgICBBU1NFUlQo
IW1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5jb250YWlucyhpZGVudGlmaWVyKSk7Ci0gICAg
bV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmFkZChpZGVudGlmaWVyLCB0YXNrU2l6ZSk7Ci19
Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2
NF90IGlkZW50aWZpZXIsIGJvb2wgaXNUYXNrU3VjY2Vzc2Z1bCkKLXsKLSAgICBhdXRvIGl0ZXJh
dG9yID0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmZpbmQoaWRlbnRpZmllcik7Ci0gICAg
QVNTRVJUKGl0ZXJhdG9yICE9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5lbmQoKSk7Ci0g
ICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmln
aW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBpZiAoaXNUYXNrU3VjY2Vzc2Z1bCkKLSAgICAg
ICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRl
cmF0b3ItPnZhbHVlKTsKLSAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MucmVtb3ZlKGl0
ZXJhdG9yKTsKLX0KLQogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVu
T3BlcmF0aW9uKCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24gKCVwKSIsIHRoaXMpOwpAQCAtMjQ2LDI5
ICsxOTYsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVy
YXRpb24oKQogICAgIGlmICghbV9kYXRhYmFzZUluZm8pIHsKICAgICAgICAgaWYgKCFtX2lzT3Bl
bmluZ0JhY2tpbmdTdG9yZSkgewogICAgICAgICAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUg
PSB0cnVlOwotICAgICAgICAgICAgLy8gV2UgZG8gbm90IGtub3cgd2hldGhlciB0aGlzIGlzIGFu
IGV4aXN0aW5nIG9yIGEgbmV3IGRhdGFiYXNlLgotICAgICAgICAgICAgLy8gV2Ugc2V0IGEgc21h
bGwgY29zdCBzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBvcGVuIGFuIGluZmluaXRlIG51
bWJlciBvZiBkYXRhYmFzZS4KLSAgICAgICAgICAgIG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9p
ZGVudGlmaWVyLm9yaWdpbigpLCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0LCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgICAgICAgICAgaWYgKG1fb3duaW5nUG9pbnRlckZvckNsb3NlKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVu
eTogewotICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IElEQlJlc3VsdERhdGE6OmVy
cm9yKG1fY3VycmVudE9wZW5EQlJlcXVlc3QtPnJlcXVlc3REYXRhKCkucmVxdWVzdElkZW50aWZp
ZXIoKSwgSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFt
ZSgib3BlbkRhdGFiYXNlIikgfSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudE9wZW5E
QlJlcXVlc3QtPmNvbm5lY3Rpb24oKS5kaWRPcGVuRGF0YWJhc2UocmVzdWx0KTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudDoKLSAgICAgICAgICAgICAgICAgICAg
YXV0byBjYWxsYmFja0lEID0gdGhpcy0+Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIo
KTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lE
LCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0KTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy0+
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyLCBjYWxsYmFja0lEKSk7Ci0g
ICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
b3BlbkJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTgyMSwyMyArNzQ5LDMwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmFkZE9wZW5EYXRhYmFzZUNvbm5lY3Rpb24oUmVmPFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
CiAgICAgbV9vcGVuRGF0YWJhc2VDb25uZWN0aW9ucy5hZGQoYWRvcHRSZWYoY29ubmVjdGlvbi5s
ZWFrUmVmKCkpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9y
ZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJ
ZGVudGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShjb25z
dCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6
Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwogCisKKyAgICBJREJEYXRhYmFzZUluZm8g
ZGF0YWJhc2VJbmZvOworICAgIC8vIFF1b3RhIGNoZWNrLgorICAgIGF1dG8gZGVjaXNpb24gPSBt
X3NlcnZlci0+cmVxdWVzdFNwYWNlKGlkZW50aWZpZXIub3JpZ2luKCksIGRlZmF1bHRXcml0ZU9w
ZXJhdGlvbkNvc3QpOworICAgIGlmIChkZWNpc2lvbiA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3Rv
cmUsIGRhdGFiYXNlSW5mbywgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9y
TWVzc2FnZU5hbWUoIk9wZW5CYWNraW5nU3RvcmUiKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmUpOwogICAgIG1fYmFja2luZ1N0b3JlID0g
bV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShpZGVudGlmaWVyKTsKICAgICBtX2JhY2tpbmdT
dG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gbV9iYWNraW5nU3RvcmUtPnN1
cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zKCk7CiAgICAgbV9iYWNraW5nU3RvcmVJc0Vw
aGVtZXJhbCA9IG1fYmFja2luZ1N0b3JlLT5pc0VwaGVtZXJhbCgpOwogCi0gICAgSURCRGF0YWJh
c2VJbmZvIGRhdGFiYXNlSW5mbzsKICAgICBhdXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdl
dE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbyk7Ci0KLSAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5mbywgZXJyb3IsICB0YXNrSWRlbnRp
ZmllcikpOworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJ
bmZvLCBlcnJvcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2lu
Z1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9y
LCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9w
ZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJv
ciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhl
ZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlIik7CkBA
IC04NDgsOCArNzgzLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IEkKICAgICBBU1NFUlQobV9p
c09wZW5pbmdCYWNraW5nU3RvcmUpOwogICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gZmFs
c2U7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh0YXNrSWRlbnRpZmllciwgZXJyb3Iu
aXNOdWxsKCkpOwotCiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpCiAgICAgICAg
IHJldHVybjsKIApAQCAtODYxLDMzICs3OTQsMjMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
Y3JlYXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikg
VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlIik7CiAKLSAgICBhdXRvIHRhc2tT
aXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsKLSAg
ICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAiY3JlYXRlT2JqZWN0U3RvcmUi
LCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNO
dWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAgICAgICAg
ICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICB0aGlzLT5jcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh0YXNr
U2l6ZSwgdHJhbnNhY3Rpb24sIGluZm8sIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJR
dW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRf
dCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2sp
KTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXJ0U3Bh
Y2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwotICAgIHBvc3REYXRhYmFzZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50
aWZpZXIoKSwgaW5mbywgIHF1b3RhRXJyb3IpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRl
T2JqZWN0U3RvcmUsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rp
b24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbykpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29u
c3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikK
K3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZShjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVJbmZvJiBpbmZvKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2Jq
ZWN0U3RvcmUiKTsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwoKSkgewotICAgICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlm
aWVyLCBxdW90YUVycm9yLCBpbmZvKSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0
YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5mbyk7
CisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCB0YXNr
U2l6ZSk7CisgICAgaWYgKGRlY2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
OjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0
b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVv
dGFFcnJvck1lc3NhZ2VOYW1lKCJDcmVhdGVPYmplY3RTdG9yZSIpKSwgaW5mbykpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC05MDMsNyArODI2LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIo
bWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwog
Ci0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5p
c051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5m
by0+YWRkRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvKTsKIApAQCAtOTE1LDE3ICs4MzcsNiBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3Rv
cmUiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBb
dGhpcywgJnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU5hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5kZWxldGVPYmplY3RTdG9yZUFm
dGVyUXVvdGFDaGVjayh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVOYW1lLCBXVEZNb3ZlKGNhbGxi
YWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVj
dFN0b3JlQWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgRXJyb3JDYWxsYmFjayBjYWxs
YmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVy
cm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTkzNiwxNCArODQ3LDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0
ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlT2JqZWN0U3Rv
cmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8tPmlk
ZW50aWZpZXIoKSkpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSwgbV9p
ZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRp
ZmllcigpLCBpbmZvLT5pZGVudGlmaWVyKCkpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1EZWxldGVPYmplY3RTdG9yZShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQogewogICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUiKTsKIAorICAgIGlmIChtX3NlcnZl
ci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlT2JqZWN0
U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBx
dW90YUVycm9yTWVzc2FnZU5hbWUoIkRlbGV0ZU9iamVjdFN0b3JlIikpLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVChtX2JhY2tp
bmdTdG9yZSk7CiAgICAgbV9iYWNraW5nU3RvcmUtPmRlbGV0ZU9iamVjdFN0b3JlKHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIApAQCAtOTY3LDM4ICs4ODMs
MjggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmUoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9i
amVjdFN0b3JlIik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9u
Q29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rp
b24sIHRhc2tTaXplLCAicmVuYW1lT2JqZWN0U3RvcmUiLCBbdGhpcywgdGFza1NpemUsICZ0cmFu
c2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5p
c051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAg
ICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIHRoaXMtPnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRh
c2tTaXplLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBXVEZN
b3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwg
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNh
bGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxs
YmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAg
ICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIElEQkVycm9yIGVycm9y
ID0gcXVvdGFFcnJvcjsKKyAgICBJREJFcnJvciBlcnJvcjsKICAgICBhdXRvKiBpbmZvID0gbV9k
YXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRp
Zmllcik7CiAgICAgaWYgKCFpbmZvKQogICAgICAgICBlcnJvciA9IElEQkVycm9yIHsgVW5rbm93
bkVycm9yLCAiQXR0ZW1wdCB0byByZW5hbWUgbm9uLWV4aXN0YW50IG9iamVjdCBzdG9yZSJfcyB9
OwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7Ci0g
ICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUs
IGVycm9yKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBtX2lkZW50
aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVy
KCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKIH0KIAotdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBu
ZXdOYW1lLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKCFlcnJvci5pc051bGwo
KSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1l
KSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0
ZU9wZXJhdGlvbkNvc3QgKyBuZXdOYW1lLnNpemVJbkJ5dGVzKCk7CisgICAgYXV0byBkZWNpc2lv
biA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCB0YXNrU2l6ZSk7CisgICAgaWYgKGRl
Y2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50
aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1l
KCJSZW5hbWVPYmplY3RTdG9yZSIpKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMTMsNyArOTE5LDYgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RT
dG9yZSIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVy
LCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2Rh
dGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdO
YW1lKTsKIApAQCAtMTAyNSwyOCArOTMwLDIyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNs
ZWFyT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3RpCiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVu
aXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVz
dFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJy
b3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAg
ICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy0+Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNo
ZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWlu
dDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxi
YWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47Ci0gICAgcG9zdERh
dGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8o
KS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllcikpOworICAgIHBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1DbGVhck9iamVjdFN0b3JlLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQs
IHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllcikp
OwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpCit2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZShjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RT
dG9yZSIpOwogCisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1DbGVhck9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJDbGVhck9iamVj
dFN0b3JlIikpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBBU1NFUlQobV9iYWNr
aW5nU3RvcmUpOwogICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIApAQCAtMTA2NywzMyArOTY2
LDIyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4KFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJ
bmRleCIpOwogCi0gICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3Qg
KyBlc3RpbWF0ZVNpemUoaW5mbyk7Ci0gICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNr
U2l6ZSwgImNyZWF0ZUluZGV4IiwgW3RoaXMsIHRhc2tTaXplLCAmdHJhbnNhY3Rpb24sIGluZm8s
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAg
ICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRl
ZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Y3JlYXRlSW5kZXhBZnRlclF1
b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0aW9uLCBpbmZvLCBXVEZNb3ZlKGNhbGxiYWNrKSwg
ZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRl
eEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgRXJyb3JDYWxs
YmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCi17CiAgICAgdWludDY0
X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNr
KSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGFydFNw
YWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVy
KCksIGluZm8sIHF1b3RhRXJyb3IpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgs
IG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlk
ZW50aWZpZXIoKSwgaW5mbykpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
Q3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiBp
bmZvLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1DcmVhdGVJbmRleChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQogewogICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgiKTsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwo
KSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBxdW90YUVycm9yLCBpbmZvKSk7CisgICAgYXV0byB0YXNrU2l6ZSA9IGRl
ZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5mbyk7CisgICAgYXV0byBk
ZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCB0YXNrU2l6ZSk7CisgICAg
aWYgKGRlY2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7Cisg
ICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lkZW50
aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1l
KCJDcmVhdGVJbmRleCIpKSwgaW5mbykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
MTE1LDggKzEwMDMsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRl
SW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4Iik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFz
ayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKLQogICAgIGlmIChlcnJvci5p
c051bGwoKSkgewogICAgICAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOwogICAgICAgICBhdXRv
KiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0
U3RvcmUoaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CkBAIC0xMTMyLDE3ICsxMDE4LDYg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4
Iik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3Ro
aXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAg
IGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJy
b3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5kZWxl
dGVJbmRleEFmdGVyUXVvdGFDaGVjayh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleE5hbWUsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAg
ICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3Zl
KGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0x
MTU5LDE0ICsxMDM0LDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4QWZ0
ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgsIGNhbGxiYWNrSUQs
IHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
aW5kZXhJbmZvLT5pZGVudGlmaWVyKCkpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5k
ZXgsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygp
LmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleEluZm8tPmlkZW50aWZp
ZXIoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBj
b25zdCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtRGVsZXRlSW5kZXgoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgdWludDY0
X3QgaW5kZXhJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5k
ZXgiKTsKIAorICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtRGVsZXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVv
dGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIkRlbGV0ZUluZGV4IikpLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllcikpOworICAgICAgICByZXR1cm47
CisgICAgfQorCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBtX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlSW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGluZGV4SWRlbnRpZmllcik7CiAKQEAgLTExOTMsMjMgKzEwNzMsMTEgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24sIHUKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4Iik7CiAKLSAgICBh
dXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUlu
Qnl0ZXMoKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicmVuYW1l
SW5kZXgiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYm
ICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxs
YmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgdGhpcy0+cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwgV1RG
TW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdO
YW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikK
LXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdU
Rk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIElEQkVycm9yIGVycm9yID0gcXVvdGFFcnJvcjsKKyAgICBJREJFcnJvciBlcnJvcjsK
ICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0
aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICBpZiAoIW9iamVjdFN0
b3JlSW5mbykKICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkF0dGVt
cHQgdG8gcmVuYW1lIGluZGV4IGluIG5vbi1leGlzdGFudCBvYmplY3Qgc3RvcmUiX3MgfTsKQEAg
LTEyMTgsMTcgKzEwODYsMTkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhB
ZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkQKICAgICBpZiAoIWlu
ZGV4SW5mbykKICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkF0dGVt
cHQgdG8gcmVuYW1lIG5vbi1leGlzdGFudCBpbmRleCJfcyB9OwogCi0gICAgc3RhcnRTcGFjZUlu
Y3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJl
bmFtZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsK
KyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgsIG1faWRlbnRpZmllci5vcmlnaW4oKSwg
Y2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGVycm9yKSk7CiB9CiAKLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgoY29uc3QgQ2xpZW50T3JpZ2lu
JiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUs
IGNvbnN0IElEQkVycm9yJiBlcnJvcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
ICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFt
ZUluZGV4Iik7CiAKLSAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkpOworICAgIC8v
IFF1b3RhIGNoZWNrLgorICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25D
b3N0ICsgbmV3TmFtZS5zaXplSW5CeXRlcygpOworICAgIGF1dG8gZGVjaXNpb24gPSBtX3NlcnZl
ci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgdGFza1NpemUpOworICAgIGlmIChkZWNpc2lvbiA9PSBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihR
dW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiUmVuYW1lSW5kZXgiKSks
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyNDMsNyArMTExMyw2IEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAot
ICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IuaXNO
dWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAgICAgICBhdXRvKiBvYmplY3RT
dG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlSW5mbyk7CkBA
IC0xMjU3LDUyICsxMTI2LDQwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1S
ZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgcGVyZm9y
bUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CiB9CiAKLXZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktl
eURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RT
dG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNr
KQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEm
IHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYg
dmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUs
IEtleURhdGFDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRk
Iik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVz
dGltYXRlU2l6ZShrZXlEYXRhKSArIGVzdGltYXRlU2l6ZSh2YWx1ZSk7Ci0gICAgQVNTRVJUKG1f
ZGF0YWJhc2VJbmZvKTsKLSAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZvLT5p
bmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShyZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZp
ZXIoKSk7Ci0gICAgaWYgKG9iamVjdFN0b3JlKQotICAgICAgICB0YXNrU2l6ZSArPSBvYmplY3RT
dG9yZS0+aW5kZXhOYW1lcygpLnNpemUoKSAqIHRhc2tTaXplOwotCi0gICAgcmVxdWVzdFNwYWNl
KHRyYW5zYWN0aW9uLCB0YXNrU2l6ZSwgInB1dE9yQWRkIiwgW3RoaXMsIHRhc2tTaXplLCByZXF1
ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIG92
ZXJ3cml0ZU1vZGVdKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlz
TnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICB0aGlzLT5wdXRPckFkZEFmdGVyUXVvdGFDaGVjayh0YXNrU2l6
ZSwgcmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBXVEZNb3ZlKGNh
bGxiYWNrKSwgZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
dXRPckFkZEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJW
YWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0
ZU1vZGUsIEtleURhdGFDYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJy
b3IpCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1
cm47CiAKLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsK
LSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRy
YW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIo
KSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIHF1b3RhRXJyb3IpKTsKKyAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUHV0T3JBZGQsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwg
cmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0
b3JlSWRlbnRpZmllcigpLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSkpOwogfQogCi12
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBr
ZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgb3JpZ2luYWxSZWNvcmRWYWx1ZSwgSW5kZXhlZERCOjpP
YmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgY29uc3QgSURCRXJyb3ImIHF1
b3RhRXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoY29uc3Qg
Q2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURC
VmFsdWUmIG9yaWdpbmFsUmVjb3JkVmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3Jp
dGVNb2RlIG92ZXJ3cml0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFk
ZCIpOwogCi0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAgICBBU1NFUlQob2JqZWN0U3Rv
cmVJZGVudGlmaWVyKTsKLQogICAgIElEQktleURhdGEgdXNlZEtleTsKICAgICBJREJFcnJvciBl
cnJvcjsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwoKSkgewotICAgICAgICBwb3N0RGF0
YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBxdW90YUVycm9y
LCB1c2VkS2V5KSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0YXNrU2l6ZSA9IGRl
ZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoa2V5RGF0YSkgKyBlc3RpbWF0
ZVNpemUob3JpZ2luYWxSZWNvcmRWYWx1ZSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsK
KyAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdP
YmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIGlmIChvYmplY3RTdG9yZSkK
KyAgICAgICAgdGFza1NpemUgKz0gb2JqZWN0U3RvcmUtPmluZGV4TmFtZXMoKS5zaXplKCkgKiB0
YXNrU2l6ZTsKKyAgICBhdXRvIGRlY2lzaW9uID0gbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmln
aW4sIHRhc2tTaXplKTsKKyAgICBpZiAoZGVjaXNpb24gPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6
RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90
YUVycm9yTWVzc2FnZU5hbWUoIlB1dE9yQWRkIikpLCB1c2VkS2V5KSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOworICAgIEFTU0VSVChvYmpl
Y3RTdG9yZUlkZW50aWZpZXIpOwogICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoSW5kZXhlZERCLCAiJXAgLSBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVB1dE9yQWRkOiBtX2JhY2tpbmdTdG9yZSBpcyBudWxsIiwgdGhpcyk7CiAgICAgICAgIGVy
cm9yID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFs
aWQgZm9yIGNhbGwgdG8gcHV0IG9yIGFkZCJfcyk7CkBAIC0xMzc2LDgwICsxMjMzLDY1IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElECiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IuaXNOdWxsKCkpOwogICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVu
dGlmaWVyLCBlcnJvciwgcmVzdWx0S2V5KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
Z2V0UmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25z
dCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldFJlY29yZERhdGEmIGdl
dFJlY29yZERhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29u
c3QgSURCR2V0UmVjb3JkRGF0YSYgZ2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2Fs
bGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQiKTsKIAotICAgIHdhaXRGb3JS
ZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGdl
dFJlY29yZERhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikg
bXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNh
bGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIHRoaXMtPmdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwg
Z2V0UmVjb3JkRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiBnZXRSZWNvcmREYXRh
LCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lE
ID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAo
IWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICh1aW50NjRfdCBpbmRleElk
ZW50aWZpZXIgPSByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIoKSkKLSAgICAgICAgcG9zdERh
dGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2Fj
dGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGlu
ZGV4SWRlbnRpZmllciwgcmVxdWVzdERhdGEuaW5kZXhSZWNvcmRUeXBlKCksIGdldFJlY29yZERh
dGEua2V5UmFuZ2VEYXRhKSk7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29y
ZCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2Fj
dGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGlu
ZGV4SWRlbnRpZmllciwgcmVxdWVzdERhdGEuaW5kZXhSZWNvcmRUeXBlKCksIGdldFJlY29yZERh
dGEua2V5UmFuZ2VEYXRhKSk7CiAgICAgZWxzZQotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0
UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwg
cmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGdldFJlY29yZERhdGEua2V5UmFu
Z2VEYXRhLCBnZXRSZWNvcmREYXRhLnR5cGUpKTsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdl
dFJlY29yZCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50
cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVy
KCksIGdldFJlY29yZERhdGEua2V5UmFuZ2VEYXRhLCBnZXRSZWNvcmREYXRhLnR5cGUpKTsKIH0K
IAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3JkcyhVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3RE
YXRhLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIEdldEFs
bFJlc3VsdHNDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFs
bFJlY29yZHMoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRB
bGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIEdldEFsbFJlc3VsdHNDYWxsYmFjayBj
YWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHMiKTsKIAotICAgIHdh
aXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERh
dGEsIGdldEFsbFJlY29yZHNEYXRhLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRv
JiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5nZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNr
KHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAg
IH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzQWZ0ZXJRdW90
YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxs
UmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2Fs
bGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJRCwg
cmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIGdldEFsbFJlY29yZHNEYXRhKSk7
CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJlY29yZHMsIG1faWRlbnRpZmllci5vcmlnaW4o
KSwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIGdldEFs
bFJlY29yZHNEYXRhKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRS
ZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgSURCR2V0UmVjb3JkRGF0
YVR5cGUgdHlwZSkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQoY29u
c3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURh
dGEsIElEQkdldFJlY29yZERhdGFUeXBlIHR5cGUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1HZXRSZWNvcmQiKTsKIAotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KICAgICBJREJH
ZXRSZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwg
MCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9z
dERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIHJlc3VsdCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBJREJFcnJvciBlcnJvciA9IG1f
YmFja2luZ1N0b3JlLT5nZXRSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGtleVJhbmdlRGF0YSwgdHlwZSwgcmVzdWx0KTsKIAogICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVz
dWx0KSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29y
ZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVj
b3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKK3ZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwg
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1
aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIHJlY29y
ZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCiB7CiAgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1HZXRJbmRleFJlY29yZCIpOwogCi0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsK
LQogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3Bh
Y2Uob3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgewor
ICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSWRlbnRp
ZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgcmVzdWx0KSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIElEQkVycm9y
IGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldEluZGV4UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRp
Zmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIHJlY29yZFR5cGUs
IHJhbmdlLCByZXN1bHQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3Jk
LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKQEAgLTE0NjMsMTQgKzEzMDUs
MTggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IEkKICAgICBwZXJmb3JtR2V0UmVzdWx0Q2FsbGJh
Y2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KTsKIH0KIAotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJlY29yZHModWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhKQordm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJlY29yZHMoY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRh
JiBnZXRBbGxSZWNvcmRzRGF0YSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJl
Y29yZHMiKTsKIAotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KICAgICBJREJHZXRBbGxS
ZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkg
PT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtR2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJF
cnJvcihRdW90YUV4Y2VlZGVkRXJyb3IpLCBXVEZNb3ZlKHJlc3VsdCkpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgSURCRXJyb3Ig
ZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0QWxsUmVjb3Jkcyh0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGdldEFsbFJlY29yZHNEYXRhLCByZXN1bHQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtR2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgV1RGTW92ZShy
ZXN1bHQpKSk7CkBAIC0xNDg0LDM3ICsxMzMwLDMwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
CiAgICAgcGVyZm9ybUdldEFsbFJlc3VsdHNDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yLCByZXN1bHQpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudChVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxi
YWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQoY29uc3QgSURC
UmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBD
b3VudENhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQiKTsK
IAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywg
cmVxdWVzdERhdGEsIHJhbmdlLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYg
ZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICB0aGlzLT5nZXRDb3VudEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0
RGF0YSwgcmFuZ2UsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Z2V0Q291bnRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxi
YWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAg
ICAgICAgcmV0dXJuOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCwgY2FsbGJhY2tJRCwg
cmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0
b3JlSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIoKSwgcmFuZ2UpKTsK
KyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2Fs
bGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRh
Lm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIoKSwg
cmFuZ2UpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldENvdW50KHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWlu
dDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0
YSkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudChjb25zdCBDbGllbnRP
cmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYga2V5UmFuZ2VEYXRhKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQi
KTsKIAorICAgIHVpbnQ2NF90IGNvdW50OworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNl
KG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAg
ICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0Q291bnQsIGNhbGxiYWNrSWRlbnRpZmll
ciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgY291bnQpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgQVNTRVJUKG9iamVj
dFN0b3JlSWRlbnRpZmllcik7Ci0KLSAgICB1aW50NjRfdCBjb3VudDsKICAgICBJREJFcnJvciBl
cnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRDb3VudCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9i
amVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBrZXlSYW5nZURhdGEsIGNvdW50
KTsKIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldENvdW50LCBjYWxsYmFja0lkZW50
aWZpZXIsIGVycm9yLCBjb3VudCkpOwpAQCAtMTUyOCwzNSArMTM2NywyOCBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJRAogICAgIHBlcmZvcm1Db3VudENhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmll
ciwgZXJyb3IsIGNvdW50KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVj
b3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJS
ZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VE
YXRhLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVs
ZXRlUmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VD
b21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92
ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMt
PmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBFcnJvckNhbGxiYWNr
IGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAg
ICAgcmV0dXJuOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQsIGNhbGxiYWNrSUQs
IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RT
dG9yZUlkZW50aWZpZXIoKSwga2V5UmFuZ2VEYXRhKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURl
bGV0ZVJlY29yZCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0
YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlm
aWVyKCksIGtleVJhbmdlRGF0YSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKK3ZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmln
aW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybURlbGV0ZVJlY29yZCIpOwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlUmFuZ2UodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIHJhbmdlKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJv
cihRdW90YUV4Y2VlZGVkRXJyb3IpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBJ
REJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVSYW5nZSh0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgcmFuZ2UpOwogICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcikpOwog
fQogCkBAIC0xNTY4LDM0ICsxNDAwLDI3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1EZWxldGVSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zCiAgICAg
cGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CiB9CiAKLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29u
c3QgSURCQ3Vyc29ySW5mbyYgaW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1
ZXN0RGF0YSwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2Fs
bGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yIik7CiAKLSAgICB3YWl0Rm9y
UmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBp
bmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUg
ewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhX
VEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLT5vcGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCBpbmZvLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
Om9wZW5DdXJzb3JBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3RE
YXRhLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFj
aykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9y
KFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVy
bjsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtT3BlbkN1cnNvciwgY2FsbGJhY2tJRCwgcmVxdWVzdERh
dGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIGluZm8pKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
T3BlbkN1cnNvciwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0
YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgaW5mbykpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtT3BlbkN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJ
REJDdXJzb3JJbmZvJiBpbmZvKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5D
dXJzb3IoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1P
cGVuQ3Vyc29yIik7CiAKICAgICBJREJHZXRSZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3NlcnZl
ci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtT3BlbkN1cnNvciwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IpLCByZXN1bHQp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2lu
Z1N0b3JlLT5vcGVuQ3Vyc29yKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbywgcmVzdWx0KTsK
IAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybU9wZW5DdXJzb3IsIGNhbGxiYWNrSWRlbnRp
ZmllciwgZXJyb3IsIHJlc3VsdCkpOwpAQCAtMTYwOSwzNCArMTQzNCwyNyBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtT3BlbkN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0CiAgICAgcGVyZm9ybUdldFJlc3VsdENhbGxiYWNrKGNhbGxiYWNrSWRlbnRp
ZmllciwgZXJyb3IsIHJlc3VsdCk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJh
dGVDdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0
IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEm
IGRhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6aXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFp
bikgVW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IiKTsKIAotICAgIHdhaXRGb3JSZXF1
ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGRhdGEs
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0g
ICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1v
dmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IHRoaXMtPml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGRhdGEsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
aXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhLCBHZXRSZXN1bHRDYWxsYmFj
ayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAg
ICAgIHJldHVybjsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvciwgY2FsbGJhY2tJ
RCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLmN1cnNv
cklkZW50aWZpZXIoKSwgZGF0YSkpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29y
LCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0
aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5jdXJzb3JJZGVudGlmaWVyKCksIGRhdGEpKTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBjdXJzb3JJZGVu
dGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSkKK3ZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29yKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2lu
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1
cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhKQogewogICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvciIpOwogCiAgICAgSURCR2V0UmVzdWx0
IHJlc3VsdDsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0
b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUl0ZXJhdGVDdXJzb3IsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3Io
UXVvdGFFeGNlZWRlZEVycm9yKSwgcmVzdWx0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAg
ICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+aXRlcmF0ZUN1cnNvcih0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGN1cnNvcklkZW50aWZpZXIsIGRhdGEsIHJlc3VsdCk7CiAKICAgICBp
ZiAoZXJyb3IuaXNOdWxsKCkpIHsKQEAgLTE2ODgsMTcgKzE1MDYsNiBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdAogCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigp
LmRhdGFiYXNlKCkgPT0gdGhpcyk7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlv
bih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051
bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNvbW1pdFRyYW5zYWN0aW9uQWZ0
ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9uLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uQWZ0ZXJRdW90YUNo
ZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTcxNCwxMyArMTUyMSwxNSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpjb21taXRUcmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1p
dFRyYW5zYWN0aW9uLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigp
KSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uLCBtX2lkZW50aWZpZXIu
b3JpZ2luKCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29t
bWl0VHJhbnNhY3Rpb24oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIpCiB7Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgTE9HKEluZGV4
ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiAt
ICVzIiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VR
dW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tS
ZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1
b3RhRXhjZWVkZWRFcnJvciksIHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOworICAgICAgICByZXR1
cm47CisgICAgfQogCiAgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Y29tbWl0
VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdHJh
bnNhY3Rpb25JZGVudGlmaWVyKSk7CkBAIC0xNzUyLDI0ICsxNTYxLDEzIEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsCiAgICAgdHJhbnNhY3Rpb25Db21wbGV0ZWQobV9maW5pc2hpbmdUcmFuc2Fj
dGlvbnMudGFrZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbiwgV2FpdEZvclBlbmRpbmdUYXNrcyB3YWl0Rm9yUGVuZGluZ1Rhc2tzLCBFcnJv
ckNhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2Fj
dGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgRXJyb3JDYWxs
YmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJ
bmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24gLSAl
cyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwogCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigp
LmRhdGFiYXNlKCkgPT0gdGhpcyk7CiAKLSAgICBpZiAod2FpdEZvclBlbmRpbmdUYXNrcyA9PSBX
YWl0Rm9yUGVuZGluZ1Rhc2tzOjpZZXMpIHsKLSAgICAgICAgd2FpdEZvclJlcXVlc3RTcGFjZUNv
bXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rpb24sIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBpZiAo
IWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJv
cikpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHRoaXMtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIFdhaXRGb3JQZW5kaW5nVGFza3M6
Ok5vLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1
cm47CkBAIC0xNzg1LDcgKzE1ODMsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRy
YW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24s
IGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKTsKKyAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxs
YmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CiB9CiAKIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZEZpbmlzaEhhbmRsaW5nVmVyc2lvbkNoYW5nZShVbmlxdWVJREJE
YXRhYmFzZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQpAQCAtMTgwNywxMSArMTYwNSwxNiBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoVW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aQogICAgIGludm9rZU9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIo
KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24o
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1B
Ym9ydFRyYW5zYWN0aW9uKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiAt
ICVzIiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKIAorICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihR
dW90YUV4Y2VlZGVkRXJyb3IpLCB0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmFib3J0
VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB0cmFu
c2FjdGlvbklkZW50aWZpZXIpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggZWMzZmMw
YzczZWEzMGUyNGU3YTBjZWU1ODg5ZjM5NjFmMGNjNGMyNy4uNzQ0OTg1MjRmOTE3MTI4MzhhOTZk
MjdmZjg1NmMzNGY3N2NhMDVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTQ0LDYgKzQ0
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQ2xpZW50T3JpZ2luOwogY2xh
c3MgSURCRXJyb3I7CiBjbGFzcyBJREJHZXRBbGxSZXN1bHQ7CiBzdHJ1Y3QgSURCR2V0UmVjb3Jk
RGF0YTsKQEAgLTg5LDE3ICs5MCwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVJbmRleChV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCSW5kZXhJbmZvJiwgRXJyb3JD
YWxsYmFjayk7CiAgICAgdm9pZCBkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSwgRXJyb3JDYWxsYmFjayk7CiAgICAgdm9pZCByZW5hbWVJbmRleChVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRf
dCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjayk7
Ci0gICAgdm9pZCBwdXRPckFkZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmLCBJbmRl
eGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrKTsKLSAgICB2
b2lkIGdldFJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVx
dWVzdERhdGEmLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2spOwot
ICAgIHZvaWQgZ2V0QWxsUmVjb3JkcyhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29u
c3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdldEFsbFJl
c3VsdHNDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRDb3VudChVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBD
b3VudENhbGxiYWNrKTsKLSAgICB2b2lkIGRlbGV0ZVJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
LCBFcnJvckNhbGxiYWNrKTsKLSAgICB2b2lkIG9wZW5DdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCQ3Vyc29ySW5mbyYs
IEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGl0ZXJhdGVDdXJzb3IoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCSXRlcmF0
ZUN1cnNvckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CisgICAgdm9pZCBwdXRPckFkZChjb25z
dCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIElu
ZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2spOworICAg
IHZvaWQgZ2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVjb3Jk
RGF0YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKKyAgICB2b2lkIGdldEFsbFJlY29yZHMoY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdldEFsbFJlc3Vs
dHNDYWxsYmFjayk7CisgICAgdm9pZCBnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYsIENvdW50Q2FsbGJhY2spOworICAgIHZvaWQgZGVsZXRlUmVj
b3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXJyb3JD
YWxsYmFjayk7CisgICAgdm9pZCBvcGVuQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29u
c3QgSURCQ3Vyc29ySW5mbyYsIEdldFJlc3VsdENhbGxiYWNrKTsKKyAgICB2b2lkIGl0ZXJhdGVD
dXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYs
IEdldFJlc3VsdENhbGxiYWNrKTsKICAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBFcnJvckNhbGxiYWNrKTsKLQotICAgIGVudW0gY2xhc3Mg
V2FpdEZvclBlbmRpbmdUYXNrcyB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIGFib3J0VHJhbnNhY3Rp
b24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIFdhaXRGb3JQZW5kaW5nVGFza3MsIEVy
cm9yQ2FsbGJhY2spOworICAgIHZvaWQgYWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiwgRXJyb3JDYWxsYmFjayk7CiAKICAgICB2b2lkIGRpZEZpbmlzaEhhbmRs
aW5nVmVyc2lvbkNoYW5nZShVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCB0cmFu
c2FjdGlvbkRlc3Ryb3llZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJik7CkBAIC0xMzks
NDQgKzEzOCwyNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzY2hlZHVsZVNodXRkb3duRm9yQ2xv
c2UoKTsKIAotICAgIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0
X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJPYmpl
Y3RTdG9yZUluZm8mLCBFcnJvckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQg
cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsK
LSAgICB2b2lkIGNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCSW5kZXhJbmZvJiwgRXJyb3JD
YWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHJlbmFtZUluZGV4QWZ0ZXJRdW90
YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsK
LSAgICB2b2lkIHB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBjb25z
dCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIElu
ZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2ssIGNvbnN0
IElEQkVycm9yJik7Ci0gICAgdm9pZCBkZWxldGVSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFcnJvckNhbGxiYWNrKTsK
LQotICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJvckNh
bGxiYWNrKTsKLSAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmVBZmV0UXVvdGFDaGVjayhVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBF
cnJvckNhbGxiYWNrKTsKLSAgICB2b2lkIGRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYsIEVycm9yQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0UmVjb3JkQWZ0ZXJR
dW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYs
IEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hl
Y2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdl
dEFsbFJlc3VsdHNDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRDb3VudEFmdGVyUXVvdGFDaGVjayhj
b25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIENvdW50Q2FsbGJh
Y2spOwotICAgIHZvaWQgb3BlbkN1cnNvckFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0
RGF0YSYsIGNvbnN0IElEQkN1cnNvckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9p
ZCBpdGVyYXRlQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29u
c3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBj
b21taXRUcmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiwgRXJyb3JDYWxsYmFjayk7Ci0KICAgICAvLyBEYXRhYmFzZSB0aHJlYWQgb3BlcmF0aW9u
cwogICAgIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmll
ciYpOwotICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZp
ZXImLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJh
bnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtQWJvcnRU
cmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICB2b2lkIG9wZW5CYWNraW5n
U3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CisgICAgdm9pZCBwZXJmb3JtQ29t
bWl0VHJhbnNhY3Rpb24oY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
cik7CisgICAgdm9pZCBwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbihjb25zdCBDbGllbnRPcmlnaW4m
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIGJlZ2luVHJhbnNhY3Rpb25JbkJh
Y2tpbmdTdG9yZShjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKLSAgICB2b2lkIHBlcmZvcm1D
cmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RT
dG9yZUluZm8mLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgcGVyZm9ybURlbGV0ZU9iamVj
dFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
Zmllcik7Ci0gICAgdm9pZCBwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5l
d05hbWUsIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtQ2xlYXJPYmplY3RTdG9y
ZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIp
OwotICAgIHZvaWQgcGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNv
bnN0IElEQkluZGV4SW5mbyYsIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtRGVs
ZXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIpOwotICAgIHZvaWQgcGVyZm9ybVJlbmFt
ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNv
bnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRh
JiwgY29uc3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwg
Y29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHBlcmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmLCBJREJHZXRSZWNvcmREYXRhVHlwZSk7Ci0gICAgdm9pZCBwZXJmb3JtR2V0QWxs
UmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0
YSYpOwotICAgIHZvaWQgcGVyZm9ybUdldEluZGV4UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlm
aWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7
Ci0gICAgdm9pZCBwZXJmb3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYpOwotICAgIHZvaWQgcGVyZm9ybURlbGV0ZVJlY29yZCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYpOwotICAgIHZvaWQgcGVyZm9ybU9wZW5DdXJzb3IodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwotICAgIHZvaWQgcGVyZm9ybUl0ZXJh
dGVDdXJzb3IodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYpOworICAg
IHZvaWQgcGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOworICAgIHZvaWQg
cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgdm9pZCBw
ZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IG5ld05hbWUsIGNvbnN0IElEQkVycm9yJik7CisgICAgdm9pZCBwZXJmb3JtQ2xlYXJPYmplY3RT
dG9yZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIHZvaWQgcGVyZm9ybUNyZWF0ZUluZGV4KGNv
bnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4
SW5mbyYpOworICAgIHZvaWQgcGVyZm9ybURlbGV0ZUluZGV4KGNvbnN0IENsaWVudE9yaWdpbiYs
IHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
dWludDY0X3QgaW5kZXhJZGVudGlmaWVyKTsKKyAgICB2b2lkIHBlcmZvcm1SZW5hbWVJbmRleChj
b25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgcGVyZm9ybVB1dE9yQWRkKGNv
bnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5k
ZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOworICAgIHZvaWQgcGVyZm9ybUdldFJl
Y29yZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElEQkdldFJl
Y29yZERhdGFUeXBlKTsKKyAgICB2b2lkIHBlcmZvcm1HZXRBbGxSZWNvcmRzKGNvbnN0IENsaWVu
dE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNE
YXRhJik7CisgICAgdm9pZCBwZXJmb3JtR2V0SW5kZXhSZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2lu
JiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBj
b25zdCBJREJLZXlSYW5nZURhdGEmKTsKKyAgICB2b2lkIHBlcmZvcm1HZXRDb3VudChjb25zdCBD
bGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJik7CisgICAgdm9pZCBwZXJmb3JtRGVsZXRlUmVjb3JkKGNvbnN0IENsaWVudE9yaWdpbiYs
IHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CisgICAgdm9pZCBwZXJmb3JtT3BlbkN1cnNvcihjb25z
dCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJDdXJzb3JJ
bmZvJik7CisgICAgdm9pZCBwZXJmb3JtSXRlcmF0ZUN1cnNvcihjb25zdCBDbGllbnRPcmlnaW4m
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1
cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJik7CiAgICAgdm9pZCBw
ZXJmb3JtUHJlZmV0Y2hDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRp
Zmllcik7CiAKICAgICB2b2lkIHBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihj
b25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKQEAgLTE4Niw3ICsxNjgsNyBAQCBwcml2YXRlOgog
CiAgICAgLy8gTWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAgICAgdm9pZCBkaWREZWxldGVCYWNraW5n
U3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pOwotICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IHRh
c2tJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIGRpZFBlcmZvcm1DcmVhdGVP
YmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwg
Y29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRlT2Jq
ZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3JtUmVuYW1l
T2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsK
QEAgLTI0Niw5ICsyMjgsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNEb25lV2l0aEhhcmRDbG9z
ZSgpOwogCiAgICAgdm9pZCByZXF1ZXN0U3BhY2UoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYsIHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYpOwotICAgIHZvaWQgd2FpdEZvclJlcXVlc3RT
cGFjZUNvbXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYpOwotICAgIHZvaWQgc3RhcnRTcGFjZUluY3JlYXNl
VGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrU2l6ZSk7Ci0gICAgdm9pZCBm
aW5pc2hTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCBib29sIGlzVGFza1N1
Y2Nlc3NmdWwpOwogCiAgICAgdm9pZCBjbGVhclRyYW5zYWN0aW9uc09uQ29ubmVjdGlvbihVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW9uLmNwcAppbmRleCBmZTkxMGZhZjk4NDlkYzJiMDQ3ZWJhOTdhZTU2NjU3OWZk
MTNkMjEwLi44MDA2MDY5ODgzNDRmMWIzOWI4YjlmYmMxOTk5ODIxZDgyNjIxYjg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2VDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcApAQCAtNzYsNyArNzYsNyBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6YWJvcnRUcmFuc2FjdGlvbldpdGhv
dXRDYWxsYmFjayhVbmlxdWVJREJEYXRhYgogICAgIGlmICghbV9kYXRhYmFzZSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIG1fZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rp
b24sIFVuaXF1ZUlEQkRhdGFiYXNlOjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpObywgW3RoaXMsIHBy
b3RlY3RlZFRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7Cisg
ICAgbV9kYXRhYmFzZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7CiAgICAg
ICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uTWFwLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmll
cikpOwogICAgICAgICBtX3RyYW5zYWN0aW9uTWFwLnJlbW92ZSh0cmFuc2FjdGlvbklkZW50aWZp
ZXIpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24u
Y3BwCmluZGV4IGE4ZDJiZGM3NDBjODk3MWE1YTdjMDRlNzZjMDMyOWI0NzZhZGM0MjYuLjc2ZWRk
YzQ1YjA3NmJlM2U2OTcyODQ1ZDExZTIxNTBiNmYwN2Q4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCgpCiAgICAgYXV0byBkYXRhYmFzZSA9IG1f
ZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAK
LSAgICBkYXRhYmFzZS0+YWJvcnRUcmFuc2FjdGlvbigqdGhpcywgVW5pcXVlSURCRGF0YWJhc2U6
OldhaXRGb3JQZW5kaW5nVGFza3M6OlllcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpXShhdXRvJiBlcnJvcikgeworICAgIGRhdGFiYXNlLT5hYm9ydFRyYW5zYWN0aW9uKCp0
aGlzLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKGF1dG8mIGVycm9yKSB7
CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjph
Ym9ydCAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGMKICAgICBh
dXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNT
RVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+cHV0T3JBZGQoKnRoaXMsIHJlcXVl
c3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQktl
eURhdGEmIGtleSkgeworICAgIGRhdGFiYXNlLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5RGF0
YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsK
ICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1
dE9yQWRkIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTMwNyw3ICszMDcsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb246OmdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAg
YXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFT
U0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmdldFJlY29yZCgqdGhpcywgcmVx
dWVzdERhdGEsIGdldFJlY29yZERhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3Vs
dCkgeworICAgIGRhdGFiYXNlLT5nZXRSZWNvcmQocmVxdWVzdERhdGEsIGdldFJlY29yZERhdGEs
IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8m
IGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkIChjYWxsYmFjayki
KTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMyOCw3
ICszMjgsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29y
ZHMoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBt
X2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwog
ICAgIAotICAgIGRhdGFiYXNlLT5nZXRBbGxSZWNvcmRzKCp0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0
QWxsUmVjb3Jkc0RhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVx
dWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgewor
ICAgIGRhdGFiYXNlLT5nZXRBbGxSZWNvcmRzKHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0
YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0
byYgZXJyb3IsIGNvbnN0IElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJ
bmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNvcmRzIChj
YWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTM0OSw3ICszNDksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Omdl
dENvdW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgYwogICAgIGF1dG8gZGF0
YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0
YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5nZXRDb3VudCgqdGhpcywgcmVxdWVzdERhdGEs
IGtleVJhbmdlRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1
ZXN0RGF0YV0oYXV0byYgZXJyb3IsIHVpbnQ2NF90IGNvdW50KSB7CisgICAgZGF0YWJhc2UtPmdl
dENvdW50KHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCB1aW50NjRfdCBjb3VudCkg
ewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
Z2V0Q291bnQgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzcwLDcgKzM3MCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbjo6ZGVsZXRlUmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0CiAg
ICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAg
IEFTU0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmRlbGV0ZVJlY29yZCgqdGhp
cywgcmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+ZGVs
ZXRlUmVjb3JkKHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yKSB7CiAgICAgICAgIExP
RyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmQg
KGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
b3BlbkN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAgYXV0byBk
YXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChk
YXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPm9wZW5DdXJzb3IoKnRoaXMsIHJlcXVlc3RE
YXRhLCBpbmZvLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3RE
YXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRh
YmFzZS0+b3BlbkN1cnNvcihyZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJl
c3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFr
VGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQxMiw3ICs0MTIsNyBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+
ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5p
dGVyYXRlQ3Vyc29yKCp0aGlzLCByZXF1ZXN0RGF0YSwgZGF0YSwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdl
dFJlc3VsdCYgcmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPml0ZXJhdGVDdXJzb3IocmVxdWVzdERh
dGEsIGRhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERh
dGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNv
ciAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SW5Qcm9jZXNzSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCmluZGV4IDkxMTFmNTk3OGUzYjgwNjE4NTVj
MjBmNWFmYWE1YjY1NWRjY2VhMjEuLjVjZGYyN2NjYzFiYmM3OTMxNzE2NjhkMDEwOTJkNTgwNDBl
YjJjZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC02MSwzNiArNjEsMzUgQEAg
UmVmPEluUHJvY2Vzc0lEQlNlcnZlcj4gSW5Qcm9jZXNzSURCU2VydmVyOjpjcmVhdGUoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBjb24KIAogSW5Qcm9jZXNzSURCU2VydmVyOjp+SW5Qcm9jZXNz
SURCU2VydmVyKCkgPSBkZWZhdWx0OwogCi1TdG9yYWdlUXVvdGFNYW5hZ2VyKiBJblByb2Nlc3NJ
REJTZXJ2ZXI6OnF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK1JlZlB0
cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBJblByb2Nlc3NJREJTZXJ2ZXI6OnF1b3RhTWFuYWdlcihj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKICAgICByZXR1cm4gbV9xdW90YU1hbmFnZXJz
LmVuc3VyZShvcmlnaW4sIFtdIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U3RvcmFnZVF1
b3RhTWFuYWdlcj4oU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCksIFtdKHVpbnQ2
NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2Us
IGF1dG8gY2FsbGJhY2spIHsKKyAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmNy
ZWF0ZShTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSwgW10geworICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0sIFtdKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJy
ZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKICAgICAg
ICAgICAgIGNhbGxiYWNrKHF1b3RhICsgY3VycmVudFNwYWNlICsgc3BhY2VJbmNyZWFzZSk7CiAg
ICAgICAgIH0pOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQotc3RhdGljIGlu
bGluZSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFNYW5hZ2VyR2V0dGVyIHN0b3JhZ2VRdW90
YU1hbmFnZXJHZXR0ZXIoSW5Qcm9jZXNzSURCU2VydmVyJiBzZXJ2ZXIpCi17Ci0gICAgcmV0dXJu
IFt3ZWFrU2VydmVyID0gbWFrZVdlYWtQdHIoc2VydmVyKV0oUEFMOjpTZXNzaW9uSUQsIGNvbnN0
IGF1dG8mIG9yaWdpbikgewotICAgICAgICByZXR1cm4gd2Vha1NlcnZlciA/IHdlYWtTZXJ2ZXIt
PnF1b3RhTWFuYWdlcihvcmlnaW4pIDogbnVsbHB0cjsKLSAgICB9OworICAgIH0pLml0ZXJhdG9y
LT52YWx1ZTsKIH0KIAogSW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklEKQotICAgIDogbV9zZXJ2ZXIoSURCU2VydmVyOjpJREJTZXJ2
ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIHN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIoKnRoaXMpKSkK
IHsKICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKICAgICBtX2Nvbm5lY3Rpb25Ub1Nl
cnZlciA9IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGUoKnRoaXMpOwog
ICAgIG1fY29ubmVjdGlvblRvQ2xpZW50ID0gSURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGll
bnQ6OmNyZWF0ZSgqdGhpcyk7CisgICAgbV9zZXJ2ZXIgPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6
Y3JlYXRlKHNlc3Npb25JRCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikgbXV0YWJsZSB7CisgICAgICAgIHJldHVybiB3ZWFr
VGhpcyA/IHF1b3RhTWFuYWdlcihvcmlnaW4pIDogbnVsbHB0cjsKKyAgICB9KTsKIH0KIAogSW5Q
cm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKLSAgICA6IG1fc2VydmVy
KElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklELCBkYXRhYmFzZURpcmVjdG9y
eVBhdGgsIHN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIoKnRoaXMpKSkKIHsKICAgICByZWxheEFk
b3B0aW9uUmVxdWlyZW1lbnQoKTsKICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlciA9IElEQkNsaWVu
dDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGUoKnRoaXMpOwogICAgIG1fY29ubmVjdGlv
blRvQ2xpZW50ID0gSURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQ6OmNyZWF0ZSgqdGhp
cyk7CisgICAgbV9zZXJ2ZXIgPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25J
RCwgW3RoaXMsIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigq
dGhpcyldKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKSBtdXRhYmxlIHsKKyAgICAgICAgcmV0
dXJuIHdlYWtUaGlzID8gcXVvdGFNYW5hZ2VyKG9yaWdpbikgOiBudWxscHRyOworICAgIH0pOwog
fQogCiBJREJDb25uZWN0aW9uSWRlbnRpZmllciBJblByb2Nlc3NJREJTZXJ2ZXI6OmlkZW50aWZp
ZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCmluZGV4IGM3YjUzMjFjYTM2MWM3NDFl
NTJkNDVlYzE4YTgzMThmYWQwODI5YzAuLjBkZDk3NDQyMzA5YzhlNzRhNjA3Njk4MWJkOGViOTBm
YTY5NGQ2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKQEAgLTYzLDkgKzYzLDggQEAgcHVi
bGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2
ZXImIGNvbm5lY3Rpb25Ub1NlcnZlcigpIGNvbnN0OwogICAgIElEQlNlcnZlcjo6SURCQ29ubmVj
dGlvblRvQ2xpZW50JiBjb25uZWN0aW9uVG9DbGllbnQoKSBjb25zdDsKLSAgICBJREJTZXJ2ZXI6
OklEQlNlcnZlciYgc2VydmVyKCkgeyByZXR1cm4gbV9zZXJ2ZXIuZ2V0KCk7IH0KLQotICAgIElE
QlNlcnZlcjo6SURCU2VydmVyJiBpZGJTZXJ2ZXIoKSB7IHJldHVybiBtX3NlcnZlci5nZXQoKTsg
fQorICAgIElEQlNlcnZlcjo6SURCU2VydmVyJiBzZXJ2ZXIoKSB7IHJldHVybiAqbV9zZXJ2ZXI7
IH0KKyAgICBJREJTZXJ2ZXI6OklEQlNlcnZlciYgaWRiU2VydmVyKCkgeyByZXR1cm4gKm1fc2Vy
dmVyOyB9CiAKICAgICAvLyBJREJDb25uZWN0aW9uVG9TZXJ2ZXIKICAgICB2b2lkIGRlbGV0ZURh
dGFiYXNlKGNvbnN0IElEQlJlcXVlc3REYXRhJikgZmluYWw7CkBAIC0xMjUsMTcgKzEyNCwxNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKSBvdmVycmlkZSB7IFJlZkNvdW50ZWQ8SW5Qcm9jZXNz
SURCU2VydmVyPjo6cmVmKCk7IH0KICAgICB2b2lkIGRlcmVmKCkgb3ZlcnJpZGUgeyBSZWZDb3Vu
dGVkPEluUHJvY2Vzc0lEQlNlcnZlcj46OmRlcmVmKCk7IH0KIAotICAgIFN0b3JhZ2VRdW90YU1h
bmFnZXIqIHF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mKTsKKyAgICBSZWZQdHI8U3Rv
cmFnZVF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyKGNvbnN0IENsaWVudE9yaWdpbiYpOwogCiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IEluUHJvY2Vzc0lEQlNlcnZlcihQQUw6OlNlc3Npb25JRCk7
CiAgICAgSW5Qcm9jZXNzSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlRGlyZWN0b3J5UGF0aCk7CiAKLSAgICBSZWY8SURCU2VydmVyOjpJREJTZXJ2ZXI+IG1f
c2VydmVyOworICAgIFJlZlB0cjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gbV9zZXJ2ZXI7CiAgICAg
UmVmUHRyPElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyPiBtX2Nvbm5lY3Rpb25Ub1Nl
cnZlcjsKICAgICBSZWZQdHI8SURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQ+IG1fY29u
bmVjdGlvblRvQ2xpZW50OwogCi0gICAgSGFzaE1hcDxDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVl
X3B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9xdW90YU1hbmFnZXJzOworICAgIEhhc2hNYXA8
Q2xpZW50T3JpZ2luLCBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fcXVvdGFNYW5hZ2Vy
czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4MjIxNWY3OTRlNzk3MWI0MmFi
YThhMTI5NWYxMTZkMTE1NjcxZDA4Li41ZTY0YTlkYmMzMWY4YzExNTAxMWY1ODY3MzA3N2YxMzI3
ZmYyY2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xMTMwLDcgKzExMzAsNiBAQAogCQk0MUQyOEQwRDIxMzlFMDU4MDBGNDIw
NkYgLyogTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFEMjhEMEIyMTM5RTAxRDAwRjQyMDZGIC8qIExpYldl
YlJUQ1N0YXRzQ29sbGVjdG9yLmNwcCAqLzsgfTsKIAkJNDFENDFDNjcyMjU2ODc0RjAwNjk3OTQy
IC8qIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUQ0MUM2NTIyNTY4NTkyMDA2OTc5NDIgLyogU2VydmljZVdv
cmtlckludGVybmFscy5tbSAqLzsgfTsKIAkJNDFERTdDN0MyMjJEQTE0MzAwNTMyQjY1IC8qIFN0
b3JhZ2VRdW90YU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxREU3QzdCMjIyREExM0UwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2Vy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNDFE
RTdDN0QyMjJEQTE0ODAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YVVzZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxREU3Qzc4MjIyREExM0MwMDUzMkI2
NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDFERUZDQjYxRTU2QzFCRDAwMEQ5RTVGIC8qIEpTRE9NTWFwTGlr
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFERUZD
QjQxRTU2QzFCOTAwMEQ5RTVGIC8qIEpTRE9NTWFwTGlrZS5oICovOyB9OwogCQk0MUUxQjFEMTBG
RjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRTFCMUNCMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0
cmFjdFdvcmtlci5oICovOyB9OwogCQk0MUU5RENFNzIzMTk3NEJGMDBGMzU5NDkgLyogQmxvYkxv
YWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFF
OURDRTQyMzE5NzNGRTAwRjM1OTQ5IC8qIEJsb2JMb2FkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjQ3NCw4ICs2NDczLDggQEAKIAkJMUNG
QUUzMjIwQTZENkEzRjAwMzI1OTNEIC8qIGxpYm9iamMuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsg
bmFtZSA9IGxpYm9iamMuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJvYmpjLmR5bGliOyBzb3Vy
Y2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQkxRDAwMjZBMjIzNzRENjIzMDBDQTZDREYgLyog
SlNQaWN0dXJlSW5QaWN0dXJlV2luZG93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTUGljdHVyZUluUGljdHVyZVdpbmRvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxRDAwMjZBMzIzNzRENjI0MDBDQTZDREYgLyogSlNQaWN0dXJlSW5QaWN0dXJlV2luZG93
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUGljdHVyZUluUGlj
dHVyZVdpbmRvdy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFEMDAyNkE4MjM3
NEY5RDkwMENBNkNERiAvKiBKU0VudGVyUGljdHVyZUluUGljdHVyZUV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTRW50ZXJQaWN0dXJlSW5QaWN0dXJlRXZlbnQuaDsg
cGF0aCA9IEpTRW50ZXJQaWN0dXJlSW5QaWN0dXJlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMUQwMDI2QTkyMzc0RjlEOTAwQ0E2Q0RGIC8qIEpTRW50ZXJQaWN0dXJlSW5Q
aWN0dXJlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNF
bnRlclBpY3R1cmVJblBpY3R1cmVFdmVudC5jcHA7IHBhdGggPSBKU0VudGVyUGljdHVyZUluUGlj
dHVyZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUQwMDI2QTgyMzc0
RjlEOTAwQ0E2Q0RGIC8qIEpTRW50ZXJQaWN0dXJlSW5QaWN0dXJlRXZlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFbnRlclBpY3R1cmVJblBpY3R1cmVFdmVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxRDAwMjZBOTIzNzRGOUQ5MDBDQTZDREYgLyog
SlNFbnRlclBpY3R1cmVJblBpY3R1cmVFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0VudGVyUGljdHVyZUluUGljdHVyZUV2ZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUQyQzgyQjYyMzZBM0Y2QTAwNTVENkM1IC8qIFBpY3R1cmVJ
blBpY3R1cmVTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFEQkMxQjU1MjM0N0IzRDIwMEI5MDFB
RiAvKiBQaWN0dXJlSW5QaWN0dXJlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGljdHVyZUlu
UGljdHVyZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFEQzU1M0ZE
MjExQkExMkEwMDRCNzgwRSAvKiBOYXZpZ2F0b3JTaGFyZS5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gTmF2aWdhdG9yU2hhcmUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NzQ2NCw3ICs3NDYzLDYgQEAKIAkJNDFEMjhEMEMyMTM5RTAxRTAwRjQyMDZGIC8qIExpYldlYlJU
Q1N0YXRzQ29sbGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpYldl
YlJUQ1N0YXRzQ29sbGVjdG9yLmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xs
ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFENDFDNjUyMjU2ODU5MjAw
Njk3OTQyIC8qIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBTZXJ2aWNlV29ya2VySW50ZXJuYWxzLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MUQ1MUJCMjFFNEUyRTgxMDAxMzFBNUIgLyogTGliV2ViUlRD
QXVkaW9Gb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGliV2ViUlRD
QXVkaW9Gb3JtYXQuaDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENBdWRpb0Zvcm1hdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MURFN0M3ODIyMkRBMTNDMDA1MzJCNjUgLyog
U3RvcmFnZVF1b3RhVXNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9y
YWdlUXVvdGFVc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxREU3QzdBMjIy
REExM0QwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MURFN0M3QjIyMkRBMTNFMDA1MzJCNjUgLyogU3RvcmFnZVF1
b3RhTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlUXVv
dGFNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxREVGQ0IyMUU1NkMx
QjkwMDBEOUU1RiAvKiBKU0RPTUJpbmRpbmdJbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBKU0RPTUJpbmRpbmdJbnRlcm5hbHMuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzA5OCw3ICsxNzA5Niw2IEBACiAJCQkJMUEzNzYzNkEx
QTJFNjhCQjAwOUE3RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oICovLAogCQkJCTQx
REU3QzdBMjIyREExM0QwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLywKIAkJ
CQk0MURFN0M3QjIyMkRBMTNFMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5oICovLAot
CQkJCTQxREU3Qzc4MjIyREExM0MwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggKi8sCiAJ
CQkJNTE2NkQzQ0MxRThFRDQxMTAwQUQ2MkUzIC8qIFN0b3JhZ2VUeXBlLmggKi8sCiAJCQkpOwog
CQkJaW5kZW50V2lkdGggPSA0OwpAQCAtMjkyNjksNyArMjkyNjYsNiBAQAogCQkJCTU3MjFBOThC
MUVDRTU3MDQwMDgxMjk1QSAvKiBDcnlwdG9BbGdvcml0aG1Sc2FQc3NQYXJhbXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUxQkQzMzFBMTgyRDhEREQwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1S
U0FTU0FfUEtDUzFfdjFfNS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNUY4MkMxODIyQ0ZFQzAw
RDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobVNIQTEuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0NUJB
NkI2MjM3NjIyQTMwMDRERkMwNyAvKiBTdHlsZUFkanVzdGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMTlBQzNFRjE4MjREQzc5MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMjI0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMTlBQzNGMTE4MjREQzc5MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3Jp
dGhtU0hBMjU2LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTlBQzNGMzE4MjREQzc5MDAzNDk0MjYg
LyogQ3J5cHRvQWxnb3JpdGhtU0hBMzg0LmggaW4gSGVhZGVycyAqLywKQEAgLTMyMjA3LDcgKzMy
MjAzLDYgQEAKIAkJCQlDNTBEMEU4MzBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVzcGFj
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzNzYzNkMxQTJFNjhCQjAwOUE3RUUyIC8qIFN0b3Jh
Z2VOYW1lc3BhY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFERTdDN0MyMjJEQTE0
MzAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQx
REU3QzdEMjIyREExNDgwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1QzlFRjJGMzIxRjA2MTkwMDAzQkRDNTYgLyogU3RvcmFnZVNlc3Npb25Qcm92aWRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2NkQzQ0QxRThFRDQ4RjAwQUQ2MkUzIC8qIFN0b3Jh
Z2VUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NjgyRDIwMDFGNzk3ODMwMDBDODYzREIgLyog
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaCBpbiBIZWFkZXJzICovLApAQCAtMzIyMTksNiArMzIy
MTQsNyBAQAogCQkJCTlCNkM0MTUzMTM0NDk0OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDlGNzc3NjBFRkVDNjIwMDA5MDg0OUQgLyogU3Ry
b2tlU3R5bGVBcHBsaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTRCODIwNTFENkRGMEU1MDA3
N0VCRTMgLyogU3RydWN0dXJlZENsb25lLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDVCQTZCNjIz
NzYyMkEzMDA0REZDMDcgLyogU3R5bGVBZGp1c3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1
RUI2QTMwRTgxREM0RjAwQjI1OTY1IC8qIFN0eWxlQmFja2dyb3VuZERhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDNUVCNjdCMEU4MUQzQkUwMEIyNTk2NSAvKiBTdHlsZUJveERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0QUJBQzA2MjM2QjAxNkQwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlUXVvdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3Rh
TWFuYWdlci5jcHAKaW5kZXggODUyNTc1MmU2MzM0Nzk1MzBlZjE0ZWNiNzRmODViYWY2OGQ5YzU1
Yi4uYTMxOTY0ZTNhNjgxNmZkZTIyYzM3NTQzOGUzZTJjZGRiOGIzMTdmMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCkBAIC0yNywyMTMgKzI3
LDEyMyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VRdW90YU1hbmFnZXIuaCIKIAogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKLSNpbmNsdWRlICJTdG9yYWdlUXVvdGFVc2VyLmgiCisjaW5jbHVkZSA8d3RmL1Jl
Zi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMv
QmluYXJ5U2VtYXBob3JlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6flN0b3JhZ2VRdW90YU1hbmFnZXIoKQorUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZSh1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXIm
JiB1c2FnZUdldHRlciwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1
ZXN0ZXIpCiB7Ci0gICAgd2hpbGUgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAg
ICAgIG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpLmNhbGxiYWNrKERlY2lzaW9uOjpEZW55
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9yYWdlUXVvdGFNYW5hZ2VyKHF1b3RhLCBX
VEZNb3ZlKHVzYWdlR2V0dGVyKSwgV1RGTW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKSkpOwog
fQogCi11aW50NjRfdCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzcGFjZVVzYWdlKCkgY29uc3QKK1N0
b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFVz
YWdlR2V0dGVyJiYgdXNhZ2VHZXR0ZXIsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiBxdW90YUlu
Y3JlYXNlUmVxdWVzdGVyKQorICAgIDogbV9xdW90YShxdW90YSkKKyAgICAsIG1fdXNhZ2VHZXR0
ZXIoV1RGTW92ZSh1c2FnZUdldHRlcikpCisgICAgLCBtX3F1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIo
V1RGTW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKSkKKyAgICAsIG1fd29ya1F1ZXVlKFdvcmtR
dWV1ZTo6Y3JlYXRlKCJTdG9yYWdlUXVvdGFNYW5hZ2VyIEJhY2tncm91bmQgUXVldWUiLCBXb3Jr
UXVldWU6OlR5cGU6OlNlcmlhbCkpCisgICAgLCBtX2luaXRpYWxRdW90YShxdW90YSkKIHsKLSAg
ICB1aW50NjRfdCB1c2FnZSA9IDA7Ci0gICAgZm9yIChhdXRvJiB1c2VyIDogbV91c2VycykKLSAg
ICAgICAgdXNhZ2UgKz0gdXNlci0+c3BhY2VVc2VkKCk7Ci0gICAgcmV0dXJuIHVzYWdlOwogfQog
Ci12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2Uo
KQordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQodWlu
dDY0X3Qgc3BhY2VSZXF1ZXN0ZWQsIFJlcXVlc3RDYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAg
IGlmICghbV9xdW90YSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAKLSAgICBhdXRvIGRlZmF1bHRRdW90YVN0ZXAgPSBtX3F1b3RhIC8gMTA7Ci0gICAgbV9x
dW90YSA9IHN0ZDo6bWF4KG1fcXVvdGEsIGRlZmF1bHRRdW90YVN0ZXAgKiAoKHNwYWNlVXNhZ2Uo
KSAvIGRlZmF1bHRRdW90YVN0ZXApICsgMSkpOwotfQotCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFn
ZXI6OmluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCkKLXsKLSAgICBpZiAobV9wZW5kaW5nSW5pdGlh
bGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxT
dG9yYWdlUXVvdGFVc2VyKj4gdXNlcnNUb0luaXRpYWxpemU7Ci0gICAgZm9yIChhdXRvJiBrZXlW
YWx1ZSA6IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMpIHsKLSAgICAgICAgaWYgKGtleVZh
bHVlLnZhbHVlID09IFdoZW5Jbml0aWFsaXplZENhbGxlZDo6Tm8pIHsKLSAgICAgICAgICAgIGtl
eVZhbHVlLnZhbHVlID0gV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpZZXM7Ci0gICAgICAgICAgICB1
c2Vyc1RvSW5pdGlhbGl6ZS5hcHBlbmQoa2V5VmFsdWUua2V5KTsKKyAgICAvLyBGYXN0IHBhdGgu
CisgICAgaWYgKG1fcXVvdGFDb3VudERvd25Mb2NrLnRyeUxvY2soKSkgeworICAgICAgICBpZiAo
dHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkgeworICAgICAgICAgICAgbV9xdW90YUNv
dW50RG93bkxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3Jh
bnQpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fcXVvdGFDb3Vu
dERvd25Mb2NrLnVubG9jaygpOwogICAgIH0KLSAgICBmb3IgKGF1dG8qIHVzZXIgOiB1c2Vyc1Rv
SW5pdGlhbGl6ZSkgewotICAgICAgICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5j
b250YWlucyh1c2VyKSkKLSAgICAgICAgICAgIGFza1VzZXJUb0luaXRpYWxpemUoKnVzZXIpOwot
ICAgIH0KKworICAgIG1fY2FsbGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAg
bV93b3JrUXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIHNwYWNlUmVxdWVzdGVkXSB7CisgICAgICAgIGF1dG8gZGVjaXNpb24gPSByZXF1ZXN0U3Bh
Y2VPbkJhY2tncm91bmRUaHJlYWQoc3BhY2VSZXF1ZXN0ZWQpOworICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRlY2lzaW9uXSB7
CisgICAgICAgICAgICBBU1NFUlQoIW1fY2FsbGJhY2tzLmlzRW1wdHkoKSk7CisgICAgICAgICAg
ICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZUZpcnN0KCk7CisgICAgICAgICAgICBj
YWxsYmFjayhkZWNpc2lvbik7CisgICAgICAgIH0pOworICAgIH0pOwogfQogCi12b2lkIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUoU3RvcmFnZVF1b3RhVXNlciYgdXNl
cikKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJl
cXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCh1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCkKIHsK
LSAgICB1c2VyLndoZW5Jbml0aWFsaXplZChbdGhpcywgJnVzZXIsIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIodGhpcyldKCkgewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0
dXJuOworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgICAgIGlmIChtX3BlbmRp
bmdJbml0aWFsaXphdGlvblVzZXJzLnJlbW92ZSgmdXNlcikpCi0gICAgICAgICAgICBtX3VzZXJz
LmFkZCgmdXNlcik7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9xdW90YUNvdW50RG93bkxvY2sp
OwogCi0gICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKHRyeUdyYW50UmVxdWVzdChzcGFjZVJlcXVl
c3RlZCkpCisgICAgICAgIHJldHVybiBEZWNpc2lvbjo6R3JhbnQ7CiAKLSAgICAgICAgLy8gTWFr
ZSBzdXJlIHF1b3RhIGlzIHNldCBiZWZvcmUgaGFuZGxpbmcgZmlyc3QgcmVxdWVzdC4KLSAgICAg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlVuaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgIHVw
ZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKLSAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0
ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgICAgICB9CisgICAgbV91c2FnZSA9IG1f
dXNhZ2VHZXR0ZXIoKTsKKyAgICB1cGRhdGVRdW90YUJhc2VkT25Vc2FnZSgpOworICAgIG1fcXVv
dGFDb3VudERvd24gPSBtX3VzYWdlIDwgbV9xdW90YSA/IG1fcXVvdGEgLSBtX3VzYWdlIDogMDsK
KyAgICBpZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkKKyAgICAgICAgcmV0dXJu
IERlY2lzaW9uOjpHcmFudDsKIAotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKHsgfSk7
Ci0gICAgfSk7Ci19CisgICAgLy8gQmxvY2sgdGhpcyB0aHJlYWQgdW50aWwgZ2V0dGluZyBkZWNz
aW9uIGZvciBxdW90YSBpbmNyZWFzZS4KKyAgICBCaW5hcnlTZW1hcGhvcmUgc2VtYXBob3JlOwor
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgc3BhY2VSZXF1ZXN0ZWQsICZzZW1hcGhvcmVdIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU3Rv
cmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlciBhc2tzIGZvciBxdW90YSBpbmNyZWFzZSAl
IiBQUkl1NjQsIHRoaXMsIHNwYWNlUmVxdWVzdGVkKTsKKyAgICAgICAgbV9xdW90YUluY3JlYXNl
UmVxdWVzdGVyKG1fcXVvdGEsIG1fdXNhZ2UsIHNwYWNlUmVxdWVzdGVkLCBbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCAmc2VtYXBob3JlXShPcHRpb25hbDx1aW50NjRfdD4g
bmV3UXVvdGEpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3Jh
Z2VRdW90YU1hbmFnZXIgcmVjZWl2ZXMgcXVvdGEgaW5jcmVhc2UgcmVzcG9uc2UgJSIgUFJJdTY0
LCB0aGlzLCBuZXdRdW90YSA/ICpuZXdRdW90YSA6IDApOworICAgICAgICAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphZGRVc2VyKFN0b3Jh
Z2VRdW90YVVzZXImIHVzZXIpCi17Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdJbml0aWFsaXphdGlv
blVzZXJzLmNvbnRhaW5zKCZ1c2VyKSk7Ci0gICAgQVNTRVJUKCFtX3VzZXJzLmNvbnRhaW5zKCZ1
c2VyKSk7Ci0gICAgbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5hZGQoJnVzZXIsIFdoZW5J
bml0aWFsaXplZENhbGxlZDo6Tm8pOworICAgICAgICAgICAgaWYgKG5ld1F1b3RhKQorICAgICAg
ICAgICAgICAgIG1fcXVvdGEgPSAqbmV3UXVvdGE7CiAKLSAgICBpZiAoIW1fcGVuZGluZ1JlcXVl
c3RzLmlzRW1wdHkoKSkKLSAgICAgICAgYXNrVXNlclRvSW5pdGlhbGl6ZSh1c2VyKTsKLX0KKyAg
ICAgICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKKyAgICAgICAgfSk7CisgICAgfSk7CiAKLWJv
b2wgU3RvcmFnZVF1b3RhTWFuYWdlcjo6c2hvdWxkQXNrRm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNw
YWNlSW5jcmVhc2UpIGNvbnN0Ci17Ci0gICAgaWYgKCFzcGFjZUluY3JlYXNlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgc2VtYXBob3JlLndhaXQoKTsKIAotICAgIHJldHVybiBzcGFjZVVz
YWdlKCkgKyBzcGFjZUluY3JlYXNlID4gbV9xdW90YTsKKyAgICBtX3VzYWdlID0gbV91c2FnZUdl
dHRlcigpOworICAgIG1fcXVvdGFDb3VudERvd24gPSBtX3VzYWdlIDwgbV9xdW90YSA/IG1fcXVv
dGEgLSBtX3VzYWdlIDogMDsKKyAgICByZXR1cm4gdHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVz
dGVkKSA/IERlY2lzaW9uOjpHcmFudCA6IERlY2lzaW9uOjpEZW55OwogfQogCi12b2lkIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OnJlbW92ZVVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKK2Jvb2wg
U3RvcmFnZVF1b3RhTWFuYWdlcjo6dHJ5R3JhbnRSZXF1ZXN0KHVpbnQ2NF90IHNwYWNlUmVxdWVz
dGVkKQogewotICAgIEFTU0VSVChtX3VzZXJzLmNvbnRhaW5zKCZ1c2VyKSB8fCBtX3BlbmRpbmdJ
bml0aWFsaXphdGlvblVzZXJzLmNvbnRhaW5zKCZ1c2VyKSk7Ci0gICAgbV91c2Vycy5yZW1vdmUo
JnVzZXIpOwotICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLnJlbW92ZSgmdXNl
cikgJiYgbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
Ly8gV2hlbiBiZWluZyBjbGVhcmVkLCBxdW90YSB1c2VycyBtYXkgcmVtb3ZlIHRoZW1zZWx2ZXMg
YW5kIGFkZCB0aGVtc2VsdmVzIHRvIHRyaWdnZXIgcmVpbml0aWFsaXphdGlvbi4KLSAgICAgICAg
Ly8gTGV0J3Mgd2FpdCBmb3IgYWRkVXNlciB0byBiZSBjYWxsZWQgYmVmb3JlIHByb2Nlc3Npbmcg
cGVuZGluZyByZXF1ZXN0cy4KLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cih0aGlzKV0gewotICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChtX3BlbmRpbmdJbml0aWFs
aXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0aGlzLT5wcm9jZXNzUGVu
ZGluZ1JlcXVlc3RzKHsgfSk7Ci0gICAgICAgIH0pOworICAgIEFTU0VSVChtX3F1b3RhQ291bnRE
b3duTG9jay5pc0xvY2tlZCgpKTsKKyAgICBpZiAoc3BhY2VSZXF1ZXN0ZWQgPD0gbV9xdW90YUNv
dW50RG93bikgeworICAgICAgICBtX3F1b3RhQ291bnREb3duIC09IHNwYWNlUmVxdWVzdGVkOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQotCi12b2lk
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNl
LCBSZXF1ZXN0Q2FsbGJhY2smJiBjYWxsYmFjaykKKyAgICAKK3ZvaWQgU3RvcmFnZVF1b3RhTWFu
YWdlcjo6dXBkYXRlUXVvdGFCYXNlZE9uVXNhZ2UoKQogewotICAgIGlmICghbV9wZW5kaW5nUmVx
dWVzdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNw
YWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spIH0pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKCFzcGFjZUluY3JlYXNlKSB7Ci0gICAgICAgIGNhbGxiYWNrKERlY2lzaW9u
OjpHcmFudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbml0aWFsaXplVXNlcnNJ
Zk5lZWRlZCgpOwotCi0gICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1w
dHkoKSkgewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUluY3JlYXNl
LCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChzaG91bGRBc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSkpIHsKLSAgICAgICAgbV9wZW5k
aW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7
Ci0KLSAgICAgICAgLy8gVHJ5IHByb2Nlc3NpbmcgcmVxdWVzdCBhZ2FpbiBhZnRlciBtYWtpbmcg
c3VyZSB1c2FnZSBpcyBhY2N1cmF0ZS4KLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDb21wdXRp
bmdTcGFjZVVzZWQ7Ci0gICAgICAgIGZvciAoYXV0byYgdXNlciA6IGNvcHlUb1ZlY3RvcihtX3Vz
ZXJzKSkKLSAgICAgICAgICAgIHVzZXItPmNvbXB1dGVTcGFjZVVzZWQoKTsKLQotICAgICAgICBp
ZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlOwot
ICAgICAgICBhc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSk7Ci0gICAgICAgIHJldHVybjsK
KyAgICAvLyBXaGVuIFN0b3JhZ2VRdW90YU1hbmFnZXIgaXMgdXNlZCBmb3IgdGhlIGZpcnN0IHRp
bWUsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGl0cyBpbml0aWFsIHF1b3RhIGlzIGJpZ2dlciB0aGFu
IGN1cnJlbnQgZGlzayB1c2FnZSwKKyAgICAvLyBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0
IHRoZSBxdW90YSB3YXMgaW5jcmVhc2VkIHRvIGF0IGxlYXN0IHRoZSBkaXNrIHVzYWdlIHVuZGVy
IHVzZXIncyBwZXJtaXNzaW9uIGJlZm9yZS4KKyAgICBBU1NFUlQobV9xdW90YUNvdW50RG93bkxv
Y2suaXNMb2NrZWQoKSk7CisgICAgaWYgKCFtX3F1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZSkgewor
ICAgICAgICBtX3F1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZSA9IHRydWU7CisgICAgICAgIGF1dG8g
ZGVmYXVsdFF1b3RhU3RlcCA9IG1fcXVvdGEgLyAxMDsKKyAgICAgICAgbV9xdW90YSA9IHN0ZDo6
bWF4KG1fcXVvdGEsIGRlZmF1bHRRdW90YVN0ZXAgKiAoKG1fdXNhZ2UgLyBkZWZhdWx0UXVvdGFT
dGVwKSArIDEpKTsKICAgICB9Ci0KLSAgICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9u
Rm9yUmVxdWVzdDsKLSAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOwogfQogCi12b2lkIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNl
KQordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXNldFF1b3RhVXBkYXRlZEJhc2VkT25Vc2Fn
ZSgpCiB7Ci0gICAgQVNTRVJUKHNob3VsZEFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKSk7
Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZSk7Ci0KLSAg
ICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JN
b3JlU3BhY2UgJSIgUFJJdTY0LCB0aGlzLCBzcGFjZUluY3JlYXNlKTsKLSAgICBtX3N0YXRlID0g
U3RhdGU6OldhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2U7Ci0gICAgbV9zcGFjZUluY3Jl
YXNlUmVxdWVzdGVyKG1fcXVvdGEsIHNwYWNlVXNhZ2UoKSwgc3BhY2VJbmNyZWFzZSwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVv
dGEpIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tG
b3JNb3JlU3BhY2UgcmVjZWl2ZWQgcmVzcG9uc2UgJSIgUFJJdTY0LCB0aGlzLCBuZXdRdW90YSA/
ICpuZXdRdW90YSA6IDApOwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNraW5nRm9yTW9y
ZVNwYWNlOwotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKG5ld1F1b3RhKTsKLSAgICB9
KTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3F1b3RhQ291bnREb3duTG9jayk7CisgICAgbV9x
dW90YSA9IG1faW5pdGlhbFF1b3RhOworICAgIG1fcXVvdGFDb3VudERvd24gPSAwOworICAgIG1f
cXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlID0gZmFsc2U7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVv
dGEpCit2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlc2V0UXVvdGEoKQogewotICAgIGlmICht
X3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChu
ZXdRdW90YSkKLSAgICAgICAgbV9xdW90YSA9ICpuZXdRdW90YTsKLQotICAgIGlmIChtX3N0YXRl
ID09IFN0YXRlOjpXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9yTW9y
ZVNwYWNlKSB7Ci0gICAgICAgIGF1dG8gcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLnRha2VG
aXJzdCgpOwotICAgICAgICBib29sIHNob3VsZEFsbG93UmVxdWVzdCA9ICFzaG91bGRBc2tGb3JN
b3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNlKTsKLQotICAgICAgICBSRUxFQVNFX0xPRyhT
dG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3Rz
IGZpcnN0IHJlcXVlc3QgZGVjaXNpb24gaXMgJWQiLCB0aGlzLCBzaG91bGRBbGxvd1JlcXVlc3Qp
OwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0Owot
ICAgICAgICByZXF1ZXN0LmNhbGxiYWNrKHNob3VsZEFsbG93UmVxdWVzdCA/IERlY2lzaW9uOjpH
cmFudCA6IERlY2lzaW9uOjpEZW55KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1fcGVuZGluZ1Jl
cXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvJiByZXF1ZXN0ID0gbV9wZW5kaW5nUmVx
dWVzdHMuZmlyc3QoKTsKLQotICAgICAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHJlcXVl
c3Quc3BhY2VJbmNyZWFzZSkpIHsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpN
YWtpbmdEZWNpc2lvbkZvclJlcXVlc3QpIHsKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0gU3Rh
dGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHVzZXIg
OiBjb3B5VG9WZWN0b3IobV91c2VycykpCi0gICAgICAgICAgICAgICAgICAgIHVzZXItPmNvbXB1
dGVTcGFjZVVzZWQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6
YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3Bh
Y2U7Ci0gICAgICAgICAgICB1aW50NjRfdCBzcGFjZUluY3JlYXNlID0gMDsKLSAgICAgICAgICAg
IGZvciAoYXV0byYgcGVuZGluZ1JlcXVlc3QgOiBtX3BlbmRpbmdSZXF1ZXN0cykKLSAgICAgICAg
ICAgICAgICBzcGFjZUluY3JlYXNlICs9IHBlbmRpbmdSZXF1ZXN0LnNwYWNlSW5jcmVhc2U7Ci0g
ICAgICAgICAgICBhc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lz
aW9uRm9yUmVxdWVzdDsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCkuY2Fs
bGJhY2soRGVjaXNpb246OkdyYW50KTsKLSAgICB9CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9x
dW90YUNvdW50RG93bkxvY2spOworICAgIG1fcXVvdGEgPSBtX2luaXRpYWxRdW90YTsKKyAgICBt
X3F1b3RhQ291bnREb3duID0gMDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAppbmRleCAwOTU2NjMwNmY1
NTkxYWJiNTlkMGFmZDhlZWE0ODY3OWE1ZjZjNjNjLi41OTliODNkMWY2NjI2OGFhZGZiNDQ4ZGFk
YTFlM2IyZjJiOGE3ZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VRdW90YU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90
YU1hbmFnZXIuaApAQCAtMjUsNzcgKzI1LDU2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVk
ZSAiQ2xpZW50T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAj
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1dvcmtRdWV1ZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFN0b3JhZ2VRdW90
YVVzZXI7Ci0KLWNsYXNzIFN0b3JhZ2VRdW90YU1hbmFnZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQ
dHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4geworY2xhc3MgU3RvcmFnZVF1b3RhTWFuYWdlciA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTdG9yYWdlUXVvdGFNYW5hZ2VyPiwgcHVibGljIENh
bk1ha2VXZWFrUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICB1c2luZyBTcGFjZUluY3JlYXNlUmVxdWVzdGVyID0gV1RG
OjpGdW5jdGlvbjx2b2lkKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVp
bnQ2NF90IHNwYWNlSW5jcmVhc2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8dWlu
dDY0X3Q+KT4mJik+OwotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFNw
YWNlSW5jcmVhc2VSZXF1ZXN0ZXImJiBzcGFjZUluY3JlYXNlUmVxdWVzdGVyKQotICAgICAgICA6
IG1fcXVvdGEocXVvdGEpCi0gICAgICAgICwgbV9zcGFjZUluY3JlYXNlUmVxdWVzdGVyKFdURk1v
dmUoc3BhY2VJbmNyZWFzZVJlcXVlc3RlcikpCi0gICAgewotICAgIH0KLSAgICBXRUJDT1JFX0VY
UE9SVCB+U3RvcmFnZVF1b3RhTWFuYWdlcigpOworICAgIHVzaW5nIFVzYWdlR2V0dGVyID0gV1RG
OjpGdW5jdGlvbjx1aW50NjRfdCgpPjsKKyAgICB1c2luZyBRdW90YUluY3JlYXNlUmVxdWVzdGVy
ID0gV1RGOjpGdW5jdGlvbjx2b2lkKHVpbnQ2NF90IGN1cnJlbnRRdW90YSwgdWludDY0X3QgY3Vy
cmVudFVzYWdlLCB1aW50NjRfdCByZXF1ZXN0ZWRJbmNyZWFzZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmKT47CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBjcmVhdGUodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0
dGVyJiYsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJik7CiAKICAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGFGcm9tUGVyT3JpZ2luUXVvdGEodWludDY0
X3QgcXVvdGEpIHsgcmV0dXJuIHF1b3RhIC8gMTA7IH0KLQogICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludDY0X3QgZGVmYXVsdFF1b3RhKCkgeyByZXR1cm4gMTAwMCAqIE1COyB9CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkgeyByZXR1cm4gZGVm
YXVsdFRoaXJkUGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YShkZWZhdWx0UXVvdGEoKSk7IH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkVXNlcihTdG9yYWdlUXVvdGFVc2VyJik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2VyKFN0b3JhZ2VRdW90YVVzZXImKTsKLQog
ICAgIGVudW0gY2xhc3MgRGVjaXNpb24geyBEZW55LCBHcmFudCB9OwogICAgIHVzaW5nIFJlcXVl
c3RDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRGVjaXNpb24pPjsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHJlcXVlc3RTcGFjZSh1aW50NjRfdCwgUmVxdWVzdENhbGxiYWNrJiYp
OwotICAgIHZvaWQgcmVzZXRRdW90YSh1aW50NjRfdCBuZXdRdW90YSkgeyBtX3F1b3RhID0gbmV3
UXVvdGE7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcXVlc3RTcGFjZU9uTWFpblRocmVh
ZCh1aW50NjRfdCwgUmVxdWVzdENhbGxiYWNrJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIERlY2lz
aW9uIHJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCh1aW50NjRfdCk7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKLQotICAgIGVu
dW0gY2xhc3MgU3RhdGUgewotICAgICAgICBVbmluaXRpYWxpemVkLAotICAgICAgICBDb21wdXRp
bmdTcGFjZVVzZWQsCi0gICAgICAgIFdhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UsCi0g
ICAgICAgIEFza2luZ0Zvck1vcmVTcGFjZSwKLSAgICAgICAgTWFraW5nRGVjaXNpb25Gb3JSZXF1
ZXN0LAotICAgIH07Ci0gICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9
CisgICAgLy8gVGVzdCBvbmx5LgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRRdW90YVVw
ZGF0ZWRCYXNlZE9uVXNhZ2UoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0UXVvdGEo
KTsKIAogcHJpdmF0ZToKLSAgICB1aW50NjRfdCBzcGFjZVVzYWdlKCkgY29uc3Q7Ci0gICAgYm9v
bCBzaG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3Q7Ci0g
ICAgdm9pZCBhc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSk7Ci0KLSAgICB2
b2lkIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBhc2tVc2VyVG9Jbml0aWFs
aXplKFN0b3JhZ2VRdW90YVVzZXImKTsKKyAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKHVpbnQ2NF90
IHF1b3RhLCBVc2FnZUdldHRlciYmLCBRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYpOworICAgIGJv
b2wgdHJ5R3JhbnRSZXF1ZXN0KHVpbnQ2NF90KTsKIAotICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdS
ZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4pOworICAgIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9u
VXNhZ2UoKTsKIAorICAgIExvY2sgbV9xdW90YUNvdW50RG93bkxvY2s7CisgICAgdWludDY0X3Qg
bV9xdW90YUNvdW50RG93biB7IDAgfTsKICAgICB1aW50NjRfdCBtX3F1b3RhIHsgMCB9OworICAg
IHVpbnQ2NF90IG1fdXNhZ2UgeyAwIH07CiAKLSAgICBTcGFjZUluY3JlYXNlUmVxdWVzdGVyIG1f
c3BhY2VJbmNyZWFzZVJlcXVlc3RlcjsKKyAgICBVc2FnZUdldHRlciBtX3VzYWdlR2V0dGVyOwor
ICAgIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgbV9xdW90YUluY3JlYXNlUmVxdWVzdGVyOwogCi0g
ICAgZW51bSBjbGFzcyBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQgeyBObywgWWVzIH07Ci0gICAgSGFz
aE1hcDxTdG9yYWdlUXVvdGFVc2VyKiwgV2hlbkluaXRpYWxpemVkQ2FsbGVkPiBtX3BlbmRpbmdJ
bml0aWFsaXphdGlvblVzZXJzOwotICAgIEhhc2hTZXQ8U3RvcmFnZVF1b3RhVXNlcio+IG1fdXNl
cnM7CisgICAgRGVxdWU8UmVxdWVzdENhbGxiYWNrPiBtX2NhbGxiYWNrczsKKyAgICBSZWY8V29y
a1F1ZXVlPiBtX3dvcmtRdWV1ZTsKIAotICAgIHN0cnVjdCBQZW5kaW5nUmVxdWVzdCB7Ci0gICAg
ICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2U7Ci0gICAgICAgIFJlcXVlc3RDYWxsYmFjayBjYWxs
YmFjazsKLSAgICB9OwotICAgIERlcXVlPFBlbmRpbmdSZXF1ZXN0PiBtX3BlbmRpbmdSZXF1ZXN0
czsKKyAgICBib29sIG1fcXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlIHsgZmFsc2UgfTsKIAotICAg
IFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6VW5pbml0aWFsaXplZCB9OworICAgIC8vIFRlc3Qgb25s
eS4KKyAgICB1aW50NjRfdCBtX2luaXRpYWxRdW90YSB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1
b3RhVXNlci5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MTBjZWVjNjBjNWRlNTBjNjA5ZDIzMWIwZjBk
Zjk2NzQ5NDk0MjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTdG9yYWdlUXVvdGFVc2VyIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5TdG9yYWdlUXVvdGFVc2VyKCkgPSBkZWZhdWx0OwotCi0gICAg
dmlydHVhbCB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGNvbXB1dGVTcGFjZVVzZWQoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIHdoZW5Jbml0aWFsaXpl
ZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIHsgY2FsbGJhY2soKTsgfQot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA1ZjIzY2M2NmFhMTFmN2QyOGU3NjE1Y2Ni
ODUxMzY3YzIwMzE1YmUzLi42NzY3MjZhMTY2YmY2Y2VlM2NlMjM0ZjkxOWM0MmNlMTI5YjA2NDFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNw
cApAQCAtNjUsNiArNjUsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKICNpbmNs
dWRlICJXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRh
VHlwZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Db29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ROUy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzLmg+CkBAIC0zMTYsOCArMzE3LDEyIEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycyYmCiAgICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9u
SUQ7CiAgICAgc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoKnRo
aXMsIFdURk1vdmUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMpKSk7CiAKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2VyKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5w
ZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOworCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQs
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgc2V0U2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXJJREJSb290UGF0aChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtMzI2LDcgKzMzMSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyYmCiAgICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVu
YWJsZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKICAgICB9CiAjZW5kaWYKLSAgICBpbml0aWFsaXplU3RvcmFnZVF1b3RhKHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAgICAgbV9zdG9yYWdlTWFu
YWdlclNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIApAQCAtNDM0
LDI4ICs0MzgsMzkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFs
cygpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogeworICAgIGF1dG8gc2Vzc2lvbklEID0g
cGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOworCisgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0
ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5KTsKKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIGFkZElu
ZGV4ZWREYXRhYmFzZVNlc3Npb24ocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
c2Vzc2lvbklELCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGFkZEluZGV4
ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeSwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOworICAgIHNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoc2Vzc2lv
bklELCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBpZiAocGFyZW50UHJvY2Vzc0hhc1NlcnZpY2VX
b3JrZXJFbnRpdGxlbWVudCgpKQotICAgICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihwYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIHBhcmFtZXRlcnMuc2Vy
dmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBh
ZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuc2VydmljZVdvcmtl
clByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCiAKLSAgICBtX3N0
b3JhZ2VNYW5hZ2VyU2V0LT5hZGQocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
c2Vzc2lvbklELCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5s
b2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaW5pdGlhbGl6ZVN0
b3JhZ2VRdW90YShwYXJhbWV0ZXJzKTsKKyAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vz
c2lvbklELCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2Nh
bFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCiAgICAgUmVtb3RlTmV0d29ya2lu
Z0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVN0b3JhZ2VR
dW90YShjb25zdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3ZvaWQg
TmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhp
cmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgpCiB7Ci0gICAgYXV0byYg
bWFuYWdlcnMgPSAgbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUocGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklELCBbXSB7Ci0gICAgICAgIHJldHVybiBTdG9y
YWdlUXVvdGFNYW5hZ2VycyB7IH07Ci0gICAgfSkuaXRlcmF0b3ItPnZhbHVlOwotICAgIG1hbmFn
ZXJzLnNldERlZmF1bHRRdW90YXMocGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSk7CisgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBhdXRvW2l0
ZXIsIGlzTmV3RW50cnldID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuYWRkKHNlc3Np
b25JRCwgbnVsbHB0cik7CisgICAgaWYgKGlzTmV3RW50cnkpCisgICAgICAgIGl0ZXItPnZhbHVl
ID0gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcj4oY2FjaGVSb290UGF0aCwg
ZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKTsKK30KKwordm9pZCBOZXR3b3Jr
UHJvY2Vzczo6cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXJzTG9jayk7CisgICAgQVNTRVJUKG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJz
LmNvbnRhaW5zKHNlc3Npb25JRCkpOworICAgIG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJz
LnJlbW92ZShzZXNzaW9uSUQpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0
d29ya1Nlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChOZXR3b3JrU2Vzc2lvbiYpPiYgZnVuY3Rv
cikKQEAgLTU3Niw4ICs1OTEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lv
bihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAjZW5kaWYKIAogICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPnJlbW92ZShzZXNzaW9uSUQpOwotCi0gICAgbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5y
ZW1vdmUoc2Vzc2lvbklEKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCkBAIC0xNDY4LDkgKzE0ODEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJz
aXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaQogICAgIGlm
ICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlKSAm
JiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIGNsZWFyRGlza0NhY2hlKG1vZGlm
aWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlciA9IFdURk1vdmUoY2xlYXJUYXNrc0hhbmRsZXIp
XSB7IH0pOwogCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFU
eXBlOjpJbmRleGVkREJEYXRhYmFzZXMpIHx8IHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vi
c2l0ZURhdGFUeXBlOjpET01DYWNoZSkpCi0gICAgICAgIGNsZWFyU3RvcmFnZVF1b3RhKHNlc3Np
b25JRCk7Ci0KICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OkFkQ2xpY2tBdHRyaWJ1dGlvbnMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vz
c2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgICAgICBuZXR3
b3JrU2Vzc2lvbi0+Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oKTsKQEAgLTE1NjMsMTkgKzE1NzMs
NiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpbwogICAgICAgICB9CiAgICAgICAgIFdlYkNvcmU6
OkNyZWRlbnRpYWxTdG9yYWdlOjpyZW1vdmVTZXNzaW9uQ3JlZGVudGlhbHNXaXRoT3JpZ2lucyhv
cmlnaW5EYXRhcyk7CiAgICAgfQotCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCBzdG9yYWdlIHF1
b3RhIGNsZWFyaW5nIGZvciB0aGVzZSBvcmlnaW5zLgotfQotCi12b2lkIE5ldHdvcmtQcm9jZXNz
OjpjbGVhclN0b3JhZ2VRdW90YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCi17Ci0gICAgYXV0
byBpdGVyYXRvciA9IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOwotICAg
IGlmIChpdGVyYXRvciA9PSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmVuZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvJiBtYW5hZ2VycyA9IGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBmb3Ig
KGF1dG8mIG1hbmFnZXIgOiBtYW5hZ2Vycy5tYW5hZ2Vyc1Blck9yaWdpbigpKQotICAgICAgICBt
YW5hZ2VyLnZhbHVlLT5yZXNldFF1b3RhKG1hbmFnZXJzLmRlZmF1bHRRdW90YShtYW5hZ2VyLmtl
eSkpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIyMTcs
MTAgKzIyMTQsMTAgQEAgUmVmPElEQlNlcnZlcjo6SURCU2VydmVyPiBOZXR3b3JrUHJvY2Vzczo6
Y3JlYXRlSURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb24KICAgICAgICAgcGF0aCA9IG1f
aWRiRGF0YWJhc2VQYXRocy5nZXQoc2Vzc2lvbklEKTsKICAgICB9CiAKLSAgICByZXR1cm4gSURC
U2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIHBhdGgsIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKHRoaXMpXShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IGF1
dG8mIG9yaWdpbikgLT4gU3RvcmFnZVF1b3RhTWFuYWdlciogeworICAgIHJldHVybiBJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgcGF0aCwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRF0oY29uc3QgYXV0byYgb3JpZ2luKSAtPiBSZWZQ
dHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gewogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiAmdGhpcy0+c3RvcmFnZVF1b3Rh
TWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbik7CisgICAgICAgIHJldHVybiBzdG9yYWdlUXVvdGFN
YW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsKICAgICB9KTsKIH0KIApAQCAtMjMwOSw2ICsyMzA2
LDE1IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmCiAgICAgICAgICAgICBwb3N0U3RvcmFnZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVBh
dGhFeGlzdHMsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSkpOwogICAgIH0KIH0KKwordm9pZCBO
ZXR3b3JrUHJvY2Vzczo6c2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJJREJSb290UGF0aChQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgaWRiUm9vdFBhdGgpCit7Cisg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsK
KyAgICBhdXRvKiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fc2Vzc2lvblN0b3JhZ2VR
dW90YU1hbmFnZXJzLmdldChzZXNzaW9uSUQpOworICAgIEFTU0VSVChzZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlcik7CisgICAgc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPnNldElEQlJvb3RQ
YXRoKGlkYlJvb3RQYXRoKTsKK30KKwogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzMjUsOSArMjMzMSwxNCBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFn
ZSgpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2VG
b3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4pCiB7Ci0gICAgYXV0byYgbWFuYWdlciA9IHN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lv
bklELCBvcmlnaW4pOwotICAgIG1hbmFnZXIucmVzZXRRdW90YShtX3N0b3JhZ2VRdW90YU1hbmFn
ZXJzLmZpbmQoc2Vzc2lvbklEKS0+dmFsdWUuZGVmYXVsdFF1b3RhKG9yaWdpbikpOwotICAgIG1h
bmFnZXIudXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOworICAgIGF1dG8gc3RvcmFnZVF1
b3RhTWFuYWdlciA9IHRoaXMtPnN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBvcmlnaW4p
OworICAgIHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdl
KCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlc2V0UXVvdGEoKQoreworICAgIGZvciAo
YXV0byYgc3RvcmFnZVF1b3RhTWFuYWdlciA6IGV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMo
KSkKKyAgICAgICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVzZXRRdW90YSgpOwogfQogCiAjaWYg
RU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKQEAgLTI0MDQsNjIgKzI0MTUsNDggQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6cmVxdWVzdFN0b3JhZ2VTcGFjZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IENsaWVudE8KICAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OlJlcXVlc3RTdG9yYWdl
U3BhY2UgeyBzZXNzaW9uSUQsIG9yaWdpbiwgcXVvdGEsIGN1cnJlbnRTaXplLCBzcGFjZVJlcXVp
cmVkIH0sIFdURk1vdmUoY2FsbGJhY2spLCAwKTsKIH0KIAotY2xhc3MgUXVvdGFVc2VySW5pdGlh
bGl6ZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlciB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUXVvdGFVc2VySW5p
dGlhbGl6ZXIoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlcikKLSAgICAgICAgOiBtX21hbmFn
ZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCi0gICAgewotICAgICAgICBtYW5hZ2VyLmFkZFVzZXIo
KnRoaXMpOwotICAgIH0KLQotICAgIH5RdW90YVVzZXJJbml0aWFsaXplcigpCi0gICAgewotICAg
ICAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICAgICAgbV9tYW5hZ2VyLT5yZW1vdmVVc2VyKCp0
aGlzKTsKLSAgICAgICAgaWYgKG1fY2FsbGJhY2spCi0gICAgICAgICAgICBtX2NhbGxiYWNrKCk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIC8vIFN0b3JhZ2VRdW90YVVzZXIgQVBJLgotICAgIHVp
bnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorUmVmUHRyPFN0b3JhZ2VRdW90
YU1hbmFnZXI+IE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCit7CisgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBhdXRv
KiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXJzLmdldChzZXNzaW9uSUQpOworICAgIGlmICghc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSBmaW5hbAotICAgIHsKLSAgICAgICAg
bV9jYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwotICAgIH0KKyAgICBTdHJpbmcgaWRiUm9v
dFBhdGg7CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisgICAgaWRiUm9vdFBhdGggPSBz
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+aWRiUm9vdFBhdGgoKTsKKyNlbmRpZgorICAgIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OlVzYWdlR2V0dGVyIHVzYWdlR2V0dGVyID0gW2NhY2hlUm9vdFBh
dGggPSBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+Y2FjaGVSb290UGF0aCgpLCBpZGJSb290
UGF0aCwgb3JpZ2luXSgpIHsKKyAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7ICAgIAog
Ci0gICAgV2Vha1B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBtX21hbmFnZXI7Ci0gICAgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiBtX2NhbGxiYWNrOwotfTsKKyAgICAgICAgdWludDY0X3QgdXNh
Z2UgPSAwOworICAgICAgICB1c2FnZSArPSBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6ZGlza1VzYWdl
KGNhY2hlUm9vdFBhdGgsIG9yaWdpbik7CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisg
ICAgICAgIHVzYWdlICs9IElEQlNlcnZlcjo6SURCU2VydmVyOjpkaXNrVXNhZ2UoaWRiUm9vdFBh
dGgsIG9yaWdpbik7CisjZW5kaWYKIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVF1
b3RhVXNlcnMoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlciwgUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25J
RCwgb3JpZ2luLCB1c2VyID0gbWFrZVVuaXF1ZTxRdW90YVVzZXJJbml0aWFsaXplcj4obWFuYWdl
cildKCkgbXV0YWJsZSB7CisgICAgICAgIHJldHVybiB1c2FnZTsKKyAgICB9OworICAgIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OlF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgcXVvdGFJbmNyZWFzZVJlcXVl
c3RlciA9IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc2Vzc2lvbklELCBv
cmlnaW5dICh1aW50NjRfdCBjdXJyZW50UXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWlu
dDY0X3QgcmVxdWVzdGVkSW5jcmVhc2UsIGF1dG8mJiBjYWxsYmFjaykgeworICAgICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB0aGlzLT5pZGJTZXJ2ZXIoc2Vzc2lvbklEKS5pbml0aWFsaXplUXVv
dGFVc2VyKG9yaWdpbik7Ci0gICAgICAgIENhY2hlU3RvcmFnZTo6RW5naW5lOjppbml0aWFsaXpl
UXVvdGFVc2VyKCp0aGlzLCBzZXNzaW9uSUQsIG9yaWdpbiwgW3VzZXIgPSBXVEZNb3ZlKHVzZXIp
XSB7IH0pOwotICAgIH0pOworICAgICAgICAgICAgY2FsbGJhY2soeyB9KTsKKyAgICAgICAgcmVx
dWVzdFN0b3JhZ2VTcGFjZShzZXNzaW9uSUQsIG9yaWdpbiwgY3VycmVudFF1b3RhLCBjdXJyZW50
U3BhY2UsIHJlcXVlc3RlZEluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgfTsKKwor
ICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+ZW5zdXJlT3JpZ2luU3RvcmFn
ZVF1b3RhTWFuYWdlcihvcmlnaW4sIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5kZWZhdWx0
UXVvdGEob3JpZ2luKSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdURk1vdmUocXVvdGFJbmNyZWFz
ZVJlcXVlc3RlcikpOwogfQogCi1TdG9yYWdlUXVvdGFNYW5hZ2VyJiBOZXR3b3JrUHJvY2Vzczo6
c3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENsaWVu
dE9yaWdpbiYgb3JpZ2luKQorVmVjdG9yPFJlZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gTmV0
d29ya1Byb2Nlc3M6OmV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMoKQogewotICAgIGF1dG8m
IHN0b3JhZ2VRdW90YU1hbmFnZXJzID0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUoc2Vz
c2lvbklELCBbXSB7Ci0gICAgICAgIHJldHVybiBTdG9yYWdlUXVvdGFNYW5hZ2VycyB7IH07Ci0g
ICAgfSkuaXRlcmF0b3ItPnZhbHVlOwotICAgIHJldHVybiAqc3RvcmFnZVF1b3RhTWFuYWdlcnMu
bWFuYWdlcnNQZXJPcmlnaW4oKS5lbnN1cmUob3JpZ2luLCBbdGhpcywgJnN0b3JhZ2VRdW90YU1h
bmFnZXJzLCBzZXNzaW9uSUQsICZvcmlnaW5dIHsKLSAgICAgICAgYXV0byBtYW5hZ2VyID0gbWFr
ZVVuaXF1ZTxTdG9yYWdlUXVvdGFNYW5hZ2VyPihzdG9yYWdlUXVvdGFNYW5hZ2Vycy5kZWZhdWx0
UXVvdGEob3JpZ2luKSwgW3RoaXMsIHNlc3Npb25JRCwgb3JpZ2luXSh1aW50NjRfdCBxdW90YSwg
dWludDY0X3QgY3VycmVudFNwYWNlLCB1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBhdXRvIGNhbGxi
YWNrKSB7Ci0gICAgICAgICAgICB0aGlzLT5yZXF1ZXN0U3RvcmFnZVNwYWNlKHNlc3Npb25JRCwg
b3JpZ2luLCBxdW90YSwgY3VycmVudFNwYWNlLCBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxi
YWNrKSk7Ci0gICAgICAgIH0pOwotICAgICAgICBpbml0aWFsaXplUXVvdGFVc2VycygqbWFuYWdl
ciwgc2Vzc2lvbklELCBvcmlnaW4pOwotICAgICAgICByZXR1cm4gbWFuYWdlcjsKLSAgICB9KS5p
dGVyYXRvci0+dmFsdWU7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9zZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBWZWN0b3I8UmVmUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+
PiByZXN1bHQ7CisKKyAgICBmb3IgKGF1dG8mIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyIDog
bV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChh
dXRvIHN0b3JhZ2VRdW90YU1hbmFnZXIgOiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+ZXhp
c3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2VycygpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChz
dG9yYWdlUXVvdGFNYW5hZ2VyKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2lm
ICFQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaAppbmRleCBmNjJmMDFkMzgwZjQwMTA1NTJhYWQzODg5YTQ5N2Q1MTI2ZjhhMzUz
Li5kYjE5MDJhMDk1Y2MyYzFhNTM1ZTgxZTE0M2ZlYjQxZjc0ZjlmMmM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0yODQsNiArMjg0LDcg
QEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3Jh
Z2UoKTsKIAogICAgIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3Rpbmco
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHZvaWQg
cmVzZXRRdW90YSgpOwogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKICAgICB2b2lk
IGdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBm
aWxlbmFtZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXkmJik+JiYpOwpAQCAtMzI3LDcgKzMyOCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFk
Q2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBV
UkwmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIG1hcmtBZENsaWNr
QXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKIAotICAgIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXIm
IHN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBzdG9y
YWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mKTsKKyAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+PiBl
eGlzdGluZ1N0b3JhZ2VRdW90YU1hbmFnZXJzKCk7CiAKICAgICB2b2lkIGFkZEtlcHRBbGl2ZUxv
YWQoUmVmPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4mJik7CiAgICAgdm9pZCByZW1vdmVLZXB0QWxp
dmVMb2FkKE5ldHdvcmtSZXNvdXJjZUxvYWRlciYpOwpAQCAtNDQyLDYgKzQ0NCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBjb2xsZWN0SW5kZXhlZERhdGFiYXNlT3JpZ2luc0ZvclZlcnNpb24oY29u
c3QgU3RyaW5nJiwgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAgICAg
SGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGluZGV4ZWREYXRhYmFzZU9yaWdp
bnMoY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICBSZWY8V2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI+IGNyZWF0ZUlEQlNlcnZlcihQQUw6OlNlc3Npb25JRCk7CisgICAgdm9pZCBzZXRTZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKFBBTDo6U2Vzc2lvbklELCBjb25zdCBT
dHJpbmcmIGlkYlJvb3RQYXRoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpAQCAtNDYxLDggKzQ2NCw0NCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGVyZm9ybU5leHRTdG9y
YWdlVGFzaygpOwogICAgIHZvaWQgZW5zdXJlUGF0aEV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgp
OwogCi0gICAgdm9pZCBjbGVhclN0b3JhZ2VRdW90YShQQUw6OlNlc3Npb25JRCk7Ci0gICAgdm9p
ZCBpbml0aWFsaXplU3RvcmFnZVF1b3RhKGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
Jik7CisgICAgY2xhc3MgU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgeworICAgICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VyKGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0aCwgdWludDY0X3QgZGVmYXVs
dFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKQorICAgICAgICAgICAgOiBt
X2NhY2hlUm9vdFBhdGgoY2FjaGVSb290UGF0aCkKKyAgICAgICAgICAgICwgbV9kZWZhdWx0UXVv
dGEoZGVmYXVsdFF1b3RhKQorICAgICAgICAgICAgLCBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGEo
ZGVmYXVsdFRoaXJkUGFydHlRdW90YSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHVp
bnQ2NF90IGRlZmF1bHRRdW90YShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikg
Y29uc3QgeyByZXR1cm4gb3JpZ2luLnRvcE9yaWdpbiA9PSBvcmlnaW4uY2xpZW50T3JpZ2luID8g
bV9kZWZhdWx0UXVvdGEgOiBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGE7IH0KKworICAgICAgICBS
ZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gZW5zdXJlT3JpZ2luU3RvcmFnZVF1
b3RhTWFuYWdlcihXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luLCB1aW50NjRfdCBxdW90YSwg
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6VXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwg
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6UXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1
b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG9baXRlciwg
aXNOZXdFbnRyeV0gPSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmFkZChvcmlnaW4sIG51bGxwdHIp
OworICAgICAgICAgICAgaWYgKGlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgaXRlci0+dmFs
dWUgPSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUocXVvdGEsIFdURk1vdmUo
dXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKTsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlUmVmUHRyKCppdGVyLT52YWx1ZSk7CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvIGV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMoKSB7IHJldHVybiBtX3N0b3JhZ2VR
dW90YU1hbmFnZXJzLnZhbHVlcygpOyB9CisKKyAgICAgICAgY29uc3QgU3RyaW5nJiBjYWNoZVJv
b3RQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZVJvb3RQYXRoOyB9CisjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisgICAgICAgIHZvaWQgc2V0SURCUm9vdFBhdGgoY29uc3QgU3RyaW5n
JiBpZGJSb290UGF0aCkgeyBtX2lkYlJvb3RQYXRoID0gaWRiUm9vdFBhdGg7IH0KKyAgICAgICAg
Y29uc3QgU3RyaW5nJiBpZGJSb290UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1faWRiUm9vdFBhdGg7
IH0KKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RyaW5nIG1fY2FjaGVSb290UGF0
aDsKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICAgICAgU3RyaW5nIG1faWRiUm9v
dFBhdGg7CisjZW5kaWYKKyAgICAgICAgdWludDY0X3QgbV9kZWZhdWx0UXVvdGEgeyBXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSB9OworICAgICAgICB1aW50NjRf
dCBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGEgeyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkgfTsKKyAgICAgICAgSGFzaE1hcDxXZWJDb3JlOjpD
bGllbnRPcmlnaW4sIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9zdG9y
YWdlUXVvdGFNYW5hZ2VyczsKKyAgICB9OworICAgIHZvaWQgYWRkU2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIHVpbnQ2NF90IGRlZmF1bHRRdW90YSwgdWludDY0X3Qg
ZGVmYXVsdFRoaXJkUGFydHlRdW90YSwgY29uc3QgU3RyaW5nJiBjYWNoZVJvb3RQYXRoKTsKKyAg
ICB2b2lkIHJlbW92ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEKTsK
IAogICAgIC8vIENvbm5lY3Rpb25zIHRvIFdlYlByb2Nlc3Nlcy4KICAgICBIYXNoTWFwPFdlYkNv
cmU6OlByb2Nlc3NJZGVudGlmaWVyLCBSZWY8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+
PiBtX3dlYlByb2Nlc3NDb25uZWN0aW9uczsKQEAgLTUzMywyMyArNTcyLDggQEAgcHJpdmF0ZToK
ICAgICBib29sIG1faXNJVFBEYXRhYmFzZUVuYWJsZWQgeyBmYWxzZSB9OwogI2VuZGlmCiAgICAg
Ci0gICAgY2xhc3MgU3RvcmFnZVF1b3RhTWFuYWdlcnMgewotICAgIHB1YmxpYzoKLSAgICAgICAg
dWludDY0X3QgZGVmYXVsdFF1b3RhKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2lu
KSBjb25zdCB7IHJldHVybiBvcmlnaW4udG9wT3JpZ2luID09IG9yaWdpbi5jbGllbnRPcmlnaW4g
PyBtX2RlZmF1bHRRdW90YSA6IG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YTsgfQotICAgICAgICB2
b2lkIHNldERlZmF1bHRRdW90YXModWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZh
dWx0VGhpcmRQYXJ0eVF1b3RhKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2RlZmF1bHRRdW90
YSA9IGRlZmF1bHRRdW90YTsKLSAgICAgICAgICAgIG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YSA9
IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGE7Ci0gICAgICAgIH0KLQotICAgICAgICBIYXNoTWFwPFdl
YkNvcmU6OkNsaWVudE9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI+PiYgbWFuYWdlcnNQZXJPcmlnaW4oKSB7IHJldHVybiBtX21hbmFnZXJzUGVyT3Jp
Z2luOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB1aW50NjRfdCBtX2RlZmF1bHRRdW90YSB7
IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpIH07Ci0gICAgICAg
IHVpbnQ2NF90IG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OmRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB9OwotICAgICAgICBIYXNoTWFwPFdl
YkNvcmU6OkNsaWVudE9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI+PiBtX21hbmFnZXJzUGVyT3JpZ2luOwotICAgIH07Ci0gICAgSGFzaE1hcDxQQUw6
OlNlc3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlcnM+IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnM7
CisgICAgTG9jayBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2s7CisgICAgSGFzaE1h
cDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VyPj4gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnM7CiAKICAgICBPcHRpb25TZXQ8TmV0
d29ya0NhY2hlOjpDYWNoZU9wdGlvbj4gbV9jYWNoZU9wdGlvbnM7CiAgICAgV2ViQ29yZTo6TWVz
c2FnZVBvcnRDaGFubmVsUmVnaXN0cnkgbV9tZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluCmluZGV4IDM2Nzc2Nzc0ODBiODJhNDQzM2Y4NWQyODJiM2U1ZmI4MDZhOTFlNjMu
LjU4ZmU1YzlmNjAxODM2YWVmNTY4ZDliMzk3ODUyYTk0MWVjNTIwM2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5p
bgpAQCAtMTUyLDYgKzE1Miw3IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2FjeVJl
Y2VpdmVyIHsKICAgICBDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpCiAK
ICAgICBVcGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIHN0cnVjdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luKQorICAgIFJl
c2V0UXVvdGEoKQogCiAgICAgU3RvcmVBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb24gYWRDbGlja0F0dHJpYnV0aW9u
KQogICAgIER1bXBBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAt
PiAoU3RyaW5nIGFkQ2xpY2tBdHRyaWJ1dGlvblN0YXRlKSBBc3luYwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3Bw
CmluZGV4IGZmOGE4YzVmNjI1MGYyZGMwNzk1YTI3NWQ5MmI5YzhmYjFkMTQxZmEuLmE3NWFhOGIx
NTljNzAwZDg1ZTE3OTdkYTA5ZTI2ZGE3Mzg0MzQ0YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKQEAg
LTQ4LDYgKzQ4LDggQEAgdXNpbmcgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZTsKIAogc3RhdGljIExv
Y2sgZ2xvYmFsU2l6ZUZpbGVMb2NrOwogCitzdGF0aWMgTG9jayBnbG9iYWxTaXplZmlsZUxvY2s7
CisKIFN0cmluZyBFbmdpbmU6OmNhY2hlc1Jvb3RQYXRoKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYgb3JpZ2luKQogewogICAgIGlmICghc2hvdWxkUGVyc2lzdCgpIHx8ICFtX3NhbHQpCkBA
IC0xOTIsMTMgKzE5NCw2NSBAQCB2b2lkIEVuZ2luZTo6Y2xlYXJDYWNoZXNGb3JPcmlnaW4oTmV0
d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBQQUw6OlNlc3Npb25JRAogICAgIH0pOwogfQog
Ci12b2lkIEVuZ2luZTo6aW5pdGlhbGl6ZVF1b3RhVXNlcihOZXR3b3JrUHJvY2VzcyYgbmV0d29y
a1Byb2Nlc3MsIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50
T3JpZ2luJiBjbGllbnRPcmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3N0YXRpYyB1aW50NjRfdCBnZXREaXJlY3RvcnlTaXplKGNvbnN0IFN0cmlu
ZyYgZGlyZWN0b3J5UGF0aCkKIHsKLSAgICBmcm9tKG5ldHdvcmtQcm9jZXNzLCBzZXNzaW9uSUQs
IFtjbGllbnRPcmlnaW4sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKGF1dG8mIGVuZ2luZSkgbXV0YWJsZSB7Ci0gICAgICAgIGVuZ2luZS5yZWFkQ2FjaGVz
RnJvbURpc2soY2xpZW50T3JpZ2luLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oYXV0byYmIGNhY2hlc09yRXJyb3IpIG11dGFibGUgewotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7CisgICAgdWludDY0
X3QgZGlyZWN0b3J5U2l6ZSA9IDA7CisgICAgRGVxdWU8U3RyaW5nPiBwYXRoczsKKyAgICBwYXRo
cy5hcHBlbmQoZGlyZWN0b3J5UGF0aCk7CisgICAgd2hpbGUgKCFwYXRocy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgYXV0byBwYXRoID0gcGF0aHMudGFrZUZpcnN0KCk7CisgICAgICAgIGlmIChGaWxl
U3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkocGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3lt
Ym9saWNMaW5rczo6Tm8pKSB7CisgICAgICAgICAgICBhdXRvIG5ld1BhdGhzID0gRmlsZVN5c3Rl
bTo6bGlzdERpcmVjdG9yeShwYXRoLCAiKiJfcyk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIG5l
d1BhdGggOiBuZXdQYXRocykgeworICAgICAgICAgICAgICAgIC8vIEZpbGVzIGluIEJsb2JzIGRp
cmVjdG9yeSBhcmUgaGFyZCBsaW5rLgorICAgICAgICAgICAgICAgIGF1dG8gZmlsZU5hbWUgPSBG
aWxlU3lzdGVtOjpsYXN0Q29tcG9uZW50T2ZQYXRoSWdub3JpbmdUcmFpbGluZ1NsYXNoKG5ld1Bh
dGgpOworICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZSA9PSAiQmxvYnMiKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBwYXRocy5hcHBlbmQobmV3UGF0
aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgICAgIEZpbGVTeXN0ZW06OmdldEZp
bGVTaXplKHBhdGgsIGZpbGVTaXplKTsKKyAgICAgICAgZGlyZWN0b3J5U2l6ZSArPSBmaWxlU2l6
ZTsKKyAgICB9CisgICAgcmV0dXJuIGRpcmVjdG9yeVNpemU7Cit9CisKK3VpbnQ2NF90IEVuZ2lu
ZTo6ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYgb3JpZ2luKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlm
IChyb290UGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgU3RyaW5nIHNh
bHRQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJvb3RQYXRoLCAi
c2FsdCJfcyk7CisgICAgYXV0byBzYWx0ID0gcmVhZE9yTWFrZVNhbHQoc2FsdFBhdGgpOworICAg
IGlmICghc2FsdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBPciB0cmF2ZXJzZSBhbGwg
ZGlyZWN0b3J5CisgICAgS2V5IGtleShvcmlnaW4udG9wT3JpZ2luLnRvU3RyaW5nKCksIG9yaWdp
bi5jbGllbnRPcmlnaW4udG9TdHJpbmcoKSwgeyB9LCB7IH0sICpzYWx0KTsKKyAgICBTdHJpbmcg
ZGlyZWN0b3J5UGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyb290
UGF0aCwga2V5Lmhhc2hBc1N0cmluZygpKTsKKworICAgIC8vIFJlYWQgc2l6ZWVzdGltYXRlIGZp
bGUKKyAgICBTdHJpbmcgc2l6ZUZpbGVQYXRoID0gQ2FjaGVzOjpjYWNoZXNTaXplRmlsZW5hbWUo
ZGlyZWN0b3J5UGF0aCk7CisgICAgaWYgKGF1dG8gcmVjb3JkZWRTaXplID0gcmVhZFNpemVGaWxl
KHNpemVGaWxlUGF0aCkpCisgICAgICAgIHJldHVybiAqcmVjb3JkZWRTaXplOworCisgICAgcmV0
dXJuIGdldERpcmVjdG9yeVNpemUoZGlyZWN0b3J5UGF0aCk7Cit9CisKK3ZvaWQgRW5naW5lOjpy
ZXF1ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlUmVx
dWVzdGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OkRlY2lzaW9uKT4mJiBjYWxsYmFjaykKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3Mp
CisgICAgICAgIGNhbGxiYWNrKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
OjpEZW55KTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBzdG9y
YWdlUXVvdGFNYW5hZ2VyID0gbV9uZXR3b3JrUHJvY2Vzcy0+c3RvcmFnZVF1b3RhTWFuYWdlciht
X3Nlc3Npb25JRCwgb3JpZ2luKTsKKyAgICBpZiAoIXN0b3JhZ2VRdW90YU1hbmFnZXIpCisgICAg
ICAgIGNhbGxiYWNrKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55
KTsKKworICAgIHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZChz
cGFjZVJlcXVlc3RlZCwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCiBFbmdpbmU6OkVuZ2luZShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE5ldHdvcmtQcm9jZXNzJiBwcm9jZXNzLCBTdHJpbmcm
JiByb290UGF0aCkKQEAgLTMzMiw3ICszODYsNyBAQCB2b2lkIEVuZ2luZTo6cmVhZENhY2hlc0Zy
b21EaXNrKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBDYWNoZXNDYWxsYgog
CiAgICAgICAgIGF1dG8mIGNhY2hlcyA9IG1fY2FjaGVzLmVuc3VyZShvcmlnaW4sIFsmb3JpZ2lu
LCB0aGlzXSB7CiAgICAgICAgICAgICBhdXRvIHBhdGggPSBjYWNoZXNSb290UGF0aChvcmlnaW4p
OwotICAgICAgICAgICAgcmV0dXJuIENhY2hlczo6Y3JlYXRlKCp0aGlzLCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4geyBvcmlnaW4gfSwgV1RGTW92ZShwYXRoKSwgbV9uZXR3b3JrUHJvY2Vzcy0+c3Rv
cmFnZVF1b3RhTWFuYWdlcihtX3Nlc3Npb25JRCwgb3JpZ2luKSk7CisgICAgICAgICAgICByZXR1
cm4gQ2FjaGVzOjpjcmVhdGUoKnRoaXMsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IG9yaWdpbiB9
LCBXVEZNb3ZlKHBhdGgpKTsKICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgICAg
IGlmIChjYWNoZXMtPmlzSW5pdGlhbGl6ZWQoKSkgewpAQCAtNDY0LDEyICs1MTgsMTMgQEAgdm9p
ZCBFbmdpbmU6OnJlbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKICAgICB9KTsKIH0K
IAotdm9pZCBFbmdpbmU6OndyaXRlU2l6ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRf
dCBzaXplKQordm9pZCBFbmdpbmU6OndyaXRlU2l6ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCB1
aW50NjRfdCBzaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CisgICAgQ29tcGxldGlvbkhhbmRsZXJDYWxsaW5nU2NvcGUgY29tcGxldGlvbkhhbmRs
ZXJDYWxsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIGlmICghc2hvdWxkUGVy
c2lzdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2lvUXVldWUtPmRpc3BhdGNoKFtwYXRo
ID0gcGF0aC5pc29sYXRlZENvcHkoKSwgc2l6ZV0oKSB7CisgICAgbV9pb1F1ZXVlLT5kaXNwYXRj
aChbcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCksIHNpemUsIGNvbXBsZXRpb25IYW5kbGVyQ2Fs
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlckNhbGxlcildKCkgbXV0YWJsZSB7CiAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFNpemVGaWxlTG9jayk7CiAgICAgICAgIGF1dG8g
ZmlsZUhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVP
cGVuTW9kZTo6V3JpdGUpOwogICAgICAgICBhdXRvIGNsb3NlRmlsZUhhbmRsZXIgPSBtYWtlU2Nv
cGVFeGl0KFsmXSB7CkBAIC00ODAsNiArNTM1LDggQEAgdm9pZCBFbmdpbmU6OndyaXRlU2l6ZUZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCBzaXplKQogCiAgICAgICAgIEZpbGVTeXN0
ZW06OnRydW5jYXRlRmlsZShmaWxlSGFuZGxlLCAwKTsKICAgICAgICAgRmlsZVN5c3RlbTo6d3Jp
dGVUb0ZpbGUoZmlsZUhhbmRsZSwgU3RyaW5nOjpudW1iZXIoc2l6ZSkudXRmOCgpLmRhdGEoKSwg
U3RyaW5nOjpudW1iZXIoc2l6ZSkudXRmOCgpLmxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXJDYWxsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyKV0oKSBtdXRhYmxlIHsgfSk7CiAgICAgfSk7CiB9
CiAKQEAgLTUwNCw4ICs1NjEsOCBAQCBPcHRpb25hbDx1aW50NjRfdD4gRW5naW5lOjpyZWFkU2l6
ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIGlmICghV1RGOjpjb252ZXJ0U2FmZWx5KGZp
bGVTaXplLCBieXRlc1RvUmVhZCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBWZWN0b3I8Y2hhcj4gYnVmZmVyKGJ5dGVzVG9SZWFkKTsKLSAgICBzaXplX3QgdG90YWxCeXRl
c1JlYWQgPSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRhdGEo
KSwgYnVmZmVyLnNpemUoKSk7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IGJ1ZmZlcihieXRl
c1RvUmVhZCk7CisgICAgc2l6ZV90IHRvdGFsQnl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZy
b21GaWxlKGZpbGVIYW5kbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlci5kYXRhKCkp
LCBidWZmZXIuc2l6ZSgpKTsKICAgICBpZiAodG90YWxCeXRlc1JlYWQgIT0gYnl0ZXNUb1JlYWQp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmggYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oCmluZGV4IDM4ZDZm
YzEzNGZlMDBkNGIwNGYzODA4YzBiYjg5N2IzZDYyMTY1NGYuLjcxNjI3MGUwOThhNDhjYzY2NjMz
YTU5OTQzMjkzNzY5ZmNiY2M4NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaApAQCAtMjksNiArMjksNyBAQAog
I2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdG9y
YWdlUXVvdGFNYW5hZ2VyLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTc5LDEyICs4
MCwxNSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplUXVvdGFVc2VyKE5l
dHdvcmtQcm9jZXNzJiwgUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdp
biYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBzdGF0aWMgdWludDY0X3Qg
ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYpOworICAgIHZvaWQgcmVxdWVzdFNwYWNlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdp
biYsIHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNv
cmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJik7CisKICAgICBib29sIHNob3Vs
ZFBlcnNpc3QoKSBjb25zdCB7IHJldHVybiAhIW1faW9RdWV1ZTt9CiAKICAgICB2b2lkIHdyaXRl
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBOZXR3b3JrQ2FjaGU6OkRhdGEmJiwgV2ViQ29y
ZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKICAgICB2b2lkIHJlYWRG
aWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
TmV0d29ya0NhY2hlOjpEYXRhJiwgaW50IGVycm9yKT4mJik7CiAgICAgdm9pZCByZW1vdmVGaWxl
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwotICAgIHZvaWQgd3JpdGVTaXplRmlsZShjb25zdCBT
dHJpbmcmLCB1aW50NjRfdCBzaXplKTsKKyAgICB2b2lkIHdyaXRlU2l6ZUZpbGUoY29uc3QgU3Ry
aW5nJiwgdWludDY0X3Qgc2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICBz
dGF0aWMgT3B0aW9uYWw8dWludDY0X3Q+IHJlYWRTaXplRmlsZShjb25zdCBTdHJpbmcmKTsKIAog
ICAgIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RQYXRoOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCmluZGV4IDZmYzUzZTAzYzRkNjdhMDBmYTkxZjJi
M2ZjZmJkZDdlMTE5NjhjZTMuLjJjMDMzYzRmMGExMTIwNjZlYWYyYjc3ZTIyYjMxMGFhMmQxNGU3
YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCkBAIC00MDUsNyArNDA1LDcgQEAgdm9p
ZCBDYWNoZTo6cHV0KFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnND
YWxsYmFjayYmIGNhbGxiYWNrKQogICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpPcGVuKTsK
IAogICAgIFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb25zIG9wdGlvbnM7Ci0gICAgdWludDY0X3Qg
c3BhY2VSZXF1aXJlZCA9IDA7CisgICAgaW50NjRfdCBzcGFjZVJlcXVpcmVkID0gMDsKIAogICAg
IGZvciAoYXV0byYgcmVjb3JkIDogcmVjb3JkcykgewogICAgICAgICBhdXRvKiBzYW1lVVJMUmVj
b3JkcyA9IHJlY29yZHNGcm9tVVJMKHJlY29yZC5yZXF1ZXN0LnVybCgpKTsKQEAgLTQxNyw2ICs0
MTcsNyBAQCB2b2lkIENhY2hlOjpwdXQoVmVjdG9yPFJlY29yZD4mJiByZWNvcmRzLCBSZWNvcmRJ
ZGVudGlmaWVyc0NhbGxiYWNrJiYgY2FsbGJhY2spCiAgICAgICAgIGlmIChwb3NpdGlvbiAhPSBu
b3RGb3VuZCkKICAgICAgICAgICAgIHNwYWNlUmVxdWlyZWQgLT0gc2FtZVVSTFJlY29yZHMtPmF0
KHBvc2l0aW9uKS5zaXplOwogICAgIH0KKyAgICBzcGFjZVJlcXVpcmVkID0gc3BhY2VSZXF1aXJl
ZCA8IDA/IDAgOiBzcGFjZVJlcXVpcmVkOwogCiAgICAgbV9jYWNoZXMucmVxdWVzdFNwYWNlKHNw
YWNlUmVxdWlyZWQsIFtjYWNoZXMgPSBtYWtlUmVmKG1fY2FjaGVzKSwgaWRlbnRpZmllciA9IG1f
aWRlbnRpZmllciwgcmVjb3JkcyA9IFdURk1vdmUocmVjb3JkcyksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKE9wdGlvbmFsPERPTUNhY2hlRW5naW5lOjpFcnJvcj4mJiBlcnJvcikgbXV0
YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikgewpAQCAtNDUwLDcgKzQ1MSwxMCBAQCB2b2lkIENh
Y2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgV2ViQ29yZTo6
Q2FjaGVRdWVyeU9wdGlvbgogICAgICAgICByZXR1cm4gc2hvdWxkUmVtb3ZlOwogICAgIH0pOwog
Ci0gICAgY2FsbGJhY2soV1RGTW92ZShyZWNvcmRJZGVudGlmaWVycykpOworICAgIC8vIFRoaXMg
b3BlcmF0aW9uIHdvdWxkIGNoYW5nZSBjYWNoZXMgc2l6ZSwgc28gbWFrZSBzdXJlIGNhbGxiYWNr
IGZpbmlzaGVzIGFmdGVyIHNpemUgZmlsZSBpcyB1cGRhdGVkLgorICAgIG1fY2FjaGVzLnVwZGF0
ZVNpemVGaWxlKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZWNvcmRJZGVudGlmaWVy
cyA9IFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpXSgpIG11dGFibGUgeworICAgICAgICBjYWxs
YmFjayhXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJzKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgQ2Fj
aGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIHJlY29yZElk
ZW50aWZpZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmluZGV4IDNiNDUzYjg4OTZh
NjkxZDUxMWVjMWM0ZmY4ZjRiMjQzYzY2ZDVjZjQuLjA0NGNhZGQ1ZGRkOGE0NWMxMjYyNmU2YTI0
ODNmOTRmMWI1OGYwYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKQEAgLTU2LDM2
ICs1NiwyMSBAQCBTdHJpbmcgQ2FjaGVzOjpjYWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5n
JiBjYWNoZXNSb290c1BhdGgpCiAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChjYWNoZXNSb290c1BhdGgsICJlc3RpbWF0ZWRzaXplIl9zKTsKIH0KIAotUmVm
PENhY2hlcz4gQ2FjaGVzOjpjcmVhdGUoRW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXImIHF1b3RhTWFuYWdlcikKK1JlZjxDYWNoZXM+IENhY2hlczo6Y3JlYXRlKEVuZ2luZSYg
ZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQYXRo
KQogewotICAgIGF1dG8gY2FjaGVzID0gYWRvcHRSZWYoKm5ldyBDYWNoZXMgeyBlbmdpbmUsIFdU
Rk1vdmUob3JpZ2luKSwgV1RGTW92ZShyb290UGF0aCksIHF1b3RhTWFuYWdlciB9KTsKLSAgICBx
dW90YU1hbmFnZXIuYWRkVXNlcihjYWNoZXMuZ2V0KCkpOwotICAgIHJldHVybiBjYWNoZXM7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2FjaGVzIHsgZW5naW5lLCBXVEZNb3ZlKG9yaWdpbiks
IFdURk1vdmUocm9vdFBhdGgpIH0pOwogfQogCi1DYWNoZXM6OkNhY2hlcyhFbmdpbmUmIGVuZ2lu
ZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCwgV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYgcXVvdGFNYW5hZ2VyKQorQ2FjaGVzOjpDYWNoZXMo
RW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYg
cm9vdFBhdGgpCiAgICAgOiBtX2VuZ2luZSgmZW5naW5lKQogICAgICwgbV9vcmlnaW4oV1RGTW92
ZShvcmlnaW4pKQogICAgICwgbV9yb290UGF0aChXVEZNb3ZlKHJvb3RQYXRoKSkKLSAgICAsIG1f
cXVvdGFNYW5hZ2VyKG1ha2VXZWFrUHRyKHF1b3RhTWFuYWdlcikpCiB7CiB9CiAKIENhY2hlczo6
fkNhY2hlcygpCiB7CiAgICAgQVNTRVJUKG1fcGVuZGluZ1dyaXRpbmdDYWNoZXNUb0Rpc2tDYWxs
YmFja3MuaXNFbXB0eSgpKTsKLQotICAgIGlmIChtX3F1b3RhTWFuYWdlcikKLSAgICAgICAgbV9x
dW90YU1hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotfQotCi12b2lkIENhY2hlczo6d2hlbklu
aXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKLXsKLSAgICBp
bml0aWFsaXplKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11
dGFibGUgewotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihDYWNoZVN0b3JhZ2UsICJDYWNoZXM6OmluaXRpYWxpemUgZmFpbGVkLCByZXBvcnRlZCBzcGFj
ZSB1c2VkIHdpbGwgYmUgemVybyIpOwotICAgICAgICBjYWxsYmFjaygpOwotICAgIH0pOwogfQog
CiB2b2lkIENhY2hlczo6cmV0cmlldmVPcmlnaW5Gcm9tRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
Zm9sZGVyUGF0aCwgV29ya1F1ZXVlJiBxdWV1ZSwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KE9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0yMDgsMTAgKzE5MywxNCBAQCB2b2lkIENhY2hlczo6aW5pdGlhbGl6ZShXZWJDb3JlOjpE
T01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiAgICAgfSk7CiB9
CiAKLXZvaWQgQ2FjaGVzOjp1cGRhdGVTaXplRmlsZSgpCit2b2lkIENhY2hlczo6dXBkYXRlU2l6
ZUZpbGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGlmIChtX2VuZ2luZSkKLSAgICAgICAgbV9lbmdpbmUtPndyaXRlU2l6ZUZpbGUoY2FjaGVz
U2l6ZUZpbGVuYW1lKG1fcm9vdFBhdGgpLCBtX3NpemUpOworICAgIGlmICghbV9lbmdpbmUpIHsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fZW5naW5lLT53cml0ZVNpemVGaWxlKGNhY2hlc1NpemVGaWxlbmFtZShtX3Jvb3RQYXRo
KSwgbV9zaXplLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgQ2FjaGVz
Ojppbml0aWFsaXplU2l6ZSgpCkBAIC0yMzIsMTMgKzIyMSwxMiBAQCB2b2lkIENhY2hlczo6aW5p
dGlhbGl6ZVNpemUoKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgICAgICAgICB1cGRhdGVTaXplRmlsZSgpOwot
Ci0gICAgICAgICAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICAgICAgYXV0byBw
ZW5kaW5nQ2FsbGJhY2tzID0gV1RGTW92ZShtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNr
cyk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogcGVuZGluZ0NhbGxiYWNrcykK
LSAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQpOwotCisgICAgICAgICAgICB1
cGRhdGVTaXplRmlsZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIG11
dGFibGUgeworICAgICAgICAgICAgICAgIG1faXNJbml0aWFsaXplZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgYXV0byBwZW5kaW5nQ2FsbGJhY2tzID0gV1RGTW92ZShtX3BlbmRpbmdJbml0aWFs
aXphdGlvbkNhbGxiYWNrcyk7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6
IHBlbmRpbmdDYWxsYmFja3MpCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVs
bG9wdCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBhdXRvIGRlY29kZWQgPSBDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKCpzdG9yYWdl
KTsKQEAgLTI3MywxMyArMjYxLDExIEBAIHZvaWQgQ2FjaGVzOjpjbGVhcihDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIG1fc3RvcmFnZS0+Y2xl
YXIoU3RyaW5nIHsgfSwgLVdhbGxUaW1lOjppbmZpbml0eSgpLCBbcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsK
LSAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPnJlc2V0U3BhY2VVc2VkKCk7CiAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgcmVzZXRTcGFjZVVzZWQo
KTsKICAgICBjbGVhclBlbmRpbmdXcml0aW5nQ2FjaGVzVG9EaXNrQ2FsbGJhY2tzKCk7CiAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKIH0KQEAgLTUyNSwxMiArNTExLDEyIEBAIHZvaWQgQ2FjaGVz
OjpyZWFkUmVjb3Jkc0xpc3QoQ2FjaGUmIGNhY2hlLCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlRy
YXZlcnNlSGFuZGxlCiAKIHZvaWQgQ2FjaGVzOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VS
ZXF1aXJlZCwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmIGNh
bGxiYWNrKQogewotICAgIGlmICghbV9xdW90YU1hbmFnZXIpIHsKKyAgICBpZiAoIW1fZW5naW5l
KSB7CiAgICAgICAgIGNhbGxiYWNrKEVycm9yOjpRdW90YUV4Y2VlZGVkKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIG1fcXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2Uoc3BhY2VSZXF1
aXJlZCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZGVjaXNpb24pIG11dGFi
bGUgeworICAgIG1fZW5naW5lLT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4sIHNwYWNlUmVxdWlyZWQs
IFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsK
ICAgICAgICAgc3dpdGNoIChkZWNpc2lvbikgewogICAgICAgICBjYXNlIFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OgogICAgICAgICAgICAgY2FsbGJhY2soRXJy
b3I6OlF1b3RhRXhjZWVkZWQpOwpAQCAtNTQ4LDcgKzUzNCw2IEBAIHZvaWQgQ2FjaGVzOjp3cml0
ZVJlY29yZChjb25zdCBDYWNoZSYgY2FjaGUsIGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNv
cmRJbmZvCiAgICAgQVNTRVJUKG1fc2l6ZSA+PSBwcmV2aW91c1JlY29yZFNpemUpOwogICAgIG1f
c2l6ZSArPSByZWNvcmRJbmZvcm1hdGlvbi5zaXplOwogICAgIG1fc2l6ZSAtPSBwcmV2aW91c1Jl
Y29yZFNpemU7Ci0gICAgdXBkYXRlU2l6ZUZpbGUoKTsKIAogICAgIGlmICghc2hvdWxkUGVyc2lz
dCgpKSB7CiAgICAgICAgIG1fdm9sYXRpbGVTdG9yYWdlLnNldChyZWNvcmRJbmZvcm1hdGlvbi5r
ZXksIFdURk1vdmUocmVjb3JkKSk7CkBAIC01NTYsMTMgKzU0MSwxNSBAQCB2b2lkIENhY2hlczo6
d3JpdGVSZWNvcmQoY29uc3QgQ2FjaGUmIGNhY2hlLCBjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYg
cmVjb3JkSW5mbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zdG9yYWdlLT5zdG9y
ZShDYWNoZTo6ZW5jb2RlKHJlY29yZEluZm9ybWF0aW9uLCByZWNvcmQpLCB7IH0sIFtwcm90ZWN0
ZWRTdG9yYWdlID0gbWFrZVJlZigqbV9zdG9yYWdlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKV0oaW50IGVycm9yKSBtdXRhYmxlIHsKKyAgICBtX3N0b3JhZ2UtPnN0b3JlKENhY2hlOjpl
bmNvZGUocmVjb3JkSW5mb3JtYXRpb24sIHJlY29yZCksIHsgfSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1fc3RvcmFn
ZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGludCBlcnJvcikgbXV0YWJsZSB7CiAg
ICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoQ2FjaGVT
dG9yYWdlLCAiQ2FjaGVzOjp3cml0ZVJlY29yZCBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIGVycm9y
KTsKICAgICAgICAgICAgIGNhbGxiYWNrKEVycm9yOjpXcml0ZURpc2spOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9wdCk7CisgICAg
ICAgIHVwZGF0ZVNpemVGaWxlKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFi
bGUgeworICAgICAgICAgICAgY2FsbGJhY2soV1RGOjpudWxsb3B0KTsKKyAgICAgICAgfSk7CiAg
ICAgfSk7CiB9CiAKQEAgLTYwNSw3ICs1OTIsNyBAQCB2b2lkIENhY2hlczo6cmVtb3ZlUmVjb3Jk
KGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmQpCiAKICAgICBBU1NFUlQobV9zaXplID49
IHJlY29yZC5zaXplKTsKICAgICBtX3NpemUgLT0gcmVjb3JkLnNpemU7Ci0gICAgdXBkYXRlU2l6
ZUZpbGUoKTsKKyAgICB1cGRhdGVTaXplRmlsZShbXSB7IH0pOwogCiAgICAgcmVtb3ZlQ2FjaGVF
bnRyeShyZWNvcmQua2V5KTsKIH0KQEAgLTYyMSwxNyArNjA4LDYgQEAgdm9pZCBDYWNoZXM6OnJl
bW92ZUNhY2hlRW50cnkoY29uc3QgTmV0d29ya0NhY2hlOjpLZXkmIGtleSkKICAgICBtX3N0b3Jh
Z2UtPnJlbW92ZShrZXkpOwogfQogCi12b2lkIENhY2hlczo6cmVzZXRTcGFjZVVzZWQoKQotewot
ICAgIG1fc2l6ZSA9IDA7Ci0gICAgdXBkYXRlU2l6ZUZpbGUoKTsKLQotICAgIGlmIChtX3F1b3Rh
TWFuYWdlcikgewotICAgICAgICBtX3F1b3RhTWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci0g
ICAgICAgIG1fcXVvdGFNYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKLSAgICB9Ci19Ci0KIHZvaWQg
Q2FjaGVzOjpjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCkKIHsKICAgICBpZiAoIW1faXNJbml0
aWFsaXplZCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKaW5kZXggMDMyMzFmM2E5YjA1NzY3
MmQ2MzFiYjk2ZTY3YTZlYjk5ZTFkN2NiYi4uNWQzOTRhMGU0ODg1N2IwMjVjYWE0ODM0YWQyNmJl
ODQ3ZGQ5ZjU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCkBAIC0yOCw3ICsyOCw2IEBA
CiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaCIKICNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1N0b3JhZ2VRdW90YVVzZXIuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlv
bkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KIApAQCAtNDIsMTAgKzQxLDEwIEBA
IG5hbWVzcGFjZSBDYWNoZVN0b3JhZ2UgewogCiBjbGFzcyBFbmdpbmU7CiAKLWNsYXNzIENhY2hl
cyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENhY2hlcz4sIHByaXZhdGUgV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhVXNlciB7CitjbGFzcyBDYWNoZXMgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxD
YWNoZXM+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgU3RyaW5nIGNhY2hlc1NpemVGaWxlbmFtZShj
b25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgUmVmPENhY2hlcz4gY3JlYXRlKEVuZ2luZSYsIFdl
YkNvcmU6OkNsaWVudE9yaWdpbiYmLCBTdHJpbmcmJiByb290UGF0aCwgV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlciYpOworICAgIHN0YXRpYyBTdHJpbmcgY2FjaGVzU2l6ZUZpbGVuYW1lKGNv
bnN0IFN0cmluZyYgY2FjaGVzUm9vdHNQYXRoKTsKKyAgICBzdGF0aWMgUmVmPENhY2hlcz4gY3Jl
YXRlKEVuZ2luZSYsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmLCBTdHJpbmcmJiByb290UGF0aCk7
CiAgICAgfkNhY2hlcygpOwogCiAgICAgc3RhdGljIHZvaWQgcmV0cmlldmVPcmlnaW5Gcm9tRGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgZm9sZGVyUGF0aCwgV29ya1F1ZXVlJiwgV1RGOjpDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4mJik+JiYpOwpA
QCAtNzksMjIgKzc4LDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoV1RGOjpDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJNZW1vcnlSZXByZXNlbnRhdGlv
bigpOwotICAgIHZvaWQgcmVzZXRTcGFjZVVzZWQoKTsKIAogICAgIHVpbnQ2NF90IHN0b3JhZ2VT
aXplKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVTaXplRmlsZShDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogCiBwcml2YXRlOgotICAgIENhY2hlcyhFbmdpbmUmLCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXImKTsKLQotICAgIC8vIFN0b3JhZ2VRdW90YVVzZXIgQVBJLgotICAgIHVpbnQ2NF90IHNwYWNl
VXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIENhY2hlcyhFbmdpbmUm
LCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgpOwogCiAgICAgdm9p
ZCBpbml0aWFsaXplU2l6ZSgpOwogICAgIHZvaWQgcmVhZENhY2hlc0Zyb21EaXNrKFdURjo6RnVu
Y3Rpb248dm9pZChFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBXZWJDb3JlOjpET01DYWNoZUVuZ2lu
ZTo6RXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIHdyaXRlQ2FjaGVzVG9EaXNrKFdlYkNvcmU6OkRP
TUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAKLSAgICB2b2lkIHdoZW5Jbml0
aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwotCiAgICAgdm9pZCBz
dG9yZU9yaWdpbihXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYp
OwogICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IHJlYWRPcmlnaW4o
Y29uc3QgTmV0d29ya0NhY2hlOjpEYXRhJik7CiAKQEAgLTEwNiw4ICsxMDAsNiBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBoYXNBY3RpdmVDYWNoZSgpIGNvbnN0OwogCi0gICAgdm9pZCB1cGRhdGVT
aXplRmlsZSgpOwotCiAgICAgYm9vbCBtX2lzSW5pdGlhbGl6ZWQgeyBmYWxzZSB9OwogICAgIEVu
Z2luZSogbV9lbmdpbmUgeyBudWxscHRyIH07CiAgICAgdWludDY0X3QgbV91cGRhdGVDb3VudGVy
IHsgMCB9OwpAQCAtMTIyLDcgKzExNCw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFdlYkNvcmU6
OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2s+IG1fcGVuZGluZ0luaXRpYWxpemF0
aW9uQ2FsbGJhY2tzOwogICAgIGJvb2wgbV9pc1dyaXRpbmdDYWNoZXNUb0Rpc2sgeyBmYWxzZSB9
OwogICAgIERlcXVlPENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8V2ViQ29yZTo6RE9N
Q2FjaGVFbmdpbmU6OkVycm9yPik+PiBtX3BlbmRpbmdXcml0aW5nQ2FjaGVzVG9EaXNrQ2FsbGJh
Y2tzOwotICAgIFdlYWtQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gbV9xdW90YU1h
bmFnZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBDYWNoZVN0b3JhZ2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAppbmRleCBjMGZj
ZjljNWY2MDBhYTVhYzExNjNlNDdhNGIyNmRhYzQyMDY1YWE5Li42ZDBjMTI5YTc0MDUxMGQzODY5
NzM3MDVhZDA5MmVmMTMyY2MwNzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCkBAIC01NSw2ICs1NSw4IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiAKICAgICBlbmNvZGVyIDw8IGxvY2FsU3RvcmFnZURpcmVjdG9yeSA8PCBsb2NhbFN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CiAKKyAgICBlbmNvZGVyIDw8IGNhY2hlU3RvcmFn
ZURpcmVjdG9yeSA8PCBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisKICAg
ICBlbmNvZGVyIDw8IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKICAgICBlbmNvZGVyIDw8IHBlclRo
aXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7CiB9CkBAIC0xNDEsNiArMTQzLDE4IEBAIE9wdGlv
bmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
czo6ZGVjb2RlKElQQzo6RGVjCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFy
YW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCps
b2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCisgICAgT3B0aW9uYWw8U3Ry
aW5nPiBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VE
aXJlY3Rvcnk7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBX
VEZNb3ZlKCpjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOworCisgICAgT3B0aW9uYWw8U2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlPiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7Cisg
ICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAg
aWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOworCiAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKICAg
ICBkZWNvZGVyID4+IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKICAgICBpZiAoIXBlck9yaWdpblN0
b3JhZ2VRdW90YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycy5oCmluZGV4IDA5NWYwOWQ2YWY5M2Y5MTNlYmIyOWY3MDI2N2FlOWMxYjc0YmU4
OGUuLmYyN2RmNDg5ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0YjcwMTg0MzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNzEs
NiArNzEsOSBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgewogICAgIFN0cmlu
ZyBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGxv
Y2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKIAorICAgIFN0cmluZyBjYWNoZVN0
b3JhZ2VEaXJlY3Rvcnk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNhY2hlU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKwogICAgIHVpbnQ2NF90IHBlck9yaWdpblN0b3Jh
Z2VRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpIH07
CiAgICAgdWludDY0X3QgcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSB7IFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB9OwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4IGZhZjhhNTI4
ZWEyMzA5YWJmYWUxNzdiZGVlYWIyN2M1ZDVmMDczMjkuLjllYTg5ZmI1YmQ4MDMwOGE0ODU5ODE2
MzAwNTFiMTExOGYxYjg0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tD
b250ZXh0LmNwcApAQCAtNjcyLDMgKzY3Miw4IEBAIHZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJh
dGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgYm9vbCB1CiB7
CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9CisKK3ZvaWQg
V0tDb250ZXh0UmVzZXRRdW90YShXS0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0KS0+cmVzZXRRdW90YSgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCmluZGV4IDcyM2I1ZTQ3ZTZlNmFiYzY2
NDJkZWJlODRhY2NkZTFmYTU2OGM3OTAuLjFkNzJhMDBhOGRlYWI0MGQwMTRjZjE0MTMxZThiOGEx
ODI4NWQ0NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHRQcml2YXRlLmgKQEAgLTEyNiw2ICsxMjYsOCBAQCBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRD
bGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZShXS0NvbnRleHRSZWYgY29udAog
CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0LCBib29sIGZvcmNlU2VydmljZVdvcmtlclByb2Nlc3Mp
OwogCitXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRSZXNldFF1b3RhKFdLQ29udGV4dFJlZik7CisK
ICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IGY5NDI5ZjhiMDlj
OWM2NmExOGQwOTMwYzVhYTQyM2M1YTM4NzI0NGYuLjMwNzI4YzBlMDc0MWI2ODQwYjBhNDdmODUw
MTQ3YzMxYjJkYTNkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3Mg
U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIDogYm9vbDsKIGVudW0gY2xhc3MgU3RvcmFnZUFj
Y2Vzc1dhc0dyYW50ZWQgOiBib29sOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBzdHJ1Y3QgU2Vj
dXJpdHlPcmlnaW5EYXRhOworc3RydWN0IENsaWVudE9yaWdpbjsKIH0KIAogbmFtZXNwYWNlIFdl
YktpdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXgg
MGUzNzg4OTkzOTYwYTM3N2ZhOGU4OWNiNjhlMmMyYTZjMzk1ZjM4OS4uZGE3M2ZlNzIwODFiNmZj
NjllMmQzZDlmNWNkNmU2MTQxZDZlODA0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcApAQCAtNTUyLDYgKzU1MiwxMyBAQCBOZXR3b3JrUHJvY2Vzc1Byb3h5
JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSog
d2l0aAogICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9y
YWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIAorICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5
ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKKyAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9y
eS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShj
YWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICB9CisKKwogICAg
IGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCiAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFT
dG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeSgpOwogICAgIGlmIChwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKQEAgLTE3MTMsNiArMTcyMCwxNCBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjp0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpCiAgICAgbV9uZXR3b3JrUHJvY2Vz
cyA9IG51bGxwdHI7CiB9CiAKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlc2V0UXVvdGEoKQorewor
ICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0UXVvdGEoKSwg
MCk7Cit9CisKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmROZXR3b3JrUHJvY2Vzc1dpbGxTdXNw
ZW5kSW1taW5lbnRseUZvclRlc3RpbmcoKQogewogICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggOWRlMjE3MjJkOWVi
ZGNjMzI2ZjhjMzYwZmQyODhlY2M3ZTZiMzk4NC4uNTM5NDlhMjYwMDRiNzg4ZWZlODhmNDM0YjU5
ZGExN2M2NmNlNmZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5o
CkBAIC01MjgsNiArNTI4LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0VXNlU2VwYXJhdGVTZXJ2
aWNlV29ya2VyUHJvY2Vzcyhib29sKTsKICAgICBib29sIHVzZVNlcGFyYXRlU2VydmljZVdvcmtl
clByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3VzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nl
c3M7IH0KIAorICAgIHZvaWQgcmVzZXRRdW90YSgpOworCiBwcml2YXRlOgogICAgIHZvaWQgcGxh
dGZvcm1Jbml0aWFsaXplKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpp
bmRleCAyOWU5MDAzZjA0NmYyMTc0Yzc2Yjg0ZjcxYjVlYzg5MmU4YTQ2MDI1Li44NzA2MmFiZDZj
NDIxZTIzZjViYTJlZTMxNjNmMTM5OWM4OTU0YWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFT
dG9yZUNvY29hLm1tCkBAIC0xOTAsNiArMTkwLDEwIEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogICAgIGlmICghcGFyYW1ldGVycy5s
b2NhbFN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKIAorICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gY2FjaGVTdG9y
YWdlRGlyZWN0b3J5KCk7CisgICAgaWYgKCFwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJl
YWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworCiAgICAgcGFyYW1l
dGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBwZXJPcmlnaW5TdG9yYWdlUXVvdGEoKTsKICAg
ICBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSBwZXJUaGlyZFBh
cnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggYmI5ODQxNjY0
NTRiNTZhZWE0YzhkYmQ0ODViNzIxNDAwYmIxODZjYS4uNGIyN2RmYjRmMzMyNDYxMjM1OTU2M2E4
N2M0ODQ5MWFkNGRmNTFkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTIwODMsNiArMjA4MywxMiBA
QCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJz
KCkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGly
ZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIH0KIAorICAgIGF1dG8gY2FjaGVTdG9yYWdlRGly
ZWN0b3J5ID0gdGhpcy0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgaWYgKCFjYWNoZVN0
b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7CisgICAgICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5ID0gY2FjaGVTdG9yYWdlRGlyZWN0b3J5OworICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CisgICAgfQorCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgcGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSByZXNvbHZlZEluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSgpOwogICAgIGlmICghcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0
eSgpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IGNiOTE2MGExMTU2MWJiMTgxNTBhNWEwZTYwYWM5YWU1ZTViMDNlY2UuLmZjYTAwNzkxZDM2Nzhk
NmM2ZWQ0NTgwMjliMWFkYjgxZDZkZTJmMGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxOS0xMS0xMyAgU2lodWkg
TGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVyc2lv
biBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDM5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TdG9y
YWdlUXVvdGFNYW5hZ2VyLmNwcDogUmVtb3ZlZC4gVGhpcyB1bml0IHRlc3Qgd2FzIHVzZWQgdG8g
bWFrZSBzdXJlIHRoZSBzdGF0ZSAKKyAgICAgICAgY2hhbmdlIGluc2lkZSBTdG9yYWdlUXVvdGFN
YW5hZ2VyIGlzIGNvcnJlY3QuIFNpbmNlIHdlIGhhdmUgY2hhbmdlZCBvdXIgaW1wbGVtZW50YXRp
b24sIHRoZSB0ZXN0IGlzIG5vdCBuZWVkZWQuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcDogUmVzZXQgU3RvcmFnZVF1b3RhTWFuYWdlcidzIHF1b3RhIHZh
bHVlIGJldHdlZW4gdGVzdHMuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0
YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJl
c2V0UXVvdGEpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoK
KwogMjAxOS0xMS0xMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbaU9TXSBXS1dlYlZpZXcgZG9lcyBub3QgcmVzcGVjdCBzeXN0ZW0gc3BlbGxjaGVj
a2luZyBwcmVmZXJlbmNlCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGUzMmI4NWU0MmRjMWYx
OTI1YjdjZmQ4YTliOTMzZWI3MjFkMWFjZWMuLmE3MGUxNDY0NGMxMzg3YzRkN2Q4NTA3ZjY4YjIy
ZTBjMWUxMjE3MWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MzQsNyArNzM0LDYgQEAK
IAkJOTM5OUJBMDYyMzcxMTE0RjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdEluUGFnZUNhY2hlLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTM5OUJBMDMyMzcxMTBCRjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdEluUGFnZUNhY2hlLmh0bWwg
Ki87IH07CiAJCTkzQUY0RUNFMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNEMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJz
dFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCAqLzsgfTsKIAkJOTNB
RjRFRDExNTA2RjEzMDAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBRjRFQ0YxNTA2RjEy
MzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi87IH07Ci0JCTkzQjYyMDU0MjM0RUE2
MkMwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjYyMDUzMjM0RUEzMkIwMEQ0OUI5NyAvKiBT
dG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJOTNDRkE4NjcxQ0VCOUUzODAwMDU2NUE4
IC8qIGF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0NGQTg2NjFDRUI5REUxMDAwNTY1QTggLyog
YXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sICovOyB9OwogCQk5M0QxMTlGQzIyQzY4MEY3MDA5
QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0QxMTlGQjIyQzU3
MTEyMDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCAqLzsg
fTsKIAkJOTNFMkM1NTUxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRpbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMkM1NTQxRkQzMjA0MTAw
RTFERjZBIC8qIExpbmVFbmRpbmcuY3BwICovOyB9OwpAQCAtMjEzOCw3ICsyMTM3LDYgQEAKIAkJ
OTNBRjRFQ0ExNTA2RjAzNTAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91
dEZvckltYWdlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXdG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5M0FGNEVDRDE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxs
eU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNf
QnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBRjRFQ0YxNTA2RjEy
MzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBh
dGggPSAibG90cy1vZi1pbWFnZXMuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTkzQjYyMDUzMjM0RUEzMkIwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VRdW90YU1hbmFnZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0NGQTg2NjFDRUI5REUxMDAwNTY1QTgg
LyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRo
ID0gImF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzQ0ZBODY4MUNFQkNGRUQwMDA1NjVBOCAvKiBDYW5kaWRhdGVUZXN0cy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENhbmRpZGF0ZVRlc3RzLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0QxMTlGQjIyQzU3MTEyMDA5QkUzQzcgLyog
bG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRt
bDsgcGF0aCA9ICJsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sIjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxMTAsNyArMzEwOCw2IEBACiAJCQkJNDE5NzNCNUMx
QUYyMjg3NTAwNkM3QjM2IC8qIFNoYXJlZEJ1ZmZlci5jcHAgKi8sCiAJCQkJQTE3OTkxODkxRTFD
QTI0MTAwQTUwNUVEIC8qIFNoYXJlZEJ1ZmZlclRlc3QuY3BwICovLAogCQkJCUExNzk5MThBMUUx
Q0EyNDEwMEE1MDVFRCAvKiBTaGFyZWRCdWZmZXJUZXN0LmggKi8sCi0JCQkJOTNCNjIwNTMyMzRF
QTMyQjAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwICovLAogCQkJCUVDQTY4MENE
MUU2OENDMDkwMDczMUQyMCAvKiBTdHJpbmdVdGlsaXRpZXMubW0gKi8sCiAJCQkJQ0U0RDVERTUx
RjY3NDNCQTAwNzJDRkM2IC8qIFN0cmluZ1dpdGhEaXJlY3Rpb24uY3BwICovLAogCQkJCTkzQTI1
ODk4MUY5MkZGMTUwMDNFNTEwQyAvKiBUZXh0Q29kZWMuY3BwICovLApAQCAtNDg0Niw3ICs0ODQz
LDYgQEAKIAkJCQk3Q0NFN0VDRjFBNDExQTdFMDA0NDdDNEMgLyogU3RvcExvYWRpbmdGcm9tRGlk
UmVjZWl2ZVJlc3BvbnNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDMDkzMkUyMUM5OTM0NDAw
MzBDNEIwIC8qIFN0b3BTdXNwZW5kUmVzdW1lQWxsTWVkaWEubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk0MTRBRDY4NjIyODVEMUMwMDA3NzdGMkQgLyogU3RvcmFnZVF1b3RhLm1tIGluIFNvdXJjZXMg
Ki8sCi0JCQkJOTNCNjIwNTQyMzRFQTYyQzAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1QkUxNzExRDQyOEU0QjAwREQ3QzY4IC8qIFN0b3Jl
QmxvYlRoZW5EZWxldGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VEMDFBNDExQTdFMDA0
NDdDNEMgLyogU3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmcubW0gaW4gU291
cmNlcyAqLywKIAkJCQk3Q0NFN0VEMTFBNDExQTdFMDA0NDdDNEMgLyogU3RyaW5nVHJ1bmNhdG9y
Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGFkMWM2N2JmMDUyZjdiMGEzNDUzZDA1NGYyNTI5MTkxZWVmM2YxNzIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTAzICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1l
dDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFVc2VyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwotCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KLXN0YXRpYyBjb25zdCBpbnQgZGVmYXVs
dFF1b3RhID0gMSAqIEtCOwotCi1jbGFzcyBNb2NrUXVvdGFVc2VyIGZpbmFsIDogcHVibGljIFdl
YkNvcmU6OlN0b3JhZ2VRdW90YVVzZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IE1vY2tRdW90
YVVzZXIoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlcikKLSAgICAgICAgOiBtX21hbmFnZXIo
Jm1hbmFnZXIpCi0gICAgewotICAgICAgICBtYW5hZ2VyLmFkZFVzZXIoKnRoaXMpOwotICAgIH0K
LQotICAgIHZvaWQgc2V0U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCkgeyBtX3NwYWNlVXNl
ZCA9IHNwYWNlVXNlZDsgfQotCi1wcml2YXRlOgotICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNv
bnN0IGZpbmFsCi0gICAgewotICAgICAgICByZXR1cm4gbV9zcGFjZVVzZWQ7Ci0gICAgfQotCi0g
ICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxi
YWNrKSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKCFtX3NwYWNlVXNlZCkKLSAgICAgICAgICAg
IEFTU0VSVF9FUShtX21hbmFnZXItPnN0YXRlKCksIFN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0YXRl
OjpVbmluaXRpYWxpemVkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUX0VRKG1f
bWFuYWdlci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6OkNvbXB1dGluZ1Nw
YWNlVXNlZCk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdXNhZ2UgdG8gbW9jayBkZWxldGlvbi4KLSAg
ICAgICAgbV9zcGFjZVVzZWQgPSAwOwotICAgICAgICBjYWxsYmFjaygpOwotICAgIH0KLQotICAg
IHVpbnQ2NF90IG1fc3BhY2VVc2VkIHsgMCB9OwotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1f
bWFuYWdlcjsKLX07Ci0gICAgCi1URVNUKFN0b3JhZ2VRdW90YU1hbmFnZXJUZXN0LCBCYXNpYykK
LXsKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyID0gbnVs
bHB0cjsKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyIHN0b3JhZ2VRdW90YU1hbmFnZXIoZGVmYXVs
dFF1b3RhLCBbJnN0b3JhZ2VRdW90YU1hbmFnZXJQdHJdKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRf
dCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoT3B0aW9uYWw8dWludDY0X3Q+KT4mJiBjb21wbGV0aW9uSGFubGRlcikgewotICAgICAg
ICBBU1NFUlRfVFJVRShzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyKTsKLSAgICAgICAgQVNTRVJUX0VR
KHN0b3JhZ2VRdW90YU1hbmFnZXJQdHItPnN0YXRlKCksIFN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0
YXRlOjpXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlKTsKLQotICAgICAgICAvLyBBbGxv
dyBhbGwgc3BhY2UgaW5jcmVhc2UgcmVxdWVzdHMuCi0gICAgICAgIGNvbXBsZXRpb25IYW5sZGVy
KHNwYWNlSW5jcmVhc2UgKyBjdXJyZW50U3BhY2UpOwotICAgIH0pOwotICAgIHN0b3JhZ2VRdW90
YU1hbmFnZXJQdHIgPSAmc3RvcmFnZVF1b3RhTWFuYWdlcjsKLQotCi0gICAgTW9ja1F1b3RhVXNl
ciBtb2NrVXNlcihzdG9yYWdlUXVvdGFNYW5hZ2VyKTsKLQotICAgIC8vIEdyYW50IGRpcmVjdGx5
LgotICAgIHN0b3JhZ2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDAuMSAqIEtCLCBbJl0oV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNpb24pIHsKLSAgICAgICAg
QVNTRVJUX0VRKGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lv
bjo6R3JhbnQpOwotICAgICAgICBtb2NrVXNlci5zZXRTcGFjZVVzZWQoMC4xICogS0IpOwotICAg
IH0pOwotCi0gICAgLy8gR3JhbnQgYWZ0ZXIgY29tcHV0aW5nIGFjY3VyYXRlIHVzYWdlLgotICAg
IHN0b3JhZ2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDEuMCAqIEtCLCBbJl0oV2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNpb24pIHsKLSAgICAgICAgQVNTRVJU
X0VRKGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3Jh
bnQpOwotICAgICAgICBtb2NrVXNlci5zZXRTcGFjZVVzZWQoMS4wICogS0IpOwotICAgIH0pOwot
Ci0gICAgLy8gR3JhbnQgYWZ0ZXIgY29tcHV0aW5nIGFjY3VyYXRlIHVzYWdlIGFuZCByZXF1ZXN0
aW5nIHNwYWNlIGluY3JlYXNlLgotICAgIHN0b3JhZ2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNl
KDEwICogS0IsIFsmXShXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNp
c2lvbikgewotICAgICAgICBBU1NFUlRfRVEoc3RvcmFnZVF1b3RhTWFuYWdlclB0ci0+c3RhdGUo
KSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdCk7
Ci0gICAgICAgIEFTU0VSVF9FUShkZWNpc2lvbiwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
cjo6RGVjaXNpb246OkdyYW50KTsKLSAgICB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCA0
ZTQ4ZjI3Y2ZmYTEwOGYwNzdjZTk4YmFkYmRhOGRhMWEyOTU2ZDA5Li44MTFkNWYwMWFjZWNlZWQ5
NjU3MWVkMGQyYmQ5MDQxZmY2YWNjOTg3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcApAQCAtOTgwLDYgKzk4MCw4IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJl
c2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJl
CiAgICAgY2xlYXJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucygpOwogICAgIGNsZWFyRE9NQ2Fj
aGVzKCk7CiAKKyAgICByZXNldFF1b3RhKCk7CisKICAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKHBsYXRmb3JtQ29udGV4dCgpLCB0
cnVlKTsKIAogICAgIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5n
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwpAQCAtMjk5Miw2ICsyOTk0
LDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KCkKICAgICBXS0NvbnRleHRUZXJtaW5hdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhwbGF0Zm9ybUNv
bnRleHQoKSk7CiB9CiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UXVvdGEoKQoreworICAg
IFdLQ29udGV4dFJlc2V0UXVvdGEocGxhdGZvcm1Db250ZXh0KCkpOworfQorCiAjaWYgIVBMQVRG
T1JNKENPQ09BKQogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVuVGVzdChjb25z
dCBUZXN0SW52b2NhdGlvbiYpCiB7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgKaW5kZXggZWQxNjllYTJjMDdmNTUwNjEyNjE2MjY4MzA1NGY1ZjY1MGIzZjY3ZC4uNWU4ZGQz
YTAwNTE3ODNjOGUwZjg2YTMzNGIyN2NkNzY2YTQ4NTBkNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuaApAQCAtMjY4LDYgKzI2OCw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHRlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7CiAgICAgdm9pZCB0ZXJtaW5hdGVTZXJ2aWNlV29y
a2VyUHJvY2VzcygpOwogCisgICAgdm9pZCByZXNldFF1b3RhKCk7CisKICAgICB2b2lkIHJlbW92
ZUFsbFNlc3Npb25DcmVkZW50aWFscygpOwogCiAgICAgdm9pZCBjbGVhckluZGV4ZWREYXRhYmFz
ZXMoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383483</attachid>
            <date>2019-11-13 12:53:26 -0800</date>
            <delta_ts>2019-11-13 13:21:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203971-20191113125323.patch</filename>
            <type>text/plain</type>
            <size>189172</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyMzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E0Y2VlYzIzZDVmYzkz
NDA1ODQxZDU4MDczZDQ2MTRlZjc4NjEwMC4uN2Y3ODY1MjU5YmJmMDNkNTYyOGU2YTVmMjgwN2Mz
YjIzYThiMjBmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAxOS0xMS0xMyAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVy
c2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgYSBsb2NrLWJhc2VkIFN0b3JhZ2VRdW90YU1hbmFn
ZXIgc28gdGhhdCBxdW90YSBjaGVjayBjYW4gYmUgZG9uZSBvbiBkaWZmZXJlbnQgdGhyZWFkcy4K
KworICAgICAgICBBbHNvIGZpeCBzb21lIGJ1Z3MgcmV2ZWFsZWQgYnkgdGhpcyBwYXRjaC4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5j
bWFrZToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0
YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpyZXF1ZXN0
U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRpc2tVc2Fn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpR
dW90YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2
ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21w
dXRlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURC
U2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3BhY2VV
c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpR
dW90YVVzZXI6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjplbnN1cmVRdW90
YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5pc2hD
b21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpJREJTZXJ2ZXI6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGVjcmVhc2VTcGFj
ZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluaXRpYWxpemVRdW90YVVzZXIp
OiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZW5hbWVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6bWF5YmVV
cGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRl
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1S
ZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxl
dGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpyZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtUHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmdldEFsbFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFs
bFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6Z2V0Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aXRl
cmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRU
cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZXF1ZXN0U3BhY2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6d2FpdEZvclJlcXVlc3RTcGFj
ZUNvbXBsZXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3Jl
YXNlVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmpl
Y3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVj
ayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpjbGVhck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhBZnRlclF1
b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRl
clF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkQWZ0ZXJR
dW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnRBZnRl
clF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3JB
ZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRU
cmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6YWJvcnRU
cmFuc2FjdGlvbldpdGhvdXRDYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1
dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bjo6ZGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c3RvcmFnZVF1b3RhTWFuYWdlckdldHRlcik6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oOgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBz
dG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp0cnlHcmFudFJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dXBkYXRlUXVvdGFCYXNlZE9u
VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90
YVVwZGF0ZWRCYXNlZE9uVXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFu
YWdlcjo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
Ojp+U3RvcmFnZVF1b3RhTWFuYWdlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpzcGFjZVVzYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlh
bGl6ZVVzZXJzSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjphZGRVc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVV
c2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJl
cXVlc3RTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjphc2tGb3JNb3JlU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAg
ICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3Rh
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1h
bmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6
cmVzZXRRdW90YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpzdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVv
dGFVc2VyLmg6IFJlbW92ZWQuCisKIDIwMTktMTEtMTIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21p
bGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlcyBsZWFr
IGlmIHRoZXkgaGF2ZSBhbiBhdHRhY2hlZCBvbmVuZGVkIEV2ZW50VGFyZ2V0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IGRmMmM0OGVjYzMxZjBjYzhlODE4NzUzZjgxOTI0MzQ2ZWMwNGI5YTUuLjQwY2I0NWQyZmZkOGJh
MjE2ZTk2YjFiNTliOTU3NzkxNWFiYTgzOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIw
MTktMTEtMTMgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jv
c3MtdGhyZWFkIHZlcnNpb24gU3RvcmFnZVF1b3RhTWFuYWdlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTcxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0
ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpy
ZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpkZWxldGVXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6Y3JlYXRlSURCU2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OnNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdl
cnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVN0b3JhZ2VR
dW90YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhclN0
b3JhZ2VRdW90YSk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVF1b3RhVXNlcnMpOiBEZWxldGVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6U2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZW5zdXJlT3Jp
Z2luU3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2Vy
cyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6Y2FjaGVSb290UGF0aCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6c2V0SURCUm9vdFBhdGgpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6
OmlkYlJvb3RQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlN0
b3JhZ2VRdW90YU1hbmFnZXJzOjpkZWZhdWx0UXVvdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U3RvcmFnZVF1b3RhTWFuYWdlcnM6OnNldERlZmF1
bHRRdW90YXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U3Rv
cmFnZVF1b3RhTWFuYWdlcnM6Om1hbmFnZXJzUGVyT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OmdldERpcmVjdG9yeVNpemUpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkVuZ2luZTo6ZGlza1VzYWdlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVT
dG9yYWdlOjpFbmdpbmU6OnJlcXVlc3RTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3Rv
cmFnZTo6RW5naW5lOjpyZWFkQ2FjaGVzRnJvbURpc2spOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkVuZ2luZTo6d3JpdGVTaXplRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6RW5naW5lOjpyZWFkU2l6ZUZpbGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkVuZ2luZTo6aW5pdGlhbGl6ZVF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmg6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpwdXQpOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3Rv
cmFnZTo6Q2FjaGVzOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlczo6Q2FjaGVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6On5D
YWNoZXMpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6dXBkYXRlU2l6
ZUZpbGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6aW5pdGlhbGl6
ZVNpemUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6Y2xlYXIpOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVxdWVzdFNwYWNlKToKKyAg
ICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OndyaXRlUmVjb3JkKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlbW92ZVJlY29yZCk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjp3aGVuSW5pdGlhbGl6ZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVzZXRTcGFjZVVzZWQp
OiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlcy5oOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6
ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcDoKKyAgICAgICAgKFdLQ29u
dGV4dFJlc2V0UXVvdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2
YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZXNldFF1b3RhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3Jl
OjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRl
cnMpOgorCiAyMDE5LTExLTEyICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBzaXplIGZpbGUgZm9yIENhY2hlU3RvcmFnZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5k
ZXggNDllOTRkZWYxMjkxYjdkZTBiNjFkMzgwNjAxY2ZmNzZkZWYyNWQ0Ny4uNzk1NzJmMWY0YzZi
NDI3OGI5YjhjZjQxNDVmOWMzY2NlYTJjZTNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMzc4
LDcgKzEzNzgsNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
c3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgKICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlci5oCiAgICAgc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKLSAgICBzdG9yYWdl
L1N0b3JhZ2VRdW90YVVzZXIuaAogICAgIHN0b3JhZ2UvU3RvcmFnZVR5cGUuaAogCiAgICAgc3R5
bGUvU3R5bGVDaGFuZ2UuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCBlNjFkYjhjOTQyOGQ5ODRkYTY0Njk2ZTdj
ODQyNzg3NDI2OWMyN2U2Li4wMDgzNGJmMmVkNTU2ZTI4OTg0ZTkzY2Y3M2VjNTI0MWRhMzY0OGI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcApAQCAtNDYsMjQgKzQ2LDI0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgSURCU2VydmVyIHsKIAotUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFn
ZXJHZXR0ZXIpCitSZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0
ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCU2VydmVyKHNlc3Npb25JRCwgV1RG
TW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKSk7CiB9CiAKLVJlZjxJREJTZXJ2ZXI+IElEQlNlcnZl
cjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmIHF1b3RhTWFuYWdlckdldHRlcikK
K1JlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VRdW90YU1hbmFn
ZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSURCU2VydmVyKHNlc3Npb25JRCwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBXVEZNb3ZlKHF1
b3RhTWFuYWdlckdldHRlcikpKTsKIH0KIAotSURCU2VydmVyOjpJREJTZXJ2ZXIoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIp
CitJREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0b3JhZ2VR
dW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiAgICAgOiBDcm9zc1RocmVh
ZFRhc2tIYW5kbGVyKCJJbmRleGVkRGF0YWJhc2UgU2VydmVyIiwgQXV0b2RyYWluZWRQb29sRm9y
UnVuTG9vcDo6VXNlKQogICAgICwgbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAgICwgbV9xdW90
YU1hbmFnZXJHZXR0ZXIoV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKQogewogfQogCi1JREJT
ZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJH
ZXR0ZXIpCitJREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0
dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQogICAgIDogQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlcigi
SW5kZXhlZERhdGFiYXNlIFNlcnZlciIsIEF1dG9kcmFpbmVkUG9vbEZvclJ1bkxvb3A6OlVzZSkK
ICAgICAsIG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKICAgICAsIG1fZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoKGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKQEAgLTY4MywxNTcgKzY4MywyOCBAQCB2b2lkIElE
QlNlcnZlcjo6cGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBW
ZWN0b3I8U2VjdXJpdHlPcgogCiB2b2lkIElEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVs
ZXRlRGF0YWJhc2VzKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgZm9yIChhdXRvJiB1c2Vy
IDogbV9xdW90YVVzZXJzLnZhbHVlcygpKQotICAgICAgICB1c2VyLT5yZXNldFNwYWNlVXNlZCgp
OwotCiAgICAgYXV0byBjYWxsYmFjayA9IG1fZGVsZXRlRGF0YWJhc2VDb21wbGV0aW9uSGFuZGxl
cnMudGFrZShjYWxsYmFja0lEKTsKICAgICBBU1NFUlQoY2FsbGJhY2spOwogICAgIGNhbGxiYWNr
KCk7CiB9CiAKLUlEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90YVVzZXIoSURCU2VydmVyJiBzZXJ2
ZXIsIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1hbmFnZXIsIENsaWVudE9yaWdpbiYmIG9yaWdpbikK
LSAgICA6IG1fc2VydmVyKHNlcnZlcikKLSAgICAsIG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5h
Z2VyKSkKLSAgICAsIG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAsIG1faXNJbml0aWFs
aXplZChtX3NlcnZlci5tX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotewotICAgIGlmIChtYW5h
Z2VyKQotICAgICAgICBtYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKLX0KLQotSURCU2VydmVyOjpR
dW90YVVzZXI6On5RdW90YVVzZXIoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVz
ZXI6OnJlc2V0U3BhY2VVc2VkKCkKLXsKLSAgICBtX3NwYWNlVXNlZCA9IDA7Ci0KLSAgICBpZiAo
IW1fbWFuYWdlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2VydmVyLm1fc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0luaXRp
YWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1faW5pdGlhbGl6YXRpb25D
YWxsYmFjayk7Ci0KLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIC8vIERvIGFk
ZC9yZW1vdmUgdG8gdHJpZ2dlciBjYWxsIHRvIHdoZW5Jbml0aWFsaXplZC4KLSAgICBtX21hbmFn
ZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgIG1fbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7Ci19
Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmNvbXB1dGVTcGFjZVVzZWQoKQotewotICAg
IHJlc2V0U3BhY2VVc2VkKCk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluY3Jl
YXNlU3BhY2VVc2VkKHVpbnQ2NF90IHNpemUpCi17Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQp
Ci0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9zcGFjZVVzZWQgKyBzaXplID4gbV9zcGFj
ZVVzZWQpOwotICAgIG1fc3BhY2VVc2VkICs9IHNpemU7Ci19Ci12b2lkIElEQlNlcnZlcjo6UXVv
dGFVc2VyOjpkZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKQotewotICAgIGlmICghbV9p
c0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fc3BhY2VVc2VkID49
IHNpemUpOwotICAgIG1fc3BhY2VVc2VkIC09IHNpemU7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpR
dW90YVVzZXI6OndoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2spCi17Ci0gICAgaWYgKG1faXNJbml0aWFsaXplZCkgewotICAgICAgICBjYWxsYmFjaygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1faW5pdGlhbGl6YXRpb25DYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spOwotICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2Vk
Rm9yT3JpZ2luKG1fb3JpZ2luKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5p
dGlhbGl6ZVNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgQVNTRVJUKG1faXNJ
bml0aWFsaXplZCB8fCAhbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlKTsKLSAgICBtX3NwYWNlVXNl
ZCA9IHNwYWNlVXNlZDsKLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgaWYgKGF1
dG8gY2FsbGJhY2sgPSBXVEZNb3ZlKG1faW5pdGlhbGl6YXRpb25DYWxsYmFjaykpCi0gICAgICAg
IGNhbGxiYWNrKCk7Ci19Ci0KLUlEQlNlcnZlcjo6UXVvdGFVc2VyJiBJREJTZXJ2ZXI6OmVuc3Vy
ZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICByZXR1cm4gKm1f
cXVvdGFVc2Vycy5lbnN1cmUob3JpZ2luLCBbdGhpcywgJm9yaWdpbl0gewotICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxRdW90YVVzZXI+KCp0aGlzLCBtX3F1b3RhTWFuYWdlckdldHRlcihtX3Nl
c3Npb25JRCwgb3JpZ2luKSwgQ2xpZW50T3JpZ2luIHsgb3JpZ2luIH0pOwotICAgIH0pLml0ZXJh
dG9yLT52YWx1ZTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2Vk
Rm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQotewotICAgIEFTU0VSVCghbV9z
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4s
IG9yaWdpbikpOwotfQotCi12b2lkIElEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdp
bihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uIElEQlNlcnZlcjo6cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1
aW50NjRfdCB0YXNrU2l6ZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBS
ZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fcXVvdGFN
YW5hZ2VyR2V0dGVyKG9yaWdpbik7CisgICAgaWYgKCFzdG9yYWdlUXVvdGFNYW5hZ2VyKQorICAg
ICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk7CiAKLSAgICBh
dXRvIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCA9IHRoaXMtPmRhdGFiYXNlRGlyZWN0b3J5UGF0aElz
b2xhdGVkQ29weSgpOwotICAgIGF1dG8gb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRh
dGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4u
dG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsICJ2
MCIpOwotICAgIGF1dG8gbmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRhdGFiYXNlSWRl
bnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2lu
LCBvcmlnaW4uY2xpZW50T3JpZ2luLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsICJ2MSIpOwotICAg
IGF1dG8gc2l6ZSA9IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVj
dG9yeShvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKLQot
ICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJ
REJTZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbiwgb3JpZ2luLCBzaXpl
KSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmln
aW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlVXNlZCkKLXsKLSAg
ICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbml0aWFsaXplU3BhY2VVc2VkKHNwYWNlVXNlZCk7
CisgICAgcmV0dXJuIHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9uQmFja2dyb3Vu
ZFRocmVhZCh0YXNrU2l6ZSk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpyZXF1ZXN0U3BhY2UoY29u
c3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJiBjYWxsYmFjaykKK3Vp
bnQ2NF90IElEQlNlcnZlcjo6ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdERpcmVjdG9yeSwg
Y29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAgYXV0byogcXVvdGFNYW5hZ2VyID0g
ZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikubWFuYWdlcigpOwotICAgIGlmICghcXVvdGFNYW5hZ2Vy
KSB7Ci0gICAgICAgIGNhbGxiYWNrKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHF1b3RhTWFuYWdlci0+cmVxdWVzdFNw
YWNlKHRhc2tTaXplLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpy
ZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBpZiAoYXV0
byogdXNlciA9IG1fcXVvdGFVc2Vycy5nZXQob3JpZ2luKSkKLSAgICAgICAgdXNlci0+cmVzZXRT
cGFjZVVzZWQoKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OmluY3JlYXNlU3BhY2VVc2VkKGNvbnN0
IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzaXplKQotewotICAgIGVuc3VyZVF1b3Rh
VXNlcihvcmlnaW4pLmluY3JlYXNlU3BhY2VVc2VkKHNpemUpOwotfQotCi12b2lkIElEQlNlcnZl
cjo6ZGVjcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90
IHNpemUpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuZGVjcmVhc2VTcGFjZVVzZWQo
c2l6ZSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjppbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgdGFza1NpemUpCi17Ci0gICAgZW5z
dXJlUXVvdGFVc2VyKG9yaWdpbikuaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodGFza1NpemUp
OwotfQorICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi12b2lkIElEQlNlcnZlcjo6ZGVj
cmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2
NF90IHNwYWNlVXNlZCkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5kZWNyZWFzZVBv
dGVudGlhbFNwYWNlVXNlZChzcGFjZVVzZWQpOworICAgIGF1dG8gb2xkVmVyc2lvbk9yaWdpbkRp
cmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2
ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCByb290RGlyZWN0
b3J5LCAidjAiKTsKKyAgICBhdXRvIG5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRh
YmFzZUlkZW50aWZpZXI6OmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRv
cE9yaWdpbiwgb3JpZ2luLmNsaWVudE9yaWdpbiwgcm9vdERpcmVjdG9yeSwgInYxIik7CisgICAg
cmV0dXJuIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShv
bGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJh
c2VzU2l6ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKIH0KIAogdm9p
ZCBJREJTZXJ2ZXI6OnVwZ3JhZGVGaWxlc0lmTmVjZXNzYXJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCBkM2EyMjNk
OTMyZDkxNTlkNTQ2NjYyOWY3MTdlZmZiNTc3NDEzY2FmLi5iZjJiNDc4ODQ1NDY4ZjNhMzQ5NWJi
ZmU5NTJlYTkwMzcwYzM2M2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAi
SURCQ29ubmVjdGlvblRvQ2xpZW50LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VJZGVudGlmaWVy
LmgiCiAjaW5jbHVkZSAiU3RvcmFnZVF1b3RhTWFuYWdlci5oIgotI2luY2x1ZGUgIlN0b3JhZ2VR
dW90YVVzZXIuaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0
aXZpdHkuaD4KQEAgLTU4LDkgKzU3LDkgQEAgZW51bSBjbGFzcyBTaG91bGRGb3JjZVN0b3AgOiBi
b29sIHsgTm8sIFllcyB9OwogCiBjbGFzcyBJREJTZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
REJTZXJ2ZXI+LCBwdWJsaWMgQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlciwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPElEQlNlcnZlcj4gewogcHVibGljOgotICAgIHVzaW5nIFF1b3RhTWFuYWdlckdldHRl
ciA9IFdURjo6RnVuY3Rpb248U3RvcmFnZVF1b3RhTWFuYWdlciooUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IENsaWVudE9yaWdpbiYpPjsKLSAgICBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKFBB
TDo6U2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKKyAgICB1c2lu
ZyBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyID0gV1RGOjpGdW5jdGlvbjxSZWZQdHI8U3RvcmFn
ZVF1b3RhTWFuYWdlcj4oY29uc3QgQ2xpZW50T3JpZ2luJik+OworICAgIHN0YXRpYyBSZWY8SURC
U2VydmVyPiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIm
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6
OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VR
dW90YU1hbmFnZXJHZXR0ZXImJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZ2lzdGVy
Q29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHVucmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwpAQCAtMTEx
LDIxICsxMTAsMTUgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmRE
ZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2b2lkICgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVs
ZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYs
IEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgdm9pZCByZXF1
ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKLSAgICB2
b2lkIGluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2
NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0
IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGluY3JlYXNlU3Bh
Y2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNpemUpOwotICAgIHZvaWQgZGVj
cmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6ZSk7Ci0gICAg
dm9pZCByZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mKTsKLQotICAgIHZvaWQgaW5p
dGlhbGl6ZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikgeyBlbnN1cmVRdW90
YVVzZXIob3JpZ2luKTsgfQorICAgIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIHJlcXVl
c3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHVpbnQ2NF90IGRpc2tVc2FnZShjb25zdCBTdHJpbmcmLCBjb25z
dCBDbGllbnRPcmlnaW4mKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJ5U3RvcChTaG91
bGRGb3JjZVN0b3ApOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lKCk7CiAKIHByaXZh
dGU6Ci0gICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJik7
Ci0gICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGly
ZWN0b3J5UGF0aCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOworICAgIElEQlNlcnZlcihQQUw6OlNl
c3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlckdldHRlciYmKTsKKyAgICBJREJTZXJ2ZXIoUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdl
UXVvdGFNYW5hZ2VyR2V0dGVyJiYpOwogCiAgICAgVW5pcXVlSURCRGF0YWJhc2UmIGdldE9yQ3Jl
YXRlVW5pcXVlSURCRGF0YWJhc2UoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CiAgICAg
CkBAIC0xNDIsNTEgKzEzNSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVEYXRhYmFzZXNN
b2RpZmllZFNpbmNlRm9yVmVyc2lvbihXYWxsVGltZSwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCByZW1vdmVEYXRhYmFzZXNXaXRoT3JpZ2luc0ZvclZlcnNpb24oY29uc3QgVmVjdG9yPFNlY3Vy
aXR5T3JpZ2luRGF0YT4mLCBjb25zdCBTdHJpbmcmKTsKIAotICAgIGNsYXNzIFF1b3RhVXNlciBm
aW5hbCA6IHB1YmxpYyBTdG9yYWdlUXVvdGFVc2VyIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBRdW90YVVzZXIoSURCU2VydmVyJiwgU3Rv
cmFnZVF1b3RhTWFuYWdlciosIENsaWVudE9yaWdpbiYmKTsKLSAgICAgICAgflF1b3RhVXNlcigp
OwotCi0gICAgICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1hbmFnZXIoKSB7IHJldHVybiBtX21h
bmFnZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIHNldFNwYWNlVXNlZCh1aW50NjRfdCBzcGFj
ZVVzZWQpIHsgbV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7IH0KLSAgICAgICAgdm9pZCByZXNldFNw
YWNlVXNlZCgpOwotCi0gICAgICAgIHZvaWQgaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodWlu
dDY0X3QgaW5jcmVhc2UpIHsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlICs9IGluY3JlYXNlOyB9
Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodWludDY0X3QgZGVjcmVh
c2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2VzdGltYXRlZFNwYWNlSW5jcmVh
c2UgPj0gZGVjcmVhc2UpOwotICAgICAgICAgICAgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlIC09
IGRlY3JlYXNlOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VTcGFjZVVzZWQodWlu
dDY0X3Qgc2l6ZSk7Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VTcGFjZVVzZWQodWludDY0X3Qgc2l6
ZSk7Ci0KLSAgICAgICAgdm9pZCBpbml0aWFsaXplU3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNl
ZCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBm
aW5hbAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsKLSAg
ICAgICAgICAgIHJldHVybiBtX3NwYWNlVXNlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZTsK
LSAgICAgICAgfQotICAgICAgICB2b2lkIGNvbXB1dGVTcGFjZVVzZWQoKSBmaW5hbDsKLSAgICAg
ICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5h
bDsKLQotICAgICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwotICAgICAgICBXZWFrUHRyPFN0b3Jh
Z2VRdW90YU1hbmFnZXI+IG1fbWFuYWdlcjsKLSAgICAgICAgQ2xpZW50T3JpZ2luIG1fb3JpZ2lu
OwotICAgICAgICBib29sIG1faXNJbml0aWFsaXplZCB7IGZhbHNlIH07Ci0gICAgICAgIHVpbnQ2
NF90IG1fc3BhY2VVc2VkIHsgMCB9OwotICAgICAgICB1aW50NjRfdCBtX2VzdGltYXRlZFNwYWNl
SW5jcmVhc2UgeyAwIH07Ci0gICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gbV9pbml0
aWFsaXphdGlvbkNhbGxiYWNrOwotICAgIH07Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBRdW90YVVz
ZXImIGVuc3VyZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mKTsKLSAgICB2b2lkIHN0YXJ0
Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZv
aWQgY29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mKTsKLSAgICB2
b2lkIGZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4m
LCB1aW50NjRfdCBzcGFjZVVzZWQpOwotCiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7
CiAgICAgSGFzaE1hcDxJREJDb25uZWN0aW9uSWRlbnRpZmllciwgUmVmUHRyPElEQkNvbm5lY3Rp
b25Ub0NsaWVudD4+IG1fY29ubmVjdGlvbk1hcDsKICAgICBIYXNoTWFwPElEQkRhdGFiYXNlSWRl
bnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFVuaXF1ZUlEQkRhdGFiYXNlPj4gbV91bmlxdWVJREJE
YXRhYmFzZU1hcDsKQEAgLTE5OCw4ICsxNDYsNyBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIG1f
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoOwogCi0gICAgSGFzaE1hcDxDbGllbnRPcmlnaW4sIHN0ZDo6
dW5pcXVlX3B0cjxRdW90YVVzZXI+PiBtX3F1b3RhVXNlcnM7Ci0gICAgUXVvdGFNYW5hZ2VyR2V0
dGVyIG1fcXVvdGFNYW5hZ2VyR2V0dGVyOworICAgIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIg
bV9xdW90YU1hbmFnZXJHZXR0ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJ
REJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggOThjZWQ2MzcwOTFkMzYyZGUyYmRj
MTNhZGZmMjhiOWI5NTA5ZmZjNS4uOTUxOGY0ZjE4ZWU2NTVkMjdjNTk1YWNiMDllNzAzMTFkZmE0
NDExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTE5NCw2ICsxOTQs
OSBAQCBJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdAogICAgIG9iamVjdFN0b3JlLT5yZW5hbWUobmV3
TmFtZSk7CiAgICAgdHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlUmVuYW1lZCgqb2JqZWN0U3RvcmUs
IG9sZE5hbWUpOwogCisgICAgbV9vYmplY3RTdG9yZXNCeU5hbWUucmVtb3ZlKG9sZE5hbWUpOwor
ICAgIG1fb2JqZWN0U3RvcmVzQnlOYW1lLnNldChuZXdOYW1lLCBvYmplY3RTdG9yZSk7CisKICAg
ICBtX2RhdGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBuZXdOYW1lKTsKIAogICAgIHJldHVybiBJREJFcnJvciB7IH07CkBAIC00ODQsNiArNDg3LDEx
IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0
b3JOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJCiAgICAgaWYgKG5ld0tleU51bWJlciA8IG9iamVj
dFN0b3JlLT5jdXJyZW50S2V5R2VuZXJhdG9yVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIElEQkVy
cm9yIHsgfTsKIAorICAgIGlmIChuZXdLZXlOdW1iZXIgPj0gKGRvdWJsZSltYXhHZW5lcmF0ZWRL
ZXlWYWx1ZSkgeworICAgICAgICBvYmplY3RTdG9yZS0+c2V0S2V5R2VuZXJhdG9yVmFsdWUobWF4
R2VuZXJhdGVkS2V5VmFsdWUgKyAxKTsKKyAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAg
ICB9CisKICAgICB1aW50NjRfdCBuZXdLZXlJbnRlZ2VyKG5ld0tleU51bWJlcik7CiAgICAgaWYg
KG5ld0tleUludGVnZXIgPD0gdWludDY0X3QobmV3S2V5TnVtYmVyKSkKICAgICAgICAgKytuZXdL
ZXlJbnRlZ2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggZmRlZGE2MzVlYjdkYzA1
ZjdmZjdlMDU4MmNjNDkyZjBjMmQ4MzJiYi4uMjc2NzIyODE3OWM1YzljODExZTZjYzIzMGQxZTM2
OGQ4ZmUxY2QyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0xODYsNTYgKzE4Niw2
IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIHF1b3RhRXJyb3JNZXNzYWdlTmFtZShjb25zdCBjaGFy
KiB0YXNrTmFtZSkKICAgICByZXR1cm4gbWFrZVN0cmluZygiRmFpbGVkIHRvICIsIHRhc2tOYW1l
LCAiIGluIGRhdGFiYXNlIGJlY2F1c2Ugbm90IGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIik7CiB9
CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlcXVlc3RTcGFjZShVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0IGNoYXIq
IHRhc2tOYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElEQkVycm9yJiYpPiYmIGNhbGxiYWNr
KQotewotICAgIG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0
YXNrU2l6ZSwgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHRoaXMsIHdlYWtUcmFuc2Fj
dGlvbiA9IG1ha2VXZWFrUHRyKHRyYW5zYWN0aW9uKSwgdGFza05hbWUsIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgewotICAgICAgICBpZiAoIXdl
YWtUaGlzKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJvciB9
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghd2Vha1Ry
YW5zYWN0aW9uKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJv
ciB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9vd25p
bmdQb2ludGVyRm9yQ2xvc2UpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBjbG9zaW5nIHRoZSBk
YXRhYmFzZSwgdGhlcmUgaXMgbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIG1vZGlmeSB0aGUgZGF0YWJh
c2UgYXQgdGhhdCBwb2ludC4KLSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgVW5rbm93
bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dp
dGNoIChkZWNpc2lvbikgewotICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uOjpEZW55OgotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVk
RXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSh0YXNrTmFtZSkgfSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50
OgotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyB9KTsKLSAgICAgICAgfTsKLSAgICB9
KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBs
ZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYgY2FsbGJhY2spCi17Ci0gICAgcmVxdWVzdFNw
YWNlKHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92ZShjYWxsYmFjaykpOwotfQotCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZp
ZXIsIHVpbnQ2NF90IHRhc2tTaXplKQotewotICAgIG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlh
bFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplKTsKLSAgICBBU1NFUlQo
IW1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5jb250YWlucyhpZGVudGlmaWVyKSk7Ci0gICAg
bV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmFkZChpZGVudGlmaWVyLCB0YXNrU2l6ZSk7Ci19
Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2
NF90IGlkZW50aWZpZXIsIGJvb2wgaXNUYXNrU3VjY2Vzc2Z1bCkKLXsKLSAgICBhdXRvIGl0ZXJh
dG9yID0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmZpbmQoaWRlbnRpZmllcik7Ci0gICAg
QVNTRVJUKGl0ZXJhdG9yICE9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5lbmQoKSk7Ci0g
ICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmln
aW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBpZiAoaXNUYXNrU3VjY2Vzc2Z1bCkKLSAgICAg
ICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRl
cmF0b3ItPnZhbHVlKTsKLSAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MucmVtb3ZlKGl0
ZXJhdG9yKTsKLX0KLQogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVu
T3BlcmF0aW9uKCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24gKCVwKSIsIHRoaXMpOwpAQCAtMjQ2LDI5
ICsxOTYsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVy
YXRpb24oKQogICAgIGlmICghbV9kYXRhYmFzZUluZm8pIHsKICAgICAgICAgaWYgKCFtX2lzT3Bl
bmluZ0JhY2tpbmdTdG9yZSkgewogICAgICAgICAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUg
PSB0cnVlOwotICAgICAgICAgICAgLy8gV2UgZG8gbm90IGtub3cgd2hldGhlciB0aGlzIGlzIGFu
IGV4aXN0aW5nIG9yIGEgbmV3IGRhdGFiYXNlLgotICAgICAgICAgICAgLy8gV2Ugc2V0IGEgc21h
bGwgY29zdCBzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBvcGVuIGFuIGluZmluaXRlIG51
bWJlciBvZiBkYXRhYmFzZS4KLSAgICAgICAgICAgIG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9p
ZGVudGlmaWVyLm9yaWdpbigpLCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0LCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgICAgICAgICAgaWYgKG1fb3duaW5nUG9pbnRlckZvckNsb3NlKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVu
eTogewotICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IElEQlJlc3VsdERhdGE6OmVy
cm9yKG1fY3VycmVudE9wZW5EQlJlcXVlc3QtPnJlcXVlc3REYXRhKCkucmVxdWVzdElkZW50aWZp
ZXIoKSwgSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFt
ZSgib3BlbkRhdGFiYXNlIikgfSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudE9wZW5E
QlJlcXVlc3QtPmNvbm5lY3Rpb24oKS5kaWRPcGVuRGF0YWJhc2UocmVzdWx0KTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudDoKLSAgICAgICAgICAgICAgICAgICAg
YXV0byBjYWxsYmFja0lEID0gdGhpcy0+Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIo
KTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lE
LCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0KTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy0+
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyLCBjYWxsYmFja0lEKSk7Ci0g
ICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
b3BlbkJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTgyMSwyMyArNzQ5LDMwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmFkZE9wZW5EYXRhYmFzZUNvbm5lY3Rpb24oUmVmPFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
CiAgICAgbV9vcGVuRGF0YWJhc2VDb25uZWN0aW9ucy5hZGQoYWRvcHRSZWYoY29ubmVjdGlvbi5s
ZWFrUmVmKCkpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9y
ZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJ
ZGVudGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShjb25z
dCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6
Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwogCisKKyAgICBJREJEYXRhYmFzZUluZm8g
ZGF0YWJhc2VJbmZvOworICAgIC8vIFF1b3RhIGNoZWNrLgorICAgIGF1dG8gZGVjaXNpb24gPSBt
X3NlcnZlci0+cmVxdWVzdFNwYWNlKGlkZW50aWZpZXIub3JpZ2luKCksIGRlZmF1bHRXcml0ZU9w
ZXJhdGlvbkNvc3QpOworICAgIGlmIChkZWNpc2lvbiA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3Rv
cmUsIGRhdGFiYXNlSW5mbywgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9y
TWVzc2FnZU5hbWUoIk9wZW5CYWNraW5nU3RvcmUiKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmUpOwogICAgIG1fYmFja2luZ1N0b3JlID0g
bV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShpZGVudGlmaWVyKTsKICAgICBtX2JhY2tpbmdT
dG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gbV9iYWNraW5nU3RvcmUtPnN1
cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zKCk7CiAgICAgbV9iYWNraW5nU3RvcmVJc0Vw
aGVtZXJhbCA9IG1fYmFja2luZ1N0b3JlLT5pc0VwaGVtZXJhbCgpOwogCi0gICAgSURCRGF0YWJh
c2VJbmZvIGRhdGFiYXNlSW5mbzsKICAgICBhdXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdl
dE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbyk7Ci0KLSAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5mbywgZXJyb3IsICB0YXNrSWRlbnRp
ZmllcikpOworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJ
bmZvLCBlcnJvcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2lu
Z1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9y
LCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9w
ZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJv
ciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhl
ZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlIik7CkBA
IC04NDgsOCArNzgzLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IEkKICAgICBBU1NFUlQobV9p
c09wZW5pbmdCYWNraW5nU3RvcmUpOwogICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gZmFs
c2U7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh0YXNrSWRlbnRpZmllciwgZXJyb3Iu
aXNOdWxsKCkpOwotCiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpCiAgICAgICAg
IHJldHVybjsKIApAQCAtODYxLDMzICs3OTQsMjMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
Y3JlYXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikg
VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlIik7CiAKLSAgICBhdXRvIHRhc2tT
aXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsKLSAg
ICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAiY3JlYXRlT2JqZWN0U3RvcmUi
LCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNO
dWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAgICAgICAg
ICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICB0aGlzLT5jcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh0YXNr
U2l6ZSwgdHJhbnNhY3Rpb24sIGluZm8sIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJR
dW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRf
dCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2sp
KTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXJ0U3Bh
Y2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwotICAgIHBvc3REYXRhYmFzZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50
aWZpZXIoKSwgaW5mbywgIHF1b3RhRXJyb3IpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRl
T2JqZWN0U3RvcmUsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rp
b24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbykpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29u
c3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikK
K3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZShjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVJbmZvJiBpbmZvKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2Jq
ZWN0U3RvcmUiKTsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwoKSkgewotICAgICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlm
aWVyLCBxdW90YUVycm9yLCBpbmZvKSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0
YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5mbyk7
CisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCB0YXNr
U2l6ZSk7CisgICAgaWYgKGRlY2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
OjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0
b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVv
dGFFcnJvck1lc3NhZ2VOYW1lKCJDcmVhdGVPYmplY3RTdG9yZSIpKSwgaW5mbykpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC05MDMsNyArODI2LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIo
bWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwog
Ci0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5p
c051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5m
by0+YWRkRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvKTsKIApAQCAtOTE1LDE3ICs4MzcsNiBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3Rv
cmUiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBb
dGhpcywgJnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU5hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5kZWxldGVPYmplY3RTdG9yZUFm
dGVyUXVvdGFDaGVjayh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVOYW1lLCBXVEZNb3ZlKGNhbGxi
YWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVj
dFN0b3JlQWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgRXJyb3JDYWxsYmFjayBjYWxs
YmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVy
cm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTkzNiwxNCArODQ3LDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0
ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlT2JqZWN0U3Rv
cmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8tPmlk
ZW50aWZpZXIoKSkpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSwgbV9p
ZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRp
ZmllcigpLCBpbmZvLT5pZGVudGlmaWVyKCkpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1EZWxldGVPYmplY3RTdG9yZShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQogewogICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUiKTsKIAorICAgIGlmIChtX3NlcnZl
ci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlT2JqZWN0
U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBx
dW90YUVycm9yTWVzc2FnZU5hbWUoIkRlbGV0ZU9iamVjdFN0b3JlIikpLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVChtX2JhY2tp
bmdTdG9yZSk7CiAgICAgbV9iYWNraW5nU3RvcmUtPmRlbGV0ZU9iamVjdFN0b3JlKHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIApAQCAtOTY3LDM4ICs4ODMs
MjggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmUoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9i
amVjdFN0b3JlIik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9u
Q29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rp
b24sIHRhc2tTaXplLCAicmVuYW1lT2JqZWN0U3RvcmUiLCBbdGhpcywgdGFza1NpemUsICZ0cmFu
c2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5p
c051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAg
ICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIHRoaXMtPnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRh
c2tTaXplLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBXVEZN
b3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwg
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNh
bGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxs
YmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAg
ICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIElEQkVycm9yIGVycm9y
ID0gcXVvdGFFcnJvcjsKKyAgICBJREJFcnJvciBlcnJvcjsKICAgICBhdXRvKiBpbmZvID0gbV9k
YXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRp
Zmllcik7CiAgICAgaWYgKCFpbmZvKQogICAgICAgICBlcnJvciA9IElEQkVycm9yIHsgVW5rbm93
bkVycm9yLCAiQXR0ZW1wdCB0byByZW5hbWUgbm9uLWV4aXN0YW50IG9iamVjdCBzdG9yZSJfcyB9
OwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7Ci0g
ICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUs
IGVycm9yKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBtX2lkZW50
aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVy
KCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKIH0KIAotdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBu
ZXdOYW1lLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKCFlcnJvci5pc051bGwo
KSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1l
KSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0
ZU9wZXJhdGlvbkNvc3QgKyBuZXdOYW1lLnNpemVJbkJ5dGVzKCk7CisgICAgYXV0byBkZWNpc2lv
biA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCB0YXNrU2l6ZSk7CisgICAgaWYgKGRl
Y2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50
aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1l
KCJSZW5hbWVPYmplY3RTdG9yZSIpKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMTMsNyArOTE5LDYgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RT
dG9yZSIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVy
LCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2Rh
dGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdO
YW1lKTsKIApAQCAtMTAyNSwyOCArOTMwLDIyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNs
ZWFyT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3RpCiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVu
aXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVz
dFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJy
b3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAg
ICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy0+Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNo
ZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWlu
dDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxi
YWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47Ci0gICAgcG9zdERh
dGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8o
KS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllcikpOworICAgIHBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1DbGVhck9iamVjdFN0b3JlLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQs
IHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllcikp
OwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpCit2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZShjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RT
dG9yZSIpOwogCisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1DbGVhck9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJDbGVhck9iamVj
dFN0b3JlIikpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBBU1NFUlQobV9iYWNr
aW5nU3RvcmUpOwogICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIApAQCAtMTA2NywzMyArOTY2
LDIyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4KFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJ
bmRleCIpOwogCi0gICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3Qg
KyBlc3RpbWF0ZVNpemUoaW5mbyk7Ci0gICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNr
U2l6ZSwgImNyZWF0ZUluZGV4IiwgW3RoaXMsIHRhc2tTaXplLCAmdHJhbnNhY3Rpb24sIGluZm8s
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAg
ICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRl
ZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Y3JlYXRlSW5kZXhBZnRlclF1
b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0aW9uLCBpbmZvLCBXVEZNb3ZlKGNhbGxiYWNrKSwg
ZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRl
eEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgRXJyb3JDYWxs
YmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCi17CiAgICAgdWludDY0
X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNr
KSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGFydFNw
YWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVy
KCksIGluZm8sIHF1b3RhRXJyb3IpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgs
IG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlk
ZW50aWZpZXIoKSwgaW5mbykpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
Q3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiBp
bmZvLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1DcmVhdGVJbmRleChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQogewogICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgiKTsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwo
KSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBxdW90YUVycm9yLCBpbmZvKSk7CisgICAgYXV0byB0YXNrU2l6ZSA9IGRl
ZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5mbyk7CisgICAgYXV0byBk
ZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCB0YXNrU2l6ZSk7CisgICAg
aWYgKGRlY2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7Cisg
ICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lkZW50
aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1l
KCJDcmVhdGVJbmRleCIpKSwgaW5mbykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
MTE1LDggKzEwMDMsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRl
SW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4Iik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFz
ayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKLQogICAgIGlmIChlcnJvci5p
c051bGwoKSkgewogICAgICAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOwogICAgICAgICBhdXRv
KiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0
U3RvcmUoaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CkBAIC0xMTMyLDE3ICsxMDE4LDYg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4
Iik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3Ro
aXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAg
IGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJy
b3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5kZWxl
dGVJbmRleEFmdGVyUXVvdGFDaGVjayh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleE5hbWUsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAg
ICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3Zl
KGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0x
MTU5LDE0ICsxMDM0LDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4QWZ0
ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgsIGNhbGxiYWNrSUQs
IHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
aW5kZXhJbmZvLT5pZGVudGlmaWVyKCkpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5k
ZXgsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygp
LmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleEluZm8tPmlkZW50aWZp
ZXIoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBj
b25zdCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtRGVsZXRlSW5kZXgoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgdWludDY0
X3QgaW5kZXhJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5k
ZXgiKTsKIAorICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtRGVsZXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVv
dGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIkRlbGV0ZUluZGV4IikpLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllcikpOworICAgICAgICByZXR1cm47
CisgICAgfQorCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBtX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlSW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGluZGV4SWRlbnRpZmllcik7CiAKQEAgLTExOTMsMjMgKzEwNzMsMTEgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24sIHUKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4Iik7CiAKLSAgICBh
dXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUlu
Qnl0ZXMoKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicmVuYW1l
SW5kZXgiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYm
ICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxs
YmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgdGhpcy0+cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwgV1RG
TW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdO
YW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikK
LXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdU
Rk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIElEQkVycm9yIGVycm9yID0gcXVvdGFFcnJvcjsKKyAgICBJREJFcnJvciBlcnJvcjsK
ICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0
aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICBpZiAoIW9iamVjdFN0
b3JlSW5mbykKICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkF0dGVt
cHQgdG8gcmVuYW1lIGluZGV4IGluIG5vbi1leGlzdGFudCBvYmplY3Qgc3RvcmUiX3MgfTsKQEAg
LTEyMTgsMTcgKzEwODYsMTkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhB
ZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkQKICAgICBpZiAoIWlu
ZGV4SW5mbykKICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkF0dGVt
cHQgdG8gcmVuYW1lIG5vbi1leGlzdGFudCBpbmRleCJfcyB9OwogCi0gICAgc3RhcnRTcGFjZUlu
Y3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJl
bmFtZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsK
KyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgsIG1faWRlbnRpZmllci5vcmlnaW4oKSwg
Y2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGVycm9yKSk7CiB9CiAKLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgoY29uc3QgQ2xpZW50T3JpZ2lu
JiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUs
IGNvbnN0IElEQkVycm9yJiBlcnJvcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
ICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFt
ZUluZGV4Iik7CiAKLSAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkpOworICAgIC8v
IFF1b3RhIGNoZWNrLgorICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25D
b3N0ICsgbmV3TmFtZS5zaXplSW5CeXRlcygpOworICAgIGF1dG8gZGVjaXNpb24gPSBtX3NlcnZl
ci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgdGFza1NpemUpOworICAgIGlmIChkZWNpc2lvbiA9PSBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihR
dW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiUmVuYW1lSW5kZXgiKSks
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyNDMsNyArMTExMyw2IEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAot
ICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IuaXNO
dWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAgICAgICBhdXRvKiBvYmplY3RT
dG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlSW5mbyk7CkBA
IC0xMjU3LDUyICsxMTI2LDQwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1S
ZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgcGVyZm9y
bUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CiB9CiAKLXZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktl
eURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RT
dG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNr
KQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEm
IHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYg
dmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUs
IEtleURhdGFDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRk
Iik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVz
dGltYXRlU2l6ZShrZXlEYXRhKSArIGVzdGltYXRlU2l6ZSh2YWx1ZSk7Ci0gICAgQVNTRVJUKG1f
ZGF0YWJhc2VJbmZvKTsKLSAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZvLT5p
bmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShyZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZp
ZXIoKSk7Ci0gICAgaWYgKG9iamVjdFN0b3JlKQotICAgICAgICB0YXNrU2l6ZSArPSBvYmplY3RT
dG9yZS0+aW5kZXhOYW1lcygpLnNpemUoKSAqIHRhc2tTaXplOwotCi0gICAgcmVxdWVzdFNwYWNl
KHRyYW5zYWN0aW9uLCB0YXNrU2l6ZSwgInB1dE9yQWRkIiwgW3RoaXMsIHRhc2tTaXplLCByZXF1
ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIG92
ZXJ3cml0ZU1vZGVdKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlz
TnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICB0aGlzLT5wdXRPckFkZEFmdGVyUXVvdGFDaGVjayh0YXNrU2l6
ZSwgcmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBXVEZNb3ZlKGNh
bGxiYWNrKSwgZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
dXRPckFkZEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJW
YWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0
ZU1vZGUsIEtleURhdGFDYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJy
b3IpCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1
cm47CiAKLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsK
LSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRy
YW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIo
KSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIHF1b3RhRXJyb3IpKTsKKyAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUHV0T3JBZGQsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwg
cmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0
b3JlSWRlbnRpZmllcigpLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSkpOwogfQogCi12
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBr
ZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgb3JpZ2luYWxSZWNvcmRWYWx1ZSwgSW5kZXhlZERCOjpP
YmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgY29uc3QgSURCRXJyb3ImIHF1
b3RhRXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoY29uc3Qg
Q2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURC
VmFsdWUmIG9yaWdpbmFsUmVjb3JkVmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3Jp
dGVNb2RlIG92ZXJ3cml0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFk
ZCIpOwogCi0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAgICBBU1NFUlQob2JqZWN0U3Rv
cmVJZGVudGlmaWVyKTsKLQogICAgIElEQktleURhdGEgdXNlZEtleTsKICAgICBJREJFcnJvciBl
cnJvcjsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwoKSkgewotICAgICAgICBwb3N0RGF0
YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBxdW90YUVycm9y
LCB1c2VkS2V5KSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0YXNrU2l6ZSA9IGRl
ZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoa2V5RGF0YSkgKyBlc3RpbWF0
ZVNpemUob3JpZ2luYWxSZWNvcmRWYWx1ZSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsK
KyAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdP
YmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIGlmIChvYmplY3RTdG9yZSkK
KyAgICAgICAgdGFza1NpemUgKz0gb2JqZWN0U3RvcmUtPmluZGV4TmFtZXMoKS5zaXplKCkgKiB0
YXNrU2l6ZTsKKyAgICBhdXRvIGRlY2lzaW9uID0gbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmln
aW4sIHRhc2tTaXplKTsKKyAgICBpZiAoZGVjaXNpb24gPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6
RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90
YUVycm9yTWVzc2FnZU5hbWUoIlB1dE9yQWRkIikpLCB1c2VkS2V5KSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOworICAgIEFTU0VSVChvYmpl
Y3RTdG9yZUlkZW50aWZpZXIpOwogICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoSW5kZXhlZERCLCAiJXAgLSBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVB1dE9yQWRkOiBtX2JhY2tpbmdTdG9yZSBpcyBudWxsIiwgdGhpcyk7CiAgICAgICAgIGVy
cm9yID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFs
aWQgZm9yIGNhbGwgdG8gcHV0IG9yIGFkZCJfcyk7CkBAIC0xMzc2LDgwICsxMjMzLDY1IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElECiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IuaXNOdWxsKCkpOwogICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVu
dGlmaWVyLCBlcnJvciwgcmVzdWx0S2V5KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
Z2V0UmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25z
dCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldFJlY29yZERhdGEmIGdl
dFJlY29yZERhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29u
c3QgSURCR2V0UmVjb3JkRGF0YSYgZ2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2Fs
bGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQiKTsKIAotICAgIHdhaXRGb3JS
ZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGdl
dFJlY29yZERhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikg
bXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNh
bGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIHRoaXMtPmdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwg
Z2V0UmVjb3JkRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiBnZXRSZWNvcmREYXRh
LCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lE
ID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAo
IWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICh1aW50NjRfdCBpbmRleElk
ZW50aWZpZXIgPSByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIoKSkKLSAgICAgICAgcG9zdERh
dGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2Fj
dGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGlu
ZGV4SWRlbnRpZmllciwgcmVxdWVzdERhdGEuaW5kZXhSZWNvcmRUeXBlKCksIGdldFJlY29yZERh
dGEua2V5UmFuZ2VEYXRhKSk7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29y
ZCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2Fj
dGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGlu
ZGV4SWRlbnRpZmllciwgcmVxdWVzdERhdGEuaW5kZXhSZWNvcmRUeXBlKCksIGdldFJlY29yZERh
dGEua2V5UmFuZ2VEYXRhKSk7CiAgICAgZWxzZQotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0
UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwg
cmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGdldFJlY29yZERhdGEua2V5UmFu
Z2VEYXRhLCBnZXRSZWNvcmREYXRhLnR5cGUpKTsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdl
dFJlY29yZCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50
cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVy
KCksIGdldFJlY29yZERhdGEua2V5UmFuZ2VEYXRhLCBnZXRSZWNvcmREYXRhLnR5cGUpKTsKIH0K
IAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3JkcyhVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3RE
YXRhLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIEdldEFs
bFJlc3VsdHNDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFs
bFJlY29yZHMoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRB
bGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIEdldEFsbFJlc3VsdHNDYWxsYmFjayBj
YWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHMiKTsKIAotICAgIHdh
aXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERh
dGEsIGdldEFsbFJlY29yZHNEYXRhLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRv
JiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5nZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNr
KHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAg
IH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzQWZ0ZXJRdW90
YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxs
UmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2Fs
bGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJRCwg
cmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIGdldEFsbFJlY29yZHNEYXRhKSk7
CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJlY29yZHMsIG1faWRlbnRpZmllci5vcmlnaW4o
KSwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIGdldEFs
bFJlY29yZHNEYXRhKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRS
ZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgSURCR2V0UmVjb3JkRGF0
YVR5cGUgdHlwZSkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQoY29u
c3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURh
dGEsIElEQkdldFJlY29yZERhdGFUeXBlIHR5cGUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1HZXRSZWNvcmQiKTsKIAotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KICAgICBJREJH
ZXRSZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwg
MCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9z
dERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIHJlc3VsdCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBJREJFcnJvciBlcnJvciA9IG1f
YmFja2luZ1N0b3JlLT5nZXRSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGtleVJhbmdlRGF0YSwgdHlwZSwgcmVzdWx0KTsKIAogICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVz
dWx0KSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29y
ZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVj
b3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKK3ZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwg
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1
aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIHJlY29y
ZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCiB7CiAgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1HZXRJbmRleFJlY29yZCIpOwogCi0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsK
LQogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3Bh
Y2Uob3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgewor
ICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSWRlbnRp
ZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgcmVzdWx0KSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIElEQkVycm9y
IGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldEluZGV4UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRp
Zmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIHJlY29yZFR5cGUs
IHJhbmdlLCByZXN1bHQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3Jk
LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKQEAgLTE0NjMsMTQgKzEzMDUs
MTggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IEkKICAgICBwZXJmb3JtR2V0UmVzdWx0Q2FsbGJh
Y2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KTsKIH0KIAotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJlY29yZHModWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhKQordm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJlY29yZHMoY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRh
JiBnZXRBbGxSZWNvcmRzRGF0YSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJl
Y29yZHMiKTsKIAotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KICAgICBJREJHZXRBbGxS
ZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkg
PT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtR2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJF
cnJvcihRdW90YUV4Y2VlZGVkRXJyb3IpLCBXVEZNb3ZlKHJlc3VsdCkpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgSURCRXJyb3Ig
ZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0QWxsUmVjb3Jkcyh0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGdldEFsbFJlY29yZHNEYXRhLCByZXN1bHQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtR2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgV1RGTW92ZShy
ZXN1bHQpKSk7CkBAIC0xNDg0LDM3ICsxMzMwLDMwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
CiAgICAgcGVyZm9ybUdldEFsbFJlc3VsdHNDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yLCByZXN1bHQpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudChVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxi
YWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQoY29uc3QgSURC
UmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBD
b3VudENhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQiKTsK
IAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywg
cmVxdWVzdERhdGEsIHJhbmdlLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYg
ZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICB0aGlzLT5nZXRDb3VudEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0
RGF0YSwgcmFuZ2UsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Z2V0Q291bnRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxi
YWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAg
ICAgICAgcmV0dXJuOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCwgY2FsbGJhY2tJRCwg
cmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0
b3JlSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIoKSwgcmFuZ2UpKTsK
KyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2Fs
bGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRh
Lm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIoKSwg
cmFuZ2UpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldENvdW50KHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWlu
dDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0
YSkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudChjb25zdCBDbGllbnRP
cmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYga2V5UmFuZ2VEYXRhKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQi
KTsKIAorICAgIHVpbnQ2NF90IGNvdW50OworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNl
KG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAg
ICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0Q291bnQsIGNhbGxiYWNrSWRlbnRpZmll
ciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgY291bnQpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgQVNTRVJUKG9iamVj
dFN0b3JlSWRlbnRpZmllcik7Ci0KLSAgICB1aW50NjRfdCBjb3VudDsKICAgICBJREJFcnJvciBl
cnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRDb3VudCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9i
amVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBrZXlSYW5nZURhdGEsIGNvdW50
KTsKIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldENvdW50LCBjYWxsYmFja0lkZW50
aWZpZXIsIGVycm9yLCBjb3VudCkpOwpAQCAtMTUyOCwzNSArMTM2NywyOCBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJRAogICAgIHBlcmZvcm1Db3VudENhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmll
ciwgZXJyb3IsIGNvdW50KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVj
b3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJS
ZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VE
YXRhLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVs
ZXRlUmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VD
b21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92
ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMt
PmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBFcnJvckNhbGxiYWNr
IGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAg
ICAgcmV0dXJuOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQsIGNhbGxiYWNrSUQs
IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RT
dG9yZUlkZW50aWZpZXIoKSwga2V5UmFuZ2VEYXRhKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURl
bGV0ZVJlY29yZCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0
YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlm
aWVyKCksIGtleVJhbmdlRGF0YSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKK3ZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmln
aW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybURlbGV0ZVJlY29yZCIpOwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlUmFuZ2UodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIHJhbmdlKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJv
cihRdW90YUV4Y2VlZGVkRXJyb3IpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBJ
REJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVSYW5nZSh0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgcmFuZ2UpOwogICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcikpOwog
fQogCkBAIC0xNTY4LDM0ICsxNDAwLDI3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1EZWxldGVSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zCiAgICAg
cGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CiB9CiAKLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29u
c3QgSURCQ3Vyc29ySW5mbyYgaW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1
ZXN0RGF0YSwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2Fs
bGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yIik7CiAKLSAgICB3YWl0Rm9y
UmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBp
bmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUg
ewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhX
VEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLT5vcGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCBpbmZvLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
Om9wZW5DdXJzb3JBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3RE
YXRhLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFj
aykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9y
KFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVy
bjsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtT3BlbkN1cnNvciwgY2FsbGJhY2tJRCwgcmVxdWVzdERh
dGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIGluZm8pKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
T3BlbkN1cnNvciwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0
YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgaW5mbykpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtT3BlbkN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJ
REJDdXJzb3JJbmZvJiBpbmZvKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5D
dXJzb3IoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1P
cGVuQ3Vyc29yIik7CiAKICAgICBJREJHZXRSZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3NlcnZl
ci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtT3BlbkN1cnNvciwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IpLCByZXN1bHQp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2lu
Z1N0b3JlLT5vcGVuQ3Vyc29yKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbywgcmVzdWx0KTsK
IAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybU9wZW5DdXJzb3IsIGNhbGxiYWNrSWRlbnRp
ZmllciwgZXJyb3IsIHJlc3VsdCkpOwpAQCAtMTYwOSwzNCArMTQzNCwyNyBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtT3BlbkN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0CiAgICAgcGVyZm9ybUdldFJlc3VsdENhbGxiYWNrKGNhbGxiYWNrSWRlbnRp
ZmllciwgZXJyb3IsIHJlc3VsdCk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJh
dGVDdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0
IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEm
IGRhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6aXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFp
bikgVW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IiKTsKIAotICAgIHdhaXRGb3JSZXF1
ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGRhdGEs
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0g
ICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1v
dmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IHRoaXMtPml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGRhdGEsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
aXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhLCBHZXRSZXN1bHRDYWxsYmFj
ayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAg
ICAgIHJldHVybjsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvciwgY2FsbGJhY2tJ
RCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLmN1cnNv
cklkZW50aWZpZXIoKSwgZGF0YSkpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29y
LCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0
aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5jdXJzb3JJZGVudGlmaWVyKCksIGRhdGEpKTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBjdXJzb3JJZGVu
dGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSkKK3ZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29yKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2lu
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1
cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhKQogewogICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvciIpOwogCiAgICAgSURCR2V0UmVzdWx0
IHJlc3VsdDsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0
b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUl0ZXJhdGVDdXJzb3IsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3Io
UXVvdGFFeGNlZWRlZEVycm9yKSwgcmVzdWx0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAg
ICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+aXRlcmF0ZUN1cnNvcih0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGN1cnNvcklkZW50aWZpZXIsIGRhdGEsIHJlc3VsdCk7CiAKICAgICBp
ZiAoZXJyb3IuaXNOdWxsKCkpIHsKQEAgLTE2ODgsMTcgKzE1MDYsNiBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdAogCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigp
LmRhdGFiYXNlKCkgPT0gdGhpcyk7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlv
bih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051
bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNvbW1pdFRyYW5zYWN0aW9uQWZ0
ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9uLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uQWZ0ZXJRdW90YUNo
ZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTcxNCwxMyArMTUyMSwxNSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpjb21taXRUcmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1p
dFRyYW5zYWN0aW9uLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigp
KSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uLCBtX2lkZW50aWZpZXIu
b3JpZ2luKCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29t
bWl0VHJhbnNhY3Rpb24oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIpCiB7Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgTE9HKEluZGV4
ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiAt
ICVzIiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VR
dW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tS
ZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1
b3RhRXhjZWVkZWRFcnJvciksIHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOworICAgICAgICByZXR1
cm47CisgICAgfQogCiAgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Y29tbWl0
VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdHJh
bnNhY3Rpb25JZGVudGlmaWVyKSk7CkBAIC0xNzUyLDI0ICsxNTYxLDEzIEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsCiAgICAgdHJhbnNhY3Rpb25Db21wbGV0ZWQobV9maW5pc2hpbmdUcmFuc2Fj
dGlvbnMudGFrZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbiwgV2FpdEZvclBlbmRpbmdUYXNrcyB3YWl0Rm9yUGVuZGluZ1Rhc2tzLCBFcnJv
ckNhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2Fj
dGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgRXJyb3JDYWxs
YmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJ
bmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24gLSAl
cyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwogCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigp
LmRhdGFiYXNlKCkgPT0gdGhpcyk7CiAKLSAgICBpZiAod2FpdEZvclBlbmRpbmdUYXNrcyA9PSBX
YWl0Rm9yUGVuZGluZ1Rhc2tzOjpZZXMpIHsKLSAgICAgICAgd2FpdEZvclJlcXVlc3RTcGFjZUNv
bXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rpb24sIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBpZiAo
IWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJv
cikpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHRoaXMtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIFdhaXRGb3JQZW5kaW5nVGFza3M6
Ok5vLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1
cm47CkBAIC0xNzg1LDcgKzE1ODMsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRy
YW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24s
IGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKTsKKyAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxs
YmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CiB9CiAKIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZEZpbmlzaEhhbmRsaW5nVmVyc2lvbkNoYW5nZShVbmlxdWVJREJE
YXRhYmFzZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQpAQCAtMTgwNywxMSArMTYwNSwxNiBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoVW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aQogICAgIGludm9rZU9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIo
KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24o
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1B
Ym9ydFRyYW5zYWN0aW9uKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiAt
ICVzIiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKIAorICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihR
dW90YUV4Y2VlZGVkRXJyb3IpLCB0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmFib3J0
VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB0cmFu
c2FjdGlvbklkZW50aWZpZXIpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggZWMzZmMw
YzczZWEzMGUyNGU3YTBjZWU1ODg5ZjM5NjFmMGNjNGMyNy4uNzQ0OTg1MjRmOTE3MTI4MzhhOTZk
MjdmZjg1NmMzNGY3N2NhMDVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTQ0LDYgKzQ0
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQ2xpZW50T3JpZ2luOwogY2xh
c3MgSURCRXJyb3I7CiBjbGFzcyBJREJHZXRBbGxSZXN1bHQ7CiBzdHJ1Y3QgSURCR2V0UmVjb3Jk
RGF0YTsKQEAgLTg5LDE3ICs5MCwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVJbmRleChV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCSW5kZXhJbmZvJiwgRXJyb3JD
YWxsYmFjayk7CiAgICAgdm9pZCBkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSwgRXJyb3JDYWxsYmFjayk7CiAgICAgdm9pZCByZW5hbWVJbmRleChVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRf
dCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjayk7
Ci0gICAgdm9pZCBwdXRPckFkZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmLCBJbmRl
eGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrKTsKLSAgICB2
b2lkIGdldFJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVx
dWVzdERhdGEmLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2spOwot
ICAgIHZvaWQgZ2V0QWxsUmVjb3JkcyhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29u
c3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdldEFsbFJl
c3VsdHNDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRDb3VudChVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBD
b3VudENhbGxiYWNrKTsKLSAgICB2b2lkIGRlbGV0ZVJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
LCBFcnJvckNhbGxiYWNrKTsKLSAgICB2b2lkIG9wZW5DdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCQ3Vyc29ySW5mbyYs
IEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGl0ZXJhdGVDdXJzb3IoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCSXRlcmF0
ZUN1cnNvckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CisgICAgdm9pZCBwdXRPckFkZChjb25z
dCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIElu
ZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2spOworICAg
IHZvaWQgZ2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVjb3Jk
RGF0YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKKyAgICB2b2lkIGdldEFsbFJlY29yZHMoY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdldEFsbFJlc3Vs
dHNDYWxsYmFjayk7CisgICAgdm9pZCBnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYsIENvdW50Q2FsbGJhY2spOworICAgIHZvaWQgZGVsZXRlUmVj
b3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXJyb3JD
YWxsYmFjayk7CisgICAgdm9pZCBvcGVuQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29u
c3QgSURCQ3Vyc29ySW5mbyYsIEdldFJlc3VsdENhbGxiYWNrKTsKKyAgICB2b2lkIGl0ZXJhdGVD
dXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYs
IEdldFJlc3VsdENhbGxiYWNrKTsKICAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBFcnJvckNhbGxiYWNrKTsKLQotICAgIGVudW0gY2xhc3Mg
V2FpdEZvclBlbmRpbmdUYXNrcyB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIGFib3J0VHJhbnNhY3Rp
b24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIFdhaXRGb3JQZW5kaW5nVGFza3MsIEVy
cm9yQ2FsbGJhY2spOworICAgIHZvaWQgYWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiwgRXJyb3JDYWxsYmFjayk7CiAKICAgICB2b2lkIGRpZEZpbmlzaEhhbmRs
aW5nVmVyc2lvbkNoYW5nZShVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCB0cmFu
c2FjdGlvbkRlc3Ryb3llZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJik7CkBAIC0xMzks
NDQgKzEzOCwyNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzY2hlZHVsZVNodXRkb3duRm9yQ2xv
c2UoKTsKIAotICAgIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0
X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJPYmpl
Y3RTdG9yZUluZm8mLCBFcnJvckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQg
cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsK
LSAgICB2b2lkIGNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCSW5kZXhJbmZvJiwgRXJyb3JD
YWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHJlbmFtZUluZGV4QWZ0ZXJRdW90
YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsK
LSAgICB2b2lkIHB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBjb25z
dCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIElu
ZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2ssIGNvbnN0
IElEQkVycm9yJik7Ci0gICAgdm9pZCBkZWxldGVSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFcnJvckNhbGxiYWNrKTsK
LQotICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJvckNh
bGxiYWNrKTsKLSAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmVBZmV0UXVvdGFDaGVjayhVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBF
cnJvckNhbGxiYWNrKTsKLSAgICB2b2lkIGRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYsIEVycm9yQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0UmVjb3JkQWZ0ZXJR
dW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYs
IEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hl
Y2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdl
dEFsbFJlc3VsdHNDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRDb3VudEFmdGVyUXVvdGFDaGVjayhj
b25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIENvdW50Q2FsbGJh
Y2spOwotICAgIHZvaWQgb3BlbkN1cnNvckFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0
RGF0YSYsIGNvbnN0IElEQkN1cnNvckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9p
ZCBpdGVyYXRlQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29u
c3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBj
b21taXRUcmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiwgRXJyb3JDYWxsYmFjayk7Ci0KICAgICAvLyBEYXRhYmFzZSB0aHJlYWQgb3BlcmF0aW9u
cwogICAgIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmll
ciYpOwotICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZp
ZXImLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJh
bnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtQWJvcnRU
cmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICB2b2lkIG9wZW5CYWNraW5n
U3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CisgICAgdm9pZCBwZXJmb3JtQ29t
bWl0VHJhbnNhY3Rpb24oY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
cik7CisgICAgdm9pZCBwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbihjb25zdCBDbGllbnRPcmlnaW4m
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIGJlZ2luVHJhbnNhY3Rpb25JbkJh
Y2tpbmdTdG9yZShjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKLSAgICB2b2lkIHBlcmZvcm1D
cmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RT
dG9yZUluZm8mLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgcGVyZm9ybURlbGV0ZU9iamVj
dFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
Zmllcik7Ci0gICAgdm9pZCBwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5l
d05hbWUsIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtQ2xlYXJPYmplY3RTdG9y
ZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIp
OwotICAgIHZvaWQgcGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNv
bnN0IElEQkluZGV4SW5mbyYsIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtRGVs
ZXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIpOwotICAgIHZvaWQgcGVyZm9ybVJlbmFt
ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNv
bnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRh
JiwgY29uc3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwg
Y29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHBlcmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmLCBJREJHZXRSZWNvcmREYXRhVHlwZSk7Ci0gICAgdm9pZCBwZXJmb3JtR2V0QWxs
UmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0
YSYpOwotICAgIHZvaWQgcGVyZm9ybUdldEluZGV4UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlm
aWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7
Ci0gICAgdm9pZCBwZXJmb3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYpOwotICAgIHZvaWQgcGVyZm9ybURlbGV0ZVJlY29yZCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYpOwotICAgIHZvaWQgcGVyZm9ybU9wZW5DdXJzb3IodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwotICAgIHZvaWQgcGVyZm9ybUl0ZXJh
dGVDdXJzb3IodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYpOworICAg
IHZvaWQgcGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOworICAgIHZvaWQg
cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgdm9pZCBw
ZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IG5ld05hbWUsIGNvbnN0IElEQkVycm9yJik7CisgICAgdm9pZCBwZXJmb3JtQ2xlYXJPYmplY3RT
dG9yZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIHZvaWQgcGVyZm9ybUNyZWF0ZUluZGV4KGNv
bnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4
SW5mbyYpOworICAgIHZvaWQgcGVyZm9ybURlbGV0ZUluZGV4KGNvbnN0IENsaWVudE9yaWdpbiYs
IHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
dWludDY0X3QgaW5kZXhJZGVudGlmaWVyKTsKKyAgICB2b2lkIHBlcmZvcm1SZW5hbWVJbmRleChj
b25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgcGVyZm9ybVB1dE9yQWRkKGNv
bnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5k
ZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOworICAgIHZvaWQgcGVyZm9ybUdldFJl
Y29yZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElEQkdldFJl
Y29yZERhdGFUeXBlKTsKKyAgICB2b2lkIHBlcmZvcm1HZXRBbGxSZWNvcmRzKGNvbnN0IENsaWVu
dE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNE
YXRhJik7CisgICAgdm9pZCBwZXJmb3JtR2V0SW5kZXhSZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2lu
JiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBj
b25zdCBJREJLZXlSYW5nZURhdGEmKTsKKyAgICB2b2lkIHBlcmZvcm1HZXRDb3VudChjb25zdCBD
bGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJik7CisgICAgdm9pZCBwZXJmb3JtRGVsZXRlUmVjb3JkKGNvbnN0IENsaWVudE9yaWdpbiYs
IHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CisgICAgdm9pZCBwZXJmb3JtT3BlbkN1cnNvcihjb25z
dCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJDdXJzb3JJ
bmZvJik7CisgICAgdm9pZCBwZXJmb3JtSXRlcmF0ZUN1cnNvcihjb25zdCBDbGllbnRPcmlnaW4m
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1
cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJik7CiAgICAgdm9pZCBw
ZXJmb3JtUHJlZmV0Y2hDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRp
Zmllcik7CiAKICAgICB2b2lkIHBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihj
b25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKQEAgLTE4Niw3ICsxNjgsNyBAQCBwcml2YXRlOgog
CiAgICAgLy8gTWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAgICAgdm9pZCBkaWREZWxldGVCYWNraW5n
U3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pOwotICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IHRh
c2tJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIGRpZFBlcmZvcm1DcmVhdGVP
YmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwg
Y29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRlT2Jq
ZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3JtUmVuYW1l
T2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsK
QEAgLTI0Niw5ICsyMjgsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNEb25lV2l0aEhhcmRDbG9z
ZSgpOwogCiAgICAgdm9pZCByZXF1ZXN0U3BhY2UoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYsIHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYpOwotICAgIHZvaWQgd2FpdEZvclJlcXVlc3RT
cGFjZUNvbXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYpOwotICAgIHZvaWQgc3RhcnRTcGFjZUluY3JlYXNl
VGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrU2l6ZSk7Ci0gICAgdm9pZCBm
aW5pc2hTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCBib29sIGlzVGFza1N1
Y2Nlc3NmdWwpOwogCiAgICAgdm9pZCBjbGVhclRyYW5zYWN0aW9uc09uQ29ubmVjdGlvbihVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW9uLmNwcAppbmRleCBmZTkxMGZhZjk4NDlkYzJiMDQ3ZWJhOTdhZTU2NjU3OWZk
MTNkMjEwLi44MDA2MDY5ODgzNDRmMWIzOWI4YjlmYmMxOTk5ODIxZDgyNjIxYjg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2VDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcApAQCAtNzYsNyArNzYsNyBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6YWJvcnRUcmFuc2FjdGlvbldpdGhv
dXRDYWxsYmFjayhVbmlxdWVJREJEYXRhYgogICAgIGlmICghbV9kYXRhYmFzZSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIG1fZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rp
b24sIFVuaXF1ZUlEQkRhdGFiYXNlOjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpObywgW3RoaXMsIHBy
b3RlY3RlZFRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7Cisg
ICAgbV9kYXRhYmFzZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7CiAgICAg
ICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uTWFwLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmll
cikpOwogICAgICAgICBtX3RyYW5zYWN0aW9uTWFwLnJlbW92ZSh0cmFuc2FjdGlvbklkZW50aWZp
ZXIpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24u
Y3BwCmluZGV4IGE4ZDJiZGM3NDBjODk3MWE1YTdjMDRlNzZjMDMyOWI0NzZhZGM0MjYuLjc2ZWRk
YzQ1YjA3NmJlM2U2OTcyODQ1ZDExZTIxNTBiNmYwN2Q4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCgpCiAgICAgYXV0byBkYXRhYmFzZSA9IG1f
ZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAK
LSAgICBkYXRhYmFzZS0+YWJvcnRUcmFuc2FjdGlvbigqdGhpcywgVW5pcXVlSURCRGF0YWJhc2U6
OldhaXRGb3JQZW5kaW5nVGFza3M6OlllcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpXShhdXRvJiBlcnJvcikgeworICAgIGRhdGFiYXNlLT5hYm9ydFRyYW5zYWN0aW9uKCp0
aGlzLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKGF1dG8mIGVycm9yKSB7
CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjph
Ym9ydCAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGMKICAgICBh
dXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNT
RVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+cHV0T3JBZGQoKnRoaXMsIHJlcXVl
c3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQktl
eURhdGEmIGtleSkgeworICAgIGRhdGFiYXNlLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5RGF0
YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsK
ICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1
dE9yQWRkIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTMwNyw3ICszMDcsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb246OmdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAg
YXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFT
U0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmdldFJlY29yZCgqdGhpcywgcmVx
dWVzdERhdGEsIGdldFJlY29yZERhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3Vs
dCkgeworICAgIGRhdGFiYXNlLT5nZXRSZWNvcmQocmVxdWVzdERhdGEsIGdldFJlY29yZERhdGEs
IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8m
IGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkIChjYWxsYmFjayki
KTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMyOCw3
ICszMjgsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29y
ZHMoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBt
X2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwog
ICAgIAotICAgIGRhdGFiYXNlLT5nZXRBbGxSZWNvcmRzKCp0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0
QWxsUmVjb3Jkc0RhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVx
dWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgewor
ICAgIGRhdGFiYXNlLT5nZXRBbGxSZWNvcmRzKHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0
YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0
byYgZXJyb3IsIGNvbnN0IElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJ
bmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNvcmRzIChj
YWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTM0OSw3ICszNDksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Omdl
dENvdW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgYwogICAgIGF1dG8gZGF0
YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0
YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5nZXRDb3VudCgqdGhpcywgcmVxdWVzdERhdGEs
IGtleVJhbmdlRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1
ZXN0RGF0YV0oYXV0byYgZXJyb3IsIHVpbnQ2NF90IGNvdW50KSB7CisgICAgZGF0YWJhc2UtPmdl
dENvdW50KHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCB1aW50NjRfdCBjb3VudCkg
ewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
Z2V0Q291bnQgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzcwLDcgKzM3MCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbjo6ZGVsZXRlUmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0CiAg
ICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAg
IEFTU0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmRlbGV0ZVJlY29yZCgqdGhp
cywgcmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+ZGVs
ZXRlUmVjb3JkKHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yKSB7CiAgICAgICAgIExP
RyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmQg
KGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
b3BlbkN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAgYXV0byBk
YXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChk
YXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPm9wZW5DdXJzb3IoKnRoaXMsIHJlcXVlc3RE
YXRhLCBpbmZvLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3RE
YXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRh
YmFzZS0+b3BlbkN1cnNvcihyZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJl
c3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFr
VGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQxMiw3ICs0MTIsNyBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+
ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5p
dGVyYXRlQ3Vyc29yKCp0aGlzLCByZXF1ZXN0RGF0YSwgZGF0YSwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdl
dFJlc3VsdCYgcmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPml0ZXJhdGVDdXJzb3IocmVxdWVzdERh
dGEsIGRhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERh
dGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNv
ciAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SW5Qcm9jZXNzSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCmluZGV4IDkxMTFmNTk3OGUzYjgwNjE4NTVj
MjBmNWFmYWE1YjY1NWRjY2VhMjEuLjVjZGYyN2NjYzFiYmM3OTMxNzE2NjhkMDEwOTJkNTgwNDBl
YjJjZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC02MSwzNiArNjEsMzUgQEAg
UmVmPEluUHJvY2Vzc0lEQlNlcnZlcj4gSW5Qcm9jZXNzSURCU2VydmVyOjpjcmVhdGUoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBjb24KIAogSW5Qcm9jZXNzSURCU2VydmVyOjp+SW5Qcm9jZXNz
SURCU2VydmVyKCkgPSBkZWZhdWx0OwogCi1TdG9yYWdlUXVvdGFNYW5hZ2VyKiBJblByb2Nlc3NJ
REJTZXJ2ZXI6OnF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK1JlZlB0
cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBJblByb2Nlc3NJREJTZXJ2ZXI6OnF1b3RhTWFuYWdlcihj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKICAgICByZXR1cm4gbV9xdW90YU1hbmFnZXJz
LmVuc3VyZShvcmlnaW4sIFtdIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U3RvcmFnZVF1
b3RhTWFuYWdlcj4oU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCksIFtdKHVpbnQ2
NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2Us
IGF1dG8gY2FsbGJhY2spIHsKKyAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmNy
ZWF0ZShTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSwgW10geworICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0sIFtdKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJy
ZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKICAgICAg
ICAgICAgIGNhbGxiYWNrKHF1b3RhICsgY3VycmVudFNwYWNlICsgc3BhY2VJbmNyZWFzZSk7CiAg
ICAgICAgIH0pOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQotc3RhdGljIGlu
bGluZSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFNYW5hZ2VyR2V0dGVyIHN0b3JhZ2VRdW90
YU1hbmFnZXJHZXR0ZXIoSW5Qcm9jZXNzSURCU2VydmVyJiBzZXJ2ZXIpCi17Ci0gICAgcmV0dXJu
IFt3ZWFrU2VydmVyID0gbWFrZVdlYWtQdHIoc2VydmVyKV0oUEFMOjpTZXNzaW9uSUQsIGNvbnN0
IGF1dG8mIG9yaWdpbikgewotICAgICAgICByZXR1cm4gd2Vha1NlcnZlciA/IHdlYWtTZXJ2ZXIt
PnF1b3RhTWFuYWdlcihvcmlnaW4pIDogbnVsbHB0cjsKLSAgICB9OworICAgIH0pLml0ZXJhdG9y
LT52YWx1ZTsKIH0KIAogSW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklEKQotICAgIDogbV9zZXJ2ZXIoSURCU2VydmVyOjpJREJTZXJ2
ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIHN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIoKnRoaXMpKSkK
IHsKICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKICAgICBtX2Nvbm5lY3Rpb25Ub1Nl
cnZlciA9IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGUoKnRoaXMpOwog
ICAgIG1fY29ubmVjdGlvblRvQ2xpZW50ID0gSURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGll
bnQ6OmNyZWF0ZSgqdGhpcyk7CisgICAgbV9zZXJ2ZXIgPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6
Y3JlYXRlKHNlc3Npb25JRCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikgbXV0YWJsZSB7CisgICAgICAgIHJldHVybiB3ZWFr
VGhpcyA/IHF1b3RhTWFuYWdlcihvcmlnaW4pIDogbnVsbHB0cjsKKyAgICB9KTsKIH0KIAogSW5Q
cm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKLSAgICA6IG1fc2VydmVy
KElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklELCBkYXRhYmFzZURpcmVjdG9y
eVBhdGgsIHN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIoKnRoaXMpKSkKIHsKICAgICByZWxheEFk
b3B0aW9uUmVxdWlyZW1lbnQoKTsKICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlciA9IElEQkNsaWVu
dDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGUoKnRoaXMpOwogICAgIG1fY29ubmVjdGlv
blRvQ2xpZW50ID0gSURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQ6OmNyZWF0ZSgqdGhp
cyk7CisgICAgbV9zZXJ2ZXIgPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25J
RCwgW3RoaXMsIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigq
dGhpcyldKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKSBtdXRhYmxlIHsKKyAgICAgICAgcmV0
dXJuIHdlYWtUaGlzID8gcXVvdGFNYW5hZ2VyKG9yaWdpbikgOiBudWxscHRyOworICAgIH0pOwog
fQogCiBJREJDb25uZWN0aW9uSWRlbnRpZmllciBJblByb2Nlc3NJREJTZXJ2ZXI6OmlkZW50aWZp
ZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCmluZGV4IGM3YjUzMjFjYTM2MWM3NDFl
NTJkNDVlYzE4YTgzMThmYWQwODI5YzAuLjBkZDk3NDQyMzA5YzhlNzRhNjA3Njk4MWJkOGViOTBm
YTY5NGQ2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKQEAgLTYzLDkgKzYzLDggQEAgcHVi
bGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2
ZXImIGNvbm5lY3Rpb25Ub1NlcnZlcigpIGNvbnN0OwogICAgIElEQlNlcnZlcjo6SURCQ29ubmVj
dGlvblRvQ2xpZW50JiBjb25uZWN0aW9uVG9DbGllbnQoKSBjb25zdDsKLSAgICBJREJTZXJ2ZXI6
OklEQlNlcnZlciYgc2VydmVyKCkgeyByZXR1cm4gbV9zZXJ2ZXIuZ2V0KCk7IH0KLQotICAgIElE
QlNlcnZlcjo6SURCU2VydmVyJiBpZGJTZXJ2ZXIoKSB7IHJldHVybiBtX3NlcnZlci5nZXQoKTsg
fQorICAgIElEQlNlcnZlcjo6SURCU2VydmVyJiBzZXJ2ZXIoKSB7IHJldHVybiAqbV9zZXJ2ZXI7
IH0KKyAgICBJREJTZXJ2ZXI6OklEQlNlcnZlciYgaWRiU2VydmVyKCkgeyByZXR1cm4gKm1fc2Vy
dmVyOyB9CiAKICAgICAvLyBJREJDb25uZWN0aW9uVG9TZXJ2ZXIKICAgICB2b2lkIGRlbGV0ZURh
dGFiYXNlKGNvbnN0IElEQlJlcXVlc3REYXRhJikgZmluYWw7CkBAIC0xMjUsMTcgKzEyNCwxNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKSBvdmVycmlkZSB7IFJlZkNvdW50ZWQ8SW5Qcm9jZXNz
SURCU2VydmVyPjo6cmVmKCk7IH0KICAgICB2b2lkIGRlcmVmKCkgb3ZlcnJpZGUgeyBSZWZDb3Vu
dGVkPEluUHJvY2Vzc0lEQlNlcnZlcj46OmRlcmVmKCk7IH0KIAotICAgIFN0b3JhZ2VRdW90YU1h
bmFnZXIqIHF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mKTsKKyAgICBSZWZQdHI8U3Rv
cmFnZVF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyKGNvbnN0IENsaWVudE9yaWdpbiYpOwogCiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IEluUHJvY2Vzc0lEQlNlcnZlcihQQUw6OlNlc3Npb25JRCk7
CiAgICAgSW5Qcm9jZXNzSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlRGlyZWN0b3J5UGF0aCk7CiAKLSAgICBSZWY8SURCU2VydmVyOjpJREJTZXJ2ZXI+IG1f
c2VydmVyOworICAgIFJlZlB0cjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gbV9zZXJ2ZXI7CiAgICAg
UmVmUHRyPElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyPiBtX2Nvbm5lY3Rpb25Ub1Nl
cnZlcjsKICAgICBSZWZQdHI8SURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQ+IG1fY29u
bmVjdGlvblRvQ2xpZW50OwogCi0gICAgSGFzaE1hcDxDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVl
X3B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9xdW90YU1hbmFnZXJzOworICAgIEhhc2hNYXA8
Q2xpZW50T3JpZ2luLCBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fcXVvdGFNYW5hZ2Vy
czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4MjIxNWY3OTRlNzk3MWI0MmFi
YThhMTI5NWYxMTZkMTE1NjcxZDA4Li41ZTY0YTlkYmMzMWY4YzExNTAxMWY1ODY3MzA3N2YxMzI3
ZmYyY2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xMTMwLDcgKzExMzAsNiBAQAogCQk0MUQyOEQwRDIxMzlFMDU4MDBGNDIw
NkYgLyogTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFEMjhEMEIyMTM5RTAxRDAwRjQyMDZGIC8qIExpYldl
YlJUQ1N0YXRzQ29sbGVjdG9yLmNwcCAqLzsgfTsKIAkJNDFENDFDNjcyMjU2ODc0RjAwNjk3OTQy
IC8qIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUQ0MUM2NTIyNTY4NTkyMDA2OTc5NDIgLyogU2VydmljZVdv
cmtlckludGVybmFscy5tbSAqLzsgfTsKIAkJNDFERTdDN0MyMjJEQTE0MzAwNTMyQjY1IC8qIFN0
b3JhZ2VRdW90YU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxREU3QzdCMjIyREExM0UwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2Vy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNDFE
RTdDN0QyMjJEQTE0ODAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YVVzZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxREU3Qzc4MjIyREExM0MwMDUzMkI2
NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDFERUZDQjYxRTU2QzFCRDAwMEQ5RTVGIC8qIEpTRE9NTWFwTGlr
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFERUZD
QjQxRTU2QzFCOTAwMEQ5RTVGIC8qIEpTRE9NTWFwTGlrZS5oICovOyB9OwogCQk0MUUxQjFEMTBG
RjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRTFCMUNCMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0
cmFjdFdvcmtlci5oICovOyB9OwogCQk0MUU5RENFNzIzMTk3NEJGMDBGMzU5NDkgLyogQmxvYkxv
YWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFF
OURDRTQyMzE5NzNGRTAwRjM1OTQ5IC8qIEJsb2JMb2FkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjQ3NCw4ICs2NDczLDggQEAKIAkJMUNG
QUUzMjIwQTZENkEzRjAwMzI1OTNEIC8qIGxpYm9iamMuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsg
bmFtZSA9IGxpYm9iamMuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJvYmpjLmR5bGliOyBzb3Vy
Y2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQkxRDAwMjZBMjIzNzRENjIzMDBDQTZDREYgLyog
SlNQaWN0dXJlSW5QaWN0dXJlV2luZG93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTUGljdHVyZUluUGljdHVyZVdpbmRvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxRDAwMjZBMzIzNzRENjI0MDBDQTZDREYgLyogSlNQaWN0dXJlSW5QaWN0dXJlV2luZG93
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUGljdHVyZUluUGlj
dHVyZVdpbmRvdy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFEMDAyNkE4MjM3
NEY5RDkwMENBNkNERiAvKiBKU0VudGVyUGljdHVyZUluUGljdHVyZUV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTRW50ZXJQaWN0dXJlSW5QaWN0dXJlRXZlbnQuaDsg
cGF0aCA9IEpTRW50ZXJQaWN0dXJlSW5QaWN0dXJlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMUQwMDI2QTkyMzc0RjlEOTAwQ0E2Q0RGIC8qIEpTRW50ZXJQaWN0dXJlSW5Q
aWN0dXJlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNF
bnRlclBpY3R1cmVJblBpY3R1cmVFdmVudC5jcHA7IHBhdGggPSBKU0VudGVyUGljdHVyZUluUGlj
dHVyZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUQwMDI2QTgyMzc0
RjlEOTAwQ0E2Q0RGIC8qIEpTRW50ZXJQaWN0dXJlSW5QaWN0dXJlRXZlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFbnRlclBpY3R1cmVJblBpY3R1cmVFdmVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxRDAwMjZBOTIzNzRGOUQ5MDBDQTZDREYgLyog
SlNFbnRlclBpY3R1cmVJblBpY3R1cmVFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0VudGVyUGljdHVyZUluUGljdHVyZUV2ZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUQyQzgyQjYyMzZBM0Y2QTAwNTVENkM1IC8qIFBpY3R1cmVJ
blBpY3R1cmVTdXBwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFEQkMxQjU1MjM0N0IzRDIwMEI5MDFB
RiAvKiBQaWN0dXJlSW5QaWN0dXJlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGljdHVyZUlu
UGljdHVyZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFEQzU1M0ZE
MjExQkExMkEwMDRCNzgwRSAvKiBOYXZpZ2F0b3JTaGFyZS5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gTmF2aWdhdG9yU2hhcmUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NzQ2NCw3ICs3NDYzLDYgQEAKIAkJNDFEMjhEMEMyMTM5RTAxRTAwRjQyMDZGIC8qIExpYldlYlJU
Q1N0YXRzQ29sbGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpYldl
YlJUQ1N0YXRzQ29sbGVjdG9yLmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xs
ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFENDFDNjUyMjU2ODU5MjAw
Njk3OTQyIC8qIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBTZXJ2aWNlV29ya2VySW50ZXJuYWxzLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MUQ1MUJCMjFFNEUyRTgxMDAxMzFBNUIgLyogTGliV2ViUlRD
QXVkaW9Gb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGliV2ViUlRD
QXVkaW9Gb3JtYXQuaDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENBdWRpb0Zvcm1hdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MURFN0M3ODIyMkRBMTNDMDA1MzJCNjUgLyog
U3RvcmFnZVF1b3RhVXNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9y
YWdlUXVvdGFVc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxREU3QzdBMjIy
REExM0QwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MURFN0M3QjIyMkRBMTNFMDA1MzJCNjUgLyogU3RvcmFnZVF1
b3RhTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlUXVv
dGFNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxREVGQ0IyMUU1NkMx
QjkwMDBEOUU1RiAvKiBKU0RPTUJpbmRpbmdJbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBKU0RPTUJpbmRpbmdJbnRlcm5hbHMuanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzA5OCw3ICsxNzA5Niw2IEBACiAJCQkJMUEzNzYzNkEx
QTJFNjhCQjAwOUE3RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oICovLAogCQkJCTQx
REU3QzdBMjIyREExM0QwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLywKIAkJ
CQk0MURFN0M3QjIyMkRBMTNFMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5oICovLAot
CQkJCTQxREU3Qzc4MjIyREExM0MwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggKi8sCiAJ
CQkJNTE2NkQzQ0MxRThFRDQxMTAwQUQ2MkUzIC8qIFN0b3JhZ2VUeXBlLmggKi8sCiAJCQkpOwog
CQkJaW5kZW50V2lkdGggPSA0OwpAQCAtMjkyNjksNyArMjkyNjYsNiBAQAogCQkJCTU3MjFBOThC
MUVDRTU3MDQwMDgxMjk1QSAvKiBDcnlwdG9BbGdvcml0aG1Sc2FQc3NQYXJhbXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUxQkQzMzFBMTgyRDhEREQwMEMwNUQ5RiAvKiBDcnlwdG9BbGdvcml0aG1S
U0FTU0FfUEtDUzFfdjFfNS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyNUY4MkMxODIyQ0ZFQzAw
RDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobVNIQTEuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0NUJB
NkI2MjM3NjIyQTMwMDRERkMwNyAvKiBTdHlsZUFkanVzdGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMTlBQzNFRjE4MjREQzc5MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMjI0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMTlBQzNGMTE4MjREQzc5MDAzNDk0MjYgLyogQ3J5cHRvQWxnb3Jp
dGhtU0hBMjU2LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTlBQzNGMzE4MjREQzc5MDAzNDk0MjYg
LyogQ3J5cHRvQWxnb3JpdGhtU0hBMzg0LmggaW4gSGVhZGVycyAqLywKQEAgLTMyMjA3LDcgKzMy
MjAzLDYgQEAKIAkJCQlDNTBEMEU4MzBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVzcGFj
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzNzYzNkMxQTJFNjhCQjAwOUE3RUUyIC8qIFN0b3Jh
Z2VOYW1lc3BhY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFERTdDN0MyMjJEQTE0
MzAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQx
REU3QzdEMjIyREExNDgwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1QzlFRjJGMzIxRjA2MTkwMDAzQkRDNTYgLyogU3RvcmFnZVNlc3Npb25Qcm92aWRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2NkQzQ0QxRThFRDQ4RjAwQUQ2MkUzIC8qIFN0b3Jh
Z2VUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NjgyRDIwMDFGNzk3ODMwMDBDODYzREIgLyog
U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaCBpbiBIZWFkZXJzICovLApAQCAtMzIyMTksNiArMzIy
MTQsNyBAQAogCQkJCTlCNkM0MTUzMTM0NDk0OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDlGNzc3NjBFRkVDNjIwMDA5MDg0OUQgLyogU3Ry
b2tlU3R5bGVBcHBsaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTRCODIwNTFENkRGMEU1MDA3
N0VCRTMgLyogU3RydWN0dXJlZENsb25lLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDVCQTZCNjIz
NzYyMkEzMDA0REZDMDcgLyogU3R5bGVBZGp1c3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1
RUI2QTMwRTgxREM0RjAwQjI1OTY1IC8qIFN0eWxlQmFja2dyb3VuZERhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDNUVCNjdCMEU4MUQzQkUwMEIyNTk2NSAvKiBTdHlsZUJveERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0QUJBQzA2MjM2QjAxNkQwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlUXVvdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3Rh
TWFuYWdlci5jcHAKaW5kZXggODUyNTc1MmU2MzM0Nzk1MzBlZjE0ZWNiNzRmODViYWY2OGQ5YzU1
Yi4uYTMxOTY0ZTNhNjgxNmZkZTIyYzM3NTQzOGUzZTJjZGRiOGIzMTdmMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCkBAIC0yNywyMTMgKzI3
LDEyMyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VRdW90YU1hbmFnZXIuaCIKIAogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKLSNpbmNsdWRlICJTdG9yYWdlUXVvdGFVc2VyLmgiCisjaW5jbHVkZSA8d3RmL1Jl
Zi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMv
QmluYXJ5U2VtYXBob3JlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6flN0b3JhZ2VRdW90YU1hbmFnZXIoKQorUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZSh1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXIm
JiB1c2FnZUdldHRlciwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1
ZXN0ZXIpCiB7Ci0gICAgd2hpbGUgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAg
ICAgIG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpLmNhbGxiYWNrKERlY2lzaW9uOjpEZW55
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9yYWdlUXVvdGFNYW5hZ2VyKHF1b3RhLCBX
VEZNb3ZlKHVzYWdlR2V0dGVyKSwgV1RGTW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKSkpOwog
fQogCi11aW50NjRfdCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzcGFjZVVzYWdlKCkgY29uc3QKK1N0
b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFVz
YWdlR2V0dGVyJiYgdXNhZ2VHZXR0ZXIsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiBxdW90YUlu
Y3JlYXNlUmVxdWVzdGVyKQorICAgIDogbV9xdW90YShxdW90YSkKKyAgICAsIG1fdXNhZ2VHZXR0
ZXIoV1RGTW92ZSh1c2FnZUdldHRlcikpCisgICAgLCBtX3F1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIo
V1RGTW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKSkKKyAgICAsIG1fd29ya1F1ZXVlKFdvcmtR
dWV1ZTo6Y3JlYXRlKCJTdG9yYWdlUXVvdGFNYW5hZ2VyIEJhY2tncm91bmQgUXVldWUiLCBXb3Jr
UXVldWU6OlR5cGU6OlNlcmlhbCkpCisgICAgLCBtX2luaXRpYWxRdW90YShxdW90YSkKIHsKLSAg
ICB1aW50NjRfdCB1c2FnZSA9IDA7Ci0gICAgZm9yIChhdXRvJiB1c2VyIDogbV91c2VycykKLSAg
ICAgICAgdXNhZ2UgKz0gdXNlci0+c3BhY2VVc2VkKCk7Ci0gICAgcmV0dXJuIHVzYWdlOwogfQog
Ci12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2Uo
KQordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQodWlu
dDY0X3Qgc3BhY2VSZXF1ZXN0ZWQsIFJlcXVlc3RDYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAg
IGlmICghbV9xdW90YSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAKLSAgICBhdXRvIGRlZmF1bHRRdW90YVN0ZXAgPSBtX3F1b3RhIC8gMTA7Ci0gICAgbV9x
dW90YSA9IHN0ZDo6bWF4KG1fcXVvdGEsIGRlZmF1bHRRdW90YVN0ZXAgKiAoKHNwYWNlVXNhZ2Uo
KSAvIGRlZmF1bHRRdW90YVN0ZXApICsgMSkpOwotfQotCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFn
ZXI6OmluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCkKLXsKLSAgICBpZiAobV9wZW5kaW5nSW5pdGlh
bGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxT
dG9yYWdlUXVvdGFVc2VyKj4gdXNlcnNUb0luaXRpYWxpemU7Ci0gICAgZm9yIChhdXRvJiBrZXlW
YWx1ZSA6IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMpIHsKLSAgICAgICAgaWYgKGtleVZh
bHVlLnZhbHVlID09IFdoZW5Jbml0aWFsaXplZENhbGxlZDo6Tm8pIHsKLSAgICAgICAgICAgIGtl
eVZhbHVlLnZhbHVlID0gV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpZZXM7Ci0gICAgICAgICAgICB1
c2Vyc1RvSW5pdGlhbGl6ZS5hcHBlbmQoa2V5VmFsdWUua2V5KTsKKyAgICAvLyBGYXN0IHBhdGgu
CisgICAgaWYgKG1fcXVvdGFDb3VudERvd25Mb2NrLnRyeUxvY2soKSkgeworICAgICAgICBpZiAo
dHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkgeworICAgICAgICAgICAgbV9xdW90YUNv
dW50RG93bkxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3Jh
bnQpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fcXVvdGFDb3Vu
dERvd25Mb2NrLnVubG9jaygpOwogICAgIH0KLSAgICBmb3IgKGF1dG8qIHVzZXIgOiB1c2Vyc1Rv
SW5pdGlhbGl6ZSkgewotICAgICAgICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5j
b250YWlucyh1c2VyKSkKLSAgICAgICAgICAgIGFza1VzZXJUb0luaXRpYWxpemUoKnVzZXIpOwot
ICAgIH0KKworICAgIG1fY2FsbGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAg
bV93b3JrUXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIHNwYWNlUmVxdWVzdGVkXSB7CisgICAgICAgIGF1dG8gZGVjaXNpb24gPSByZXF1ZXN0U3Bh
Y2VPbkJhY2tncm91bmRUaHJlYWQoc3BhY2VSZXF1ZXN0ZWQpOworICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGRlY2lzaW9uXSB7
CisgICAgICAgICAgICBBU1NFUlQoIW1fY2FsbGJhY2tzLmlzRW1wdHkoKSk7CisgICAgICAgICAg
ICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZUZpcnN0KCk7CisgICAgICAgICAgICBj
YWxsYmFjayhkZWNpc2lvbik7CisgICAgICAgIH0pOworICAgIH0pOwogfQogCi12b2lkIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUoU3RvcmFnZVF1b3RhVXNlciYgdXNl
cikKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJl
cXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCh1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCkKIHsK
LSAgICB1c2VyLndoZW5Jbml0aWFsaXplZChbdGhpcywgJnVzZXIsIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIodGhpcyldKCkgewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0
dXJuOworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgICAgIGlmIChtX3BlbmRp
bmdJbml0aWFsaXphdGlvblVzZXJzLnJlbW92ZSgmdXNlcikpCi0gICAgICAgICAgICBtX3VzZXJz
LmFkZCgmdXNlcik7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9xdW90YUNvdW50RG93bkxvY2sp
OwogCi0gICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKHRyeUdyYW50UmVxdWVzdChzcGFjZVJlcXVl
c3RlZCkpCisgICAgICAgIHJldHVybiBEZWNpc2lvbjo6R3JhbnQ7CiAKLSAgICAgICAgLy8gTWFr
ZSBzdXJlIHF1b3RhIGlzIHNldCBiZWZvcmUgaGFuZGxpbmcgZmlyc3QgcmVxdWVzdC4KLSAgICAg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlVuaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgIHVw
ZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKLSAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0
ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgICAgICB9CisgICAgbV91c2FnZSA9IG1f
dXNhZ2VHZXR0ZXIoKTsKKyAgICB1cGRhdGVRdW90YUJhc2VkT25Vc2FnZSgpOworICAgIG1fcXVv
dGFDb3VudERvd24gPSBtX3VzYWdlIDwgbV9xdW90YSA/IG1fcXVvdGEgLSBtX3VzYWdlIDogMDsK
KyAgICBpZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkKKyAgICAgICAgcmV0dXJu
IERlY2lzaW9uOjpHcmFudDsKIAotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKHsgfSk7
Ci0gICAgfSk7Ci19CisgICAgLy8gQmxvY2sgdGhpcyB0aHJlYWQgdW50aWwgZ2V0dGluZyBkZWNz
aW9uIGZvciBxdW90YSBpbmNyZWFzZS4KKyAgICBCaW5hcnlTZW1hcGhvcmUgc2VtYXBob3JlOwor
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgc3BhY2VSZXF1ZXN0ZWQsICZzZW1hcGhvcmVdIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU3Rv
cmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlciBhc2tzIGZvciBxdW90YSBpbmNyZWFzZSAl
IiBQUkl1NjQsIHRoaXMsIHNwYWNlUmVxdWVzdGVkKTsKKyAgICAgICAgbV9xdW90YUluY3JlYXNl
UmVxdWVzdGVyKG1fcXVvdGEsIG1fdXNhZ2UsIHNwYWNlUmVxdWVzdGVkLCBbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCAmc2VtYXBob3JlXShPcHRpb25hbDx1aW50NjRfdD4g
bmV3UXVvdGEpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3Jh
Z2VRdW90YU1hbmFnZXIgcmVjZWl2ZXMgcXVvdGEgaW5jcmVhc2UgcmVzcG9uc2UgJSIgUFJJdTY0
LCB0aGlzLCBuZXdRdW90YSA/ICpuZXdRdW90YSA6IDApOworICAgICAgICAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphZGRVc2VyKFN0b3Jh
Z2VRdW90YVVzZXImIHVzZXIpCi17Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdJbml0aWFsaXphdGlv
blVzZXJzLmNvbnRhaW5zKCZ1c2VyKSk7Ci0gICAgQVNTRVJUKCFtX3VzZXJzLmNvbnRhaW5zKCZ1
c2VyKSk7Ci0gICAgbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5hZGQoJnVzZXIsIFdoZW5J
bml0aWFsaXplZENhbGxlZDo6Tm8pOworICAgICAgICAgICAgaWYgKG5ld1F1b3RhKQorICAgICAg
ICAgICAgICAgIG1fcXVvdGEgPSAqbmV3UXVvdGE7CiAKLSAgICBpZiAoIW1fcGVuZGluZ1JlcXVl
c3RzLmlzRW1wdHkoKSkKLSAgICAgICAgYXNrVXNlclRvSW5pdGlhbGl6ZSh1c2VyKTsKLX0KKyAg
ICAgICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKKyAgICAgICAgfSk7CisgICAgfSk7CiAKLWJv
b2wgU3RvcmFnZVF1b3RhTWFuYWdlcjo6c2hvdWxkQXNrRm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNw
YWNlSW5jcmVhc2UpIGNvbnN0Ci17Ci0gICAgaWYgKCFzcGFjZUluY3JlYXNlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgc2VtYXBob3JlLndhaXQoKTsKIAotICAgIHJldHVybiBzcGFjZVVz
YWdlKCkgKyBzcGFjZUluY3JlYXNlID4gbV9xdW90YTsKKyAgICBtX3VzYWdlID0gbV91c2FnZUdl
dHRlcigpOworICAgIG1fcXVvdGFDb3VudERvd24gPSBtX3VzYWdlIDwgbV9xdW90YSA/IG1fcXVv
dGEgLSBtX3VzYWdlIDogMDsKKyAgICByZXR1cm4gdHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVz
dGVkKSA/IERlY2lzaW9uOjpHcmFudCA6IERlY2lzaW9uOjpEZW55OwogfQogCi12b2lkIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OnJlbW92ZVVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKK2Jvb2wg
U3RvcmFnZVF1b3RhTWFuYWdlcjo6dHJ5R3JhbnRSZXF1ZXN0KHVpbnQ2NF90IHNwYWNlUmVxdWVz
dGVkKQogewotICAgIEFTU0VSVChtX3VzZXJzLmNvbnRhaW5zKCZ1c2VyKSB8fCBtX3BlbmRpbmdJ
bml0aWFsaXphdGlvblVzZXJzLmNvbnRhaW5zKCZ1c2VyKSk7Ci0gICAgbV91c2Vycy5yZW1vdmUo
JnVzZXIpOwotICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLnJlbW92ZSgmdXNl
cikgJiYgbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
Ly8gV2hlbiBiZWluZyBjbGVhcmVkLCBxdW90YSB1c2VycyBtYXkgcmVtb3ZlIHRoZW1zZWx2ZXMg
YW5kIGFkZCB0aGVtc2VsdmVzIHRvIHRyaWdnZXIgcmVpbml0aWFsaXphdGlvbi4KLSAgICAgICAg
Ly8gTGV0J3Mgd2FpdCBmb3IgYWRkVXNlciB0byBiZSBjYWxsZWQgYmVmb3JlIHByb2Nlc3Npbmcg
cGVuZGluZyByZXF1ZXN0cy4KLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cih0aGlzKV0gewotICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChtX3BlbmRpbmdJbml0aWFs
aXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0aGlzLT5wcm9jZXNzUGVu
ZGluZ1JlcXVlc3RzKHsgfSk7Ci0gICAgICAgIH0pOworICAgIEFTU0VSVChtX3F1b3RhQ291bnRE
b3duTG9jay5pc0xvY2tlZCgpKTsKKyAgICBpZiAoc3BhY2VSZXF1ZXN0ZWQgPD0gbV9xdW90YUNv
dW50RG93bikgeworICAgICAgICBtX3F1b3RhQ291bnREb3duIC09IHNwYWNlUmVxdWVzdGVkOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQotCi12b2lk
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNl
LCBSZXF1ZXN0Q2FsbGJhY2smJiBjYWxsYmFjaykKKyAgICAKK3ZvaWQgU3RvcmFnZVF1b3RhTWFu
YWdlcjo6dXBkYXRlUXVvdGFCYXNlZE9uVXNhZ2UoKQogewotICAgIGlmICghbV9wZW5kaW5nUmVx
dWVzdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNw
YWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spIH0pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKCFzcGFjZUluY3JlYXNlKSB7Ci0gICAgICAgIGNhbGxiYWNrKERlY2lzaW9u
OjpHcmFudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbml0aWFsaXplVXNlcnNJ
Zk5lZWRlZCgpOwotCi0gICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1w
dHkoKSkgewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUluY3JlYXNl
LCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChzaG91bGRBc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSkpIHsKLSAgICAgICAgbV9wZW5k
aW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7
Ci0KLSAgICAgICAgLy8gVHJ5IHByb2Nlc3NpbmcgcmVxdWVzdCBhZ2FpbiBhZnRlciBtYWtpbmcg
c3VyZSB1c2FnZSBpcyBhY2N1cmF0ZS4KLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDb21wdXRp
bmdTcGFjZVVzZWQ7Ci0gICAgICAgIGZvciAoYXV0byYgdXNlciA6IGNvcHlUb1ZlY3RvcihtX3Vz
ZXJzKSkKLSAgICAgICAgICAgIHVzZXItPmNvbXB1dGVTcGFjZVVzZWQoKTsKLQotICAgICAgICBp
ZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlOwot
ICAgICAgICBhc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSk7Ci0gICAgICAgIHJldHVybjsK
KyAgICAvLyBXaGVuIFN0b3JhZ2VRdW90YU1hbmFnZXIgaXMgdXNlZCBmb3IgdGhlIGZpcnN0IHRp
bWUsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGl0cyBpbml0aWFsIHF1b3RhIGlzIGJpZ2dlciB0aGFu
IGN1cnJlbnQgZGlzayB1c2FnZSwKKyAgICAvLyBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0
IHRoZSBxdW90YSB3YXMgaW5jcmVhc2VkIHRvIGF0IGxlYXN0IHRoZSBkaXNrIHVzYWdlIHVuZGVy
IHVzZXIncyBwZXJtaXNzaW9uIGJlZm9yZS4KKyAgICBBU1NFUlQobV9xdW90YUNvdW50RG93bkxv
Y2suaXNMb2NrZWQoKSk7CisgICAgaWYgKCFtX3F1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZSkgewor
ICAgICAgICBtX3F1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZSA9IHRydWU7CisgICAgICAgIGF1dG8g
ZGVmYXVsdFF1b3RhU3RlcCA9IG1fcXVvdGEgLyAxMDsKKyAgICAgICAgbV9xdW90YSA9IHN0ZDo6
bWF4KG1fcXVvdGEsIGRlZmF1bHRRdW90YVN0ZXAgKiAoKG1fdXNhZ2UgLyBkZWZhdWx0UXVvdGFT
dGVwKSArIDEpKTsKICAgICB9Ci0KLSAgICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9u
Rm9yUmVxdWVzdDsKLSAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOwogfQogCi12b2lkIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNl
KQordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXNldFF1b3RhVXBkYXRlZEJhc2VkT25Vc2Fn
ZSgpCiB7Ci0gICAgQVNTRVJUKHNob3VsZEFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKSk7
Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZSk7Ci0KLSAg
ICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JN
b3JlU3BhY2UgJSIgUFJJdTY0LCB0aGlzLCBzcGFjZUluY3JlYXNlKTsKLSAgICBtX3N0YXRlID0g
U3RhdGU6OldhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2U7Ci0gICAgbV9zcGFjZUluY3Jl
YXNlUmVxdWVzdGVyKG1fcXVvdGEsIHNwYWNlVXNhZ2UoKSwgc3BhY2VJbmNyZWFzZSwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVv
dGEpIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tG
b3JNb3JlU3BhY2UgcmVjZWl2ZWQgcmVzcG9uc2UgJSIgUFJJdTY0LCB0aGlzLCBuZXdRdW90YSA/
ICpuZXdRdW90YSA6IDApOwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNraW5nRm9yTW9y
ZVNwYWNlOwotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKG5ld1F1b3RhKTsKLSAgICB9
KTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3F1b3RhQ291bnREb3duTG9jayk7CisgICAgbV9x
dW90YSA9IG1faW5pdGlhbFF1b3RhOworICAgIG1fcXVvdGFDb3VudERvd24gPSAwOworICAgIG1f
cXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlID0gZmFsc2U7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVv
dGEpCit2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlc2V0UXVvdGEoKQogewotICAgIGlmICht
X3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChu
ZXdRdW90YSkKLSAgICAgICAgbV9xdW90YSA9ICpuZXdRdW90YTsKLQotICAgIGlmIChtX3N0YXRl
ID09IFN0YXRlOjpXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9yTW9y
ZVNwYWNlKSB7Ci0gICAgICAgIGF1dG8gcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLnRha2VG
aXJzdCgpOwotICAgICAgICBib29sIHNob3VsZEFsbG93UmVxdWVzdCA9ICFzaG91bGRBc2tGb3JN
b3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNlKTsKLQotICAgICAgICBSRUxFQVNFX0xPRyhT
dG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3Rz
IGZpcnN0IHJlcXVlc3QgZGVjaXNpb24gaXMgJWQiLCB0aGlzLCBzaG91bGRBbGxvd1JlcXVlc3Qp
OwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0Owot
ICAgICAgICByZXF1ZXN0LmNhbGxiYWNrKHNob3VsZEFsbG93UmVxdWVzdCA/IERlY2lzaW9uOjpH
cmFudCA6IERlY2lzaW9uOjpEZW55KTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIW1fcGVuZGluZ1Jl
cXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvJiByZXF1ZXN0ID0gbV9wZW5kaW5nUmVx
dWVzdHMuZmlyc3QoKTsKLQotICAgICAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHJlcXVl
c3Quc3BhY2VJbmNyZWFzZSkpIHsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpN
YWtpbmdEZWNpc2lvbkZvclJlcXVlc3QpIHsKLSAgICAgICAgICAgICAgICBtX3N0YXRlID0gU3Rh
dGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHVzZXIg
OiBjb3B5VG9WZWN0b3IobV91c2VycykpCi0gICAgICAgICAgICAgICAgICAgIHVzZXItPmNvbXB1
dGVTcGFjZVVzZWQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6
YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3Bh
Y2U7Ci0gICAgICAgICAgICB1aW50NjRfdCBzcGFjZUluY3JlYXNlID0gMDsKLSAgICAgICAgICAg
IGZvciAoYXV0byYgcGVuZGluZ1JlcXVlc3QgOiBtX3BlbmRpbmdSZXF1ZXN0cykKLSAgICAgICAg
ICAgICAgICBzcGFjZUluY3JlYXNlICs9IHBlbmRpbmdSZXF1ZXN0LnNwYWNlSW5jcmVhc2U7Ci0g
ICAgICAgICAgICBhc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lz
aW9uRm9yUmVxdWVzdDsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCkuY2Fs
bGJhY2soRGVjaXNpb246OkdyYW50KTsKLSAgICB9CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9x
dW90YUNvdW50RG93bkxvY2spOworICAgIG1fcXVvdGEgPSBtX2luaXRpYWxRdW90YTsKKyAgICBt
X3F1b3RhQ291bnREb3duID0gMDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAppbmRleCAwOTU2NjMwNmY1
NTkxYWJiNTlkMGFmZDhlZWE0ODY3OWE1ZjZjNjNjLi41OTliODNkMWY2NjI2OGFhZGZiNDQ4ZGFk
YTFlM2IyZjJiOGE3ZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VRdW90YU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90
YU1hbmFnZXIuaApAQCAtMjUsNzcgKzI1LDU2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVk
ZSAiQ2xpZW50T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAj
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1dvcmtRdWV1ZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFN0b3JhZ2VRdW90
YVVzZXI7Ci0KLWNsYXNzIFN0b3JhZ2VRdW90YU1hbmFnZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQ
dHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4geworY2xhc3MgU3RvcmFnZVF1b3RhTWFuYWdlciA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTdG9yYWdlUXVvdGFNYW5hZ2VyPiwgcHVibGljIENh
bk1ha2VXZWFrUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICB1c2luZyBTcGFjZUluY3JlYXNlUmVxdWVzdGVyID0gV1RG
OjpGdW5jdGlvbjx2b2lkKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVp
bnQ2NF90IHNwYWNlSW5jcmVhc2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8dWlu
dDY0X3Q+KT4mJik+OwotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFNw
YWNlSW5jcmVhc2VSZXF1ZXN0ZXImJiBzcGFjZUluY3JlYXNlUmVxdWVzdGVyKQotICAgICAgICA6
IG1fcXVvdGEocXVvdGEpCi0gICAgICAgICwgbV9zcGFjZUluY3JlYXNlUmVxdWVzdGVyKFdURk1v
dmUoc3BhY2VJbmNyZWFzZVJlcXVlc3RlcikpCi0gICAgewotICAgIH0KLSAgICBXRUJDT1JFX0VY
UE9SVCB+U3RvcmFnZVF1b3RhTWFuYWdlcigpOworICAgIHVzaW5nIFVzYWdlR2V0dGVyID0gV1RG
OjpGdW5jdGlvbjx1aW50NjRfdCgpPjsKKyAgICB1c2luZyBRdW90YUluY3JlYXNlUmVxdWVzdGVy
ID0gV1RGOjpGdW5jdGlvbjx2b2lkKHVpbnQ2NF90IGN1cnJlbnRRdW90YSwgdWludDY0X3QgY3Vy
cmVudFVzYWdlLCB1aW50NjRfdCByZXF1ZXN0ZWRJbmNyZWFzZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmKT47CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBjcmVhdGUodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0
dGVyJiYsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJik7CiAKICAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGFGcm9tUGVyT3JpZ2luUXVvdGEodWludDY0
X3QgcXVvdGEpIHsgcmV0dXJuIHF1b3RhIC8gMTA7IH0KLQogICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludDY0X3QgZGVmYXVsdFF1b3RhKCkgeyByZXR1cm4gMTAwMCAqIE1COyB9CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkgeyByZXR1cm4gZGVm
YXVsdFRoaXJkUGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YShkZWZhdWx0UXVvdGEoKSk7IH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkVXNlcihTdG9yYWdlUXVvdGFVc2VyJik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2VyKFN0b3JhZ2VRdW90YVVzZXImKTsKLQog
ICAgIGVudW0gY2xhc3MgRGVjaXNpb24geyBEZW55LCBHcmFudCB9OwogICAgIHVzaW5nIFJlcXVl
c3RDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRGVjaXNpb24pPjsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHJlcXVlc3RTcGFjZSh1aW50NjRfdCwgUmVxdWVzdENhbGxiYWNrJiYp
OwotICAgIHZvaWQgcmVzZXRRdW90YSh1aW50NjRfdCBuZXdRdW90YSkgeyBtX3F1b3RhID0gbmV3
UXVvdGE7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcXVlc3RTcGFjZU9uTWFpblRocmVh
ZCh1aW50NjRfdCwgUmVxdWVzdENhbGxiYWNrJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIERlY2lz
aW9uIHJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCh1aW50NjRfdCk7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKLQotICAgIGVu
dW0gY2xhc3MgU3RhdGUgewotICAgICAgICBVbmluaXRpYWxpemVkLAotICAgICAgICBDb21wdXRp
bmdTcGFjZVVzZWQsCi0gICAgICAgIFdhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UsCi0g
ICAgICAgIEFza2luZ0Zvck1vcmVTcGFjZSwKLSAgICAgICAgTWFraW5nRGVjaXNpb25Gb3JSZXF1
ZXN0LAotICAgIH07Ci0gICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9
CisgICAgLy8gVGVzdCBvbmx5LgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRRdW90YVVw
ZGF0ZWRCYXNlZE9uVXNhZ2UoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0UXVvdGEo
KTsKIAogcHJpdmF0ZToKLSAgICB1aW50NjRfdCBzcGFjZVVzYWdlKCkgY29uc3Q7Ci0gICAgYm9v
bCBzaG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3Q7Ci0g
ICAgdm9pZCBhc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSk7Ci0KLSAgICB2
b2lkIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBhc2tVc2VyVG9Jbml0aWFs
aXplKFN0b3JhZ2VRdW90YVVzZXImKTsKKyAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKHVpbnQ2NF90
IHF1b3RhLCBVc2FnZUdldHRlciYmLCBRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYpOworICAgIGJv
b2wgdHJ5R3JhbnRSZXF1ZXN0KHVpbnQ2NF90KTsKIAotICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdS
ZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4pOworICAgIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9u
VXNhZ2UoKTsKIAorICAgIExvY2sgbV9xdW90YUNvdW50RG93bkxvY2s7CisgICAgdWludDY0X3Qg
bV9xdW90YUNvdW50RG93biB7IDAgfTsKICAgICB1aW50NjRfdCBtX3F1b3RhIHsgMCB9OworICAg
IHVpbnQ2NF90IG1fdXNhZ2UgeyAwIH07CiAKLSAgICBTcGFjZUluY3JlYXNlUmVxdWVzdGVyIG1f
c3BhY2VJbmNyZWFzZVJlcXVlc3RlcjsKKyAgICBVc2FnZUdldHRlciBtX3VzYWdlR2V0dGVyOwor
ICAgIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgbV9xdW90YUluY3JlYXNlUmVxdWVzdGVyOwogCi0g
ICAgZW51bSBjbGFzcyBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQgeyBObywgWWVzIH07Ci0gICAgSGFz
aE1hcDxTdG9yYWdlUXVvdGFVc2VyKiwgV2hlbkluaXRpYWxpemVkQ2FsbGVkPiBtX3BlbmRpbmdJ
bml0aWFsaXphdGlvblVzZXJzOwotICAgIEhhc2hTZXQ8U3RvcmFnZVF1b3RhVXNlcio+IG1fdXNl
cnM7CisgICAgRGVxdWU8UmVxdWVzdENhbGxiYWNrPiBtX2NhbGxiYWNrczsKKyAgICBSZWY8V29y
a1F1ZXVlPiBtX3dvcmtRdWV1ZTsKIAotICAgIHN0cnVjdCBQZW5kaW5nUmVxdWVzdCB7Ci0gICAg
ICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2U7Ci0gICAgICAgIFJlcXVlc3RDYWxsYmFjayBjYWxs
YmFjazsKLSAgICB9OwotICAgIERlcXVlPFBlbmRpbmdSZXF1ZXN0PiBtX3BlbmRpbmdSZXF1ZXN0
czsKKyAgICBib29sIG1fcXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlIHsgZmFsc2UgfTsKIAotICAg
IFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6VW5pbml0aWFsaXplZCB9OworICAgIC8vIFRlc3Qgb25s
eS4KKyAgICB1aW50NjRfdCBtX2luaXRpYWxRdW90YSB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1
b3RhVXNlci5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MTBjZWVjNjBjNWRlNTBjNjA5ZDIzMWIwZjBk
Zjk2NzQ5NDk0MjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTdG9yYWdlUXVvdGFVc2VyIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5TdG9yYWdlUXVvdGFVc2VyKCkgPSBkZWZhdWx0OwotCi0gICAg
dmlydHVhbCB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGNvbXB1dGVTcGFjZVVzZWQoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIHdoZW5Jbml0aWFsaXpl
ZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIHsgY2FsbGJhY2soKTsgfQot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA1ZjIzY2M2NmFhMTFmN2QyOGU3NjE1Y2Ni
ODUxMzY3YzIwMzE1YmUzLi42NzY3MjZhMTY2YmY2Y2VlM2NlMjM0ZjkxOWM0MmNlMTI5YjA2NDFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNw
cApAQCAtNjUsNiArNjUsNyBAQAogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKICNpbmNs
dWRlICJXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRh
VHlwZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Db29raWVKYXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ROUy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzLmg+CkBAIC0zMTYsOCArMzE3LDEyIEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycyYmCiAgICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9u
SUQ7CiAgICAgc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoKnRo
aXMsIFdURk1vdmUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMpKSk7CiAKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2VyKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5w
ZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOworCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQs
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgc2V0U2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXJJREJSb290UGF0aChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtMzI2LDcgKzMzMSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyYmCiAgICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpk
ZWZhdWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVu
YWJsZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0
b3J5KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKICAgICB9CiAjZW5kaWYKLSAgICBpbml0aWFsaXplU3RvcmFnZVF1b3RhKHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAgICAgbV9zdG9yYWdlTWFu
YWdlclNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIApAQCAtNDM0
LDI4ICs0MzgsMzkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFs
cygpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogeworICAgIGF1dG8gc2Vzc2lvbklEID0g
cGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOworCisgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0
ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5KTsKKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIGFkZElu
ZGV4ZWREYXRhYmFzZVNlc3Npb24ocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
c2Vzc2lvbklELCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGFkZEluZGV4
ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURp
cmVjdG9yeSwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOworICAgIHNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoc2Vzc2lv
bklELCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSk7CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBpZiAocGFyZW50UHJvY2Vzc0hhc1NlcnZpY2VX
b3JrZXJFbnRpdGxlbWVudCgpKQotICAgICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihwYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIHBhcmFtZXRlcnMuc2Vy
dmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBh
ZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuc2VydmljZVdvcmtl
clByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCiAKLSAgICBtX3N0
b3JhZ2VNYW5hZ2VyU2V0LT5hZGQocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
c2Vzc2lvbklELCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5s
b2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaW5pdGlhbGl6ZVN0
b3JhZ2VRdW90YShwYXJhbWV0ZXJzKTsKKyAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vz
c2lvbklELCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2Nh
bFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCiAgICAgUmVtb3RlTmV0d29ya2lu
Z0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVN0b3JhZ2VR
dW90YShjb25zdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3ZvaWQg
TmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhp
cmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgpCiB7Ci0gICAgYXV0byYg
bWFuYWdlcnMgPSAgbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUocGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklELCBbXSB7Ci0gICAgICAgIHJldHVybiBTdG9y
YWdlUXVvdGFNYW5hZ2VycyB7IH07Ci0gICAgfSkuaXRlcmF0b3ItPnZhbHVlOwotICAgIG1hbmFn
ZXJzLnNldERlZmF1bHRRdW90YXMocGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBh
cmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSk7CisgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBhdXRvW2l0
ZXIsIGlzTmV3RW50cnldID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuYWRkKHNlc3Np
b25JRCwgbnVsbHB0cik7CisgICAgaWYgKGlzTmV3RW50cnkpCisgICAgICAgIGl0ZXItPnZhbHVl
ID0gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcj4oY2FjaGVSb290UGF0aCwg
ZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKTsKK30KKwordm9pZCBOZXR3b3Jr
UHJvY2Vzczo6cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXJzTG9jayk7CisgICAgQVNTRVJUKG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJz
LmNvbnRhaW5zKHNlc3Npb25JRCkpOworICAgIG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJz
LnJlbW92ZShzZXNzaW9uSUQpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpmb3JFYWNoTmV0
d29ya1Nlc3Npb24oY29uc3QgRnVuY3Rpb248dm9pZChOZXR3b3JrU2Vzc2lvbiYpPiYgZnVuY3Rv
cikKQEAgLTU3Niw4ICs1OTEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lv
bihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAjZW5kaWYKIAogICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPnJlbW92ZShzZXNzaW9uSUQpOwotCi0gICAgbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5y
ZW1vdmUoc2Vzc2lvbklEKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJ
Q1MpCkBAIC0xNDY4LDkgKzE0ODEsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJz
aXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaQogICAgIGlm
ICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlKSAm
JiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIGNsZWFyRGlza0NhY2hlKG1vZGlm
aWVkU2luY2UsIFtjbGVhclRhc2tzSGFuZGxlciA9IFdURk1vdmUoY2xlYXJUYXNrc0hhbmRsZXIp
XSB7IH0pOwogCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFU
eXBlOjpJbmRleGVkREJEYXRhYmFzZXMpIHx8IHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vi
c2l0ZURhdGFUeXBlOjpET01DYWNoZSkpCi0gICAgICAgIGNsZWFyU3RvcmFnZVF1b3RhKHNlc3Np
b25JRCk7Ci0KICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OkFkQ2xpY2tBdHRyaWJ1dGlvbnMpKSB7CiAgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vz
c2lvbiA9IHRoaXMtPm5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgICAgICBuZXR3
b3JrU2Vzc2lvbi0+Y2xlYXJBZENsaWNrQXR0cmlidXRpb24oKTsKQEAgLTE1NjMsMTkgKzE1NzMs
NiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpbwogICAgICAgICB9CiAgICAgICAgIFdlYkNvcmU6
OkNyZWRlbnRpYWxTdG9yYWdlOjpyZW1vdmVTZXNzaW9uQ3JlZGVudGlhbHNXaXRoT3JpZ2lucyhv
cmlnaW5EYXRhcyk7CiAgICAgfQotCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCBzdG9yYWdlIHF1
b3RhIGNsZWFyaW5nIGZvciB0aGVzZSBvcmlnaW5zLgotfQotCi12b2lkIE5ldHdvcmtQcm9jZXNz
OjpjbGVhclN0b3JhZ2VRdW90YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCi17Ci0gICAgYXV0
byBpdGVyYXRvciA9IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpOwotICAg
IGlmIChpdGVyYXRvciA9PSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmVuZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvJiBtYW5hZ2VycyA9IGl0ZXJhdG9yLT52YWx1ZTsKLSAgICBmb3Ig
KGF1dG8mIG1hbmFnZXIgOiBtYW5hZ2Vycy5tYW5hZ2Vyc1Blck9yaWdpbigpKQotICAgICAgICBt
YW5hZ2VyLnZhbHVlLT5yZXNldFF1b3RhKG1hbmFnZXJzLmRlZmF1bHRRdW90YShtYW5hZ2VyLmtl
eSkpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTIyMTcs
MTAgKzIyMTQsMTAgQEAgUmVmPElEQlNlcnZlcjo6SURCU2VydmVyPiBOZXR3b3JrUHJvY2Vzczo6
Y3JlYXRlSURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb24KICAgICAgICAgcGF0aCA9IG1f
aWRiRGF0YWJhc2VQYXRocy5nZXQoc2Vzc2lvbklEKTsKICAgICB9CiAKLSAgICByZXR1cm4gSURC
U2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIHBhdGgsIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKHRoaXMpXShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IGF1
dG8mIG9yaWdpbikgLT4gU3RvcmFnZVF1b3RhTWFuYWdlciogeworICAgIHJldHVybiBJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgcGF0aCwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRF0oY29uc3QgYXV0byYgb3JpZ2luKSAtPiBSZWZQ
dHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gewogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiAmdGhpcy0+c3RvcmFnZVF1b3Rh
TWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbik7CisgICAgICAgIHJldHVybiBzdG9yYWdlUXVvdGFN
YW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsKICAgICB9KTsKIH0KIApAQCAtMjMwOSw2ICsyMzA2
LDE1IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmCiAgICAgICAgICAgICBwb3N0U3RvcmFnZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVBh
dGhFeGlzdHMsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSkpOwogICAgIH0KIH0KKwordm9pZCBO
ZXR3b3JrUHJvY2Vzczo6c2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJJREJSb290UGF0aChQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgaWRiUm9vdFBhdGgpCit7Cisg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsK
KyAgICBhdXRvKiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fc2Vzc2lvblN0b3JhZ2VR
dW90YU1hbmFnZXJzLmdldChzZXNzaW9uSUQpOworICAgIEFTU0VSVChzZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlcik7CisgICAgc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPnNldElEQlJvb3RQ
YXRoKGlkYlJvb3RQYXRoKTsKK30KKwogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzMjUsOSArMjMzMSwxNCBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFn
ZSgpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2VG
b3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4pCiB7Ci0gICAgYXV0byYgbWFuYWdlciA9IHN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lv
bklELCBvcmlnaW4pOwotICAgIG1hbmFnZXIucmVzZXRRdW90YShtX3N0b3JhZ2VRdW90YU1hbmFn
ZXJzLmZpbmQoc2Vzc2lvbklEKS0+dmFsdWUuZGVmYXVsdFF1b3RhKG9yaWdpbikpOwotICAgIG1h
bmFnZXIudXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOworICAgIGF1dG8gc3RvcmFnZVF1
b3RhTWFuYWdlciA9IHRoaXMtPnN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBvcmlnaW4p
OworICAgIHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdl
KCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlc2V0UXVvdGEoKQoreworICAgIGZvciAo
YXV0byYgc3RvcmFnZVF1b3RhTWFuYWdlciA6IGV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMo
KSkKKyAgICAgICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVzZXRRdW90YSgpOwogfQogCiAjaWYg
RU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKQEAgLTI0MDQsNjIgKzI0MTUsNDggQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6cmVxdWVzdFN0b3JhZ2VTcGFjZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIGNvbnN0IENsaWVudE8KICAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OlJlcXVlc3RTdG9yYWdl
U3BhY2UgeyBzZXNzaW9uSUQsIG9yaWdpbiwgcXVvdGEsIGN1cnJlbnRTaXplLCBzcGFjZVJlcXVp
cmVkIH0sIFdURk1vdmUoY2FsbGJhY2spLCAwKTsKIH0KIAotY2xhc3MgUXVvdGFVc2VySW5pdGlh
bGl6ZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlciB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUXVvdGFVc2VySW5p
dGlhbGl6ZXIoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlcikKLSAgICAgICAgOiBtX21hbmFn
ZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCi0gICAgewotICAgICAgICBtYW5hZ2VyLmFkZFVzZXIo
KnRoaXMpOwotICAgIH0KLQotICAgIH5RdW90YVVzZXJJbml0aWFsaXplcigpCi0gICAgewotICAg
ICAgICBpZiAobV9tYW5hZ2VyKQotICAgICAgICAgICAgbV9tYW5hZ2VyLT5yZW1vdmVVc2VyKCp0
aGlzKTsKLSAgICAgICAgaWYgKG1fY2FsbGJhY2spCi0gICAgICAgICAgICBtX2NhbGxiYWNrKCk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIC8vIFN0b3JhZ2VRdW90YVVzZXIgQVBJLgotICAgIHVp
bnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorUmVmUHRyPFN0b3JhZ2VRdW90
YU1hbmFnZXI+IE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCit7CisgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBhdXRv
KiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXJzLmdldChzZXNzaW9uSUQpOworICAgIGlmICghc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSBmaW5hbAotICAgIHsKLSAgICAgICAg
bV9jYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwotICAgIH0KKyAgICBTdHJpbmcgaWRiUm9v
dFBhdGg7CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisgICAgaWRiUm9vdFBhdGggPSBz
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+aWRiUm9vdFBhdGgoKTsKKyNlbmRpZgorICAgIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OlVzYWdlR2V0dGVyIHVzYWdlR2V0dGVyID0gW2NhY2hlUm9vdFBh
dGggPSBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+Y2FjaGVSb290UGF0aCgpLCBpZGJSb290
UGF0aCwgb3JpZ2luXSgpIHsKKyAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7ICAgIAog
Ci0gICAgV2Vha1B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBtX21hbmFnZXI7Ci0gICAgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiBtX2NhbGxiYWNrOwotfTsKKyAgICAgICAgdWludDY0X3QgdXNh
Z2UgPSAwOworICAgICAgICB1c2FnZSArPSBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6ZGlza1VzYWdl
KGNhY2hlUm9vdFBhdGgsIG9yaWdpbik7CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisg
ICAgICAgIHVzYWdlICs9IElEQlNlcnZlcjo6SURCU2VydmVyOjpkaXNrVXNhZ2UoaWRiUm9vdFBh
dGgsIG9yaWdpbik7CisjZW5kaWYKIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVF1
b3RhVXNlcnMoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlciwgUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25J
RCwgb3JpZ2luLCB1c2VyID0gbWFrZVVuaXF1ZTxRdW90YVVzZXJJbml0aWFsaXplcj4obWFuYWdl
cildKCkgbXV0YWJsZSB7CisgICAgICAgIHJldHVybiB1c2FnZTsKKyAgICB9OworICAgIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OlF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgcXVvdGFJbmNyZWFzZVJlcXVl
c3RlciA9IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc2Vzc2lvbklELCBv
cmlnaW5dICh1aW50NjRfdCBjdXJyZW50UXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWlu
dDY0X3QgcmVxdWVzdGVkSW5jcmVhc2UsIGF1dG8mJiBjYWxsYmFjaykgeworICAgICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB0aGlzLT5pZGJTZXJ2ZXIoc2Vzc2lvbklEKS5pbml0aWFsaXplUXVv
dGFVc2VyKG9yaWdpbik7Ci0gICAgICAgIENhY2hlU3RvcmFnZTo6RW5naW5lOjppbml0aWFsaXpl
UXVvdGFVc2VyKCp0aGlzLCBzZXNzaW9uSUQsIG9yaWdpbiwgW3VzZXIgPSBXVEZNb3ZlKHVzZXIp
XSB7IH0pOwotICAgIH0pOworICAgICAgICAgICAgY2FsbGJhY2soeyB9KTsKKyAgICAgICAgcmVx
dWVzdFN0b3JhZ2VTcGFjZShzZXNzaW9uSUQsIG9yaWdpbiwgY3VycmVudFF1b3RhLCBjdXJyZW50
U3BhY2UsIHJlcXVlc3RlZEluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgfTsKKwor
ICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+ZW5zdXJlT3JpZ2luU3RvcmFn
ZVF1b3RhTWFuYWdlcihvcmlnaW4sIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5kZWZhdWx0
UXVvdGEob3JpZ2luKSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdURk1vdmUocXVvdGFJbmNyZWFz
ZVJlcXVlc3RlcikpOwogfQogCi1TdG9yYWdlUXVvdGFNYW5hZ2VyJiBOZXR3b3JrUHJvY2Vzczo6
c3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENsaWVu
dE9yaWdpbiYgb3JpZ2luKQorVmVjdG9yPFJlZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gTmV0
d29ya1Byb2Nlc3M6OmV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMoKQogewotICAgIGF1dG8m
IHN0b3JhZ2VRdW90YU1hbmFnZXJzID0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUoc2Vz
c2lvbklELCBbXSB7Ci0gICAgICAgIHJldHVybiBTdG9yYWdlUXVvdGFNYW5hZ2VycyB7IH07Ci0g
ICAgfSkuaXRlcmF0b3ItPnZhbHVlOwotICAgIHJldHVybiAqc3RvcmFnZVF1b3RhTWFuYWdlcnMu
bWFuYWdlcnNQZXJPcmlnaW4oKS5lbnN1cmUob3JpZ2luLCBbdGhpcywgJnN0b3JhZ2VRdW90YU1h
bmFnZXJzLCBzZXNzaW9uSUQsICZvcmlnaW5dIHsKLSAgICAgICAgYXV0byBtYW5hZ2VyID0gbWFr
ZVVuaXF1ZTxTdG9yYWdlUXVvdGFNYW5hZ2VyPihzdG9yYWdlUXVvdGFNYW5hZ2Vycy5kZWZhdWx0
UXVvdGEob3JpZ2luKSwgW3RoaXMsIHNlc3Npb25JRCwgb3JpZ2luXSh1aW50NjRfdCBxdW90YSwg
dWludDY0X3QgY3VycmVudFNwYWNlLCB1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBhdXRvIGNhbGxi
YWNrKSB7Ci0gICAgICAgICAgICB0aGlzLT5yZXF1ZXN0U3RvcmFnZVNwYWNlKHNlc3Npb25JRCwg
b3JpZ2luLCBxdW90YSwgY3VycmVudFNwYWNlLCBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxi
YWNrKSk7Ci0gICAgICAgIH0pOwotICAgICAgICBpbml0aWFsaXplUXVvdGFVc2VycygqbWFuYWdl
ciwgc2Vzc2lvbklELCBvcmlnaW4pOwotICAgICAgICByZXR1cm4gbWFuYWdlcjsKLSAgICB9KS5p
dGVyYXRvci0+dmFsdWU7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9zZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBWZWN0b3I8UmVmUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+
PiByZXN1bHQ7CisKKyAgICBmb3IgKGF1dG8mIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyIDog
bV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChh
dXRvIHN0b3JhZ2VRdW90YU1hbmFnZXIgOiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+ZXhp
c3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2VycygpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChz
dG9yYWdlUXVvdGFNYW5hZ2VyKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2lm
ICFQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaAppbmRleCBmNjJmMDFkMzgwZjQwMTA1NTJhYWQzODg5YTQ5N2Q1MTI2ZjhhMzUz
Li5kYjE5MDJhMDk1Y2MyYzFhNTM1ZTgxZTE0M2ZlYjQxZjc0ZjlmMmM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0yODQsNiArMjg0LDcg
QEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3Jh
Z2UoKTsKIAogICAgIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3Rpbmco
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHZvaWQg
cmVzZXRRdW90YSgpOwogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKICAgICB2b2lk
IGdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBm
aWxlbmFtZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXkmJik+JiYpOwpAQCAtMzI3LDcgKzMyOCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFk
Q2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBV
UkwmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIG1hcmtBZENsaWNr
QXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKIAotICAgIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXIm
IHN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBzdG9y
YWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mKTsKKyAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+PiBl
eGlzdGluZ1N0b3JhZ2VRdW90YU1hbmFnZXJzKCk7CiAKICAgICB2b2lkIGFkZEtlcHRBbGl2ZUxv
YWQoUmVmPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4mJik7CiAgICAgdm9pZCByZW1vdmVLZXB0QWxp
dmVMb2FkKE5ldHdvcmtSZXNvdXJjZUxvYWRlciYpOwpAQCAtNDQyLDYgKzQ0NCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBjb2xsZWN0SW5kZXhlZERhdGFiYXNlT3JpZ2luc0ZvclZlcnNpb24oY29u
c3QgU3RyaW5nJiwgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAgICAg
SGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGluZGV4ZWREYXRhYmFzZU9yaWdp
bnMoY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICBSZWY8V2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI+IGNyZWF0ZUlEQlNlcnZlcihQQUw6OlNlc3Npb25JRCk7CisgICAgdm9pZCBzZXRTZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKFBBTDo6U2Vzc2lvbklELCBjb25zdCBT
dHJpbmcmIGlkYlJvb3RQYXRoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQpAQCAtNDYxLDggKzQ2NCw0NCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGVyZm9ybU5leHRTdG9y
YWdlVGFzaygpOwogICAgIHZvaWQgZW5zdXJlUGF0aEV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgp
OwogCi0gICAgdm9pZCBjbGVhclN0b3JhZ2VRdW90YShQQUw6OlNlc3Npb25JRCk7Ci0gICAgdm9p
ZCBpbml0aWFsaXplU3RvcmFnZVF1b3RhKGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
Jik7CisgICAgY2xhc3MgU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgeworICAgICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VyKGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0aCwgdWludDY0X3QgZGVmYXVs
dFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKQorICAgICAgICAgICAgOiBt
X2NhY2hlUm9vdFBhdGgoY2FjaGVSb290UGF0aCkKKyAgICAgICAgICAgICwgbV9kZWZhdWx0UXVv
dGEoZGVmYXVsdFF1b3RhKQorICAgICAgICAgICAgLCBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGEo
ZGVmYXVsdFRoaXJkUGFydHlRdW90YSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHVp
bnQ2NF90IGRlZmF1bHRRdW90YShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikg
Y29uc3QgeyByZXR1cm4gb3JpZ2luLnRvcE9yaWdpbiA9PSBvcmlnaW4uY2xpZW50T3JpZ2luID8g
bV9kZWZhdWx0UXVvdGEgOiBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGE7IH0KKworICAgICAgICBS
ZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gZW5zdXJlT3JpZ2luU3RvcmFnZVF1
b3RhTWFuYWdlcihXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luLCB1aW50NjRfdCBxdW90YSwg
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6VXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwg
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6UXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1
b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG9baXRlciwg
aXNOZXdFbnRyeV0gPSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmFkZChvcmlnaW4sIG51bGxwdHIp
OworICAgICAgICAgICAgaWYgKGlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgaXRlci0+dmFs
dWUgPSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUocXVvdGEsIFdURk1vdmUo
dXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKTsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlUmVmUHRyKCppdGVyLT52YWx1ZSk7CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvIGV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMoKSB7IHJldHVybiBtX3N0b3JhZ2VR
dW90YU1hbmFnZXJzLnZhbHVlcygpOyB9CisKKyAgICAgICAgY29uc3QgU3RyaW5nJiBjYWNoZVJv
b3RQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZVJvb3RQYXRoOyB9CisjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisgICAgICAgIHZvaWQgc2V0SURCUm9vdFBhdGgoY29uc3QgU3RyaW5n
JiBpZGJSb290UGF0aCkgeyBtX2lkYlJvb3RQYXRoID0gaWRiUm9vdFBhdGg7IH0KKyAgICAgICAg
Y29uc3QgU3RyaW5nJiBpZGJSb290UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1faWRiUm9vdFBhdGg7
IH0KKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RyaW5nIG1fY2FjaGVSb290UGF0
aDsKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICAgICAgU3RyaW5nIG1faWRiUm9v
dFBhdGg7CisjZW5kaWYKKyAgICAgICAgdWludDY0X3QgbV9kZWZhdWx0UXVvdGEgeyBXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSB9OworICAgICAgICB1aW50NjRf
dCBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGEgeyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkgfTsKKyAgICAgICAgSGFzaE1hcDxXZWJDb3JlOjpD
bGllbnRPcmlnaW4sIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9zdG9y
YWdlUXVvdGFNYW5hZ2VyczsKKyAgICB9OworICAgIHZvaWQgYWRkU2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIHVpbnQ2NF90IGRlZmF1bHRRdW90YSwgdWludDY0X3Qg
ZGVmYXVsdFRoaXJkUGFydHlRdW90YSwgY29uc3QgU3RyaW5nJiBjYWNoZVJvb3RQYXRoKTsKKyAg
ICB2b2lkIHJlbW92ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEKTsK
IAogICAgIC8vIENvbm5lY3Rpb25zIHRvIFdlYlByb2Nlc3Nlcy4KICAgICBIYXNoTWFwPFdlYkNv
cmU6OlByb2Nlc3NJZGVudGlmaWVyLCBSZWY8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+
PiBtX3dlYlByb2Nlc3NDb25uZWN0aW9uczsKQEAgLTUzMywyMyArNTcyLDggQEAgcHJpdmF0ZToK
ICAgICBib29sIG1faXNJVFBEYXRhYmFzZUVuYWJsZWQgeyBmYWxzZSB9OwogI2VuZGlmCiAgICAg
Ci0gICAgY2xhc3MgU3RvcmFnZVF1b3RhTWFuYWdlcnMgewotICAgIHB1YmxpYzoKLSAgICAgICAg
dWludDY0X3QgZGVmYXVsdFF1b3RhKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2lu
KSBjb25zdCB7IHJldHVybiBvcmlnaW4udG9wT3JpZ2luID09IG9yaWdpbi5jbGllbnRPcmlnaW4g
PyBtX2RlZmF1bHRRdW90YSA6IG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YTsgfQotICAgICAgICB2
b2lkIHNldERlZmF1bHRRdW90YXModWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZh
dWx0VGhpcmRQYXJ0eVF1b3RhKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2RlZmF1bHRRdW90
YSA9IGRlZmF1bHRRdW90YTsKLSAgICAgICAgICAgIG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YSA9
IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGE7Ci0gICAgICAgIH0KLQotICAgICAgICBIYXNoTWFwPFdl
YkNvcmU6OkNsaWVudE9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI+PiYgbWFuYWdlcnNQZXJPcmlnaW4oKSB7IHJldHVybiBtX21hbmFnZXJzUGVyT3Jp
Z2luOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB1aW50NjRfdCBtX2RlZmF1bHRRdW90YSB7
IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpIH07Ci0gICAgICAg
IHVpbnQ2NF90IG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OmRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB9OwotICAgICAgICBIYXNoTWFwPFdl
YkNvcmU6OkNsaWVudE9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI+PiBtX21hbmFnZXJzUGVyT3JpZ2luOwotICAgIH07Ci0gICAgSGFzaE1hcDxQQUw6
OlNlc3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlcnM+IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnM7
CisgICAgTG9jayBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2s7CisgICAgSGFzaE1h
cDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VyPj4gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnM7CiAKICAgICBPcHRpb25TZXQ8TmV0
d29ya0NhY2hlOjpDYWNoZU9wdGlvbj4gbV9jYWNoZU9wdGlvbnM7CiAgICAgV2ViQ29yZTo6TWVz
c2FnZVBvcnRDaGFubmVsUmVnaXN0cnkgbV9tZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluCmluZGV4IDM2Nzc2Nzc0ODBiODJhNDQzM2Y4NWQyODJiM2U1ZmI4MDZhOTFlNjMu
LjU4ZmU1YzlmNjAxODM2YWVmNTY4ZDliMzk3ODUyYTk0MWVjNTIwM2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5p
bgpAQCAtMTUyLDYgKzE1Miw3IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2FjeVJl
Y2VpdmVyIHsKICAgICBDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpCiAK
ICAgICBVcGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIHN0cnVjdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luKQorICAgIFJl
c2V0UXVvdGEoKQogCiAgICAgU3RvcmVBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb24gYWRDbGlja0F0dHJpYnV0aW9u
KQogICAgIER1bXBBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAt
PiAoU3RyaW5nIGFkQ2xpY2tBdHRyaWJ1dGlvblN0YXRlKSBBc3luYwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3Bw
CmluZGV4IGZmOGE4YzVmNjI1MGYyZGMwNzk1YTI3NWQ5MmI5YzhmYjFkMTQxZmEuLmY0ZjUyZDIy
YzliNDkyZmEyMWQxNzUxODhkOGI2MDZiMDVjMWJiZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKQEAg
LTE5MiwxMyArMTkyLDYzIEBAIHZvaWQgRW5naW5lOjpjbGVhckNhY2hlc0Zvck9yaWdpbihOZXR3
b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIFBBTDo6U2Vzc2lvbklECiAgICAgfSk7CiB9CiAK
LXZvaWQgRW5naW5lOjppbml0aWFsaXplUXVvdGFVc2VyKE5ldHdvcmtQcm9jZXNzJiBuZXR3b3Jr
UHJvY2VzcywgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpDbGllbnRP
cmlnaW4mIGNsaWVudE9yaWdpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQorc3RhdGljIHVpbnQ2NF90IGdldERpcmVjdG9yeVNpemUoY29uc3QgU3RyaW5n
JiBkaXJlY3RvcnlQYXRoKQoreworICAgIHVpbnQ2NF90IGRpcmVjdG9yeVNpemUgPSAwOworICAg
IERlcXVlPFN0cmluZz4gcGF0aHM7CisgICAgcGF0aHMuYXBwZW5kKGRpcmVjdG9yeVBhdGgpOwor
ICAgIHdoaWxlICghcGF0aHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gcGF0aCA9IHBhdGhz
LnRha2VGaXJzdCgpOworICAgICAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHBh
dGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSkgeworICAgICAg
ICAgICAgYXV0byBuZXdQYXRocyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkocGF0aCwgIioi
X3MpOworICAgICAgICAgICAgZm9yIChhdXRvJiBuZXdQYXRoIDogbmV3UGF0aHMpIHsKKyAgICAg
ICAgICAgICAgICAvLyBGaWxlcyBpbiBCbG9icyBkaXJlY3RvcnkgYXJlIGhhcmQgbGluay4KKyAg
ICAgICAgICAgICAgICBhdXRvIGZpbGVOYW1lID0gRmlsZVN5c3RlbTo6bGFzdENvbXBvbmVudE9m
UGF0aElnbm9yaW5nVHJhaWxpbmdTbGFzaChuZXdQYXRoKTsKKyAgICAgICAgICAgICAgICBpZiAo
ZmlsZU5hbWUgPT0gIkJsb2JzIikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgcGF0aHMuYXBwZW5kKG5ld1BhdGgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBsb25nIGxvbmcgZmlsZVNpemUg
PSAwOworICAgICAgICBGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShwYXRoLCBmaWxlU2l6ZSk7Cisg
ICAgICAgIGRpcmVjdG9yeVNpemUgKz0gZmlsZVNpemU7CisgICAgfQorICAgIHJldHVybiBkaXJl
Y3RvcnlTaXplOworfQorCit1aW50NjRfdCBFbmdpbmU6OmRpc2tVc2FnZShjb25zdCBTdHJpbmcm
IHJvb3RQYXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAgICBm
cm9tKG5ldHdvcmtQcm9jZXNzLCBzZXNzaW9uSUQsIFtjbGllbnRPcmlnaW4sIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mIGVuZ2luZSkgbXV0YWJs
ZSB7Ci0gICAgICAgIGVuZ2luZS5yZWFkQ2FjaGVzRnJvbURpc2soY2xpZW50T3JpZ2luLCBbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGNhY2hl
c09yRXJyb3IpIG11dGFibGUgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAg
ICAgICAgfSk7Ci0gICAgfSk7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYg
KHJvb3RQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHJpbmcgc2Fs
dFBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocm9vdFBhdGgsICJz
YWx0Il9zKTsKKyAgICBhdXRvIHNhbHQgPSByZWFkT3JNYWtlU2FsdChzYWx0UGF0aCk7CisgICAg
aWYgKCFzYWx0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEtleSBrZXkob3JpZ2luLnRvcE9y
aWdpbi50b1N0cmluZygpLCBvcmlnaW4uY2xpZW50T3JpZ2luLnRvU3RyaW5nKCksIHsgfSwgeyB9
LCAqc2FsdCk7CisgICAgU3RyaW5nIGRpcmVjdG9yeVBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQocm9vdFBhdGgsIGtleS5oYXNoQXNTdHJpbmcoKSk7CisKKyAgICBT
dHJpbmcgc2l6ZUZpbGVQYXRoID0gQ2FjaGVzOjpjYWNoZXNTaXplRmlsZW5hbWUoZGlyZWN0b3J5
UGF0aCk7CisgICAgaWYgKGF1dG8gcmVjb3JkZWRTaXplID0gcmVhZFNpemVGaWxlKHNpemVGaWxl
UGF0aCkpCisgICAgICAgIHJldHVybiAqcmVjb3JkZWRTaXplOworCisgICAgcmV0dXJuIGdldERp
cmVjdG9yeVNpemUoZGlyZWN0b3J5UGF0aCk7Cit9CisKK3ZvaWQgRW5naW5lOjpyZXF1ZXN0U3Bh
Y2UoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uKT4mJiBjYWxsYmFjaykKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IGNhbGxiYWNrKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KTsK
KworICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBzdG9yYWdlUXVvdGFN
YW5hZ2VyID0gbV9uZXR3b3JrUHJvY2Vzcy0+c3RvcmFnZVF1b3RhTWFuYWdlcihtX3Nlc3Npb25J
RCwgb3JpZ2luKTsKKyAgICBpZiAoIXN0b3JhZ2VRdW90YU1hbmFnZXIpCisgICAgICAgIGNhbGxi
YWNrKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KTsKKworICAg
IHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZChzcGFjZVJlcXVl
c3RlZCwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCiBFbmdpbmU6OkVuZ2luZShQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIE5ldHdvcmtQcm9jZXNzJiBwcm9jZXNzLCBTdHJpbmcmJiByb290UGF0
aCkKQEAgLTMzMiw3ICszODIsNyBAQCB2b2lkIEVuZ2luZTo6cmVhZENhY2hlc0Zyb21EaXNrKGNv
bnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBDYWNoZXNDYWxsYgogCiAgICAgICAg
IGF1dG8mIGNhY2hlcyA9IG1fY2FjaGVzLmVuc3VyZShvcmlnaW4sIFsmb3JpZ2luLCB0aGlzXSB7
CiAgICAgICAgICAgICBhdXRvIHBhdGggPSBjYWNoZXNSb290UGF0aChvcmlnaW4pOwotICAgICAg
ICAgICAgcmV0dXJuIENhY2hlczo6Y3JlYXRlKCp0aGlzLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4g
eyBvcmlnaW4gfSwgV1RGTW92ZShwYXRoKSwgbV9uZXR3b3JrUHJvY2Vzcy0+c3RvcmFnZVF1b3Rh
TWFuYWdlcihtX3Nlc3Npb25JRCwgb3JpZ2luKSk7CisgICAgICAgICAgICByZXR1cm4gQ2FjaGVz
OjpjcmVhdGUoKnRoaXMsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IG9yaWdpbiB9LCBXVEZNb3Zl
KHBhdGgpKTsKICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgICAgIGlmIChjYWNo
ZXMtPmlzSW5pdGlhbGl6ZWQoKSkgewpAQCAtNDY0LDEyICs1MTQsMTMgQEAgdm9pZCBFbmdpbmU6
OnJlbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKICAgICB9KTsKIH0KIAotdm9pZCBF
bmdpbmU6OndyaXRlU2l6ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCBzaXplKQor
dm9pZCBFbmdpbmU6OndyaXRlU2l6ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCBz
aXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Cisg
ICAgQ29tcGxldGlvbkhhbmRsZXJDYWxsaW5nU2NvcGUgY29tcGxldGlvbkhhbmRsZXJDYWxsZXIo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIGlmICghc2hvdWxkUGVyc2lzdCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2lvUXVldWUtPmRpc3BhdGNoKFtwYXRoID0gcGF0aC5p
c29sYXRlZENvcHkoKSwgc2l6ZV0oKSB7CisgICAgbV9pb1F1ZXVlLT5kaXNwYXRjaChbcGF0aCA9
IHBhdGguaXNvbGF0ZWRDb3B5KCksIHNpemUsIGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlckNhbGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKGdsb2JhbFNpemVGaWxlTG9jayk7CiAgICAgICAgIGF1dG8gZmlsZUhhbmRs
ZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVPcGVuTW9kZTo6
V3JpdGUpOwogICAgICAgICBhdXRvIGNsb3NlRmlsZUhhbmRsZXIgPSBtYWtlU2NvcGVFeGl0KFsm
XSB7CkBAIC00ODAsNiArNTMxLDggQEAgdm9pZCBFbmdpbmU6OndyaXRlU2l6ZUZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoLCB1aW50NjRfdCBzaXplKQogCiAgICAgICAgIEZpbGVTeXN0ZW06OnRydW5j
YXRlRmlsZShmaWxlSGFuZGxlLCAwKTsKICAgICAgICAgRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUo
ZmlsZUhhbmRsZSwgU3RyaW5nOjpudW1iZXIoc2l6ZSkudXRmOCgpLmRhdGEoKSwgU3RyaW5nOjpu
dW1iZXIoc2l6ZSkudXRmOCgpLmxlbmd0aCgpKTsKKworICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyQ2FsbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlckNhbGxlcildKCkgbXV0YWJsZSB7IH0pOwogICAgIH0pOwogfQogCkBAIC01MDQsOCArNTU3
LDggQEAgT3B0aW9uYWw8dWludDY0X3Q+IEVuZ2luZTo6cmVhZFNpemVGaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKICAgICBpZiAoIVdURjo6Y29udmVydFNhZmVseShmaWxlU2l6ZSwgYnl0ZXNUb1Jl
YWQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgVmVjdG9yPGNoYXI+IGJ1
ZmZlcihieXRlc1RvUmVhZCk7Ci0gICAgc2l6ZV90IHRvdGFsQnl0ZXNSZWFkID0gRmlsZVN5c3Rl
bTo6cmVhZEZyb21GaWxlKGZpbGVIYW5kbGUsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkp
OworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBidWZmZXIoYnl0ZXNUb1JlYWQpOworICAgIHNp
emVfdCB0b3RhbEJ5dGVzUmVhZCA9IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShmaWxlSGFuZGxl
LCByZWludGVycHJldF9jYXN0PGNoYXIqPihidWZmZXIuZGF0YSgpKSwgYnVmZmVyLnNpemUoKSk7
CiAgICAgaWYgKHRvdGFsQnl0ZXNSZWFkICE9IGJ5dGVzVG9SZWFkKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaAppbmRleCAzOGQ2ZmMxMzRmZTAwZDRiMDRmMzgw
OGMwYmI4OTdiM2Q2MjE2NTRmLi43MTYyNzBlMDk4YTQ4Y2M2NjYzM2E1OTk0MzI5Mzc2OWZjYmNj
ODYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVEYXRhLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGEuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L0NsaWVudE9yaWdpbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5o
PgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC03OSwxMiArODAsMTUgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVF1b3RhVXNlcihOZXR3b3JrUHJvY2VzcyYsIFBB
TDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwogCisgICAgc3RhdGljIHVpbnQ2NF90IGRpc2tVc2FnZShjb25zdCBT
dHJpbmcmIHJvb3RQYXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICB2b2lk
IHJlcXVlc3RTcGFjZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzcGFj
ZVJlcXVlc3RlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpEZWNpc2lvbik+JiYpOworCiAgICAgYm9vbCBzaG91bGRQZXJzaXN0KCkgY29uc3Qg
eyByZXR1cm4gISFtX2lvUXVldWU7fQogCiAgICAgdm9pZCB3cml0ZUZpbGUoY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSwgTmV0d29ya0NhY2hlOjpEYXRhJiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5l
OjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAgICAgdm9pZCByZWFkRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtDYWNoZTo6RGF0
YSYsIGludCBlcnJvcik+JiYpOwogICAgIHZvaWQgcmVtb3ZlRmlsZShjb25zdCBTdHJpbmcmIGZp
bGVuYW1lKTsKLSAgICB2b2lkIHdyaXRlU2l6ZUZpbGUoY29uc3QgU3RyaW5nJiwgdWludDY0X3Qg
c2l6ZSk7CisgICAgdm9pZCB3cml0ZVNpemVGaWxlKGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90IHNp
emUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgc3RhdGljIE9wdGlvbmFsPHVp
bnQ2NF90PiByZWFkU2l6ZUZpbGUoY29uc3QgU3RyaW5nJik7CiAKICAgICBjb25zdCBTdHJpbmcm
IHJvb3RQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9yb290UGF0aDsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlLmNwcAppbmRleCA2ZmM1M2UwM2M0ZDY3YTAwZmE5MWYyYjNmY2ZiZGQ3ZTExOTY4Y2Uz
Li4yYzAzM2M0ZjBhMTEyMDY2ZWFmMmI3N2UyMmIzMTBhYTJkMTRlN2MzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlLmNwcApAQCAtNDA1LDcgKzQwNSw3IEBAIHZvaWQgQ2FjaGU6OnB1dChWZWN0
b3I8UmVjb3JkPiYmIHJlY29yZHMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJiBjYWxsYmFj
aykKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6T3Blbik7CiAKICAgICBXZWJDb3JlOjpD
YWNoZVF1ZXJ5T3B0aW9ucyBvcHRpb25zOwotICAgIHVpbnQ2NF90IHNwYWNlUmVxdWlyZWQgPSAw
OworICAgIGludDY0X3Qgc3BhY2VSZXF1aXJlZCA9IDA7CiAKICAgICBmb3IgKGF1dG8mIHJlY29y
ZCA6IHJlY29yZHMpIHsKICAgICAgICAgYXV0byogc2FtZVVSTFJlY29yZHMgPSByZWNvcmRzRnJv
bVVSTChyZWNvcmQucmVxdWVzdC51cmwoKSk7CkBAIC00MTcsNiArNDE3LDcgQEAgdm9pZCBDYWNo
ZTo6cHV0KFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFj
ayYmIGNhbGxiYWNrKQogICAgICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQpCiAgICAgICAg
ICAgICBzcGFjZVJlcXVpcmVkIC09IHNhbWVVUkxSZWNvcmRzLT5hdChwb3NpdGlvbikuc2l6ZTsK
ICAgICB9CisgICAgc3BhY2VSZXF1aXJlZCA9IHNwYWNlUmVxdWlyZWQgPCAwPyAwIDogc3BhY2VS
ZXF1aXJlZDsKIAogICAgIG1fY2FjaGVzLnJlcXVlc3RTcGFjZShzcGFjZVJlcXVpcmVkLCBbY2Fj
aGVzID0gbWFrZVJlZihtX2NhY2hlcyksIGlkZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIHJlY29y
ZHMgPSBXVEZNb3ZlKHJlY29yZHMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShPcHRp
b25hbDxET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewogICAgICAgICBp
ZiAoZXJyb3IpIHsKQEAgLTQ1MCw3ICs0NTEsMTAgQEAgdm9pZCBDYWNoZTo6cmVtb3ZlKFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb24K
ICAgICAgICAgcmV0dXJuIHNob3VsZFJlbW92ZTsKICAgICB9KTsKIAotICAgIGNhbGxiYWNrKFdU
Rk1vdmUocmVjb3JkSWRlbnRpZmllcnMpKTsKKyAgICAvLyBUaGlzIG9wZXJhdGlvbiB3b3VsZCBj
aGFuZ2UgY2FjaGVzIHNpemUsIHNvIG1ha2Ugc3VyZSBjYWxsYmFjayBmaW5pc2hlcyBhZnRlciBz
aXplIGZpbGUgaXMgdXBkYXRlZC4KKyAgICBtX2NhY2hlcy51cGRhdGVTaXplRmlsZShbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVjb3JkSWRlbnRpZmllcnMgPSBXVEZNb3ZlKHJlY29y
ZElkZW50aWZpZXJzKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgY2FsbGJhY2soV1RGTW92ZShyZWNv
cmRJZGVudGlmaWVycykpOworICAgIH0pOwogfQogCiB2b2lkIENhY2hlOjpyZW1vdmVGcm9tUmVj
b3JkTGlzdChjb25zdCBWZWN0b3I8dWludDY0X3Q+JiByZWNvcmRJZGVudGlmaWVycykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGVzLmNwcAppbmRleCAzYjQ1M2I4ODk2YTY5MWQ1MTFlYzFjNGZmOGY0
YjI0M2M2NmQ1Y2Y0Li4wNDRjYWRkNWRkZDhhNDVjMTI2MjZlNmEyNDgzZjk0ZjFiNThmMGJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCkBAIC01NiwzNiArNTYsMjEgQEAgU3RyaW5n
IENhY2hlczo6Y2FjaGVzU2l6ZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgY2FjaGVzUm9vdHNQYXRo
KQogICAgIHJldHVybiBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVz
Um9vdHNQYXRoLCAiZXN0aW1hdGVkc2l6ZSJfcyk7CiB9CiAKLVJlZjxDYWNoZXM+IENhY2hlczo6
Y3JlYXRlKEVuZ2luZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0
cmluZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJiBxdW90YU1hbmFn
ZXIpCitSZWY8Q2FjaGVzPiBDYWNoZXM6OmNyZWF0ZShFbmdpbmUmIGVuZ2luZSwgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCkKIHsKLSAgICBhdXRvIGNh
Y2hlcyA9IGFkb3B0UmVmKCpuZXcgQ2FjaGVzIHsgZW5naW5lLCBXVEZNb3ZlKG9yaWdpbiksIFdU
Rk1vdmUocm9vdFBhdGgpLCBxdW90YU1hbmFnZXIgfSk7Ci0gICAgcXVvdGFNYW5hZ2VyLmFkZFVz
ZXIoY2FjaGVzLmdldCgpKTsKLSAgICByZXR1cm4gY2FjaGVzOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENhY2hlcyB7IGVuZ2luZSwgV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKHJvb3RQYXRo
KSB9KTsKIH0KIAotQ2FjaGVzOjpDYWNoZXMoRW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXImIHF1b3RhTWFuYWdlcikKK0NhY2hlczo6Q2FjaGVzKEVuZ2luZSYgZW5naW5lLCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQYXRoKQogICAgIDog
bV9lbmdpbmUoJmVuZ2luZSkKICAgICAsIG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKICAgICAs
IG1fcm9vdFBhdGgoV1RGTW92ZShyb290UGF0aCkpCi0gICAgLCBtX3F1b3RhTWFuYWdlcihtYWtl
V2Vha1B0cihxdW90YU1hbmFnZXIpKQogewogfQogCiBDYWNoZXM6On5DYWNoZXMoKQogewogICAg
IEFTU0VSVChtX3BlbmRpbmdXcml0aW5nQ2FjaGVzVG9EaXNrQ2FsbGJhY2tzLmlzRW1wdHkoKSk7
Ci0KLSAgICBpZiAobV9xdW90YU1hbmFnZXIpCi0gICAgICAgIG1fcXVvdGFNYW5hZ2VyLT5yZW1v
dmVVc2VyKCp0aGlzKTsKLX0KLQotdm9pZCBDYWNoZXM6OndoZW5Jbml0aWFsaXplZChDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCi17Ci0gICAgaW5pdGlhbGl6ZShbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAg
aWYgKGVycm9yKQotICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoQ2FjaGVTdG9yYWdlLCAi
Q2FjaGVzOjppbml0aWFsaXplIGZhaWxlZCwgcmVwb3J0ZWQgc3BhY2UgdXNlZCB3aWxsIGJlIHpl
cm8iKTsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICB9KTsKIH0KIAogdm9pZCBDYWNoZXM6OnJl
dHJpZXZlT3JpZ2luRnJvbURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGZvbGRlclBhdGgsIFdvcmtR
dWV1ZSYgcXVldWUsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxXZWJDb3Jl
OjpDbGllbnRPcmlnaW4+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjA4LDEwICsxOTMs
MTQgQEAgdm9pZCBDYWNoZXM6OmluaXRpYWxpemUoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNv
bXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogICAgIH0pOwogfQogCi12b2lkIENhY2hlczo6
dXBkYXRlU2l6ZUZpbGUoKQordm9pZCBDYWNoZXM6OnVwZGF0ZVNpemVGaWxlKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAobV9lbmdpbmUp
Ci0gICAgICAgIG1fZW5naW5lLT53cml0ZVNpemVGaWxlKGNhY2hlc1NpemVGaWxlbmFtZShtX3Jv
b3RQYXRoKSwgbV9zaXplKTsKKyAgICBpZiAoIW1fZW5naW5lKSB7CisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2VuZ2luZS0+d3Jp
dGVTaXplRmlsZShjYWNoZXNTaXplRmlsZW5hbWUobV9yb290UGF0aCksIG1fc2l6ZSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIENhY2hlczo6aW5pdGlhbGl6ZVNpemUo
KQpAQCAtMjMyLDEzICsyMjEsMTIgQEAgdm9pZCBDYWNoZXM6OmluaXRpYWxpemVTaXplKCkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX3NpemUg
PSBzaXplOwotICAgICAgICAgICAgdXBkYXRlU2l6ZUZpbGUoKTsKLQotICAgICAgICAgICAgbV9p
c0luaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8gcGVuZGluZ0NhbGxiYWNrcyA9
IFdURk1vdmUobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25DYWxsYmFja3MpOwotICAgICAgICAgICAg
Zm9yIChhdXRvJiBjYWxsYmFjayA6IHBlbmRpbmdDYWxsYmFja3MpCi0gICAgICAgICAgICAgICAg
Y2FsbGJhY2soV1RGOjpudWxsb3B0KTsKLQorICAgICAgICAgICAgdXBkYXRlU2l6ZUZpbGUoW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGF1dG8gcGVu
ZGluZ0NhbGxiYWNrcyA9IFdURk1vdmUobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25DYWxsYmFja3Mp
OworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBwZW5kaW5nQ2FsbGJhY2tz
KQorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQpOworICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYXV0byBkZWNv
ZGVkID0gQ2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcigqc3RvcmFnZSk7CkBAIC0yNzMsMTMgKzI2
MSwxMSBAQCB2b2lkIENhY2hlczo6Y2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogICAgICAgICBtX3N0b3JhZ2UtPmNsZWFyKFN0cmluZyB7IH0sIC1X
YWxsVGltZTo6aW5maW5pdHkoKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
ICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5jbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5yZXNldFNwYWNlVXNlZCgpOwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2xlYXJNZW1v
cnlSZXByZXNlbnRhdGlvbigpOwotICAgIHJlc2V0U3BhY2VVc2VkKCk7CiAgICAgY2xlYXJQZW5k
aW5nV3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrcygpOwogICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CiB9CkBAIC01MjUsMTIgKzUxMSwxMiBAQCB2b2lkIENhY2hlczo6cmVhZFJlY29yZHNMaXN0
KENhY2hlJiBjYWNoZSwgTmV0d29ya0NhY2hlOjpTdG9yYWdlOjpUcmF2ZXJzZUhhbmRsZQogCiB2
b2lkIENhY2hlczo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlUmVxdWlyZWQsIFdlYkNvcmU6
OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBp
ZiAoIW1fcXVvdGFNYW5hZ2VyKSB7CisgICAgaWYgKCFtX2VuZ2luZSkgewogICAgICAgICBjYWxs
YmFjayhFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX3F1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHNwYWNlUmVxdWlyZWQsIFtjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKKyAgICBtX2VuZ2lu
ZS0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCBzcGFjZVJlcXVpcmVkLCBbY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CiAgICAgICAgIHN3aXRjaCAo
ZGVjaXNpb24pIHsKICAgICAgICAgY2FzZSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6RGVueToKICAgICAgICAgICAgIGNhbGxiYWNrKEVycm9yOjpRdW90YUV4Y2VlZGVk
KTsKQEAgLTU0OCw3ICs1MzQsNiBAQCB2b2lkIENhY2hlczo6d3JpdGVSZWNvcmQoY29uc3QgQ2Fj
aGUmIGNhY2hlLCBjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mbwogICAgIEFTU0VS
VChtX3NpemUgPj0gcHJldmlvdXNSZWNvcmRTaXplKTsKICAgICBtX3NpemUgKz0gcmVjb3JkSW5m
b3JtYXRpb24uc2l6ZTsKICAgICBtX3NpemUgLT0gcHJldmlvdXNSZWNvcmRTaXplOwotICAgIHVw
ZGF0ZVNpemVGaWxlKCk7CiAKICAgICBpZiAoIXNob3VsZFBlcnNpc3QoKSkgewogICAgICAgICBt
X3ZvbGF0aWxlU3RvcmFnZS5zZXQocmVjb3JkSW5mb3JtYXRpb24ua2V5LCBXVEZNb3ZlKHJlY29y
ZCkpOwpAQCAtNTU2LDEzICs1NDEsMTUgQEAgdm9pZCBDYWNoZXM6OndyaXRlUmVjb3JkKGNvbnN0
IENhY2hlJiBjYWNoZSwgY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZEluZm8KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc3RvcmFnZS0+c3RvcmUoQ2FjaGU6OmVuY29kZShy
ZWNvcmRJbmZvcm1hdGlvbiwgcmVjb3JkKSwgeyB9LCBbcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VS
ZWYoKm1fc3RvcmFnZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGludCBlcnJvcikg
bXV0YWJsZSB7CisgICAgbV9zdG9yYWdlLT5zdG9yZShDYWNoZTo6ZW5jb2RlKHJlY29yZEluZm9y
bWF0aW9uLCByZWNvcmQpLCB7IH0sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIHByb3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXShpbnQgZXJyb3IpIG11dGFibGUgewogICAgICAgICBpZiAoZXJyb3Ip
IHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKENhY2hlU3RvcmFnZSwgIkNhY2hlczo6
d3JpdGVSZWNvcmQgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBlcnJvcik7CiAgICAgICAgICAgICBj
YWxsYmFjayhFcnJvcjo6V3JpdGVEaXNrKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQpOworICAgICAgICB1cGRhdGVTaXplRmls
ZShbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
IGNhbGxiYWNrKFdURjo6bnVsbG9wdCk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCkBAIC02
MDUsNyArNTkyLDcgQEAgdm9pZCBDYWNoZXM6OnJlbW92ZVJlY29yZChjb25zdCBSZWNvcmRJbmZv
cm1hdGlvbiYgcmVjb3JkKQogCiAgICAgQVNTRVJUKG1fc2l6ZSA+PSByZWNvcmQuc2l6ZSk7CiAg
ICAgbV9zaXplIC09IHJlY29yZC5zaXplOwotICAgIHVwZGF0ZVNpemVGaWxlKCk7CisgICAgdXBk
YXRlU2l6ZUZpbGUoW10geyB9KTsKIAogICAgIHJlbW92ZUNhY2hlRW50cnkocmVjb3JkLmtleSk7
CiB9CkBAIC02MjEsMTcgKzYwOCw2IEBAIHZvaWQgQ2FjaGVzOjpyZW1vdmVDYWNoZUVudHJ5KGNv
bnN0IE5ldHdvcmtDYWNoZTo6S2V5JiBrZXkpCiAgICAgbV9zdG9yYWdlLT5yZW1vdmUoa2V5KTsK
IH0KIAotdm9pZCBDYWNoZXM6OnJlc2V0U3BhY2VVc2VkKCkKLXsKLSAgICBtX3NpemUgPSAwOwot
ICAgIHVwZGF0ZVNpemVGaWxlKCk7Ci0KLSAgICBpZiAobV9xdW90YU1hbmFnZXIpIHsKLSAgICAg
ICAgbV9xdW90YU1hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgICAgICBtX3F1b3RhTWFu
YWdlci0+YWRkVXNlcigqdGhpcyk7Ci0gICAgfQotfQotCiB2b2lkIENhY2hlczo6Y2xlYXJNZW1v
cnlSZXByZXNlbnRhdGlvbigpCiB7CiAgICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGVzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlcy5oCmluZGV4IDAzMjMxZjNhOWIwNTc2NzJkNjMxYmI5NmU2N2E2ZWI5
OWUxZDdjYmIuLjVkMzk0YTBlNDg4NTdiMDI1Y2FhNDgzNGFkMjZiZTg0N2RkOWY1NTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGVzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkNhY2hl
U3RvcmFnZUVuZ2luZUNhY2hlLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdG9y
YWdlUXVvdGFVc2VyLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CiAKQEAgLTQyLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgQ2FjaGVT
dG9yYWdlIHsKIAogY2xhc3MgRW5naW5lOwogCi1jbGFzcyBDYWNoZXMgZmluYWwgOiBwdWJsaWMg
UmVmQ291bnRlZDxDYWNoZXM+LCBwcml2YXRlIFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVzZXIgewor
Y2xhc3MgQ2FjaGVzIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FjaGVzPiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFN0cmluZyBjYWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7Ci0g
ICAgc3RhdGljIFJlZjxDYWNoZXM+IGNyZWF0ZShFbmdpbmUmLCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXImKTsK
KyAgICBzdGF0aWMgU3RyaW5nIGNhY2hlc1NpemVGaWxlbmFtZShjb25zdCBTdHJpbmcmIGNhY2hl
c1Jvb3RzUGF0aCk7CisgICAgc3RhdGljIFJlZjxDYWNoZXM+IGNyZWF0ZShFbmdpbmUmLCBXZWJD
b3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgpOwogICAgIH5DYWNoZXMoKTsK
IAogICAgIHN0YXRpYyB2b2lkIHJldHJpZXZlT3JpZ2luRnJvbURpcmVjdG9yeShjb25zdCBTdHJp
bmcmIGZvbGRlclBhdGgsIFdvcmtRdWV1ZSYsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChP
cHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+JiYpPiYmKTsKQEAgLTc5LDIyICs3OCwxNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICB2b2lkIGNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKLSAgICB2b2lkIHJl
c2V0U3BhY2VVc2VkKCk7CiAKICAgICB1aW50NjRfdCBzdG9yYWdlU2l6ZSgpIGNvbnN0OworICAg
IHZvaWQgdXBkYXRlU2l6ZUZpbGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogcHJp
dmF0ZToKLSAgICBDYWNoZXMoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYsIFN0cmlu
ZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJik7Ci0KLSAgICAvLyBT
dG9yYWdlUXVvdGFVc2VyIEFQSS4KLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBDYWNoZXMoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50
T3JpZ2luJiYsIFN0cmluZyYmIHJvb3RQYXRoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVNpemUo
KTsKICAgICB2b2lkIHJlYWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0
ZWQ8VmVjdG9yPENhY2hlPiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7
CiAgICAgdm9pZCB3cml0ZUNhY2hlc1RvRGlzayhXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29t
cGxldGlvbkNhbGxiYWNrJiYpOwogCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKLQogICAgIHZvaWQgc3RvcmVPcmlnaW4oV2ViQ29y
ZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKICAgICBzdGF0aWMgT3B0
aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiByZWFkT3JpZ2luKGNvbnN0IE5ldHdvcmtDYWNo
ZTo6RGF0YSYpOwogCkBAIC0xMDYsOCArMTAwLDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaGFz
QWN0aXZlQ2FjaGUoKSBjb25zdDsKIAotICAgIHZvaWQgdXBkYXRlU2l6ZUZpbGUoKTsKLQogICAg
IGJvb2wgbV9pc0luaXRpYWxpemVkIHsgZmFsc2UgfTsKICAgICBFbmdpbmUqIG1fZW5naW5lIHsg
bnVsbHB0ciB9OwogICAgIHVpbnQ2NF90IG1fdXBkYXRlQ291bnRlciB7IDAgfTsKQEAgLTEyMiw3
ICsxMTQsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6
Q29tcGxldGlvbkNhbGxiYWNrPiBtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNrczsKICAg
ICBib29sIG1faXNXcml0aW5nQ2FjaGVzVG9EaXNrIHsgZmFsc2UgfTsKICAgICBEZXF1ZTxDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpFcnJv
cj4pPj4gbV9wZW5kaW5nV3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrczsKLSAgICBXZWFrUHRy
PFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+IG1fcXVvdGFNYW5hZ2VyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggYzBmY2Y5YzVmNjAwYWE1YWMxMTYz
ZTQ3YTRiMjZkYWM0MjA2NWFhOS4uNmQwYzEyOWE3NDA1MTBkMzg2OTczNzA1YWQwOTJlZjEzMmNj
MDc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmNwcApAQCAtNTUsNiArNTUsOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogCiAgICAgZW5jb2Rl
ciA8PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPDwgbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlOwogCisgICAgZW5jb2RlciA8PCBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPDwgY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworCiAgICAgZW5jb2RlciA8PCBwZXJP
cmlnaW5TdG9yYWdlUXVvdGE7CiAgICAgZW5jb2RlciA8PCBwZXJUaGlyZFBhcnR5T3JpZ2luU3Rv
cmFnZVF1b3RhOwogfQpAQCAtMTQxLDYgKzE0MywxOCBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRl
YwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMubG9jYWxTdG9y
YWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqbG9jYWxTdG9yYWdlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIAorICAgIE9wdGlvbmFsPFN0cmluZz4gY2FjaGVTdG9yYWdl
RGlyZWN0b3J5OworICAgIGRlY29kZXIgPj4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5OworICAgIGlm
ICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZSgqY2FjaGVTdG9y
YWdlRGlyZWN0b3J5KTsKKworICAgIE9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4g
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGRlY29kZXIgPj4gY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGlmICghY2FjaGVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RG
TW92ZSgqY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKwogICAgIE9wdGlv
bmFsPHVpbnQ2NF90PiBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7CiAgICAgZGVjb2RlciA+PiBwZXJP
cmlnaW5TdG9yYWdlUXVvdGE7CiAgICAgaWYgKCFwZXJPcmlnaW5TdG9yYWdlUXVvdGEpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5o
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAppbmRl
eCAwOTVmMDlkNmFmOTNmOTEzZWJiMjlmNzAyNjdhZTljMWI3NGJlODhlLi5mMjdkZjQ4OTgwOWYz
MTk2MDhiNjgwY2IyYThhMWMxNGI3MDE4NDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKQEAgLTcxLDYgKzcxLDkgQEAgc3RydWN0
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKICAgICBTdHJpbmcgbG9jYWxTdG9yYWdlRGly
ZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGU7CiAKKyAgICBTdHJpbmcgY2FjaGVTdG9yYWdlRGlyZWN0b3J5Owor
ICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGU7CisKICAgICB1aW50NjRfdCBwZXJPcmlnaW5TdG9yYWdlUXVvdGEgeyBXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSB9OwogICAgIHVpbnQ2NF90IHBl
clRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgeyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRleCBmYWY4YTUyOGVhMjMwOWFiZmFlMTc3YmRl
ZWFiMjdjNWQ1ZjA3MzI5Li45ZWE4OWZiNWJkODAzMDhhNDg1OTgxNjMwMDUxYjExMThmMWI4NDg5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKQEAgLTY3
MiwzICs2NzIsOCBAQCB2b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdQogewogICAgIFdlYktpdDo6dG9J
bXBsKGNvbnRleHRSZWYpLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHVzZVNl
cGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQorCit2b2lkIFdLQ29udGV4dFJlc2V0UXVv
dGEoV0tDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCkt
PnJlc2V0UXVvdGEoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dFByaXZhdGUuaAppbmRleCA3MjNiNWU0N2U2ZTZhYmM2NjQyZGViZTg0YWNjZGUxZmE1
NjhjNzkwLi4xZDcyYTAwYThkZWFiNDBkMDE0Y2YxNDEzMWU4YjhhMTgyODVkNDU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBAIC0x
MjYsNiArMTI2LDggQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0Q2xlYXJMZWdhY3lQcml2YXRl
QnJvd3NpbmdMb2NhbFN0b3JhZ2UoV0tDb250ZXh0UmVmIGNvbnQKIAogV0tfRVhQT1JUIHZvaWQg
V0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRleHRSZWYg
Y29udGV4dCwgYm9vbCBmb3JjZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIAorV0tfRVhQT1JUIHZv
aWQgV0tDb250ZXh0UmVzZXRRdW90YShXS0NvbnRleHRSZWYpOworCiAjaWZkZWYgX19jcGx1c3Bs
dXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuaAppbmRleCBmOTQyOWY4YjA5YzljNjZhMThkMDkzMGM1YWE0
MjNjNWEzODcyNDRmLi4zMDcyOGMwZTA3NDFiNjg0MGIwYTQ3Zjg1MDE0N2MzMWIyZGEzZDI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuaApAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NQcm9t
cHRXYXNTaG93biA6IGJvb2w7CiBlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkIDog
Ym9vbDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsK
K3N0cnVjdCBDbGllbnRPcmlnaW47CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IDBlMzc4ODk5Mzk2MGEzNzdm
YThlODljYjY4ZTJjMmE2YzM5NWYzODkuLmRhNzNmZTcyMDgxYjZmYzY5ZTJkM2Q5ZjVjZDZlNjE0
MWQ2ZTgwNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAK
QEAgLTU1Miw2ICs1NTIsMTMgQEAgTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6
OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGgKICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxv
Y2FsU3RvcmFnZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CiAKKyAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFT
dG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxs
U3RyaW5nKCk7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdl
RGlyZWN0b3J5ID0gY2FjaGVTdG9yYWdlRGlyZWN0b3J5OworICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgfQorCisKICAgICBpZiAobV93ZWJzaXRlRGF0
YVN0b3JlKQogICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0g
bV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkoKTsKICAgICBpZiAocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0Vt
cHR5KCkpCkBAIC0xNzEzLDYgKzE3MjAsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MoKQogICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRyOwogfQog
Cit2b2lkIFdlYlByb2Nlc3NQb29sOjpyZXNldFF1b3RhKCkKK3sKKyAgICBpZiAoIW1fbmV0d29y
a1Byb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFF1b3RhKCksIDApOworfQorCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JU
ZXN0aW5nKCkKIHsKICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IDlkZTIxNzIyZDllYmRjYzMyNmY4YzM2MGZkMjg4
ZWNjN2U2YjM5ODQuLjUzOTQ5YTI2MDA0Yjc4OGVmZTg4ZjQzNGI1OWRhMTdjNjZjZTZmYjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtNTI4LDYgKzUyOCw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3Mo
Ym9vbCk7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CiAKKyAgICB2b2lk
IHJlc2V0UXVvdGEoKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2Nv
YS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KaW5kZXggMjllOTAwM2YwNDZm
MjE3NGM3NmI4NGY3MWI1ZWM4OTJlOGE0NjAyNS4uODcwNjJhYmQ2YzQyMWUyM2Y1YmEyZWUzMTYz
ZjEzOTljODk1NGFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAt
MTkwLDYgKzE5MCwxMCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0
b3JlOjpwYXJhbWV0ZXJzKCkKICAgICBpZiAoIXBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0
b3J5LmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKKyAgICBwYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IGNhY2hlU3RvcmFnZURpcmVjdG9yeSgpOwor
ICAgIGlmICghcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rvcnko
cGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKwogICAgIHBhcmFtZXRlcnMucGVyT3JpZ2luU3Rv
cmFnZVF1b3RhID0gcGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7CiAgICAgcGFyYW1ldGVycy5wZXJU
aGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VR
dW90YSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IGJiOTg0MTY2NDU0YjU2YWVhNGM4ZGJkNDg1
YjcyMTQwMGJiMTg2Y2EuLjRiMjdkZmI0ZjMzMjQ2MTIzNTk1NjNhODdjNDg0OTFhZDRkZjUxZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0yMDgzLDYgKzIwODMsMTIgQEAgV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKICAgICB9CiAKKyAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IHRoaXMtPmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5Lmlz
RW1wdHkoKSkgeworICAgICAgICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IGNh
Y2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIH0KKwogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5ID0gcmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKICAgICBpZiAoIXBh
cmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjYjkxNjBhMTE1NjFiYjE4
MTUwYTVhMGU2MGFjOWFlNWU1YjAzZWNlLi5mY2EwMDc5MWQzNjc4ZDZjNmVkNDU4MDI5YjFhZGI4
MWQ2ZGUyZjBjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTktMTEtMTMgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBh
cHBsZS5jb20+CisKKyAgICAgICAgQ3Jvc3MtdGhyZWFkIHZlcnNpb24gU3RvcmFnZVF1b3RhTWFu
YWdlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAz
OTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5j
cHA6IFJlbW92ZWQuIFRoaXMgdW5pdCB0ZXN0IHdhcyB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgc3Rh
dGUgCisgICAgICAgIGNoYW5nZSBpbnNpZGUgU3RvcmFnZVF1b3RhTWFuYWdlciBpcyBjb3JyZWN0
LiBTaW5jZSB3ZSBoYXZlIGNoYW5nZWQgb3VyIGltcGxlbWVudGF0aW9uLCB0aGUgdGVzdCBpcyBu
b3QgbmVlZGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHA6IFJlc2V0IFN0b3JhZ2VRdW90YU1hbmFnZXIncyBxdW90YSB2YWx1ZSBiZXR3ZWVuIHRlc3Rz
LgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZh
bHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFF1b3RhKToKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisKIDIwMTktMTEtMTIgIFdl
bnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gV0tX
ZWJWaWV3IGRvZXMgbm90IHJlc3BlY3Qgc3lzdGVtIHNwZWxsY2hlY2tpbmcgcHJlZmVyZW5jZQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlMzJiODVlNDJkYzFmMTkyNWI3Y2ZkOGE5YjkzM2Vi
NzIxZDFhY2VjLi5hNzBlMTQ2NDRjMTM4N2M0ZDdkODUwN2Y2OGIyMmUwYzFlMTIxNzFhIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzM0LDcgKzczNCw2IEBACiAJCTkzOTlCQTA2MjM3MTEx
NEYwMDgzOTJCRiAvKiBJbmRleGVkREJOb3RJblBhZ2VDYWNoZS5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTlCQTAzMjM3MTEwQkYw
MDgzOTJCRiAvKiBJbmRleGVkREJOb3RJblBhZ2VDYWNoZS5odG1sICovOyB9OwogCQk5M0FGNEVD
RTE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1h
Z2VzX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0FGNEVDRDE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgKi87IH07CiAJCTkzQUY0RUQxMTUwNkYxMzAwMDdG
RDU3RSAvKiBsb3RzLW9mLWltYWdlcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNGMTUwNkYxMjMwMDdGRDU3RSAvKiBsb3Rz
LW9mLWltYWdlcy5odG1sICovOyB9OwotCQk5M0I2MjA1NDIzNEVBNjJDMDBENDlCOTcgLyogU3Rv
cmFnZVF1b3RhTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0I2MjA1MzIzNEVBMzJCMDBENDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdl
ci5jcHAgKi87IH07CiAJCTkzQ0ZBODY3MUNFQjlFMzgwMDA1NjVBOCAvKiBhdXRvZm9jdXNlZC10
ZXh0LWlucHV0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNDRkE4NjYxQ0VCOURFMTAwMDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRleHQt
aW5wdXQuaHRtbCAqLzsgfTsKIAkJOTNEMTE5RkMyMkM2ODBGNzAwOUJFM0M3IC8qIGxvY2Fsc3Rv
cmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNEMTE5RkIyMkM1NzExMjAwOUJFM0M3IC8qIGxv
Y2Fsc3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwgKi87IH07CiAJCTkzRTJDNTU1MUZE
MzIwNDEwMEUxREY2QSAvKiBMaW5lRW5kaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTJDNTU0MUZEMzIwNDEwMEUxREY2QSAvKiBMaW5lRW5k
aW5nLmNwcCAqLzsgfTsKQEAgLTIxMzgsNyArMjEzNyw2IEBACiAJCTkzQUY0RUNBMTUwNkYwMzUw
MDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV3Rmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0Rm9ySW1hZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNB
RjRFQ0QxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZv
ckltYWdlc19CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQUY0RUNGMTUwNkYxMjMwMDdGRDU3RSAvKiBsb3Rz
LW9mLWltYWdlcy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImxvdHMtb2YtaW1h
Z2VzLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0I2MjA1MzIzNEVBMzJC
MDBENDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTNDRkE4NjYxQ0VCOURFMTAwMDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRl
eHQtaW5wdXQuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJhdXRvZm9jdXNlZC10
ZXh0LWlucHV0Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0NGQTg2ODFD
RUJDRkVEMDAwNTY1QTggLyogQ2FuZGlkYXRlVGVzdHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBDYW5kaWRhdGVUZXN0cy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTNEMTE5RkIyMkM1NzExMjAwOUJFM0M3IC8qIGxvY2Fsc3RvcmFnZS1vcGVu
LXdpbmRvdy1wcml2YXRlLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibG9jYWxz
dG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zMTEwLDcgKzMxMDgsNiBAQAogCQkJCTQxOTczQjVDMUFGMjI4NzUwMDZDN0IzNiAv
KiBTaGFyZWRCdWZmZXIuY3BwICovLAogCQkJCUExNzk5MTg5MUUxQ0EyNDEwMEE1MDVFRCAvKiBT
aGFyZWRCdWZmZXJUZXN0LmNwcCAqLywKIAkJCQlBMTc5OTE4QTFFMUNBMjQxMDBBNTA1RUQgLyog
U2hhcmVkQnVmZmVyVGVzdC5oICovLAotCQkJCTkzQjYyMDUzMjM0RUEzMkIwMEQ0OUI5NyAvKiBT
dG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLywKIAkJCQlFQ0E2ODBDRDFFNjhDQzA5MDA3MzFEMjAg
LyogU3RyaW5nVXRpbGl0aWVzLm1tICovLAogCQkJCUNFNEQ1REU1MUY2NzQzQkEwMDcyQ0ZDNiAv
KiBTdHJpbmdXaXRoRGlyZWN0aW9uLmNwcCAqLywKIAkJCQk5M0EyNTg5ODFGOTJGRjE1MDAzRTUx
MEMgLyogVGV4dENvZGVjLmNwcCAqLywKQEAgLTQ4NDYsNyArNDg0Myw2IEBACiAJCQkJN0NDRTdF
Q0YxQTQxMUE3RTAwNDQ3QzRDIC8qIFN0b3BMb2FkaW5nRnJvbURpZFJlY2VpdmVSZXNwb25zZS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUNEQzA5MzJFMjFDOTkzNDQwMDMwQzRCMCAvKiBTdG9wU3Vz
cGVuZFJlc3VtZUFsbE1lZGlhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE0QUQ2ODYyMjg1RDFD
MDAwNzc3RjJEIC8qIFN0b3JhZ2VRdW90YS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTkzQjYyMDU0
MjM0RUE2MkMwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxNUJFMTcxMUQ0MjhFNEIwMEREN0M2OCAvKiBTdG9yZUJsb2JUaGVuRGVsZXRlLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRDAxQTQxMUE3RTAwNDQ3QzRDIC8qIFN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0ND
RTdFRDExQTQxMUE3RTAwNDQ3QzRDIC8qIFN0cmluZ1RydW5jYXRvci5tbSBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1N0b3JhZ2VR
dW90YU1hbmFnZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1N0b3Jh
Z2VRdW90YU1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDFjNjdi
ZjA1MmY3YjBhMzQ1M2QwNTRmMjUyOTE5MWVlZjNmMTcyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBA
Ci0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0q
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUg
PFdlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFn
ZVF1b3RhVXNlci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkgewotCi1zdGF0aWMgY29uc3QgaW50IGRlZmF1bHRRdW90YSA9IDEgKiBLQjsK
LQotY2xhc3MgTW9ja1F1b3RhVXNlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlUXVv
dGFVc2VyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBNb2NrUXVvdGFVc2VyKFN0b3JhZ2VRdW90
YU1hbmFnZXImIG1hbmFnZXIpCi0gICAgICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQotICAgIHsK
LSAgICAgICAgbWFuYWdlci5hZGRVc2VyKCp0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFNw
YWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpIHsgbV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7IH0K
LQotcHJpdmF0ZToKLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fc3BhY2VVc2VkOwotICAgIH0KLQotICAgIHZvaWQgd2hlbkluaXRp
YWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykgZmluYWwKLSAgICB7
Ci0gICAgICAgIGlmICghbV9zcGFjZVVzZWQpCi0gICAgICAgICAgICBBU1NFUlRfRVEobV9tYW5h
Z2VyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6VW5pbml0aWFsaXplZCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFTU0VSVF9FUShtX21hbmFnZXItPnN0YXRlKCks
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0YXRlOjpDb21wdXRpbmdTcGFjZVVzZWQpOwotCi0gICAg
ICAgIC8vIFJlc2V0IHVzYWdlIHRvIG1vY2sgZGVsZXRpb24uCi0gICAgICAgIG1fc3BhY2VVc2Vk
ID0gMDsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICB9Ci0KLSAgICB1aW50NjRfdCBtX3NwYWNl
VXNlZCB7IDAgfTsKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBtX21hbmFnZXI7Ci19OwotICAg
IAotVEVTVChTdG9yYWdlUXVvdGFNYW5hZ2VyVGVzdCwgQmFzaWMpCi17Ci0gICAgU3RvcmFnZVF1
b3RhTWFuYWdlciogc3RvcmFnZVF1b3RhTWFuYWdlclB0ciA9IG51bGxwdHI7Ci0gICAgU3RvcmFn
ZVF1b3RhTWFuYWdlciBzdG9yYWdlUXVvdGFNYW5hZ2VyKGRlZmF1bHRRdW90YSwgWyZzdG9yYWdl
UXVvdGFNYW5hZ2VyUHRyXSh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3VycmVudFNwYWNlLCB1
aW50NjRfdCBzcGFjZUluY3JlYXNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVp
bnQ2NF90Pik+JiYgY29tcGxldGlvbkhhbmxkZXIpIHsKLSAgICAgICAgQVNTRVJUX1RSVUUoc3Rv
cmFnZVF1b3RhTWFuYWdlclB0cik7Ci0gICAgICAgIEFTU0VSVF9FUShzdG9yYWdlUXVvdGFNYW5h
Z2VyUHRyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6V2FpdGluZ0ZvclNw
YWNlSW5jcmVhc2VSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8gQWxsb3cgYWxsIHNwYWNlIGluY3Jl
YXNlIHJlcXVlc3RzLgotICAgICAgICBjb21wbGV0aW9uSGFubGRlcihzcGFjZUluY3JlYXNlICsg
Y3VycmVudFNwYWNlKTsKLSAgICB9KTsKLSAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyID0gJnN0
b3JhZ2VRdW90YU1hbmFnZXI7Ci0KLQotICAgIE1vY2tRdW90YVVzZXIgbW9ja1VzZXIoc3RvcmFn
ZVF1b3RhTWFuYWdlcik7Ci0KLSAgICAvLyBHcmFudCBkaXJlY3RseS4KLSAgICBzdG9yYWdlUXVv
dGFNYW5hZ2VyLnJlcXVlc3RTcGFjZSgwLjEgKiBLQiwgWyZdKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OkRlY2lzaW9uIGRlY2lzaW9uKSB7Ci0gICAgICAgIEFTU0VSVF9FUShkZWNpc2lv
biwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50KTsKLSAgICAg
ICAgbW9ja1VzZXIuc2V0U3BhY2VVc2VkKDAuMSAqIEtCKTsKLSAgICB9KTsKLQotICAgIC8vIEdy
YW50IGFmdGVyIGNvbXB1dGluZyBhY2N1cmF0ZSB1c2FnZS4KLSAgICBzdG9yYWdlUXVvdGFNYW5h
Z2VyLnJlcXVlc3RTcGFjZSgxLjAgKiBLQiwgWyZdKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OkRlY2lzaW9uIGRlY2lzaW9uKSB7Ci0gICAgICAgIEFTU0VSVF9FUShkZWNpc2lvbiwgV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50KTsKLSAgICAgICAgbW9j
a1VzZXIuc2V0U3BhY2VVc2VkKDEuMCAqIEtCKTsKLSAgICB9KTsKLQotICAgIC8vIEdyYW50IGFm
dGVyIGNvbXB1dGluZyBhY2N1cmF0ZSB1c2FnZSBhbmQgcmVxdWVzdGluZyBzcGFjZSBpbmNyZWFz
ZS4KLSAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLnJlcXVlc3RTcGFjZSgxMCAqIEtCLCBbJl0oV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNpb24pIHsKLSAgICAgICAg
QVNTRVJUX0VRKHN0b3JhZ2VRdW90YU1hbmFnZXJQdHItPnN0YXRlKCksIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OlN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3QpOwotICAgICAgICBBU1NFUlRf
RVEoZGVjaXNpb24sIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFu
dCk7Ci0gICAgfSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggNGU0OGYyN2NmZmExMDhmMDc3
Y2U5OGJhZGJkYThkYTFhMjk1NmQwOS4uODExZDVmMDFhY2VjZWVkOTY1NzFlZDBkMmJkOTA0MWZm
NmFjYzk4NyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAg
LTk4MCw2ICs5ODAsOCBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0
ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZQogICAgIGNsZWFyU2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbnMoKTsKICAgICBjbGVhckRPTUNhY2hlcygpOwogCisgICAgcmVz
ZXRRdW90YSgpOworCiAgICAgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyVGVzdGluZyhwbGF0Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7CiAKICAgICBXS0Nv
bnRleHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZyhUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuY29udGV4dCgpKTsKQEAgLTI5OTIsNiArMjk5NCwxMSBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpCiAgICAgV0tDb250ZXh0
VGVybWluYXRlU2VydmljZVdvcmtlclByb2Nlc3MocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCit2
b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFF1b3RhKCkKK3sKKyAgICBXS0NvbnRleHRSZXNldFF1
b3RhKHBsYXRmb3JtQ29udGV4dCgpKTsKK30KKwogI2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtV2lsbFJ1blRlc3QoY29uc3QgVGVzdEludm9jYXRpb24m
KQogewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5o
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmluZGV4IGVkMTY5ZWEy
YzA3ZjU1MDYxMjYxNjI2ODMwNTRmNWY2NTBiM2Y2N2QuLjVlOGRkM2EwMDUxNzgzYzhlMGY4NmEz
MzRiMjdjZDc2NmE0ODUwZDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgKQEAgLTI2OCw2ICsyNjgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXJtaW5hdGVOZXR3b3Jr
UHJvY2VzcygpOwogICAgIHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKTsKIAor
ICAgIHZvaWQgcmVzZXRRdW90YSgpOworCiAgICAgdm9pZCByZW1vdmVBbGxTZXNzaW9uQ3JlZGVu
dGlhbHMoKTsKIAogICAgIHZvaWQgY2xlYXJJbmRleGVkRGF0YWJhc2VzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383486</attachid>
            <date>2019-11-13 13:21:10 -0800</date>
            <delta_ts>2019-11-14 09:18:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203971-20191113132109.patch</filename>
            <type>text/plain</type>
            <size>185990</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNDIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmUwZTQ5N2QzYTYxYjEz
ZGJlMGVlOGM3YmI1ZjA2ODc1ZjJhOThlNy4uNTlhMjQyOTFiY2RmOTFjNzVhZTI1YTg4YTNhMDBl
MmZiYWU4OTQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAxOS0xMS0xMyAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVy
c2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgYSBsb2NrLWJhc2VkIFN0b3JhZ2VRdW90YU1hbmFn
ZXIgc28gdGhhdCBxdW90YSBjaGVjayBjYW4gYmUgZG9uZSBvbiBkaWZmZXJlbnQgdGhyZWFkcy4K
KworICAgICAgICBBbHNvIGZpeCBzb21lIGJ1Z3MgcmV2ZWFsZWQgYnkgdGhpcyBwYXRjaC4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5j
bWFrZToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0
YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpyZXF1ZXN0
U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRpc2tVc2Fn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpR
dW90YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2
ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21w
dXRlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURC
U2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3BhY2VV
c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpR
dW90YVVzZXI6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjplbnN1cmVRdW90
YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5pc2hD
b21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpJREJTZXJ2ZXI6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGVjcmVhc2VTcGFj
ZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluaXRpYWxpemVRdW90YVVzZXIp
OiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZW5hbWVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6bWF5YmVV
cGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRl
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1S
ZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxl
dGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpyZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtUHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmdldEFsbFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFs
bFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6Z2V0Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aXRl
cmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRU
cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZXF1ZXN0U3BhY2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6d2FpdEZvclJlcXVlc3RTcGFj
ZUNvbXBsZXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3Jl
YXNlVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmpl
Y3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVj
ayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpjbGVhck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhBZnRlclF1
b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRl
clF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkQWZ0ZXJR
dW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnRBZnRl
clF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3JB
ZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRU
cmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6YWJvcnRU
cmFuc2FjdGlvbldpdGhvdXRDYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1
dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bjo6ZGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c3RvcmFnZVF1b3RhTWFuYWdlckdldHRlcik6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oOgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBz
dG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp0cnlHcmFudFJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dXBkYXRlUXVvdGFCYXNlZE9u
VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90
YVVwZGF0ZWRCYXNlZE9uVXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFu
YWdlcjo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
Ojp+U3RvcmFnZVF1b3RhTWFuYWdlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpzcGFjZVVzYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlh
bGl6ZVVzZXJzSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjphZGRVc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVV
c2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJl
cXVlc3RTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjphc2tGb3JNb3JlU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAg
ICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3Rh
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1h
bmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6
cmVzZXRRdW90YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpzdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVv
dGFVc2VyLmg6IFJlbW92ZWQuCisKIDIwMTktMTEtMTMgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBzb21lIFdlYkdQVSBkZW1vcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3MTk2
YTc0YmRkMzMwMDFhZDQxMDdhMzg5NGEzM2YyNjhkYzA5NjEzLi45MTU2ZDAwMTM4YWQ0YjMxZjA1
MTYyOWE2YzAxY2FmM2RmMjFjYzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE5LTEx
LTEzICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENyb3NzLXRo
cmVhZCB2ZXJzaW9uIFN0b3JhZ2VRdW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzk3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRh
U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVtb3Zl
U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6ZGVzdHJveVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
ZGVsZXRlV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVs
ZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OmNyZWF0ZUlEQlNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpz
ZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2VGb3JUZXN0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlc2V0UXVvdGEpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpleGlzdGluZ1N0b3JhZ2VRdW90YU1hbmFnZXJzKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVTdG9yYWdlUXVvdGEp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2xlYXJTdG9yYWdl
UXVvdGEpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVRdW90YVVzZXJzKTogRGVsZXRlZC4KKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlUXVv
dGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OmVuc3VyZU9yaWdpblN0
b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OmV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXI6OmNhY2hlUm9vdFBhdGggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OnNldElEQlJvb3RQYXRoKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjppZGJS
b290UGF0aCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yYWdl
UXVvdGFNYW5hZ2Vyczo6ZGVmYXVsdFF1b3RhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OlN0b3JhZ2VRdW90YU1hbmFnZXJzOjpzZXREZWZhdWx0UXVv
dGFzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlN0b3JhZ2VR
dW90YU1hbmFnZXJzOjptYW5hZ2Vyc1Blck9yaWdpbik6IERlbGV0ZWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpnZXREaXJlY3RvcnlTaXplKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVT
dG9yYWdlOjpFbmdpbmU6OmRpc2tVc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6RW5naW5lOjpyZXF1ZXN0U3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OkVuZ2luZTo6cmVhZENhY2hlc0Zyb21EaXNrKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpFbmdpbmU6OndyaXRlU2l6ZUZpbGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3Jh
Z2U6OkVuZ2luZTo6cmVhZFNpemVGaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdl
OjpFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cHV0KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OkNhY2hlczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6
OkNhY2hlcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjp+Q2FjaGVz
KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnVwZGF0ZVNpemVGaWxl
KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmluaXRpYWxpemVTaXpl
KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmNsZWFyKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlcXVlc3RTcGFjZSk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjp3cml0ZVJlY29yZCk6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZW1vdmVSZWNvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6d2hlbkluaXRpYWxpemVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlc2V0U3BhY2VVc2VkKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZXMuaDoKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29k
ZSk6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRS
ZXNldFF1b3RhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6cmVzZXRRdW90YSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVE
YXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFy
YW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKToK
KwogMjAxOS0xMS0xMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAg
ICAgVGFrZSBzZXJ2aWNlIHdvcmtlciBhc3NlcnRpb25zIGJhc2VkIG9uIGNsaWVudCBwcm9jZXNz
ZXMgYXNzZXJ0aW9uIHN0YXRlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggNDAyNjIzZjA5ZTc3OTBh
MzY3MGE2MzkzZTBmMjMwZDY3ZmM3MGI4OS4uMDEwYjI4MWJjYmEyNmM3ODI4ODUyNDJmNzkwMGU4
Zjk0Njk4MTFiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMzc5LDcgKzEzNzksNiBAQCBzZXQo
V2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgc3RvcmFnZS9TdG9yYWdlTmFt
ZXNwYWNlLmgKICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oCiAgICAgc3Rv
cmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKLSAgICBzdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIu
aAogICAgIHN0b3JhZ2UvU3RvcmFnZVR5cGUuaAogCiAgICAgc3R5bGUvU3R5bGVDaGFuZ2UuaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
dmVyLmNwcAppbmRleCBlNjFkYjhjOTQyOGQ5ODRkYTY0Njk2ZTdjODQyNzg3NDI2OWMyN2U2Li4w
MDgzNGJmMmVkNTU2ZTI4OTg0ZTkzY2Y3M2VjNTI0MWRhMzY0OGI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAt
NDYsMjQgKzQ2LDI0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCU2VydmVy
IHsKIAotUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitSZWY8SURC
U2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0b3Jh
Z2VRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiB7CiAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgSURCU2VydmVyKHNlc3Npb25JRCwgV1RGTW92ZShxdW90YU1hbmFnZXJH
ZXR0ZXIpKSk7CiB9CiAKLVJlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1
b3RhTWFuYWdlckdldHRlciYmIHF1b3RhTWFuYWdlckdldHRlcikKK1JlZjxJREJTZXJ2ZXI+IElE
QlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1h
bmFnZXJHZXR0ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCU2VydmVyKHNlc3Np
b25JRCwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBXVEZNb3ZlKHF1b3RhTWFuYWdlckdldHRlcikp
KTsKIH0KIAotSURCU2VydmVyOjpJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBR
dW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitJREJTZXJ2ZXI6OklEQlNl
cnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIm
JiBxdW90YU1hbmFnZXJHZXR0ZXIpCiAgICAgOiBDcm9zc1RocmVhZFRhc2tIYW5kbGVyKCJJbmRl
eGVkRGF0YWJhc2UgU2VydmVyIiwgQXV0b2RyYWluZWRQb29sRm9yUnVuTG9vcDo6VXNlKQogICAg
ICwgbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAgICwgbV9xdW90YU1hbmFnZXJHZXR0ZXIoV1RG
TW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKQogewogfQogCi1JREJTZXJ2ZXI6OklEQlNlcnZlcihQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoLCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitJREJTZXJ2ZXI6
OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2Vy
R2V0dGVyKQogICAgIDogQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlcigiSW5kZXhlZERhdGFiYXNlIFNl
cnZlciIsIEF1dG9kcmFpbmVkUG9vbEZvclJ1bkxvb3A6OlVzZSkKICAgICAsIG1fc2Vzc2lvbklE
KHNlc3Npb25JRCkKICAgICAsIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKGRhdGFiYXNlRGlyZWN0
b3J5UGF0aCkKQEAgLTY4MywxNTcgKzY4MywyOCBAQCB2b2lkIElEQlNlcnZlcjo6cGVyZm9ybUNs
b3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcgog
CiB2b2lkIElEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzKHVpbnQ2
NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgZm9yIChhdXRvJiB1c2VyIDogbV9xdW90YVVzZXJzLnZh
bHVlcygpKQotICAgICAgICB1c2VyLT5yZXNldFNwYWNlVXNlZCgpOwotCiAgICAgYXV0byBjYWxs
YmFjayA9IG1fZGVsZXRlRGF0YWJhc2VDb21wbGV0aW9uSGFuZGxlcnMudGFrZShjYWxsYmFja0lE
KTsKICAgICBBU1NFUlQoY2FsbGJhY2spOwogICAgIGNhbGxiYWNrKCk7CiB9CiAKLUlEQlNlcnZl
cjo6UXVvdGFVc2VyOjpRdW90YVVzZXIoSURCU2VydmVyJiBzZXJ2ZXIsIFN0b3JhZ2VRdW90YU1h
bmFnZXIqIG1hbmFnZXIsIENsaWVudE9yaWdpbiYmIG9yaWdpbikKLSAgICA6IG1fc2VydmVyKHNl
cnZlcikKLSAgICAsIG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKLSAgICAsIG1fb3Jp
Z2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAsIG1faXNJbml0aWFsaXplZChtX3NlcnZlci5tX3Nl
c3Npb25JRC5pc0VwaGVtZXJhbCgpKQotewotICAgIGlmIChtYW5hZ2VyKQotICAgICAgICBtYW5h
Z2VyLT5hZGRVc2VyKCp0aGlzKTsKLX0KLQotSURCU2VydmVyOjpRdW90YVVzZXI6On5RdW90YVVz
ZXIoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+cmVtb3ZlVXNl
cigqdGhpcyk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2Vk
KCkKLXsKLSAgICBtX3NwYWNlVXNlZCA9IDA7Ci0KLSAgICBpZiAoIW1fbWFuYWdlcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2VydmVyLm1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1faW5pdGlhbGl6YXRpb25DYWxsYmFjayk7Ci0KLSAgICBt
X2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIC8vIERvIGFkZC9yZW1vdmUgdG8gdHJpZ2dl
ciBjYWxsIHRvIHdoZW5Jbml0aWFsaXplZC4KLSAgICBtX21hbmFnZXItPnJlbW92ZVVzZXIoKnRo
aXMpOwotICAgIG1fbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7Ci19Ci0KLXZvaWQgSURCU2VydmVy
OjpRdW90YVVzZXI6OmNvbXB1dGVTcGFjZVVzZWQoKQotewotICAgIHJlc2V0U3BhY2VVc2VkKCk7
Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKHVpbnQ2
NF90IHNpemUpCi17Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQobV9zcGFjZVVzZWQgKyBzaXplID4gbV9zcGFjZVVzZWQpOwotICAgIG1fc3Bh
Y2VVc2VkICs9IHNpemU7Ci19Ci12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpkZWNyZWFzZVNw
YWNlVXNlZCh1aW50NjRfdCBzaXplKQotewotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAg
ICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fc3BhY2VVc2VkID49IHNpemUpOwotICAgIG1fc3Bh
Y2VVc2VkIC09IHNpemU7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OndoZW5Jbml0
aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCi17Ci0gICAgaWYg
KG1faXNJbml0aWFsaXplZCkgewotICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIG1faW5pdGlhbGl6YXRpb25DYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
OwotICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKG1fb3JpZ2lu
KTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5pdGlhbGl6ZVNwYWNlVXNlZCh1
aW50NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCB8fCAhbV9l
c3RpbWF0ZWRTcGFjZUluY3JlYXNlKTsKLSAgICBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsKLSAg
ICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgaWYgKGF1dG8gY2FsbGJhY2sgPSBXVEZN
b3ZlKG1faW5pdGlhbGl6YXRpb25DYWxsYmFjaykpCi0gICAgICAgIGNhbGxiYWNrKCk7Ci19Ci0K
LUlEQlNlcnZlcjo6UXVvdGFVc2VyJiBJREJTZXJ2ZXI6OmVuc3VyZVF1b3RhVXNlcihjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICByZXR1cm4gKm1fcXVvdGFVc2Vycy5lbnN1cmUo
b3JpZ2luLCBbdGhpcywgJm9yaWdpbl0gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxRdW90
YVVzZXI+KCp0aGlzLCBtX3F1b3RhTWFuYWdlckdldHRlcihtX3Nlc3Npb25JRCwgb3JpZ2luKSwg
Q2xpZW50T3JpZ2luIHsgb3JpZ2luIH0pOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLX0KLQot
dm9pZCBJREJTZXJ2ZXI6OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENs
aWVudE9yaWdpbiYgb3JpZ2luKQotewotICAgIEFTU0VSVCghbV9zZXNzaW9uSUQuaXNFcGhlbWVy
YWwoKSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZJREJTZXJ2ZXI6OmNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4sIG9yaWdpbikpOwotfQotCi12
b2lkIElEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmln
aW4mIG9yaWdpbikKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIElEQlNlcnZlcjo6cmVx
dWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0YXNrU2l6ZSkK
IHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBSZWZQdHI8U3RvcmFnZVF1b3Rh
TWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fcXVvdGFNYW5hZ2VyR2V0dGVyKG9yaWdp
bik7CisgICAgaWYgKCFzdG9yYWdlUXVvdGFNYW5hZ2VyKQorICAgICAgICByZXR1cm4gU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk7CiAKLSAgICBhdXRvIGRhdGFiYXNlRGlyZWN0
b3J5UGF0aCA9IHRoaXMtPmRhdGFiYXNlRGlyZWN0b3J5UGF0aElzb2xhdGVkQ29weSgpOwotICAg
IGF1dG8gb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6
ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4u
Y2xpZW50T3JpZ2luLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsICJ2MCIpOwotICAgIGF1dG8gbmV3
VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VE
aXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3Jp
Z2luLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsICJ2MSIpOwotICAgIGF1dG8gc2l6ZSA9IFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShvbGRWZXJzaW9uT3Jp
Z2luRGlyZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRp
cmVjdG9yeShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKLQotICAgIHBvc3REYXRhYmFzZVRh
c2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmZpbmlzaENv
bXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbiwgb3JpZ2luLCBzaXplKSk7Ci19Ci0KLXZvaWQgSURC
U2VydmVyOjpmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3Jp
Z2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlVXNlZCkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIo
b3JpZ2luKS5pbml0aWFsaXplU3BhY2VVc2VkKHNwYWNlVXNlZCk7CisgICAgcmV0dXJuIHN0b3Jh
Z2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCh0YXNrU2l6ZSk7
CiB9CiAKLXZvaWQgSURCU2VydmVyOjpyZXF1ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VR
dW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJiBjYWxsYmFjaykKK3VpbnQ2NF90IElEQlNlcnZlcjo6
ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdERpcmVjdG9yeSwgY29uc3QgQ2xpZW50T3JpZ2lu
JiBvcmlnaW4pCiB7Ci0gICAgYXV0byogcXVvdGFNYW5hZ2VyID0gZW5zdXJlUXVvdGFVc2VyKG9y
aWdpbikubWFuYWdlcigpOwotICAgIGlmICghcXVvdGFNYW5hZ2VyKSB7Ci0gICAgICAgIGNhbGxi
YWNrKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHRhc2tTaXplLCBXVEZN
b3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpyZXNldFNwYWNlVXNlZChjb25z
dCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBpZiAoYXV0byogdXNlciA9IG1fcXVvdGFV
c2Vycy5nZXQob3JpZ2luKSkKLSAgICAgICAgdXNlci0+cmVzZXRTcGFjZVVzZWQoKTsKLX0KLQot
dm9pZCBJREJTZXJ2ZXI6OmluY3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3Jp
Z2luLCB1aW50NjRfdCBzaXplKQotewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmluY3Jl
YXNlU3BhY2VVc2VkKHNpemUpOwotfQotCi12b2lkIElEQlNlcnZlcjo6ZGVjcmVhc2VTcGFjZVVz
ZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNpemUpCi17Ci0gICAgZW5z
dXJlUXVvdGFVc2VyKG9yaWdpbikuZGVjcmVhc2VTcGFjZVVzZWQoc2l6ZSk7Ci19Ci0KLXZvaWQg
SURCU2VydmVyOjppbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4m
IG9yaWdpbiwgdWludDY0X3QgdGFza1NpemUpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdp
bikuaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodGFza1NpemUpOwotfQorICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwogCi12b2lkIElEQlNlcnZlcjo6ZGVjcmVhc2VQb3RlbnRpYWxTcGFj
ZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlVXNlZCkKLXsK
LSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5kZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChz
cGFjZVVzZWQpOworICAgIGF1dG8gb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRhdGFi
YXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9w
T3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCByb290RGlyZWN0b3J5LCAidjAiKTsKKyAgICBh
dXRvIG5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZpZXI6OmRh
dGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3JpZ2luLmNs
aWVudE9yaWdpbiwgcm9vdERpcmVjdG9yeSwgInYxIik7CisgICAgcmV0dXJuIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShvbGRWZXJzaW9uT3JpZ2luRGly
ZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9y
eShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKIH0KIAogdm9pZCBJREJTZXJ2ZXI6OnVwZ3Jh
ZGVGaWxlc0lmTmVjZXNzYXJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCBkM2EyMjNkOTMyZDkxNTlkNTQ2NjYyOWY3
MTdlZmZiNTc3NDEzY2FmLi5iZjJiNDc4ODQ1NDY4ZjNhMzQ5NWJiZmU5NTJlYTkwMzcwYzM2M2Nk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU3Rv
cmFnZVF1b3RhTWFuYWdlci5oIgotI2luY2x1ZGUgIlN0b3JhZ2VRdW90YVVzZXIuaCIKICNpbmNs
dWRlICJVbmlxdWVJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlQ29u
bmVjdGlvbi5oIgogI2luY2x1ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0aXZpdHkuaD4KQEAgLTU4LDkg
KzU3LDkgQEAgZW51bSBjbGFzcyBTaG91bGRGb3JjZVN0b3AgOiBib29sIHsgTm8sIFllcyB9Owog
CiBjbGFzcyBJREJTZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2ZXI+LCBwdWJsaWMg
Q3Jvc3NUaHJlYWRUYXNrSGFuZGxlciwgcHVibGljIENhbk1ha2VXZWFrUHRyPElEQlNlcnZlcj4g
ewogcHVibGljOgotICAgIHVzaW5nIFF1b3RhTWFuYWdlckdldHRlciA9IFdURjo6RnVuY3Rpb248
U3RvcmFnZVF1b3RhTWFuYWdlciooUEFMOjpTZXNzaW9uSUQsIGNvbnN0IENsaWVudE9yaWdpbiYp
PjsKLSAgICBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBRdW90
YU1hbmFnZXJHZXR0ZXImJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2
ZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9y
eVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKKyAgICB1c2luZyBTdG9yYWdlUXVvdGFNYW5h
Z2VyR2V0dGVyID0gV1RGOjpGdW5jdGlvbjxSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4oY29u
c3QgQ2xpZW50T3JpZ2luJik+OworICAgIHN0YXRpYyBSZWY8SURCU2VydmVyPiBjcmVhdGUoUEFM
OjpTZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXImJik7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIm
Jik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZ2lzdGVyQ29ubmVjdGlvbihJREJDb25u
ZWN0aW9uVG9DbGllbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVucmVnaXN0ZXJDb25u
ZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwpAQCAtMTExLDIxICsxMTAsMTUgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVEYXRhYmFzZXNNb2Rp
ZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3Jp
Z2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9uPHZvaWQgKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgdm9pZCByZXF1ZXN0U3BhY2UoY29uc3QgQ2xp
ZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKLSAgICB2b2lkIGluY3JlYXNlUG90ZW50
aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAg
ICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVp
bnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGluY3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVu
dE9yaWdpbiYsIHVpbnQ2NF90IHNpemUpOwotICAgIHZvaWQgZGVjcmVhc2VTcGFjZVVzZWQoY29u
c3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6ZSk7Ci0gICAgdm9pZCByZXNldFNwYWNlVXNl
ZChjb25zdCBDbGllbnRPcmlnaW4mKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZVF1b3RhVXNlcihj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikgeyBlbnN1cmVRdW90YVVzZXIob3JpZ2luKTsgfQor
ICAgIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIHJlcXVlc3RTcGFjZShjb25zdCBDbGll
bnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHVpbnQ2NF90IGRpc2tVc2FnZShjb25zdCBTdHJpbmcmLCBjb25zdCBDbGllbnRPcmlnaW4mKTsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJ5U3RvcChTaG91bGRGb3JjZVN0b3ApOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgSURCU2VydmVy
KFBBTDo6U2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJik7Ci0gICAgSURCU2VydmVyKFBB
TDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgUXVvdGFN
YW5hZ2VyR2V0dGVyJiYpOworICAgIElEQlNlcnZlcihQQUw6OlNlc3Npb25JRCwgU3RvcmFnZVF1
b3RhTWFuYWdlckdldHRlciYmKTsKKyAgICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVy
JiYpOwogCiAgICAgVW5pcXVlSURCRGF0YWJhc2UmIGdldE9yQ3JlYXRlVW5pcXVlSURCRGF0YWJh
c2UoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CiAgICAgCkBAIC0xNDIsNTEgKzEzNSw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVEYXRhYmFzZXNNb2RpZmllZFNpbmNlRm9yVmVy
c2lvbihXYWxsVGltZSwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCByZW1vdmVEYXRhYmFzZXNX
aXRoT3JpZ2luc0ZvclZlcnNpb24oY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mLCBj
b25zdCBTdHJpbmcmKTsKIAotICAgIGNsYXNzIFF1b3RhVXNlciBmaW5hbCA6IHB1YmxpYyBTdG9y
YWdlUXVvdGFVc2VyIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVi
bGljOgotICAgICAgICBRdW90YVVzZXIoSURCU2VydmVyJiwgU3RvcmFnZVF1b3RhTWFuYWdlcios
IENsaWVudE9yaWdpbiYmKTsKLSAgICAgICAgflF1b3RhVXNlcigpOwotCi0gICAgICAgIFN0b3Jh
Z2VRdW90YU1hbmFnZXIqIG1hbmFnZXIoKSB7IHJldHVybiBtX21hbmFnZXIuZ2V0KCk7IH0KLQot
ICAgICAgICB2b2lkIHNldFNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpIHsgbV9zcGFjZVVz
ZWQgPSBzcGFjZVVzZWQ7IH0KLSAgICAgICAgdm9pZCByZXNldFNwYWNlVXNlZCgpOwotCi0gICAg
ICAgIHZvaWQgaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodWludDY0X3QgaW5jcmVhc2UpIHsg
bV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlICs9IGluY3JlYXNlOyB9Ci0gICAgICAgIHZvaWQgZGVj
cmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodWludDY0X3QgZGVjcmVhc2UpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgPj0gZGVjcmVhc2UpOwot
ICAgICAgICAgICAgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlIC09IGRlY3JlYXNlOwotICAgICAg
ICB9Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VTcGFjZVVzZWQodWludDY0X3Qgc2l6ZSk7Ci0gICAg
ICAgIHZvaWQgZGVjcmVhc2VTcGFjZVVzZWQodWludDY0X3Qgc2l6ZSk7Ci0KLSAgICAgICAgdm9p
ZCBpbml0aWFsaXplU3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCk7Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbAotICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsKLSAgICAgICAgICAgIHJldHVybiBt
X3NwYWNlVXNlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZTsKLSAgICAgICAgfQotICAgICAg
ICB2b2lkIGNvbXB1dGVTcGFjZVVzZWQoKSBmaW5hbDsKLSAgICAgICAgdm9pZCB3aGVuSW5pdGlh
bGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKLQotICAgICAgICBJREJT
ZXJ2ZXImIG1fc2VydmVyOwotICAgICAgICBXZWFrUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IG1f
bWFuYWdlcjsKLSAgICAgICAgQ2xpZW50T3JpZ2luIG1fb3JpZ2luOwotICAgICAgICBib29sIG1f
aXNJbml0aWFsaXplZCB7IGZhbHNlIH07Ci0gICAgICAgIHVpbnQ2NF90IG1fc3BhY2VVc2VkIHsg
MCB9OwotICAgICAgICB1aW50NjRfdCBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgeyAwIH07Ci0g
ICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gbV9pbml0aWFsaXphdGlvbkNhbGxiYWNr
OwotICAgIH07Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBRdW90YVVzZXImIGVuc3VyZVF1b3RhVXNl
cihjb25zdCBDbGllbnRPcmlnaW4mKTsKLSAgICB2b2lkIHN0YXJ0Q29tcHV0aW5nU3BhY2VVc2Vk
Rm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNl
ZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mKTsKLSAgICB2b2lkIGZpbmlzaENvbXB1dGlu
Z1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzcGFjZVVz
ZWQpOwotCiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAgICAgSGFzaE1hcDxJREJD
b25uZWN0aW9uSWRlbnRpZmllciwgUmVmUHRyPElEQkNvbm5lY3Rpb25Ub0NsaWVudD4+IG1fY29u
bmVjdGlvbk1hcDsKICAgICBIYXNoTWFwPElEQkRhdGFiYXNlSWRlbnRpZmllciwgc3RkOjp1bmlx
dWVfcHRyPFVuaXF1ZUlEQkRhdGFiYXNlPj4gbV91bmlxdWVJREJEYXRhYmFzZU1hcDsKQEAgLTE5
OCw4ICsxNDYsNyBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIG1fZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoOwogCi0gICAgSGFzaE1hcDxDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxRdW90YVVz
ZXI+PiBtX3F1b3RhVXNlcnM7Ci0gICAgUXVvdGFNYW5hZ2VyR2V0dGVyIG1fcXVvdGFNYW5hZ2Vy
R2V0dGVyOworICAgIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIgbV9xdW90YU1hbmFnZXJHZXR0
ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tp
bmdTdG9yZS5jcHAKaW5kZXggOThjZWQ2MzcwOTFkMzYyZGUyYmRjMTNhZGZmMjhiOWI5NTA5ZmZj
NS4uOTUxOGY0ZjE4ZWU2NTVkMjdjNTk1YWNiMDllNzAzMTFkZmE0NDExZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdT
dG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01l
bW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTE5NCw2ICsxOTQsOSBAQCBJREJFcnJvciBNZW1v
cnlJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdAogICAgIG9iamVjdFN0b3JlLT5yZW5hbWUobmV3TmFtZSk7CiAgICAgdHJhbnNh
Y3Rpb24tPm9iamVjdFN0b3JlUmVuYW1lZCgqb2JqZWN0U3RvcmUsIG9sZE5hbWUpOwogCisgICAg
bV9vYmplY3RTdG9yZXNCeU5hbWUucmVtb3ZlKG9sZE5hbWUpOworICAgIG1fb2JqZWN0U3RvcmVz
QnlOYW1lLnNldChuZXdOYW1lLCBvYmplY3RTdG9yZSk7CisKICAgICBtX2RhdGFiYXNlSW5mby0+
cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIAogICAg
IHJldHVybiBJREJFcnJvciB7IH07CkBAIC00ODQsNiArNDg3LDExIEBAIElEQkVycm9yIE1lbW9y
eUlEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIoY29uc3QgSURC
UmVzb3VyY2VJCiAgICAgaWYgKG5ld0tleU51bWJlciA8IG9iamVjdFN0b3JlLT5jdXJyZW50S2V5
R2VuZXJhdG9yVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIAorICAgIGlm
IChuZXdLZXlOdW1iZXIgPj0gKGRvdWJsZSltYXhHZW5lcmF0ZWRLZXlWYWx1ZSkgeworICAgICAg
ICBvYmplY3RTdG9yZS0+c2V0S2V5R2VuZXJhdG9yVmFsdWUobWF4R2VuZXJhdGVkS2V5VmFsdWUg
KyAxKTsKKyAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICB9CisKICAgICB1aW50NjRf
dCBuZXdLZXlJbnRlZ2VyKG5ld0tleU51bWJlcik7CiAgICAgaWYgKG5ld0tleUludGVnZXIgPD0g
dWludDY0X3QobmV3S2V5TnVtYmVyKSkKICAgICAgICAgKytuZXdLZXlJbnRlZ2VyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9Vbmlx
dWVJREJEYXRhYmFzZS5jcHAKaW5kZXggZmRlZGE2MzVlYjdkYzA1ZjdmZjdlMDU4MmNjNDkyZjBj
MmQ4MzJiYi4uMjc2NzIyODE3OWM1YzljODExZTZjYzIzMGQxZTM2OGQ4ZmUxY2QyMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0xODYsNTYgKzE4Niw2IEBAIHN0YXRpYyBpbmxpbmUg
U3RyaW5nIHF1b3RhRXJyb3JNZXNzYWdlTmFtZShjb25zdCBjaGFyKiB0YXNrTmFtZSkKICAgICBy
ZXR1cm4gbWFrZVN0cmluZygiRmFpbGVkIHRvICIsIHRhc2tOYW1lLCAiIGluIGRhdGFiYXNlIGJl
Y2F1c2Ugbm90IGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIik7CiB9CiAKLXZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnJlcXVlc3RTcGFjZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0IGNoYXIqIHRhc2tOYW1lLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKElEQkVycm9yJiYpPiYmIGNhbGxiYWNrKQotewotICAgIG1fc2VydmVy
LT5yZXF1ZXN0U3BhY2UobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6ZSwgW3dlYWtUaGlz
ID0gbWFrZVdlYWtQdHIodGhpcyksIHRoaXMsIHdlYWtUcmFuc2FjdGlvbiA9IG1ha2VXZWFrUHRy
KHRyYW5zYWN0aW9uKSwgdGFza05hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1
dG8gZGVjaXNpb24pIG11dGFibGUgewotICAgICAgICBpZiAoIXdlYWtUaGlzKSB7Ci0gICAgICAg
ICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJvciB9KTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghd2Vha1RyYW5zYWN0aW9uKSB7Ci0gICAg
ICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJvciB9KTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9vd25pbmdQb2ludGVyRm9yQ2xvc2Up
IHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBjbG9zaW5nIHRoZSBkYXRhYmFzZSwgdGhlcmUgaXMg
bm8gcG9pbnQgaW4gdHJ5aW5nIHRvIG1vZGlmeSB0aGUgZGF0YWJhc2UgYXQgdGhhdCBwb2ludC4K
LSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgVW5rbm93bkVycm9yIH0pOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChkZWNpc2lvbikgewot
ICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OgotICAgICAg
ICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JN
ZXNzYWdlTmFtZSh0YXNrTmFtZSkgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNh
c2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50OgotICAgICAgICAgICAgY2Fs
bGJhY2soSURCRXJyb3IgeyB9KTsKLSAgICAgICAgfTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24oVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSURC
RXJyb3ImJik+JiYgY2FsbGJhY2spCi17Ci0gICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCAw
LCAiIiwgV1RGTW92ZShjYWxsYmFjaykpOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpz
dGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tT
aXplKQotewotICAgIG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50
aWZpZXIub3JpZ2luKCksIHRhc2tTaXplKTsKLSAgICBBU1NFUlQoIW1fcGVuZGluZ1NwYWNlSW5j
cmVhc2VUYXNrcy5jb250YWlucyhpZGVudGlmaWVyKSk7Ci0gICAgbV9wZW5kaW5nU3BhY2VJbmNy
ZWFzZVRhc2tzLmFkZChpZGVudGlmaWVyLCB0YXNrU2l6ZSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIGJv
b2wgaXNUYXNrU3VjY2Vzc2Z1bCkKLXsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9wZW5kaW5nU3Bh
Y2VJbmNyZWFzZVRhc2tzLmZpbmQoaWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKGl0ZXJhdG9yICE9
IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5lbmQoKSk7Ci0gICAgbV9zZXJ2ZXItPmRlY3Jl
YXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZh
bHVlKTsKLSAgICBpZiAoaXNUYXNrU3VjY2Vzc2Z1bCkKLSAgICAgICAgbV9zZXJ2ZXItPmluY3Jl
YXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAg
ICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MucmVtb3ZlKGl0ZXJhdG9yKTsKLX0KLQogdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVu
dE9wZW5PcGVyYXRpb24gKCVwKSIsIHRoaXMpOwpAQCAtMjQ2LDI5ICsxOTYsNyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24oKQogICAgIGlmICgh
bV9kYXRhYmFzZUluZm8pIHsKICAgICAgICAgaWYgKCFtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSkg
ewogICAgICAgICAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSB0cnVlOwotICAgICAgICAg
ICAgLy8gV2UgZG8gbm90IGtub3cgd2hldGhlciB0aGlzIGlzIGFuIGV4aXN0aW5nIG9yIGEgbmV3
IGRhdGFiYXNlLgotICAgICAgICAgICAgLy8gV2Ugc2V0IGEgc21hbGwgY29zdCBzbyB0aGF0IGl0
IGlzIG5vdCBwb3NzaWJsZSB0byBvcGVuIGFuIGluZmluaXRlIG51bWJlciBvZiBkYXRhYmFzZS4K
LSAgICAgICAgICAgIG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9pZGVudGlmaWVyLm9yaWdpbigp
LCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cih0aGlzKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF3
ZWFrVGhpcykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAg
aWYgKG1fb3duaW5nUG9pbnRlckZvckNsb3NlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueTogewotICAgICAgICAgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IElEQlJlc3VsdERhdGE6OmVycm9yKG1fY3VycmVudE9wZW5E
QlJlcXVlc3QtPnJlcXVlc3REYXRhKCkucmVxdWVzdElkZW50aWZpZXIoKSwgSURCRXJyb3IgeyBR
dW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgib3BlbkRhdGFiYXNlIikg
fSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudE9wZW5EQlJlcXVlc3QtPmNvbm5lY3Rp
b24oKS5kaWRPcGVuRGF0YWJhc2UocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIG1faXNPcGVu
aW5nQmFja2luZ1N0b3JlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6
OkRlY2lzaW9uOjpHcmFudDoKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjYWxsYmFja0lEID0g
dGhpcy0+Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKTsKLSAgICAgICAgICAgICAg
ICAgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCBkZWZhdWx0V3JpdGVPcGVy
YXRpb25Db3N0KTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy0+cG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tp
bmdTdG9yZSwgbV9pZGVudGlmaWVyLCBjYWxsYmFja0lEKSk7Ci0gICAgICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwg
bV9pZGVudGlmaWVyKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTgy
MSwyMyArNzQ5LDMwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmFkZE9wZW5EYXRhYmFzZUNv
bm5lY3Rpb24oUmVmPFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvCiAgICAgbV9vcGVuRGF0YWJh
c2VDb25uZWN0aW9ucy5hZGQoYWRvcHRSZWYoY29ubmVjdGlvbi5sZWFrUmVmKCkpKTsKIH0KIAot
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFz
ZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKQordm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50
aWZpZXImIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUg
KCVwKSIsIHRoaXMpOwogCisKKyAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJbmZvOworICAg
IC8vIFF1b3RhIGNoZWNrLgorICAgIGF1dG8gZGVjaXNpb24gPSBtX3NlcnZlci0+cmVxdWVzdFNw
YWNlKGlkZW50aWZpZXIub3JpZ2luKCksIGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QpOworICAg
IGlmIChkZWNpc2lvbiA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgewor
ICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5mbywg
SURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIk9wZW5C
YWNraW5nU3RvcmUiKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVCgh
bV9iYWNraW5nU3RvcmUpOwogICAgIG1fYmFja2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJh
Y2tpbmdTdG9yZShpZGVudGlmaWVyKTsKICAgICBtX2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0
YW5lb3VzVHJhbnNhY3Rpb25zID0gbV9iYWNraW5nU3RvcmUtPnN1cHBvcnRzU2ltdWx0YW5lb3Vz
VHJhbnNhY3Rpb25zKCk7CiAgICAgbV9iYWNraW5nU3RvcmVJc0VwaGVtZXJhbCA9IG1fYmFja2lu
Z1N0b3JlLT5pc0VwaGVtZXJhbCgpOwogCi0gICAgSURCRGF0YWJhc2VJbmZvIGRhdGFiYXNlSW5m
bzsKICAgICBhdXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldE9yRXN0YWJsaXNoRGF0YWJh
c2VJbmZvKGRhdGFiYXNlSW5mbyk7Ci0KLSAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5n
U3RvcmUsIGRhdGFiYXNlSW5mbywgZXJyb3IsICB0YXNrSWRlbnRpZmllcikpOworICAgIHBvc3RE
YXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvcikpOwogfQog
Ci12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRh
dGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yLCB1aW50NjRfdCB0YXNrSWRl
bnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29u
c3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlIik7CkBAIC04NDgsOCArNzgzLDYgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRh
YmFzZUluZm8mIGluZm8sIGNvbnN0IEkKICAgICBBU1NFUlQobV9pc09wZW5pbmdCYWNraW5nU3Rv
cmUpOwogICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gZmFsc2U7CiAKLSAgICBmaW5pc2hT
cGFjZUluY3JlYXNlVGFzayh0YXNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwotCiAgICAg
aWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtODYx
LDMzICs3OTQsMjMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUo
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6
OmNyZWF0ZU9iamVjdFN0b3JlIik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRl
T3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsKLSAgICByZXF1ZXN0U3BhY2UodHJh
bnNhY3Rpb24sIHRhc2tTaXplLCAiY3JlYXRlT2JqZWN0U3RvcmUiLCBbdGhpcywgdGFza1NpemUs
ICZ0cmFuc2FjdGlvbiwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBl
cnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNv
ZGUoKSAhPSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1v
dmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlz
LT5jcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24s
IGluZm8sIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90
IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29u
c3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25z
dCBJREJFcnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3Rv
cmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxi
YWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2Fs
bGJhY2tJRCwgdGFza1NpemUpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9y
ZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbywgIHF1
b3RhRXJyb3IpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIG1faWRl
bnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZp
ZXIoKSwgaW5mbykpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRl
T2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJ
bmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdp
biwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZv
KQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIo
ZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUiKTsKIAotICAg
IGlmICghcXVvdGFFcnJvci5pc051bGwoKSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVw
bHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBxdW90YUVycm9yLCBp
bmZvKSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRX
cml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5mbyk7CisgICAgYXV0byBkZWNpc2lv
biA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCB0YXNrU2l6ZSk7CisgICAgaWYgKGRl
Y2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50
aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1l
KCJDcmVhdGVPYmplY3RTdG9yZSIpKSwgaW5mbykpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC05MDMsNyArODI2LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNy
ZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwogCi0gICAgZmluaXNoU3BhY2VJ
bmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYg
KGVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5mby0+YWRkRXhpc3RpbmdPYmpl
Y3RTdG9yZShpbmZvKTsKIApAQCAtOTE1LDE3ICs4MzcsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpkZWxldGVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIiht
YWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUiKTsKIAotICAgIHdhaXRG
b3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9u
LCBvYmplY3RTdG9yZU5hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBl
cnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAg
ICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICB0aGlzLT5kZWxldGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh0cmFu
c2FjdGlvbiwgb2JqZWN0U3RvcmVOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNo
ZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBTdHJp
bmcmIG9iamVjdFN0b3JlTmFtZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50
NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJh
Y2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTkzNiwxNCAr
ODQ3LDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlQWZ0ZXJR
dW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRy
YW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8tPmlkZW50aWZpZXIoKSkpOworICAg
IHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSwgbV9pZGVudGlmaWVyLm9yaWdpbigp
LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvLT5pZGVu
dGlmaWVyKCkpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9i
amVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9y
ZShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
RGVsZXRlT2JqZWN0U3RvcmUiKTsKIAorICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9y
aWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAg
ICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRl
bnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5h
bWUoIkRlbGV0ZU9iamVjdFN0b3JlIikpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgbV9i
YWNraW5nU3RvcmUtPmRlbGV0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKTsKIApAQCAtOTY3LDM4ICs4ODMsMjggQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlIik7CiAKLSAg
ICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6
ZUluQnl0ZXMoKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicmVu
YW1lT2JqZWN0U3RvcmUiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBuZXdOYW1lLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRv
IGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3Iu
Y29kZSgpICE9IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RG
TW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRo
aXMtPnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlv
biwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJy
b3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RT
dG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJF
cnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIElEQkVycm9yIGVycm9yID0gcXVvdGFFcnJvcjsKKyAg
ICBJREJFcnJvciBlcnJvcjsKICAgICBhdXRvKiBpbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9G
b3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgaWYgKCFp
bmZvKQogICAgICAgICBlcnJvciA9IElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQXR0ZW1wdCB0
byByZW5hbWUgbm9uLWV4aXN0YW50IG9iamVjdCBzdG9yZSJfcyB9OwogCi0gICAgc3RhcnRTcGFj
ZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRp
ZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIGVycm9yKSk7CisgICAgcG9z
dERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNh
bGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRl
bnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJREJF
cnJvciYgZXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0
U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBj
b25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVP
YmplY3RTdG9yZSIpOwogCi0gICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVy
LCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7CisgICAgLy8gUXVvdGEg
Y2hlY2suCisgICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBu
ZXdOYW1lLnNpemVJbkJ5dGVzKCk7CisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1
ZXN0U3BhY2Uob3JpZ2luLCB0YXNrU2l6ZSk7CisgICAgaWYgKGRlY2lzaW9uID09IFN0b3JhZ2VR
dW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tS
ZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1
b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJSZW5hbWVPYmplY3RTdG9y
ZSIpKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTEwMTMsNyArOTE5LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgZmlu
aXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7
CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5mby0+cmVuYW1l
T2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIApAQCAtMTAyNSwy
OCArOTMwLDIyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUoVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3RpCiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpj
bGVhck9iamVjdFN0b3JlIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0
cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAg
ICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3Zl
KGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+
Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9
IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFj
YWxsYmFja0lEKQogICAgICAgICByZXR1cm47Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNsZWFyT2Jq
ZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9i
amVjdFN0b3JlSWRlbnRpZmllcikpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DbGVhck9iamVjdFN0
b3JlLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8o
KS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllcikpOwogfQogCi12b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwg
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQog
ewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIp
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSIpOwogCisgICAgaWYg
KG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DbGVh
ck9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRF
cnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJDbGVhck9iamVjdFN0b3JlIikpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIG1f
YmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKTsKIApAQCAtMTA2NywzMyArOTY2LDIyIEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBjCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhl
ZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleCIpOwogCi0gICAgYXV0
byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5m
byk7Ci0gICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNrU2l6ZSwgImNyZWF0ZUluZGV4
IiwgW3RoaXMsIHRhc2tTaXplLCAmdHJhbnNhY3Rpb24sIGluZm8sIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlz
TnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgdGhpcy0+Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sodGFza1NpemUs
IHRyYW5zYWN0aW9uLCBpbmZvLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwotICAgIH0pOwot
fQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleEFmdGVyUXVvdGFDaGVjayh1
aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgRXJyb3JDYWxsYmFjayBjYWxsYmFjaywgY29u
c3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0
b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxs
YmFja0lEKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNh
bGxiYWNrSUQsIHRhc2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgsIGNh
bGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8sIHF1b3RhRXJy
b3IpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgsIG1faWRlbnRpZmllci5vcmln
aW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbykp
OwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJv
ciYgcXVvdGFFcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRl
eChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29u
c3QgSURCSW5kZXhJbmZvJiBpbmZvKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRl
SW5kZXgiKTsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwoKSkgewotICAgICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBxdW90
YUVycm9yLCBpbmZvKSk7CisgICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlv
bkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5mbyk7CisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVy
LT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCB0YXNrU2l6ZSk7CisgICAgaWYgKGRlY2lzaW9uID09IFN0
b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1
b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJDcmVhdGVJbmRleCIpKSwg
aW5mbykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMTE1LDggKzEwMDMsNiBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0
ZUluZGV4Iik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZp
ZXIsIGVycm9yLmlzTnVsbCgpKTsKLQogICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAgICAg
ICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOwogICAgICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8g
PSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mby5vYmplY3RT
dG9yZUlkZW50aWZpZXIoKSk7CkBAIC0xMTMyLDE3ICsxMDE4LDYgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6ZGVsZXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIHUKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIs
ICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4Iik7CiAKLSAgICB3YWl0Rm9y
UmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxs
KCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5kZWxldGVJbmRleEFmdGVyUXVvdGFD
aGVjayh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUsIFdURk1v
dmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVs
ZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBp
bmRleE5hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJh
Y2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAg
aWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xMTU5LDE0ICsxMDM0LDE5IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBw
b3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8o
KS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJbmZvLT5pZGVudGlm
aWVyKCkpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgsIG1faWRlbnRpZmllci5v
cmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleEluZm8tPmlkZW50aWZpZXIoKSkpOwogfQogCi12b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCB1aW50NjRfdCBpbmRl
eElkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgo
Y29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgdWludDY0X3QgaW5kZXhJZGVudGlmaWVy
KQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIo
ZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgiKTsKIAorICAgIGlmICht
X3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6
RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRl
SW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBx
dW90YUVycm9yTWVzc2FnZU5hbWUoIkRlbGV0ZUluZGV4IikpLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGluZGV4SWRlbnRpZmllcikpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQVNT
RVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlSW5kZXgodHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmll
cik7CiAKQEAgLTExOTMsMjMgKzEwNzMsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVu
YW1lSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4Iik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVm
YXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKLSAgICByZXF1
ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicmVuYW1lSW5kZXgiLCBbdGhpcywgdGFz
a1NpemUsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZp
ZXIsIG5ld05hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11
dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0g
UXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9y
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+cmVuYW1l
SW5kZXhBZnRlclF1b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwgV1RGTW92ZShjYWxsYmFjayksIGVy
cm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhB
ZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2
NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNr
IGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBj
YWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsK
ICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIElEQkVycm9yIGVy
cm9yID0gcXVvdGFFcnJvcjsKKyAgICBJREJFcnJvciBlcnJvcjsKICAgICBhdXRvKiBvYmplY3RT
dG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykKICAgICAgICAg
ZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkF0dGVtcHQgdG8gcmVuYW1lIGluZGV4
IGluIG5vbi1leGlzdGFudCBvYmplY3Qgc3RvcmUiX3MgfTsKQEAgLTEyMTgsMTcgKzEwODYsMTkg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWlu
dDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkQKICAgICBpZiAoIWluZGV4SW5mbykKICAgICAgICAg
ZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkF0dGVtcHQgdG8gcmVuYW1lIG5vbi1l
eGlzdGFudCBpbmRleCJfcyB9OwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFj
a0lELCB0YXNrU2l6ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFj
a0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKKyAgICBwb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtUmVuYW1lSW5kZXgsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNh
Y3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElk
ZW50aWZpZXIsIG5ld05hbWUsIGVycm9yKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtUmVuYW1lSW5kZXgoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3Qg
aW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElEQkVycm9yJiBl
cnJvcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4Iik7CiAKLSAgICBp
ZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJl
bmFtZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkpOworICAgIC8vIFF1b3RhIGNoZWNrLgorICAg
IGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgbmV3TmFtZS5zaXpl
SW5CeXRlcygpOworICAgIGF1dG8gZGVjaXNpb24gPSBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9y
aWdpbiwgdGFza1NpemUpOworICAgIGlmIChkZWNpc2lvbiA9PSBTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5h
bWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3Is
IHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiUmVuYW1lSW5kZXgiKSksIG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTEyNDMsNyArMTExMyw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5j
cmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwogICAgIGlmIChl
cnJvci5pc051bGwoKSkgewogICAgICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFi
YXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVy
KTsKICAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlSW5mbyk7CkBAIC0xMjU3LDUyICsxMTI2LDQw
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2Fs
bGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1
dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNv
bnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUg
b3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25z
dCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6
T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayBj
YWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkIik7CiAKLSAgICBhdXRvIHRh
c2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShrZXlEYXRh
KSArIGVzdGltYXRlU2l6ZSh2YWx1ZSk7Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKLSAg
ICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmpl
Y3RTdG9yZShyZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7Ci0gICAgaWYgKG9i
amVjdFN0b3JlKQotICAgICAgICB0YXNrU2l6ZSArPSBvYmplY3RTdG9yZS0+aW5kZXhOYW1lcygp
LnNpemUoKSAqIHRhc2tTaXplOwotCi0gICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNr
U2l6ZSwgInB1dE9yQWRkIiwgW3RoaXMsIHRhc2tTaXplLCByZXF1ZXN0RGF0YSwga2V5RGF0YSwg
dmFsdWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIG92ZXJ3cml0ZU1vZGVdKGF1dG8g
ZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5j
b2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZN
b3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICB0aGlzLT5wdXRPckFkZEFmdGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgcmVxdWVzdERhdGEsIGtl
eURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwot
ICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZEFmdGVyUXVvdGFD
aGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
LCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgdmFsdWUsIEluZGV4
ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxs
YmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCi17CiAgICAgdWludDY0
X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNr
KSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGFydFNw
YWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmll
cigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwga2V5RGF0YSwgdmFsdWUs
IG92ZXJ3cml0ZU1vZGUsIHF1b3RhRXJyb3IpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JB
ZGQsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNh
Y3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBr
ZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJW
YWx1ZSYgb3JpZ2luYWxSZWNvcmRWYWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0
ZU1vZGUgb3ZlcndyaXRlTW9kZSwgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCit2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmln
aW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIG9yaWdpbmFsUmVj
b3JkVmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1v
ZGUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCIpOwogCi0gICAgQVNTRVJU
KG1fYmFja2luZ1N0b3JlKTsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKLQog
ICAgIElEQktleURhdGEgdXNlZEtleTsKICAgICBJREJFcnJvciBlcnJvcjsKIAotICAgIGlmICgh
cXVvdGFFcnJvci5pc051bGwoKSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Q
dXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBxdW90YUVycm9yLCB1c2VkS2V5KSk7CisgICAg
Ly8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlv
bkNvc3QgKyBlc3RpbWF0ZVNpemUoa2V5RGF0YSkgKyBlc3RpbWF0ZVNpemUob3JpZ2luYWxSZWNv
cmRWYWx1ZSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKKyAgICBhdXRvKiBvYmplY3RT
dG9yZSA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RT
dG9yZUlkZW50aWZpZXIpOworICAgIGlmIChvYmplY3RTdG9yZSkKKyAgICAgICAgdGFza1NpemUg
Kz0gb2JqZWN0U3RvcmUtPmluZGV4TmFtZXMoKS5zaXplKCkgKiB0YXNrU2l6ZTsKKyAgICBhdXRv
IGRlY2lzaW9uID0gbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIHRhc2tTaXplKTsKKyAg
ICBpZiAoZGVjaXNpb24gPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsK
KyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRp
ZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUo
IlB1dE9yQWRkIikpLCB1c2VkS2V5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBB
U1NFUlQobV9iYWNraW5nU3RvcmUpOworICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIp
OwogICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
SW5kZXhlZERCLCAiJXAgLSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkOiBtX2Jh
Y2tpbmdTdG9yZSBpcyBudWxsIiwgdGhpcyk7CiAgICAgICAgIGVycm9yID0gSURCRXJyb3IoSW52
YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFsaWQgZm9yIGNhbGwgdG8gcHV0
IG9yIGFkZCJfcyk7CkBAIC0xMzc2LDgwICsxMjMzLDY1IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElECiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1h
aW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQiKTsKIAotICAgIGZpbmlz
aFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwog
ICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVz
dWx0S2V5KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYg
cmVxdWVzdERhdGEsIGNvbnN0IElEQkdldFJlY29yZERhdGEmIGdldFJlY29yZERhdGEsIEdldFJl
c3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3Jk
KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0UmVjb3JkRGF0
YSYgZ2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlE
QkRhdGFiYXNlOjpnZXRSZWNvcmQiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0
aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGdldFJlY29yZERhdGEsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAg
IGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJy
b3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMt
PmdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgV1RG
TW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpn
ZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
LCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiBnZXRSZWNvcmREYXRhLCBHZXRSZXN1bHRDYWxsYmFj
ayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmICh1aW50NjRfdCBpbmRleElkZW50aWZpZXIgPSByZXF1ZXN0
RGF0YS5pbmRleElkZW50aWZpZXIoKSkKLSAgICAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEluZGV4
UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwg
cmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGluZGV4SWRlbnRpZmllciwgcmVx
dWVzdERhdGEuaW5kZXhSZWNvcmRUeXBlKCksIGdldFJlY29yZERhdGEua2V5UmFuZ2VEYXRhKSk7
CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCwgbV9pZGVudGlmaWVyLm9y
aWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwg
cmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGluZGV4SWRlbnRpZmllciwgcmVx
dWVzdERhdGEuaW5kZXhSZWNvcmRUeXBlKCksIGdldFJlY29yZERhdGEua2V5UmFuZ2VEYXRhKSk7
CiAgICAgZWxzZQotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lE
LCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0
U3RvcmVJZGVudGlmaWVyKCksIGdldFJlY29yZERhdGEua2V5UmFuZ2VEYXRhLCBnZXRSZWNvcmRE
YXRhLnR5cGUpKTsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCwgbV9pZGVudGlm
aWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZp
ZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGdldFJlY29yZERhdGEu
a2V5UmFuZ2VEYXRhLCBnZXRSZWNvcmREYXRhLnR5cGUpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6Z2V0QWxsUmVjb3JkcyhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRB
bGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIEdldEFsbFJlc3VsdHNDYWxsYmFjayBj
YWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHMoY29uc3QgSURC
UmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0
QWxsUmVjb3Jkc0RhdGEsIEdldEFsbFJlc3VsdHNDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVl
SURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHMiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VD
b21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNE
YXRhLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUg
ewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhX
VEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLT5nZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCBnZXRB
bGxSZWNvcmRzRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJl
cXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFs
bFJlY29yZHNEYXRhLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWlu
dDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxi
YWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAKLSAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtR2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNh
Y3Rpb25JZGVudGlmaWVyKCksIGdldEFsbFJlY29yZHNEYXRhKSk7CisgICAgcG9zdERhdGFiYXNl
VGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUdldEFsbFJlY29yZHMsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgcmVx
dWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIGdldEFsbFJlY29yZHNEYXRhKSk7CiB9
CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmIGtleVJhbmdlRGF0YSwgSURCR2V0UmVjb3JkRGF0YVR5cGUgdHlwZSkKK3ZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEsIElEQkdldFJlY29yZERh
dGFUeXBlIHR5cGUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQiKTsKIAot
ICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KICAgICBJREJHZXRSZXN1bHQgcmVzdWx0Owor
ICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtR2V0UmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRF
cnJvciksIHJlc3VsdCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKG1f
YmFja2luZ1N0b3JlKTsKICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRS
ZWNvcmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleVJh
bmdlRGF0YSwgdHlwZSwgcmVzdWx0KTsKIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdl
dFJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KSk7CiB9CiAKLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRl
bnRpZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVjb3JkVHlwZSwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiByYW5nZSkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJ
bmRleFJlY29yZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50
aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIHJlY29yZFR5cGUsIGNvbnN0IElEQktl
eVJhbmdlRGF0YSYgcmFuZ2UpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJl
Y29yZCIpOwogCi0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLQogICAgIElEQkdldFJlc3Vs
dCByZXN1bHQ7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVv
dGFFeGNlZWRlZEVycm9yKSwgcmVzdWx0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5n
U3RvcmUtPmdldEluZGV4UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIHJlY29yZFR5cGUsIHJhbmdlLCByZXN1bHQpOwog
CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lkZW50aWZp
ZXIsIGVycm9yLCByZXN1bHQpKTsKQEAgLTE0NjMsMTQgKzEzMDUsMTggQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IEkKICAgICBwZXJmb3JtR2V0UmVzdWx0Q2FsbGJhY2soY2FsbGJhY2tJZGVudGlm
aWVyLCBlcnJvciwgcmVzdWx0KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUdldEFsbFJlY29yZHModWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCR2V0QWxsUmVj
b3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUdldEFsbFJlY29yZHMoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0
YSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAi
KGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJlY29yZHMiKTsKIAotICAgIEFT
U0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KICAgICBJREJHZXRBbGxSZXN1bHQgcmVzdWx0OworICAg
IGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFu
YWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
R2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVk
RXJyb3IpLCBXVEZNb3ZlKHJlc3VsdCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdT
dG9yZS0+Z2V0QWxsUmVjb3Jkcyh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGdldEFsbFJlY29yZHNE
YXRhLCByZXN1bHQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0QWxsUmVjb3Jk
cywgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgV1RGTW92ZShyZXN1bHQpKSk7CkBAIC0xNDg0
LDM3ICsxMzMwLDMwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRBbGxS
ZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uCiAgICAgcGVyZm9ybUdldEFs
bFJlc3VsdHNDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpOwogfQog
Ci12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudChVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBj
b25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxiYWNrIGNhbGxiYWNrKQordm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVl
c3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxiYWNrIGNhbGxi
YWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQiKTsKIAotICAgIHdhaXRGb3JSZXF1
ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIHJhbmdl
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewot
ICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZN
b3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICB0aGlzLT5nZXRDb3VudEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgcmFuZ2UsIFdURk1v
dmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0
Q291bnRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBj
b25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxiYWNrIGNhbGxiYWNrKQotewog
ICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92
ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwotICAg
IHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNh
Y3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBy
ZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIoKSwgcmFuZ2UpKTsKKyAgICBwb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtR2V0Q291bnQsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgcmVxdWVzdERh
dGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRp
ZmllcigpLCByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIoKSwgcmFuZ2UpKTsKIH0KIAotdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldENvdW50KHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlm
aWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSkKK3ZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWlu
dDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50
NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRh
KQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIo
ZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQiKTsKIAorICAgIHVpbnQ2NF90
IGNvdW50OworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtR2V0Q291bnQsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFF
eGNlZWRlZEVycm9yKSwgY291bnQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFT
U0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgQVNTRVJUKG9iamVjdFN0b3JlSWRlbnRpZmllcik7
Ci0KLSAgICB1aW50NjRfdCBjb3VudDsKICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0
b3JlLT5nZXRDb3VudCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgaW5kZXhJZGVudGlmaWVyLCBrZXlSYW5nZURhdGEsIGNvdW50KTsKIAogICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybUdldENvdW50LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBjb3Vu
dCkpOwpAQCAtMTUyOCwzNSArMTM2NywyOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAg
IHBlcmZvcm1Db3VudENhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGNvdW50KTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkKFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBFcnJvckNhbGxiYWNr
IGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkKGNvbnN0IElE
QlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5n
ZURhdGEsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxl
dGVSZWNvcmQiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0
aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5p
c051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZVJlY29yZEFmdGVy
UXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZEFmdGVy
UXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktl
eVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQotewogICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShj
YWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwotICAgIHBv
c3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5z
YWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwg
a2V5UmFuZ2VEYXRhKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCwgbV9pZGVu
dGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50
aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGtleVJhbmdlRGF0
YSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1EZWxldGVSZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiByYW5nZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0co
SW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCIp
OwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmFuZ2UodHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHJhbmdlKTsKKyAgICBp
ZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFn
ZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURl
bGV0ZVJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJy
b3IpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBJREJFcnJvciBlcnJvciA9IG1f
YmFja2luZ1N0b3JlLT5kZWxldGVSYW5nZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0
b3JlSWRlbnRpZmllciwgcmFuZ2UpOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0
ZVJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcikpOwogfQogCkBAIC0xNTY4LDM0ICsx
NDAwLDI3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVSZWNvcmQo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zCiAgICAgcGVyZm9ybUVycm9yQ2FsbGJh
Y2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6Om9wZW5DdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24s
IGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCQ3Vyc29ySW5mbyYg
aW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpvcGVuQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURC
Q3Vyc29ySW5mbyYgaW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlE
QkRhdGFiYXNlOjpvcGVuQ3Vyc29yIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxl
dGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBpbmZvLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVy
cm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5vcGVuQ3Vy
c29yQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCBpbmZvLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3JBZnRlclF1
b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJDdXJz
b3JJbmZvJiBpbmZvLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRf
dCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2sp
KTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKLSAgICBwb3N0RGF0YWJh
c2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtT3BlbkN1cnNvciwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVu
dGlmaWVyKCksIGluZm8pKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtT3BlbkN1cnNvciwgbV9pZGVu
dGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50
aWZpZXIoKSwgaW5mbykpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtT3Bl
bkN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZv
KQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJzb3IoY29uc3QgQ2xpZW50
T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkN1cnNvcklu
Zm8mIGluZm8pCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1PcGVuQ3Vyc29yIik7CiAKICAg
ICBJREJHZXRSZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9y
aWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAg
ICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtT3BlbkN1cnNvciwgY2FsbGJhY2tJZGVudGlmaWVy
LCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IpLCByZXN1bHQpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuQ3Vyc29y
KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbywgcmVzdWx0KTsKIAogICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybU9wZW5DdXJzb3IsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3Vs
dCkpOwpAQCAtMTYwOSwzNCArMTQzNCwyNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtT3BlbkN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAg
cGVyZm9ybUdldFJlc3VsdENhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3Vs
dCk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEsIEdldFJlc3VsdENh
bGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvcihj
b25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JE
YXRhJiBkYXRhLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJh
c2U6Oml0ZXJhdGVDdXJzb3IiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9u
KHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGRhdGEsIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3Iu
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPml0ZXJhdGVDdXJz
b3JBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGRhdGEsIFdURk1vdmUoY2FsbGJhY2spKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvckFmdGVy
UXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkl0
ZXJhdGVDdXJzb3JEYXRhJiBkYXRhLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKLXsKICAg
ICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUo
Y2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKLSAgICBw
b3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvciwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJh
bnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLmN1cnNvcklkZW50aWZpZXIoKSwgZGF0
YSkpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29yLCBtX2lkZW50aWZpZXIub3Jp
Z2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCBy
ZXF1ZXN0RGF0YS5jdXJzb3JJZGVudGlmaWVyKCksIGRhdGEpKTsKIH0KIAotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJREJJ
dGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1J
dGVyYXRlQ3Vyc29yKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNv
bnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhKQogewogICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtSXRlcmF0ZUN1cnNvciIpOwogCiAgICAgSURCR2V0UmVzdWx0IHJlc3VsdDsKKyAgICBpZiAo
bV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6
OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUl0ZXJh
dGVDdXJzb3IsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9y
KSwgcmVzdWx0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgSURCRXJyb3IgZXJyb3Ig
PSBtX2JhY2tpbmdTdG9yZS0+aXRlcmF0ZUN1cnNvcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGN1
cnNvcklkZW50aWZpZXIsIGRhdGEsIHJlc3VsdCk7CiAKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkp
IHsKQEAgLTE2ODgsMTcgKzE1MDYsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRU
cmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogCiAgICAg
QVNTRVJUKHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigpLmRhdGFiYXNlKCkgPT0gdGhp
cyk7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3Ro
aXMsICZ0cmFuc2FjdGlvbiwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVy
cm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAg
ICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIHRoaXMtPmNvbW1pdFRyYW5zYWN0aW9uQWZ0ZXJRdW90YUNoZWNrKHRyYW5z
YWN0aW9uLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uQWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQotewog
ICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92
ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTcxNCwxMyArMTUyMSwxNSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2Fj
dGlvbkFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uLCBjYWxs
YmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CisgICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNr
SUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKTsKIH0KIAotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24oY29u
c3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpCiB7Ci0gICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiAtICVzIiwgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9zZXJ2
ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNvbW1pdFRyYW5z
YWN0aW9uLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciks
IHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAg
SURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Y29tbWl0VHJhbnNhY3Rpb24odHJhbnNh
Y3Rpb25JZGVudGlmaWVyKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Db21taXRUcmFu
c2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdHJhbnNhY3Rpb25JZGVudGlmaWVy
KSk7CkBAIC0xNzUyLDI0ICsxNTYxLDEzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsCiAgICAg
dHJhbnNhY3Rpb25Db21wbGV0ZWQobV9maW5pc2hpbmdUcmFuc2FjdGlvbnMudGFrZSh0cmFuc2Fj
dGlvbklkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFu
c2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2FpdEZv
clBlbmRpbmdUYXNrcyB3YWl0Rm9yUGVuZGluZ1Rhc2tzLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNr
KQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikg
VW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uLmlu
Zm8oKS5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAg
QVNTRVJUKHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigpLmRhdGFiYXNlKCkgPT0gdGhp
cyk7CiAKLSAgICBpZiAod2FpdEZvclBlbmRpbmdUYXNrcyA9PSBXYWl0Rm9yUGVuZGluZ1Rhc2tz
OjpZZXMpIHsKLSAgICAgICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rp
b24sIFt0aGlzLCAmdHJhbnNhY3Rpb24sIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1
dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7
Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMtPmFib3J0VHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb24sIFdhaXRGb3JQZW5kaW5nVGFza3M6Ok5vLCBXVEZNb3ZlKGNhbGxi
YWNrKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgdWludDY0
X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNr
KSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xNzg1LDcgKzE1
ODMsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5zYWN0aW9uKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSUQsIHRyYW5z
YWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWJvcnRU
cmFuc2FjdGlvbiwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCB0cmFuc2FjdGlv
bi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZEZpbmlzaEhhbmRsaW5nVmVyc2lvbkNoYW5nZShVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyKQpAQCAtMTgwNywxMSArMTYwNSwxNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aQog
ICAgIGludm9rZU9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIoKTsKIH0KIAotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uKGNv
bnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQogewogICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiAtICVzIiwgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAorICAgIGlmIChtX3Nl
cnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVj
aXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQWJvcnRUcmFu
c2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3Ip
LCB0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNh
Y3Rpb25JZGVudGlmaWVyKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1BYm9ydFRyYW5z
YWN0aW9uLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB0cmFuc2FjdGlvbklkZW50aWZpZXIp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggZWMzZmMwYzczZWEzMGUyNGU3YTBjZWU1
ODg5ZjM5NjFmMGNjNGMyNy4uNzQ0OTg1MjRmOTE3MTI4MzhhOTZkMjdmZjg1NmMzNGY3N2NhMDVk
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTQ0LDYgKzQ0LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitzdHJ1Y3QgQ2xpZW50T3JpZ2luOwogY2xhc3MgSURCRXJyb3I7CiBjbGFz
cyBJREJHZXRBbGxSZXN1bHQ7CiBzdHJ1Y3QgSURCR2V0UmVjb3JkRGF0YTsKQEAgLTg5LDE3ICs5
MCwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiwgY29uc3QgSURCSW5kZXhJbmZvJiwgRXJyb3JDYWxsYmFjayk7CiAgICAgdm9p
ZCBkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgRXJyb3JDYWxsYmFj
ayk7CiAgICAgdm9pZCByZW5hbWVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBwdXRPckFk
ZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBj
b25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3Jl
T3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrKTsKLSAgICB2b2lkIGdldFJlY29yZChVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJ
REJHZXRSZWNvcmREYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2spOwotICAgIHZvaWQgZ2V0QWxsUmVj
b3JkcyhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEm
LCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdldEFsbFJlc3VsdHNDYWxsYmFjayk7Ci0g
ICAgdm9pZCBnZXRDb3VudChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURC
UmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBDb3VudENhbGxiYWNrKTsKLSAg
ICB2b2lkIGRlbGV0ZVJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFcnJvckNhbGxiYWNrKTsK
LSAgICB2b2lkIG9wZW5DdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0
IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCQ3Vyc29ySW5mbyYsIEdldFJlc3VsdENhbGxiYWNr
KTsKLSAgICB2b2lkIGl0ZXJhdGVDdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYs
IGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmLCBHZXRS
ZXN1bHRDYWxsYmFjayk7CisgICAgdm9pZCBwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYs
IGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3Rv
cmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2spOworICAgIHZvaWQgZ2V0UmVjb3JkKGNv
bnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYsIEdldFJlc3VsdENh
bGxiYWNrKTsKKyAgICB2b2lkIGdldEFsbFJlY29yZHMoY29uc3QgSURCUmVxdWVzdERhdGEmLCBj
b25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdldEFsbFJlc3VsdHNDYWxsYmFjayk7CisgICAg
dm9pZCBnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYsIENvdW50Q2FsbGJhY2spOworICAgIHZvaWQgZGVsZXRlUmVjb3JkKGNvbnN0IElEQlJlcXVl
c3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXJyb3JDYWxsYmFjayk7CisgICAgdm9p
ZCBvcGVuQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCQ3Vyc29ySW5mbyYs
IEdldFJlc3VsdENhbGxiYWNrKTsKKyAgICB2b2lkIGl0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVx
dWVzdERhdGEmLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYsIEdldFJlc3VsdENhbGxiYWNr
KTsKICAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mLCBFcnJvckNhbGxiYWNrKTsKLQotICAgIGVudW0gY2xhc3MgV2FpdEZvclBlbmRpbmdUYXNr
cyB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIGFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYsIFdhaXRGb3JQZW5kaW5nVGFza3MsIEVycm9yQ2FsbGJhY2spOworICAg
IHZvaWQgYWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgRXJy
b3JDYWxsYmFjayk7CiAKICAgICB2b2lkIGRpZEZpbmlzaEhhbmRsaW5nVmVyc2lvbkNoYW5nZShV
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCB0cmFuc2FjdGlvbkRlc3Ryb3llZChV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJik7CkBAIC0xMzksNDQgKzEzOCwyNyBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBzY2hlZHVsZVNodXRkb3duRm9yQ2xvc2UoKTsKIAotICAgIHZvaWQg
Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mLCBFcnJv
ckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgcmVuYW1lT2JqZWN0U3RvcmVB
ZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3
TmFtZSwgRXJyb3JDYWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIGNyZWF0ZUlu
ZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiwgY29uc3QgSURCSW5kZXhJbmZvJiwgRXJyb3JDYWxsYmFjaywgY29uc3QgSURC
RXJyb3ImKTsKLSAgICB2b2lkIHJlbmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRh
c2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3
TmFtZSwgRXJyb3JDYWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHB1dE9yQWRk
QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYs
IGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3Rv
cmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAg
dm9pZCBkZWxldGVSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBj
b25zdCBJREJLZXlSYW5nZURhdGEmLCBFcnJvckNhbGxiYWNrKTsKLQotICAgIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYs
IGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJvckNhbGxiYWNrKTsKLSAgICB2b2lk
IGNsZWFyT2JqZWN0U3RvcmVBZmV0UXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBFcnJvckNhbGxiYWNrKTsKLSAg
ICB2b2lkIGRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYsIEVy
cm9yQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElE
QlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYsIEdldFJlc3VsdENhbGxiYWNr
KTsKLSAgICB2b2lkIGdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVz
dERhdGEmLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdldEFsbFJlc3VsdHNDYWxsYmFj
ayk7Ci0gICAgdm9pZCBnZXRDb3VudEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0
YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIENvdW50Q2FsbGJhY2spOwotICAgIHZvaWQgb3Bl
bkN1cnNvckFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkN1
cnNvckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBpdGVyYXRlQ3Vyc29yQWZ0
ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCSXRlcmF0ZUN1cnNv
ckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBjb21taXRUcmFuc2FjdGlvbkFm
dGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgRXJyb3JDYWxsYmFj
ayk7Ci0KICAgICAvLyBEYXRhYmFzZSB0aHJlYWQgb3BlcmF0aW9ucwogICAgIHZvaWQgZGVsZXRl
QmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOwotICAgIHZvaWQgb3Bl
bkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImLCB1aW50NjRfdCB0YXNr
SWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbih1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyKTsKKyAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJik7CisgICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24oY29u
c3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisgICAgdm9pZCBwZXJm
b3JtQWJvcnRUcmFuc2FjdGlvbihjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyKTsKICAgICB2b2lkIGJlZ2luVHJhbnNhY3Rpb25JbkJhY2tpbmdTdG9yZShjb25zdCBJ
REJUcmFuc2FjdGlvbkluZm8mKTsKLSAgICB2b2lkIHBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mLCBjb25zdCBJ
REJFcnJvciYpOwotICAgIHZvaWQgcGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7Ci0gICAgdm9pZCBw
ZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElEQkVy
cm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwotICAgIHZvaWQgcGVyZm9y
bUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYs
IGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtRGVsZXRlSW5kZXgodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBp
bmRleElkZW50aWZpZXIpOwotICAgIHZvaWQgcGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5k
ZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElEQkVycm9yJik7Ci0g
ICAgdm9pZCBwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUm
LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgY29uc3QgSURCRXJyb3ImKTsK
LSAgICB2b2lkIHBlcmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJREJHZXRS
ZWNvcmREYXRhVHlwZSk7Ci0gICAgdm9pZCBwZXJmb3JtR2V0QWxsUmVjb3Jkcyh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYpOwotICAgIHZvaWQgcGVy
Zm9ybUdldEluZGV4UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6Oklu
ZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7Ci0gICAgdm9pZCBwZXJmb3Jt
R2V0Q291bnQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYp
OwotICAgIHZvaWQgcGVyZm9ybURlbGV0ZVJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwot
ICAgIHZvaWQgcGVyZm9ybU9wZW5DdXJzb3IodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3Qg
SURCQ3Vyc29ySW5mbyYpOwotICAgIHZvaWQgcGVyZm9ybUl0ZXJhdGVDdXJzb3IodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlm
aWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYpOworICAgIHZvaWQgcGVyZm9ybUNyZWF0
ZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOworICAgIHZvaWQgcGVyZm9ybURlbGV0ZU9iamVj
dFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgdm9pZCBwZXJmb3JtUmVuYW1lT2JqZWN0
U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElE
QkVycm9yJik7CisgICAgdm9pZCBwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZShjb25zdCBDbGllbnRP
cmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIpOworICAgIHZvaWQgcGVyZm9ybUNyZWF0ZUluZGV4KGNvbnN0IENsaWVudE9yaWdpbiYs
IHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYpOworICAgIHZvaWQg
cGVyZm9ybURlbGV0ZUluZGV4KGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVu
dGlmaWVyKTsKKyAgICB2b2lkIHBlcmZvcm1SZW5hbWVJbmRleChjb25zdCBDbGllbnRPcmlnaW4m
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJ
REJFcnJvciYpOworICAgIHZvaWQgcGVyZm9ybVB1dE9yQWRkKGNvbnN0IENsaWVudE9yaWdpbiYs
IHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
Y29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9y
ZU92ZXJ3cml0ZU1vZGUpOworICAgIHZvaWQgcGVyZm9ybUdldFJlY29yZChjb25zdCBDbGllbnRP
cmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElEQkdldFJlY29yZERhdGFUeXBlKTsKKyAg
ICB2b2lkIHBlcmZvcm1HZXRBbGxSZWNvcmRzKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJik7CisgICAgdm9pZCBw
ZXJmb3JtR2V0SW5kZXhSZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElk
ZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5nZURh
dGEmKTsKKyAgICB2b2lkIHBlcmZvcm1HZXRDb3VudChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2
NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CisgICAgdm9pZCBw
ZXJmb3JtRGVsZXRlUmVjb3JkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJik7CisgICAgdm9pZCBwZXJmb3JtT3BlbkN1cnNvcihjb25zdCBDbGllbnRPcmlnaW4mLCB1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJDdXJzb3JJbmZvJik7CisgICAgdm9pZCBw
ZXJmb3JtSXRlcmF0ZUN1cnNvcihjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNv
bnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJik7CiAgICAgdm9pZCBwZXJmb3JtUHJlZmV0Y2hDdXJz
b3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllcik7CiAKICAgICB2b2lk
IHBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlv
bkluZm8mKTsKQEAgLTE4Niw3ICsxNjgsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gTWFpbiB0aHJl
YWQgY2FsbGJhY2tzCiAgICAgdm9pZCBkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVs
ZXRlZFZlcnNpb24pOwotICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRh
YmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKTsKKyAg
ICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3Qg
SURCRXJyb3ImKTsKICAgICB2b2lkIGRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURCT2JqZWN0U3Rv
cmVJbmZvJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsKQEAgLTI0Niw5ICsyMjgsNiBA
QCBwcml2YXRlOgogICAgIGJvb2wgaXNEb25lV2l0aEhhcmRDbG9zZSgpOwogCiAgICAgdm9pZCBy
ZXF1ZXN0U3BhY2UoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IHRhc2tT
aXplLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSURC
RXJyb3ImJik+JiYpOwotICAgIHZvaWQgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24oVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSURCRXJy
b3ImJik+JiYpOwotICAgIHZvaWQgc3RhcnRTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVu
dGlmaWVyLCB1aW50NjRfdCB0YXNrU2l6ZSk7Ci0gICAgdm9pZCBmaW5pc2hTcGFjZUluY3JlYXNl
VGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCBib29sIGlzVGFza1N1Y2Nlc3NmdWwpOwogCiAgICAg
dm9pZCBjbGVhclRyYW5zYWN0aW9uc09uQ29ubmVjdGlvbihVbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb24mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcApp
bmRleCBmZTkxMGZhZjk4NDlkYzJiMDQ3ZWJhOTdhZTU2NjU3OWZkMTNkMjEwLi44MDA2MDY5ODgz
NDRmMWIzOWI4YjlmYmMxOTk5ODIxZDgyNjIxYjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uLmNwcApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlQ29ubmVjdGlvbjo6YWJvcnRUcmFuc2FjdGlvbldpdGhvdXRDYWxsYmFjayhVbmlxdWVJ
REJEYXRhYgogICAgIGlmICghbV9kYXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IG1fZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIFVuaXF1ZUlEQkRhdGFi
YXNlOjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpObywgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHRyYW5z
YWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7CisgICAgbV9kYXRhYmFzZS0+YWJv
cnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHRyYW5zYWN0
aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7CiAgICAgICAgIEFTU0VSVChtX3RyYW5z
YWN0aW9uTWFwLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwogICAgICAgICBtX3Ry
YW5zYWN0aW9uTWFwLnJlbW92ZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIH0pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCmluZGV4IGE4ZDJiZGM3
NDBjODk3MWE1YTdjMDRlNzZjMDMyOWI0NzZhZGM0MjYuLjc2ZWRkYzQ1YjA3NmJlM2U2OTcyODQ1
ZDExZTIxNTBiNmYwN2Q4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbi5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uOjphYm9ydCgpCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9u
LT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAKLSAgICBkYXRhYmFzZS0+YWJv
cnRUcmFuc2FjdGlvbigqdGhpcywgVW5pcXVlSURCRGF0YWJhc2U6OldhaXRGb3JQZW5kaW5nVGFz
a3M6OlllcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShhdXRvJiBlcnJv
cikgeworICAgIGRhdGFiYXNlLT5hYm9ydFRyYW5zYWN0aW9uKCp0aGlzLCBbdGhpcywgd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKGF1dG8mIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRl
eGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCAoY2FsbGJhY2spIik7
CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yODYsNyAr
Mjg2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRPckFkZChjb25z
dCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGMKICAgICBhdXRvIGRhdGFiYXNlID0gbV9k
YXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAg
ICAKLSAgICBkYXRhYmFzZS0+cHV0T3JBZGQoKnRoaXMsIHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2
YWx1ZSwgb3ZlcndyaXRlTW9kZSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMp
LCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIGtleSkgeworICAg
IGRhdGFiYXNlLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0
ZU1vZGUsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFd
KGF1dG8mIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsKICAgICAgICAgTE9HKEluZGV4
ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkIChjYWxsYmFjayki
KTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMwNyw3
ICszMDcsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldFJlY29yZChj
b25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAgYXV0byBkYXRhYmFzZSA9IG1f
ZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAg
ICAgCi0gICAgZGF0YWJhc2UtPmdldFJlY29yZCgqdGhpcywgcmVxdWVzdERhdGEsIGdldFJlY29y
ZERhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFd
KGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgeworICAgIGRhdGFiYXNl
LT5nZXRSZWNvcmQocmVxdWVzdERhdGEsIGdldFJlY29yZERhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJH
ZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3
ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMyOCw3ICszMjgsNyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMoY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlv
bi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNl
LT5nZXRBbGxSZWNvcmRzKCp0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jkc0RhdGEsIFt0
aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVy
cm9yLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgeworICAgIGRhdGFiYXNlLT5nZXRB
bGxSZWNvcmRzKHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgW3RoaXMsIHdlYWtUaGlz
ID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElE
QkdldEFsbFJlc3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNvcmRzIChjYWxsYmFjaykiKTsKICAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM0OSw3ICszNDksNyBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50KGNvbnN0IElEQlJl
cXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgYwogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNl
Q29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAg
IGRhdGFiYXNlLT5nZXRDb3VudCgqdGhpcywgcmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgW3Ro
aXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJy
b3IsIHVpbnQ2NF90IGNvdW50KSB7CisgICAgZGF0YWJhc2UtPmdldENvdW50KHJlcXVlc3REYXRh
LCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVx
dWVzdERhdGFdKGF1dG8mIGVycm9yLCB1aW50NjRfdCBjb3VudCkgewogICAgICAgICBMT0coSW5k
ZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQgKGNhbGxiYWNr
KSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzcw
LDcgKzM3MCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlUmVj
b3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0CiAgICAgYXV0byBkYXRhYmFzZSA9
IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7
CiAgICAgCi0gICAgZGF0YWJhc2UtPmRlbGV0ZVJlY29yZCgqdGhpcywgcmVxdWVzdERhdGEsIGtl
eVJhbmdlRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0
RGF0YV0oYXV0byYgZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+ZGVsZXRlUmVjb3JkKHJlcXVlc3RE
YXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwg
cmVxdWVzdERhdGFdKGF1dG8mIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmQgKGNhbGxiYWNrKSIpOwogICAg
ICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzkxLDcgKzM5MSw3
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvcihjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJh
c2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAgICAgCi0g
ICAgZGF0YWJhc2UtPm9wZW5DdXJzb3IoKnRoaXMsIHJlcXVlc3REYXRhLCBpbmZvLCBbdGhpcywg
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwg
Y29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRhYmFzZS0+b3BlbkN1cnNvcihy
ZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBy
ZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0KSB7CiAg
ICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpvcGVu
Q3Vyc29yIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTQxMiw3ICs0MTIsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb246Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYQogICAg
IGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBB
U1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5pdGVyYXRlQ3Vyc29yKCp0aGlz
LCByZXF1ZXN0RGF0YSwgZGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMp
LCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0KSB7
CisgICAgZGF0YWJhc2UtPml0ZXJhdGVDdXJzb3IocmVxdWVzdERhdGEsIGRhdGEsIFt0aGlzLCB3
ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBj
b25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvciAoY2FsbGJhY2spIik7CiAg
ICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJ
REJTZXJ2ZXIuY3BwCmluZGV4IDkxMTFmNTk3OGUzYjgwNjE4NTVjMjBmNWFmYWE1YjY1NWRjY2Vh
MjEuLjVjZGYyN2NjYzFiYmM3OTMxNzE2NjhkMDEwOTJkNTgwNDBlYjJjZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblBy
b2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC02MSwzNiArNjEsMzUgQEAgUmVmPEluUHJvY2Vzc0lEQlNl
cnZlcj4gSW5Qcm9jZXNzSURCU2VydmVyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb24KIAogSW5Qcm9jZXNzSURCU2VydmVyOjp+SW5Qcm9jZXNzSURCU2VydmVyKCkgPSBkZWZh
dWx0OwogCi1TdG9yYWdlUXVvdGFNYW5hZ2VyKiBJblByb2Nlc3NJREJTZXJ2ZXI6OnF1b3RhTWFu
YWdlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK1JlZlB0cjxTdG9yYWdlUXVvdGFNYW5h
Z2VyPiBJblByb2Nlc3NJREJTZXJ2ZXI6OnF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4m
IG9yaWdpbikKIHsKICAgICByZXR1cm4gbV9xdW90YU1hbmFnZXJzLmVuc3VyZShvcmlnaW4sIFtd
IHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U3RvcmFnZVF1b3RhTWFuYWdlcj4oU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCksIFtdKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRf
dCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJhY2spIHsK
KyAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZShTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSwgW10geworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0sIFtdKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90
IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKICAgICAgICAgICAgIGNhbGxiYWNrKHF1
b3RhICsgY3VycmVudFNwYWNlICsgc3BhY2VJbmNyZWFzZSk7CiAgICAgICAgIH0pOwotICAgIH0p
Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQotc3RhdGljIGlubGluZSBJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6UXVvdGFNYW5hZ2VyR2V0dGVyIHN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIoSW5Q
cm9jZXNzSURCU2VydmVyJiBzZXJ2ZXIpCi17Ci0gICAgcmV0dXJuIFt3ZWFrU2VydmVyID0gbWFr
ZVdlYWtQdHIoc2VydmVyKV0oUEFMOjpTZXNzaW9uSUQsIGNvbnN0IGF1dG8mIG9yaWdpbikgewot
ICAgICAgICByZXR1cm4gd2Vha1NlcnZlciA/IHdlYWtTZXJ2ZXItPnF1b3RhTWFuYWdlcihvcmln
aW4pIDogbnVsbHB0cjsKLSAgICB9OworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAogSW5Q
cm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklEKQotICAgIDogbV9zZXJ2ZXIoSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9u
SUQsIHN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIoKnRoaXMpKSkKIHsKICAgICByZWxheEFkb3B0
aW9uUmVxdWlyZW1lbnQoKTsKICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlciA9IElEQkNsaWVudDo6
SURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGUoKnRoaXMpOwogICAgIG1fY29ubmVjdGlvblRv
Q2xpZW50ID0gSURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQ6OmNyZWF0ZSgqdGhpcyk7
CisgICAgbV9zZXJ2ZXIgPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwg
W3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShjb25zdCBDbGllbnRPcmlnaW4m
IG9yaWdpbikgbXV0YWJsZSB7CisgICAgICAgIHJldHVybiB3ZWFrVGhpcyA/IHF1b3RhTWFuYWdl
cihvcmlnaW4pIDogbnVsbHB0cjsKKyAgICB9KTsKIH0KIAogSW5Qcm9jZXNzSURCU2VydmVyOjpJ
blByb2Nlc3NJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKLSAgICA6IG1fc2VydmVyKElEQlNlcnZlcjo6SURCU2Vy
dmVyOjpjcmVhdGUoc2Vzc2lvbklELCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIHN0b3JhZ2VRdW90
YU1hbmFnZXJHZXR0ZXIoKnRoaXMpKSkKIHsKICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQo
KTsKICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlciA9IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRv
U2VydmVyOjpjcmVhdGUoKnRoaXMpOwogICAgIG1fY29ubmVjdGlvblRvQ2xpZW50ID0gSURCU2Vy
dmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQ6OmNyZWF0ZSgqdGhpcyk7CisgICAgbV9zZXJ2ZXIg
PSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgW3RoaXMsIGRhdGFiYXNl
RGlyZWN0b3J5UGF0aCwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKGNvbnN0IENsaWVu
dE9yaWdpbiYgb3JpZ2luKSBtdXRhYmxlIHsKKyAgICAgICAgcmV0dXJuIHdlYWtUaGlzID8gcXVv
dGFNYW5hZ2VyKG9yaWdpbikgOiBudWxscHRyOworICAgIH0pOwogfQogCiBJREJDb25uZWN0aW9u
SWRlbnRpZmllciBJblByb2Nlc3NJREJTZXJ2ZXI6OmlkZW50aWZpZXIoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lE
QlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJv
Y2Vzc0lEQlNlcnZlci5oCmluZGV4IGM3YjUzMjFjYTM2MWM3NDFlNTJkNDVlYzE4YTgzMThmYWQw
ODI5YzAuLjBkZDk3NDQyMzA5YzhlNzRhNjA3Njk4MWJkOGViOTBmYTY5NGQ2MTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJT
ZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Q
cm9jZXNzSURCU2VydmVyLmgKQEAgLTYzLDkgKzYzLDggQEAgcHVibGljOgogCiAgICAgV0VCQ09S
RV9FWFBPUlQgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb25Ub1Nl
cnZlcigpIGNvbnN0OwogICAgIElEQlNlcnZlcjo6SURCQ29ubmVjdGlvblRvQ2xpZW50JiBjb25u
ZWN0aW9uVG9DbGllbnQoKSBjb25zdDsKLSAgICBJREJTZXJ2ZXI6OklEQlNlcnZlciYgc2VydmVy
KCkgeyByZXR1cm4gbV9zZXJ2ZXIuZ2V0KCk7IH0KLQotICAgIElEQlNlcnZlcjo6SURCU2VydmVy
JiBpZGJTZXJ2ZXIoKSB7IHJldHVybiBtX3NlcnZlci5nZXQoKTsgfQorICAgIElEQlNlcnZlcjo6
SURCU2VydmVyJiBzZXJ2ZXIoKSB7IHJldHVybiAqbV9zZXJ2ZXI7IH0KKyAgICBJREJTZXJ2ZXI6
OklEQlNlcnZlciYgaWRiU2VydmVyKCkgeyByZXR1cm4gKm1fc2VydmVyOyB9CiAKICAgICAvLyBJ
REJDb25uZWN0aW9uVG9TZXJ2ZXIKICAgICB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IElEQlJl
cXVlc3REYXRhJikgZmluYWw7CkBAIC0xMjUsMTcgKzEyNCwxNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZWYoKSBvdmVycmlkZSB7IFJlZkNvdW50ZWQ8SW5Qcm9jZXNzSURCU2VydmVyPjo6cmVmKCk7
IH0KICAgICB2b2lkIGRlcmVmKCkgb3ZlcnJpZGUgeyBSZWZDb3VudGVkPEluUHJvY2Vzc0lEQlNl
cnZlcj46OmRlcmVmKCk7IH0KIAotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIHF1b3RhTWFuYWdl
cihjb25zdCBDbGllbnRPcmlnaW4mKTsKKyAgICBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4g
cXVvdGFNYW5hZ2VyKGNvbnN0IENsaWVudE9yaWdpbiYpOwogCiBwcml2YXRlOgogICAgIGV4cGxp
Y2l0IEluUHJvY2Vzc0lEQlNlcnZlcihQQUw6OlNlc3Npb25JRCk7CiAgICAgSW5Qcm9jZXNzSURC
U2VydmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0
aCk7CiAKLSAgICBSZWY8SURCU2VydmVyOjpJREJTZXJ2ZXI+IG1fc2VydmVyOworICAgIFJlZlB0
cjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gbV9zZXJ2ZXI7CiAgICAgUmVmUHRyPElEQkNsaWVudDo6
SURCQ29ubmVjdGlvblRvU2VydmVyPiBtX2Nvbm5lY3Rpb25Ub1NlcnZlcjsKICAgICBSZWZQdHI8
SURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQ+IG1fY29ubmVjdGlvblRvQ2xpZW50Owog
Ci0gICAgSGFzaE1hcDxDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlUXVvdGFN
YW5hZ2VyPj4gbV9xdW90YU1hbmFnZXJzOworICAgIEhhc2hNYXA8Q2xpZW50T3JpZ2luLCBSZWZQ
dHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fcXVvdGFNYW5hZ2VyczsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA2NzJlOTkyMTBjN2VhZDg1NzI5MWQyZTI4NmY2NDA2MWFmZmZm
YTJiLi4yODczYzllZTFlMWQzMGVmN2UxMzUwZDlmMWJmYmI1NTc2ZDMwOTA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTI4
LDcgKzExMjgsNiBAQAogCQk0MUQyOEQwRDIxMzlFMDU4MDBGNDIwNkYgLyogTGliV2ViUlRDU3Rh
dHNDb2xsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDFEMjhEMEIyMTM5RTAxRDAwRjQyMDZGIC8qIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9y
LmNwcCAqLzsgfTsKIAkJNDFENDFDNjcyMjU2ODc0RjAwNjk3OTQyIC8qIFNlcnZpY2VXb3JrZXJJ
bnRlcm5hbHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MUQ0MUM2NTIyNTY4NTkyMDA2OTc5NDIgLyogU2VydmljZVdvcmtlckludGVybmFscy5tbSAq
LzsgfTsKIAkJNDFERTdDN0MyMjJEQTE0MzAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxREU3QzdC
MjIyREExM0UwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNDFERTdDN0QyMjJEQTE0ODAwNTMy
QjY1IC8qIFN0b3JhZ2VRdW90YVVzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxREU3Qzc4MjIyREExM0MwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFV
c2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NDFERUZDQjYxRTU2QzFCRDAwMEQ5RTVGIC8qIEpTRE9NTWFwTGlrZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFERUZDQjQxRTU2QzFCOTAwMEQ5RTVG
IC8qIEpTRE9NTWFwTGlrZS5oICovOyB9OwogCQk0MUUxQjFEMTBGRjU5ODY5MDA1NzZCM0IgLyog
QWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxRTFCMUNCMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5oICovOyB9
OwogCQk0MUU5RENFNzIzMTk3NEJGMDBGMzU5NDkgLyogQmxvYkxvYWRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFFOURDRTQyMzE5NzNGRTAwRjM1
OTQ5IC8qIEJsb2JMb2FkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtNzQ2MSw3ICs3NDYwLDYgQEAKIAkJNDFEMjhEMEMyMTM5RTAxRTAwRjQy
MDZGIC8qIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmg7IHBhdGggPSBsaWJ3ZWJydGMvTGli
V2ViUlRDU3RhdHNDb2xsZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFE
NDFDNjUyMjU2ODU5MjAwNjk3OTQyIC8qIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZXJ2aWNlV29ya2VySW50ZXJuYWxz
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUQ1MUJCMjFFNEUyRTgxMDAxMzFB
NUIgLyogTGliV2ViUlRDQXVkaW9Gb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gTGliV2ViUlRDQXVkaW9Gb3JtYXQuaDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENB
dWRpb0Zvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MURFN0M3ODIyMkRB
MTNDMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhVXNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdG9yYWdlUXVvdGFVc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQxREU3QzdBMjIyREExM0QwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VRdW90YU1hbmFnZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURFN0M3QjIyMkRBMTNFMDA1MzJC
NjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTdG9yYWdlUXVvdGFNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQxREVGQ0IyMUU1NkMxQjkwMDBEOUU1RiAvKiBKU0RPTUJpbmRpbmdJbnRlcm5hbHMuanMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBKU0RPTUJpbmRpbmdJbnRlcm5h
bHMuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzA5Myw3ICsxNzA5MSw2IEBA
CiAJCQkJMUEzNzYzNkExQTJFNjhCQjAwOUE3RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRl
ci5oICovLAogCQkJCTQxREU3QzdBMjIyREExM0QwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5h
Z2VyLmNwcCAqLywKIAkJCQk0MURFN0M3QjIyMkRBMTNFMDA1MzJCNjUgLyogU3RvcmFnZVF1b3Rh
TWFuYWdlci5oICovLAotCQkJCTQxREU3Qzc4MjIyREExM0MwMDUzMkI2NSAvKiBTdG9yYWdlUXVv
dGFVc2VyLmggKi8sCiAJCQkJNTE2NkQzQ0MxRThFRDQxMTAwQUQ2MkUzIC8qIFN0b3JhZ2VUeXBl
LmggKi8sCiAJCQkpOwogCQkJaW5kZW50V2lkdGggPSA0OwpAQCAtMzIyMTIsNyArMzIyMDksNiBA
QAogCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTM3NjM2QzFBMkU2OEJCMDA5QTdFRTIgLyogU3RvcmFnZU5hbWVz
cGFjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MURFN0M3QzIyMkRBMTQzMDA1MzJC
NjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDFERTdDN0Qy
MjJEQTE0ODAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YVVzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDOUVGMkYzMjFGMDYxOTAwMDNCREM1NiAvKiBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTY2RDNDRDFFOEVENDhGMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ2ODJEMjAwMUY3OTc4MzAwMEM4NjNEQiAvKiBTdG9yZWRD
cmVkZW50aWFsc1BvbGljeS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAppbmRleCA4NTI1NzUyZTYzMzQ3OTUzMGVmMTRl
Y2I3NGY4NWJhZjY4ZDljNTViLi5hMzE5NjRlM2E2ODE2ZmRlMjJjMzc1NDM4ZTNlMmNkZGI4YjMx
N2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5j
cHAKQEAgLTI3LDIxMyArMjcsMTIzIEBACiAjaW5jbHVkZSAiU3RvcmFnZVF1b3RhTWFuYWdlci5o
IgogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VRdW90YVVzZXIuaCIK
KyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1TdG9yYWdlUXVvdGFNYW5hZ2VyOjp+U3RvcmFnZVF1b3RhTWFuYWdlcigpCitSZWY8U3Rv
cmFnZVF1b3RhTWFuYWdlcj4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKHVpbnQ2NF90IHF1
b3RhLCBVc2FnZUdldHRlciYmIHVzYWdlR2V0dGVyLCBRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYg
cXVvdGFJbmNyZWFzZVJlcXVlc3RlcikKIHsKLSAgICB3aGlsZSAoIW1fcGVuZGluZ1JlcXVlc3Rz
LmlzRW1wdHkoKSkKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCkuY2FsbGJh
Y2soRGVjaXNpb246OkRlbnkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VRdW90
YU1hbmFnZXIocXVvdGEsIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5jcmVh
c2VSZXF1ZXN0ZXIpKSk7CiB9CiAKLXVpbnQ2NF90IFN0b3JhZ2VRdW90YU1hbmFnZXI6OnNwYWNl
VXNhZ2UoKSBjb25zdAorU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RvcmFnZVF1b3RhTWFuYWdlcih1
aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgUXVvdGFJbmNyZWFzZVJl
cXVlc3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpCisgICAgOiBtX3F1b3RhKHF1b3RhKQor
ICAgICwgbV91c2FnZUdldHRlcihXVEZNb3ZlKHVzYWdlR2V0dGVyKSkKKyAgICAsIG1fcXVvdGFJ
bmNyZWFzZVJlcXVlc3RlcihXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKQorICAgICwg
bV93b3JrUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlN0b3JhZ2VRdW90YU1hbmFnZXIgQmFja2dy
b3VuZCBRdWV1ZSIsIFdvcmtRdWV1ZTo6VHlwZTo6U2VyaWFsKSkKKyAgICAsIG1faW5pdGlhbFF1
b3RhKHF1b3RhKQogewotICAgIHVpbnQ2NF90IHVzYWdlID0gMDsKLSAgICBmb3IgKGF1dG8mIHVz
ZXIgOiBtX3VzZXJzKQotICAgICAgICB1c2FnZSArPSB1c2VyLT5zcGFjZVVzZWQoKTsKLSAgICBy
ZXR1cm4gdXNhZ2U7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6dXBkYXRlUXVvdGFC
YXNlZE9uU3BhY2VVc2FnZSgpCit2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFj
ZU9uTWFpblRocmVhZCh1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCwgUmVxdWVzdENhbGxiYWNrJiYg
Y2FsbGJhY2spCiB7Ci0gICAgaWYgKCFtX3F1b3RhKQotICAgICAgICByZXR1cm47CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGF1dG8gZGVmYXVsdFF1b3RhU3RlcCA9IG1fcXVv
dGEgLyAxMDsKLSAgICBtX3F1b3RhID0gc3RkOjptYXgobV9xdW90YSwgZGVmYXVsdFF1b3RhU3Rl
cCAqICgoc3BhY2VVc2FnZSgpIC8gZGVmYXVsdFF1b3RhU3RlcCkgKyAxKSk7Ci19Ci0KLXZvaWQg
U3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQoKQotewotICAgIGlm
IChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgVmVjdG9yPFN0b3JhZ2VRdW90YVVzZXIqPiB1c2Vyc1RvSW5pdGlhbGl6ZTsKLSAg
ICBmb3IgKGF1dG8mIGtleVZhbHVlIDogbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycykgewot
ICAgICAgICBpZiAoa2V5VmFsdWUudmFsdWUgPT0gV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpObykg
ewotICAgICAgICAgICAga2V5VmFsdWUudmFsdWUgPSBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ6Olll
czsKLSAgICAgICAgICAgIHVzZXJzVG9Jbml0aWFsaXplLmFwcGVuZChrZXlWYWx1ZS5rZXkpOwor
ICAgIC8vIEZhc3QgcGF0aC4KKyAgICBpZiAobV9xdW90YUNvdW50RG93bkxvY2sudHJ5TG9jaygp
KSB7CisgICAgICAgIGlmICh0cnlHcmFudFJlcXVlc3Qoc3BhY2VSZXF1ZXN0ZWQpKSB7CisgICAg
ICAgICAgICBtX3F1b3RhQ291bnREb3duTG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIGNhbGxi
YWNrKERlY2lzaW9uOjpHcmFudCk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAg
ICAgICAgbV9xdW90YUNvdW50RG93bkxvY2sudW5sb2NrKCk7CiAgICAgfQotICAgIGZvciAoYXV0
byogdXNlciA6IHVzZXJzVG9Jbml0aWFsaXplKSB7Ci0gICAgICAgIGlmIChtX3BlbmRpbmdJbml0
aWFsaXphdGlvblVzZXJzLmNvbnRhaW5zKHVzZXIpKQotICAgICAgICAgICAgYXNrVXNlclRvSW5p
dGlhbGl6ZSgqdXNlcik7Ci0gICAgfQorCisgICAgbV9jYWxsYmFja3MuYXBwZW5kKFdURk1vdmUo
Y2FsbGJhY2spKTsKKyAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgc3BhY2VSZXF1ZXN0ZWRdIHsKKyAgICAgICAgYXV0byBkZWNp
c2lvbiA9IHJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZChzcGFjZVJlcXVlc3RlZCk7Cisg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgZGVjaXNpb25dIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9jYWxsYmFja3MuaXNFbXB0
eSgpKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbGJhY2sgPSBtX2NhbGxiYWNrcy50YWtlRmlyc3Qo
KTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGRlY2lzaW9uKTsKKyAgICAgICAgfSk7CisgICAgfSk7
CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZShTdG9y
YWdlUXVvdGFVc2VyJiB1c2VyKQorU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHVpbnQ2NF90IHNw
YWNlUmVxdWVzdGVkKQogewotICAgIHVzZXIud2hlbkluaXRpYWxpemVkKFt0aGlzLCAmdXNlciwg
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oKSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKLSAg
ICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMucmVtb3ZlKCZ1c2VyKSkKLSAg
ICAgICAgICAgIG1fdXNlcnMuYWRkKCZ1c2VyKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3F1
b3RhQ291bnREb3duTG9jayk7CiAKLSAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlv
blVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAodHJ5R3JhbnRS
ZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkKKyAgICAgICAgcmV0dXJuIERlY2lzaW9uOjpHcmFudDsK
IAotICAgICAgICAvLyBNYWtlIHN1cmUgcXVvdGEgaXMgc2V0IGJlZm9yZSBoYW5kbGluZyBmaXJz
dCByZXF1ZXN0LgotICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6VW5pbml0aWFsaXplZCkg
ewotICAgICAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOwotICAgICAgICAg
ICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3Q7Ci0gICAgICAgIH0K
KyAgICBtX3VzYWdlID0gbV91c2FnZUdldHRlcigpOworICAgIHVwZGF0ZVF1b3RhQmFzZWRPblVz
YWdlKCk7CisgICAgbV9xdW90YUNvdW50RG93biA9IG1fdXNhZ2UgPCBtX3F1b3RhID8gbV9xdW90
YSAtIG1fdXNhZ2UgOiAwOworICAgIGlmICh0cnlHcmFudFJlcXVlc3Qoc3BhY2VSZXF1ZXN0ZWQp
KQorICAgICAgICByZXR1cm4gRGVjaXNpb246OkdyYW50OwogCi0gICAgICAgIHByb2Nlc3NQZW5k
aW5nUmVxdWVzdHMoeyB9KTsKLSAgICB9KTsKLX0KKyAgICAvLyBCbG9jayB0aGlzIHRocmVhZCB1
bnRpbCBnZXR0aW5nIGRlY3Npb24gZm9yIHF1b3RhIGluY3JlYXNlLgorICAgIEJpbmFyeVNlbWFw
aG9yZSBzZW1hcGhvcmU7CisgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBzcGFjZVJlcXVlc3RlZCwgJnNlbWFwaG9yZV0geworICAgICAg
ICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyIGFza3MgZm9y
IHF1b3RhIGluY3JlYXNlICUiIFBSSXU2NCwgdGhpcywgc3BhY2VSZXF1ZXN0ZWQpOworICAgICAg
ICBtX3F1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIobV9xdW90YSwgbV91c2FnZSwgc3BhY2VSZXF1ZXN0
ZWQsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksICZzZW1hcGhvcmVdKE9w
dGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0coU3Rv
cmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlciByZWNlaXZlcyBxdW90YSBpbmNyZWFzZSBy
ZXNwb25zZSAlIiBQUkl1NjQsIHRoaXMsIG5ld1F1b3RhID8gKm5ld1F1b3RhIDogMCk7CisgICAg
ICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFn
ZXI6OmFkZFVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKLXsKLSAgICBBU1NFUlQoIW1fcGVu
ZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBBU1NFUlQoIW1f
dXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJz
LmFkZCgmdXNlciwgV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpObyk7CisgICAgICAgICAgICBpZiAo
bmV3UXVvdGEpCisgICAgICAgICAgICAgICAgbV9xdW90YSA9ICpuZXdRdW90YTsKIAotICAgIGlm
ICghbV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAgICBhc2tVc2VyVG9Jbml0aWFs
aXplKHVzZXIpOwotfQorICAgICAgICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOworICAgICAgICB9
KTsKKyAgICB9KTsKIAotYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzaG91bGRBc2tGb3JNb3Jl
U3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3QKLXsKLSAgICBpZiAoIXNwYWNlSW5j
cmVhc2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzZW1hcGhvcmUud2FpdCgpOwogCi0g
ICAgcmV0dXJuIHNwYWNlVXNhZ2UoKSArIHNwYWNlSW5jcmVhc2UgPiBtX3F1b3RhOworICAgIG1f
dXNhZ2UgPSBtX3VzYWdlR2V0dGVyKCk7CisgICAgbV9xdW90YUNvdW50RG93biA9IG1fdXNhZ2Ug
PCBtX3F1b3RhID8gbV9xdW90YSAtIG1fdXNhZ2UgOiAwOworICAgIHJldHVybiB0cnlHcmFudFJl
cXVlc3Qoc3BhY2VSZXF1ZXN0ZWQpID8gRGVjaXNpb246OkdyYW50IDogRGVjaXNpb246OkRlbnk7
CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3ZlVXNlcihTdG9yYWdlUXVvdGFV
c2VyJiB1c2VyKQorYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp0cnlHcmFudFJlcXVlc3QodWlu
dDY0X3Qgc3BhY2VSZXF1ZXN0ZWQpCiB7Ci0gICAgQVNTRVJUKG1fdXNlcnMuY29udGFpbnMoJnVz
ZXIpIHx8IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAg
ICBtX3VzZXJzLnJlbW92ZSgmdXNlcik7Ci0gICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9u
VXNlcnMucmVtb3ZlKCZ1c2VyKSAmJiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1w
dHkoKSkgewotICAgICAgICAvLyBXaGVuIGJlaW5nIGNsZWFyZWQsIHF1b3RhIHVzZXJzIG1heSBy
ZW1vdmUgdGhlbXNlbHZlcyBhbmQgYWRkIHRoZW1zZWx2ZXMgdG8gdHJpZ2dlciByZWluaXRpYWxp
emF0aW9uLgotICAgICAgICAvLyBMZXQncyB3YWl0IGZvciBhZGRVc2VyIHRvIGJlIGNhbGxlZCBi
ZWZvcmUgcHJvY2Vzc2luZyBwZW5kaW5nIHJlcXVlc3RzLgotICAgICAgICBjYWxsT25NYWluVGhy
ZWFkKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgICAgICBp
ZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYg
KG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAg
IHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKLSAgICAgICAgfSk7CisgICAgQVNT
RVJUKG1fcXVvdGFDb3VudERvd25Mb2NrLmlzTG9ja2VkKCkpOworICAgIGlmIChzcGFjZVJlcXVl
c3RlZCA8PSBtX3F1b3RhQ291bnREb3duKSB7CisgICAgICAgIG1fcXVvdGFDb3VudERvd24gLT0g
c3BhY2VSZXF1ZXN0ZWQ7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7CiB9Ci0KLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlKHVpbnQ2
NF90IHNwYWNlSW5jcmVhc2UsIFJlcXVlc3RDYWxsYmFjayYmIGNhbGxiYWNrKQorICAgIAordm9p
ZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVRdW90YUJhc2VkT25Vc2FnZSgpCiB7Ci0gICAg
aWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVx
dWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXNwYWNlSW5jcmVhc2UpIHsKLSAgICAgICAg
Y2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxp
emF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVu
ZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spIH0pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZEFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKSkg
ewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUluY3JlYXNlLCBXVEZN
b3ZlKGNhbGxiYWNrKSB9KTsKLQotICAgICAgICAvLyBUcnkgcHJvY2Vzc2luZyByZXF1ZXN0IGFn
YWluIGFmdGVyIG1ha2luZyBzdXJlIHVzYWdlIGlzIGFjY3VyYXRlLgotICAgICAgICBtX3N0YXRl
ID0gU3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKLSAgICAgICAgZm9yIChhdXRvJiB1c2VyIDog
Y29weVRvVmVjdG9yKG1fdXNlcnMpKQotICAgICAgICAgICAgdXNlci0+Y29tcHV0ZVNwYWNlVXNl
ZCgpOwotCi0gICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpBc2tp
bmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgIGFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKTsK
LSAgICAgICAgcmV0dXJuOworICAgIC8vIFdoZW4gU3RvcmFnZVF1b3RhTWFuYWdlciBpcyB1c2Vk
IGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugd2FudCB0byBtYWtlIHN1cmUgaXRzIGluaXRpYWwgcXVv
dGEgaXMgYmlnZ2VyIHRoYW4gY3VycmVudCBkaXNrIHVzYWdlLAorICAgIC8vIGJhc2VkIG9uIHRo
ZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHF1b3RhIHdhcyBpbmNyZWFzZWQgdG8gYXQgbGVhc3QgdGhl
IGRpc2sgdXNhZ2UgdW5kZXIgdXNlcidzIHBlcm1pc3Npb24gYmVmb3JlLgorICAgIEFTU0VSVCht
X3F1b3RhQ291bnREb3duTG9jay5pc0xvY2tlZCgpKTsKKyAgICBpZiAoIW1fcXVvdGFVcGRhdGVk
QmFzZWRPblVzYWdlKSB7CisgICAgICAgIG1fcXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlID0gdHJ1
ZTsKKyAgICAgICAgYXV0byBkZWZhdWx0UXVvdGFTdGVwID0gbV9xdW90YSAvIDEwOworICAgICAg
ICBtX3F1b3RhID0gc3RkOjptYXgobV9xdW90YSwgZGVmYXVsdFF1b3RhU3RlcCAqICgobV91c2Fn
ZSAvIGRlZmF1bHRRdW90YVN0ZXApICsgMSkpOwogICAgIH0KLQotICAgIG1fc3RhdGUgPSBTdGF0
ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgIGNhbGxiYWNrKERlY2lzaW9uOjpHcmFu
dCk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNlKHVpbnQ2
NF90IHNwYWNlSW5jcmVhc2UpCit2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlc2V0UXVvdGFV
cGRhdGVkQmFzZWRPblVzYWdlKCkKIHsKLSAgICBBU1NFUlQoc2hvdWxkQXNrRm9yTW9yZVNwYWNl
KHNwYWNlSW5jcmVhc2UpKTsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9y
TW9yZVNwYWNlKTsKLQotICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90
YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSAlIiBQUkl1NjQsIHRoaXMsIHNwYWNlSW5jcmVhc2Up
OwotICAgIG1fc3RhdGUgPSBTdGF0ZTo6V2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZTsK
LSAgICBtX3NwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIobV9xdW90YSwgc3BhY2VVc2FnZSgpLCBzcGFj
ZUluY3JlYXNlLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKE9wdGlvbmFs
PHVpbnQ2NF90PiBuZXdRdW90YSkgewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VR
dW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSByZWNlaXZlZCByZXNwb25zZSAlIiBQUkl1NjQs
IHRoaXMsIG5ld1F1b3RhID8gKm5ld1F1b3RhIDogMCk7Ci0KLSAgICAgICAgbV9zdGF0ZSA9IFN0
YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMo
bmV3UXVvdGEpOwotICAgIH0pOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcXVvdGFDb3VudERv
d25Mb2NrKTsKKyAgICBtX3F1b3RhID0gbV9pbml0aWFsUXVvdGE7CisgICAgbV9xdW90YUNvdW50
RG93biA9IDA7CisgICAgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgPSBmYWxzZTsKIH0KIAot
dm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFs
PHVpbnQ2NF90PiBuZXdRdW90YSkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90
YSgpCiB7Ci0gICAgaWYgKG1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG5ld1F1b3RhKQotICAgICAgICBtX3F1b3RhID0gKm5ld1F1b3RhOwot
Ci0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OldhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9u
c2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25V
c2Vycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3N0YXRlID09IFN0
YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2UpIHsKLSAgICAgICAgYXV0byByZXF1ZXN0ID0gbV9wZW5k
aW5nUmVxdWVzdHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIGJvb2wgc2hvdWxkQWxsb3dSZXF1ZXN0
ID0gIXNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVhc2UpOwotCi0gICAg
ICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nl
c3NQZW5kaW5nUmVxdWVzdHMgZmlyc3QgcmVxdWVzdCBkZWNpc2lvbiBpcyAlZCIsIHRoaXMsIHNo
b3VsZEFsbG93UmVxdWVzdCk7Ci0KLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNp
c2lvbkZvclJlcXVlc3Q7Ci0gICAgICAgIHJlcXVlc3QuY2FsbGJhY2soc2hvdWxkQWxsb3dSZXF1
ZXN0ID8gRGVjaXNpb246OkdyYW50IDogRGVjaXNpb246OkRlbnkpOwotICAgIH0KLQotICAgIHdo
aWxlICghbV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8mIHJlcXVl
c3QgPSBtX3BlbmRpbmdSZXF1ZXN0cy5maXJzdCgpOwotCi0gICAgICAgIGlmIChzaG91bGRBc2tG
b3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNlKSkgewotICAgICAgICAgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdCkgewotICAgICAgICAgICAg
ICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q29tcHV0aW5nU3BhY2VVc2VkOwotICAgICAgICAgICAgICAg
IGZvciAoYXV0byYgdXNlciA6IGNvcHlUb1ZlY3RvcihtX3VzZXJzKSkKLSAgICAgICAgICAgICAg
ICAgICAgdXNlci0+Y29tcHV0ZVNwYWNlVXNlZCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFt
X3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6
OkFza2luZ0Zvck1vcmVTcGFjZTsKLSAgICAgICAgICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2Ug
PSAwOwotICAgICAgICAgICAgZm9yIChhdXRvJiBwZW5kaW5nUmVxdWVzdCA6IG1fcGVuZGluZ1Jl
cXVlc3RzKQotICAgICAgICAgICAgICAgIHNwYWNlSW5jcmVhc2UgKz0gcGVuZGluZ1JlcXVlc3Qu
c3BhY2VJbmNyZWFzZTsKLSAgICAgICAgICAgIGFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNl
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fc3RhdGUgPSBT
dGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0
cy50YWtlRmlyc3QoKS5jYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOwotICAgIH0KKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX3F1b3RhQ291bnREb3duTG9jayk7CisgICAgbV9xdW90YSA9IG1faW5p
dGlhbFF1b3RhOworICAgIG1fcXVvdGFDb3VudERvd24gPSAwOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90
YU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5o
CmluZGV4IDA5NTY2MzA2ZjU1OTFhYmI1OWQwYWZkOGVlYTQ4Njc5YTVmNmM2M2MuLjU5OWI4M2Qx
ZjY2MjY4YWFkZmI0NDhkYWRhMWUzYjJmMmI4YTdlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCkBAIC0yNSw3NyArMjUsNTYgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJDbGllbnRPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvQ29tcGxl
dGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgU3RvcmFnZVF1b3RhVXNlcjsKLQotY2xhc3MgU3RvcmFnZVF1b3RhTWFuYWdlciA6IHB1
YmxpYyBDYW5NYWtlV2Vha1B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiB7CitjbGFzcyBTdG9yYWdl
UXVvdGFNYW5hZ2VyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFN0b3JhZ2VRdW90YU1h
bmFnZXI+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHVzaW5nIFNwYWNlSW5jcmVh
c2VSZXF1ZXN0ZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQodWludDY0X3QgcXVvdGEsIHVpbnQ2NF90
IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmKT47Ci0gICAgU3RvcmFnZVF1b3RhTWFuYWdlcih1
aW50NjRfdCBxdW90YSwgU3BhY2VJbmNyZWFzZVJlcXVlc3RlciYmIHNwYWNlSW5jcmVhc2VSZXF1
ZXN0ZXIpCi0gICAgICAgIDogbV9xdW90YShxdW90YSkKLSAgICAgICAgLCBtX3NwYWNlSW5jcmVh
c2VSZXF1ZXN0ZXIoV1RGTW92ZShzcGFjZUluY3JlYXNlUmVxdWVzdGVyKSkKLSAgICB7Ci0gICAg
fQotICAgIFdFQkNPUkVfRVhQT1JUIH5TdG9yYWdlUXVvdGFNYW5hZ2VyKCk7CisgICAgdXNpbmcg
VXNhZ2VHZXR0ZXIgPSBXVEY6OkZ1bmN0aW9uPHVpbnQ2NF90KCk+OworICAgIHVzaW5nIFF1b3Rh
SW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQodWludDY0X3QgY3VycmVudFF1
b3RhLCB1aW50NjRfdCBjdXJyZW50VXNhZ2UsIHVpbnQ2NF90IHJlcXVlc3RlZEluY3JlYXNlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVpbnQ2NF90Pik+JiYpPjsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+IGNyZWF0ZSh1aW50NjRf
dCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmKTsKIAogICAg
IHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YUZyb21QZXJP
cmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkgeyByZXR1cm4gcXVvdGEgLyAxMDsgfQotCiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBkZWZhdWx0UXVvdGEoKSB7IHJldHVybiAxMDAwICog
TUI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVv
dGEoKSB7IHJldHVybiBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3RhKGRl
ZmF1bHRRdW90YSgpKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyKFN0b3Jh
Z2VRdW90YVVzZXImKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXIoU3RvcmFn
ZVF1b3RhVXNlciYpOwotCiAgICAgZW51bSBjbGFzcyBEZWNpc2lvbiB7IERlbnksIEdyYW50IH07
CiAgICAgdXNpbmcgUmVxdWVzdENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNp
c2lvbik+OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdFNwYWNlKHVpbnQ2NF90LCBS
ZXF1ZXN0Q2FsbGJhY2smJik7Ci0gICAgdm9pZCByZXNldFF1b3RhKHVpbnQ2NF90IG5ld1F1b3Rh
KSB7IG1fcXVvdGEgPSBuZXdRdW90YTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVz
dFNwYWNlT25NYWluVGhyZWFkKHVpbnQ2NF90LCBSZXF1ZXN0Q2FsbGJhY2smJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgRGVjaXNpb24gcmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHVpbnQ2
NF90KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VV
c2FnZSgpOwotCi0gICAgZW51bSBjbGFzcyBTdGF0ZSB7Ci0gICAgICAgIFVuaW5pdGlhbGl6ZWQs
Ci0gICAgICAgIENvbXB1dGluZ1NwYWNlVXNlZCwKLSAgICAgICAgV2FpdGluZ0ZvclNwYWNlSW5j
cmVhc2VSZXNwb25zZSwKLSAgICAgICAgQXNraW5nRm9yTW9yZVNwYWNlLAotICAgICAgICBNYWtp
bmdEZWNpc2lvbkZvclJlcXVlc3QsCi0gICAgfTsKLSAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGU7IH0KKyAgICAvLyBUZXN0IG9ubHkuCisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZXNldFF1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZSgpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVzZXRRdW90YSgpOwogCiBwcml2YXRlOgotICAgIHVpbnQ2NF90IHNwYWNlVXNhZ2Uo
KSBjb25zdDsKLSAgICBib29sIHNob3VsZEFza0Zvck1vcmVTcGFjZSh1aW50NjRfdCBzcGFjZUlu
Y3JlYXNlKSBjb25zdDsKLSAgICB2b2lkIGFza0Zvck1vcmVTcGFjZSh1aW50NjRfdCBzcGFjZUlu
Y3JlYXNlKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQoKTsKLSAgICB2b2lk
IGFza1VzZXJUb0luaXRpYWxpemUoU3RvcmFnZVF1b3RhVXNlciYpOworICAgIFN0b3JhZ2VRdW90
YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYsIFF1b3RhSW5jcmVhc2VSZXF1
ZXN0ZXImJik7CisgICAgYm9vbCB0cnlHcmFudFJlcXVlc3QodWludDY0X3QpOwogCi0gICAgdm9p
ZCBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90Pik7CisgICAgdm9pZCB1
cGRhdGVRdW90YUJhc2VkT25Vc2FnZSgpOwogCisgICAgTG9jayBtX3F1b3RhQ291bnREb3duTG9j
azsKKyAgICB1aW50NjRfdCBtX3F1b3RhQ291bnREb3duIHsgMCB9OwogICAgIHVpbnQ2NF90IG1f
cXVvdGEgeyAwIH07CisgICAgdWludDY0X3QgbV91c2FnZSB7IDAgfTsKIAotICAgIFNwYWNlSW5j
cmVhc2VSZXF1ZXN0ZXIgbV9zcGFjZUluY3JlYXNlUmVxdWVzdGVyOworICAgIFVzYWdlR2V0dGVy
IG1fdXNhZ2VHZXR0ZXI7CisgICAgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciBtX3F1b3RhSW5jcmVh
c2VSZXF1ZXN0ZXI7CiAKLSAgICBlbnVtIGNsYXNzIFdoZW5Jbml0aWFsaXplZENhbGxlZCB7IE5v
LCBZZXMgfTsKLSAgICBIYXNoTWFwPFN0b3JhZ2VRdW90YVVzZXIqLCBXaGVuSW5pdGlhbGl6ZWRD
YWxsZWQ+IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnM7Ci0gICAgSGFzaFNldDxTdG9yYWdl
UXVvdGFVc2VyKj4gbV91c2VyczsKKyAgICBEZXF1ZTxSZXF1ZXN0Q2FsbGJhY2s+IG1fY2FsbGJh
Y2tzOworICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOwogCi0gICAgc3RydWN0IFBlbmRp
bmdSZXF1ZXN0IHsKLSAgICAgICAgdWludDY0X3Qgc3BhY2VJbmNyZWFzZTsKLSAgICAgICAgUmVx
dWVzdENhbGxiYWNrIGNhbGxiYWNrOwotICAgIH07Ci0gICAgRGVxdWU8UGVuZGluZ1JlcXVlc3Q+
IG1fcGVuZGluZ1JlcXVlc3RzOworICAgIGJvb2wgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2Ug
eyBmYWxzZSB9OwogCi0gICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpVbmluaXRpYWxpemVkIH07
CisgICAgLy8gVGVzdCBvbmx5LgorICAgIHVpbnQ2NF90IG1faW5pdGlhbFF1b3RhIHsgMCB9Owog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VRdW90YVVzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcxMGNlZWM2MGM1
ZGU1MGM2MDlkMjMxYjBmMGRmOTY3NDk0OTQyMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVz
ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9D
b21wbGV0aW9uSGFuZGxlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFN0b3Jh
Z2VRdW90YVVzZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgflN0b3JhZ2VRdW90YVVzZXIoKSA9
IGRlZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgpIHsgfTsKLSAgICB2aXJ0dWFsIHZv
aWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykg
eyBjYWxsYmFjaygpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDVmMjNjYzY2
YWExMWY3ZDI4ZTc2MTVjY2I4NTEzNjdjMjAzMTViZTMuLjY3NjcyNmExNjZiZjZjZWUzY2UyMzRm
OTE5YzQyY2UxMjliMDY0MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURh
dGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW5j
bHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRE5T
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EZXByZWNhdGVkR2xvYmFsU2V0dGluZ3MuaD4KQEAgLTMx
Niw4ICszMTcsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKICAgICBhdXRvIHNlc3Npb25J
RCA9IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnNlc3Npb25JRDsKICAgICBzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nl
c3Npb246OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycykpKTsKIAorICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgYWRkU2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSk7
CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBhZGRJbmRleGVkRGF0YWJhc2VT
ZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBzZXRT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKHNlc3Npb25JRCwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC0zMjYsNyArMzMxLDYgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKICAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24o
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc2VydmljZVdvcmtlclByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIH0KICNlbmRpZgotICAgIGluaXRpYWxp
emVTdG9yYWdlUXVvdGEocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7CiAK
ICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwogCkBAIC00MzQsMjggKzQzOCwzOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVh
ckNhY2hlZENyZWRlbnRpYWxzKCkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0ZURh
dGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiB7CisgICAg
YXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNz
aW9uSUQ7CisKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGFkZFNlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgcGFyYW1ldGVycy5wZXJPcmlnaW5TdG9y
YWdlUXVvdGEsIHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwgcGFy
YW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOworCiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7CisgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMu
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgc2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJJ
REJSb290UGF0aChzZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
KTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGlmIChwYXJlbnRQ
cm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50KCkpCi0gICAgICAgIGFkZFNlcnZpY2VX
b3JrZXJTZXNzaW9uKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25J
RCwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSks
IHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CisgICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1l
dGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3Zl
KHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRl
cnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAj
ZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChwYXJhbWV0ZXJzLm5ldHdvcmtT
ZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0K
LSAgICBpbml0aWFsaXplU3RvcmFnZVF1b3RhKHBhcmFtZXRlcnMpOworICAgIG1fc3RvcmFnZU1h
bmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKICAg
ICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24o
KnRoaXMsIFdURk1vdmUocGFyYW1ldGVycykpOwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzOjpp
bml0aWFsaXplU3RvcmFnZVF1b3RhKGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzKQordm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1h
bmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVp
bnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0
aCkKIHsKLSAgICBhdXRvJiBtYW5hZ2VycyA9ICBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmVuc3Vy
ZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIFtdIHsKLSAg
ICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsgfTsKLSAgICB9KS5pdGVyYXRvci0+
dmFsdWU7Ci0gICAgbWFuYWdlcnMuc2V0RGVmYXVsdFF1b3RhcyhwYXJhbWV0ZXJzLnBlck9yaWdp
blN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3Rh
KTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xv
Y2spOworICAgIGF1dG9baXRlciwgaXNOZXdFbnRyeV0gPSBtX3Nlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2Vycy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKKyAgICBpZiAoaXNOZXdFbnRyeSkKKyAg
ICAgICAgaXRlci0+dmFsdWUgPSBtYWtlVW5pcXVlPFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vy
PihjYWNoZVJvb3RQYXRoLCBkZWZhdWx0UXVvdGEsIGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEpOwor
fQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9z
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBBU1NFUlQobV9zZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcnMuY29udGFpbnMoc2Vzc2lvbklEKSk7CisgICAgbV9zZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKE5ldHdvcmtT
ZXNzaW9uJik+JiBmdW5jdG9yKQpAQCAtNTc2LDggKzU5MSw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmRlc3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICNlbmRpZgogCiAg
ICAgbV9zdG9yYWdlTWFuYWdlclNldC0+cmVtb3ZlKHNlc3Npb25JRCk7Ci0KLSAgICBtX3N0b3Jh
Z2VRdW90YU1hbmFnZXJzLnJlbW92ZShzZXNzaW9uSUQpOwogfQogCiAjaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKQEAgLTE0NjgsOSArMTQ4MSw2IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9u
U2V0PFdlYnNpCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFU
eXBlOjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgY2xl
YXJEaXNrQ2FjaGUobW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5kbGVyID0gV1RGTW92ZShj
bGVhclRhc2tzSGFuZGxlcildIHsgfSk7CiAKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250
YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykgfHwgd2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRPTUNhY2hlKSkKLSAgICAgICAgY2xlYXJT
dG9yYWdlUXVvdGEoc2Vzc2lvbklEKTsKLQogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRh
aW5zKFdlYnNpdGVEYXRhVHlwZTo6QWRDbGlja0F0dHJpYnV0aW9ucykpIHsKICAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkK
ICAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5jbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbigpOwpA
QCAtMTU2MywxOSArMTU3Myw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVE
YXRhRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvCiAgICAgICAgIH0K
ICAgICAgICAgV2ViQ29yZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OnJlbW92ZVNlc3Npb25DcmVkZW50
aWFsc1dpdGhPcmlnaW5zKG9yaWdpbkRhdGFzKTsKICAgICB9Ci0KLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHN0b3JhZ2UgcXVvdGEgY2xlYXJpbmcgZm9yIHRoZXNlIG9yaWdpbnMuCi19Ci0KLXZv
aWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyU3RvcmFnZVF1b3RhKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCkKLXsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5maW5k
KHNlc3Npb25JRCk7Ci0gICAgaWYgKGl0ZXJhdG9yID09IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMu
ZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIG1hbmFnZXJzID0gaXRlcmF0b3It
PnZhbHVlOwotICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1hbmFnZXJzLm1hbmFnZXJzUGVyT3Jp
Z2luKCkpCi0gICAgICAgIG1hbmFnZXIudmFsdWUtPnJlc2V0UXVvdGEobWFuYWdlcnMuZGVmYXVs
dFF1b3RhKG1hbmFnZXIua2V5KSk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQpAQCAtMjIxNywxMCArMjIxNCwxMCBAQCBSZWY8SURCU2VydmVyOjpJREJTZXJ2ZXI+
IE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbgog
ICAgICAgICBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhzLmdldChzZXNzaW9uSUQpOwogICAgIH0K
IAotICAgIHJldHVybiBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgcGF0
aCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgY29uc3QgYXV0byYgb3JpZ2luKSAtPiBTdG9yYWdlUXVvdGFNYW5hZ2VyKiB7Cisg
ICAgcmV0dXJuIElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklELCBwYXRoLCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklEXShjb25zdCBhdXRv
JiBvcmlnaW4pIC0+IFJlZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiB7CiAgICAgICAgIGlmICgh
d2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuICZ0
aGlzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsKKyAgICAgICAgcmV0
dXJuIHN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBvcmlnaW4pOwogICAgIH0pOwogfQog
CkBAIC0yMzA5LDYgKzIzMDYsMTUgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkSW5kZXhlZERh
dGFiYXNlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYKICAgICAgICAg
ICAgIHBvc3RTdG9yYWdlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZOZXR3b3Jr
UHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0cywgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KSk7CiAg
ICAgfQogfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlcklEQlJvb3RQYXRoKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBp
ZGJSb290UGF0aCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVv
dGFNYW5hZ2Vyc0xvY2spOworICAgIGF1dG8qIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyID0g
bV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7CisgICAgQVNTRVJU
KHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKTsKKyAgICBzZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlci0+c2V0SURCUm9vdFBhdGgoaWRiUm9vdFBhdGgpOworfQorCiAjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnN5bmNMb2NhbFN0b3Jh
Z2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjMy
NSw5ICsyMzMxLDE0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyTGVnYWN5UHJpdmF0ZUJy
b3dzaW5nTG9jYWxTdG9yYWdlKCkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6dXBkYXRlUXVvdGFC
YXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAgICBhdXRvJiBtYW5hZ2VyID0gc3RvcmFnZVF1
b3RhTWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbik7Ci0gICAgbWFuYWdlci5yZXNldFF1b3RhKG1f
c3RvcmFnZVF1b3RhTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpLT52YWx1ZS5kZWZhdWx0UXVvdGEo
b3JpZ2luKSk7Ci0gICAgbWFuYWdlci51cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCk7Cisg
ICAgYXV0byBzdG9yYWdlUXVvdGFNYW5hZ2VyID0gdGhpcy0+c3RvcmFnZVF1b3RhTWFuYWdlcihz
ZXNzaW9uSUQsIG9yaWdpbik7CisgICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVzZXRRdW90YVVw
ZGF0ZWRCYXNlZE9uVXNhZ2UoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90
YSgpCit7CisgICAgZm9yIChhdXRvJiBzdG9yYWdlUXVvdGFNYW5hZ2VyIDogZXhpc3RpbmdTdG9y
YWdlUXVvdGFNYW5hZ2VycygpKQorICAgICAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5yZXNldFF1
b3RhKCk7CiB9CiAKICNpZiBFTkFCTEUoU0FOREJPWF9FWFRFTlNJT05TKQpAQCAtMjQwNCw2MiAr
MjQxNSw0OCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXF1ZXN0U3RvcmFnZVNwYWNlKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50TwogICAgIHBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94
eTo6UmVxdWVzdFN0b3JhZ2VTcGFjZSB7IHNlc3Npb25JRCwgb3JpZ2luLCBxdW90YSwgY3VycmVu
dFNpemUsIHNwYWNlUmVxdWlyZWQgfSwgV1RGTW92ZShjYWxsYmFjayksIDApOwogfQogCi1jbGFz
cyBRdW90YVVzZXJJbml0aWFsaXplciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlUXVv
dGFVc2VyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBs
aWNpdCBRdW90YVVzZXJJbml0aWFsaXplcihTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5hZ2VyKQot
ICAgICAgICA6IG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKLSAgICB7Ci0gICAgICAg
IG1hbmFnZXIuYWRkVXNlcigqdGhpcyk7Ci0gICAgfQotCi0gICAgflF1b3RhVXNlckluaXRpYWxp
emVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgICAgICBtX21hbmFn
ZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgICAgICBpZiAobV9jYWxsYmFjaykKLSAgICAgICAg
ICAgIG1fY2FsbGJhY2soKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gU3RvcmFnZVF1b3Rh
VXNlciBBUEkuCi0gICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgZmluYWwKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CitS
ZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VRdW90YU1h
bmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdp
bikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vy
c0xvY2spOworICAgIGF1dG8qIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyID0gbV9zZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7CisgICAgaWYgKCFzZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICB2b2lkIHdo
ZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIGZpbmFs
Ci0gICAgewotICAgICAgICBtX2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7Ci0gICAgfQor
ICAgIFN0cmluZyBpZGJSb290UGF0aDsKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAg
ICBpZGJSb290UGF0aCA9IHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5pZGJSb290UGF0aCgp
OworI2VuZGlmCisgICAgU3RvcmFnZVF1b3RhTWFuYWdlcjo6VXNhZ2VHZXR0ZXIgdXNhZ2VHZXR0
ZXIgPSBbY2FjaGVSb290UGF0aCA9IHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5jYWNoZVJv
b3RQYXRoKCksIGlkYlJvb3RQYXRoLCBvcmlnaW5dKCkgeworICAgICAgICBBU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsgICAgCiAKLSAgICBXZWFrUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IG1fbWFu
YWdlcjsKLSAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IG1fY2FsbGJhY2s7Ci19OworICAg
ICAgICB1aW50NjRfdCB1c2FnZSA9IDA7CisgICAgICAgIHVzYWdlICs9IENhY2hlU3RvcmFnZTo6
RW5naW5lOjpkaXNrVXNhZ2UoY2FjaGVSb290UGF0aCwgb3JpZ2luKTsKKyNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKKyAgICAgICAgdXNhZ2UgKz0gSURCU2VydmVyOjpJREJTZXJ2ZXI6OmRp
c2tVc2FnZShpZGJSb290UGF0aCwgb3JpZ2luKTsKKyNlbmRpZgogCi12b2lkIE5ldHdvcmtQcm9j
ZXNzOjppbml0aWFsaXplUXVvdGFVc2VycyhTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5hZ2VyLCBQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQotewot
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cih0aGlzKSwgc2Vzc2lvbklELCBvcmlnaW4sIHVzZXIgPSBtYWtlVW5pcXVlPFF1b3RhVXNlcklu
aXRpYWxpemVyPihtYW5hZ2VyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgcmV0dXJuIHVzYWdlOwor
ICAgIH07CisgICAgU3RvcmFnZVF1b3RhTWFuYWdlcjo6UXVvdGFJbmNyZWFzZVJlcXVlc3RlciBx
dW90YUluY3JlYXNlUmVxdWVzdGVyID0gW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpLCBzZXNzaW9uSUQsIG9yaWdpbl0gKHVpbnQ2NF90IGN1cnJlbnRRdW90YSwgdWludDY0X3Qg
Y3VycmVudFNwYWNlLCB1aW50NjRfdCByZXF1ZXN0ZWRJbmNyZWFzZSwgYXV0byYmIGNhbGxiYWNr
KSB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgICAgIGlmICghd2Vha1Ro
aXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMtPmlkYlNlcnZlcihzZXNzaW9u
SUQpLmluaXRpYWxpemVRdW90YVVzZXIob3JpZ2luKTsKLSAgICAgICAgQ2FjaGVTdG9yYWdlOjpF
bmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIoKnRoaXMsIHNlc3Npb25JRCwgb3JpZ2luLCBbdXNl
ciA9IFdURk1vdmUodXNlcildIHsgfSk7Ci0gICAgfSk7CisgICAgICAgICAgICBjYWxsYmFjayh7
IH0pOworICAgICAgICByZXF1ZXN0U3RvcmFnZVNwYWNlKHNlc3Npb25JRCwgb3JpZ2luLCBjdXJy
ZW50UXVvdGEsIGN1cnJlbnRTcGFjZSwgcmVxdWVzdGVkSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJh
Y2spKTsKKyAgICB9OworCisgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5l
bnN1cmVPcmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2VyKG9yaWdpbiwgc2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXItPmRlZmF1bHRRdW90YShvcmlnaW4pLCBXVEZNb3ZlKHVzYWdlR2V0dGVyKSwgV1RG
TW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKSk7CiB9CiAKLVN0b3JhZ2VRdW90YU1hbmFnZXIm
IE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCitWZWN0b3I8UmVmUHRyPFN0b3JhZ2VR
dW90YU1hbmFnZXI+PiBOZXR3b3JrUHJvY2Vzczo6ZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2Vy
cygpCiB7Ci0gICAgYXV0byYgc3RvcmFnZVF1b3RhTWFuYWdlcnMgPSBtX3N0b3JhZ2VRdW90YU1h
bmFnZXJzLmVuc3VyZShzZXNzaW9uSUQsIFtdIHsKLSAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90
YU1hbmFnZXJzIHsgfTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgcmV0dXJuICpzdG9y
YWdlUXVvdGFNYW5hZ2Vycy5tYW5hZ2Vyc1Blck9yaWdpbigpLmVuc3VyZShvcmlnaW4sIFt0aGlz
LCAmc3RvcmFnZVF1b3RhTWFuYWdlcnMsIHNlc3Npb25JRCwgJm9yaWdpbl0gewotICAgICAgICBh
dXRvIG1hbmFnZXIgPSBtYWtlVW5pcXVlPFN0b3JhZ2VRdW90YU1hbmFnZXI+KHN0b3JhZ2VRdW90
YU1hbmFnZXJzLmRlZmF1bHRRdW90YShvcmlnaW4pLCBbdGhpcywgc2Vzc2lvbklELCBvcmlnaW5d
KHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5j
cmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKLSAgICAgICAgICAgIHRoaXMtPnJlcXVlc3RTdG9yYWdl
U3BhY2Uoc2Vzc2lvbklELCBvcmlnaW4sIHF1b3RhLCBjdXJyZW50U3BhY2UsIHNwYWNlSW5jcmVh
c2UsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGluaXRpYWxpemVR
dW90YVVzZXJzKCptYW5hZ2VyLCBzZXNzaW9uSUQsIG9yaWdpbik7Ci0gICAgICAgIHJldHVybiBt
YW5hZ2VyOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlciht
X3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIFZlY3RvcjxSZWZQdHI8U3Rv
cmFnZVF1b3RhTWFuYWdlcj4+IHJlc3VsdDsKKworICAgIGZvciAoYXV0byYgc2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXIgOiBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy52YWx1ZXMoKSkg
eworICAgICAgICBmb3IgKGF1dG8gc3RvcmFnZVF1b3RhTWFuYWdlciA6IHNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VyLT5leGlzdGluZ1N0b3JhZ2VRdW90YU1hbmFnZXJzKCkpCisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKHN0b3JhZ2VRdW90YU1hbmFnZXIpOworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IGY2MmYwMWQzODBmNDAxMDU1MmFhZDM4
ODlhNDk3ZDUxMjZmOGEzNTMuLmRiMTkwMmEwOTVjYzJjMWE1MzVlODFlMTQzZmViNDFmNzRmOWYy
YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgK
QEAgLTI4NCw2ICsyODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckxlZ2FjeVByaXZhdGVC
cm93c2luZ0xvY2FsU3RvcmFnZSgpOwogCiAgICAgdm9pZCB1cGRhdGVRdW90YUJhc2VkT25TcGFj
ZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luJik7CisgICAgdm9pZCByZXNldFF1b3RhKCk7CiAKICNpZiBFTkFCTEUoU0FOREJPWF9FWFRF
TlNJT05TKQogICAgIHZvaWQgZ2V0U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYmKT4mJik7CkBAIC0zMjcsNyArMzI4LDggQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRlc3Rpbmco
UEFMOjpTZXNzaW9uSUQsIFVSTCYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAg
IHZvaWQgbWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKFBBTDo6U2Vz
c2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCi0gICAgV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlciYgc3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29u
c3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdl
YkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcj4+IGV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMoKTsKIAogICAgIHZv
aWQgYWRkS2VwdEFsaXZlTG9hZChSZWY8TmV0d29ya1Jlc291cmNlTG9hZGVyPiYmKTsKICAgICB2
b2lkIHJlbW92ZUtlcHRBbGl2ZUxvYWQoTmV0d29ya1Jlc291cmNlTG9hZGVyJik7CkBAIC00NDIs
NiArNDQ0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbGxlY3RJbmRleGVkRGF0YWJhc2VPcmln
aW5zRm9yVmVyc2lvbihjb25zdCBTdHJpbmcmLCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luRGF0YT4mKTsKICAgICBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gaW5k
ZXhlZERhdGFiYXNlT3JpZ2lucyhjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIFJlZjxXZWJDb3Jl
OjpJREJTZXJ2ZXI6OklEQlNlcnZlcj4gY3JlYXRlSURCU2VydmVyKFBBTDo6U2Vzc2lvbklEKTsK
KyAgICB2b2lkIHNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoUEFMOjpT
ZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgaWRiUm9vdFBhdGgpOwogI2VuZGlmCiAKICNpZiBFTkFC
TEUoU0VSVklDRV9XT1JLRVIpCkBAIC00NjEsOCArNDY0LDQ0IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwZXJmb3JtTmV4dFN0b3JhZ2VUYXNrKCk7CiAgICAgdm9pZCBlbnN1cmVQYXRoRXhpc3RzKGNv
bnN0IFN0cmluZyYgcGF0aCk7CiAKLSAgICB2b2lkIGNsZWFyU3RvcmFnZVF1b3RhKFBBTDo6U2Vz
c2lvbklEKTsKLSAgICB2b2lkIGluaXRpYWxpemVTdG9yYWdlUXVvdGEoY29uc3QgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMmKTsKKyAgICBjbGFzcyBTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
ciB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAg
ICAgU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoY29uc3QgU3RyaW5nJiBjYWNoZVJvb3RQYXRo
LCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEp
CisgICAgICAgICAgICA6IG1fY2FjaGVSb290UGF0aChjYWNoZVJvb3RQYXRoKQorICAgICAgICAg
ICAgLCBtX2RlZmF1bHRRdW90YShkZWZhdWx0UXVvdGEpCisgICAgICAgICAgICAsIG1fZGVmYXVs
dFRoaXJkUGFydHlRdW90YShkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhKGNvbnN0IFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYgb3JpZ2luKSBjb25zdCB7IHJldHVybiBvcmlnaW4udG9wT3JpZ2luID09IG9yaWdp
bi5jbGllbnRPcmlnaW4gPyBtX2RlZmF1bHRRdW90YSA6IG1fZGVmYXVsdFRoaXJkUGFydHlRdW90
YTsgfQorCisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBlbnN1
cmVPcmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2VyKFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4s
IHVpbnQ2NF90IHF1b3RhLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpVc2FnZUdldHRl
ciYmIHVzYWdlR2V0dGVyLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpRdW90YUluY3Jl
YXNlUmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3RlcikKKyAgICAgICAgeworICAgICAg
ICAgICAgYXV0b1tpdGVyLCBpc05ld0VudHJ5XSA9IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuYWRk
KG9yaWdpbiwgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAoaXNOZXdFbnRyeSkKKyAgICAgICAg
ICAgICAgICBpdGVyLT52YWx1ZSA9IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0
ZShxdW90YSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdURk1vdmUocXVvdGFJbmNyZWFzZVJlcXVl
c3RlcikpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIoKml0ZXItPnZhbHVlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8gZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2VycygpIHsg
cmV0dXJuIG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMudmFsdWVzKCk7IH0KKworICAgICAgICBjb25z
dCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlUm9vdFBhdGg7
IH0KKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICAgICAgdm9pZCBzZXRJREJSb290
UGF0aChjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKSB7IG1faWRiUm9vdFBhdGggPSBpZGJSb290
UGF0aDsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9pZGJSb290UGF0aDsgfQorI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICBTdHJp
bmcgbV9jYWNoZVJvb3RQYXRoOworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgICAg
ICBTdHJpbmcgbV9pZGJSb290UGF0aDsKKyNlbmRpZgorICAgICAgICB1aW50NjRfdCBtX2RlZmF1
bHRRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpIH07
CisgICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YSB7IFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB9OworICAgICAgICBI
YXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdpbiwgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI+PiBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzOworICAgIH07CisgICAgdm9pZCBhZGRT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgdWludDY0X3QgZGVmYXVs
dFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNh
Y2hlUm9vdFBhdGgpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIo
UEFMOjpTZXNzaW9uSUQpOwogCiAgICAgLy8gQ29ubmVjdGlvbnMgdG8gV2ViUHJvY2Vzc2VzLgog
ICAgIEhhc2hNYXA8V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIFJlZjxOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcz4+IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zOwpAQCAtNTMzLDIzICs1
NzIsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCB7IGZhbHNl
IH07CiAjZW5kaWYKICAgICAKLSAgICBjbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VycyB7Ci0gICAg
cHVibGljOgotICAgICAgICB1aW50NjRfdCBkZWZhdWx0UXVvdGEoY29uc3QgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJiBvcmlnaW4pIGNvbnN0IHsgcmV0dXJuIG9yaWdpbi50b3BPcmlnaW4gPT0gb3Jp
Z2luLmNsaWVudE9yaWdpbiA/IG1fZGVmYXVsdFF1b3RhIDogbV9kZWZhdWx0VGhpcmRQYXJ0eVF1
b3RhOyB9Ci0gICAgICAgIHZvaWQgc2V0RGVmYXVsdFF1b3Rhcyh1aW50NjRfdCBkZWZhdWx0UXVv
dGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1fZGVmYXVsdFF1b3RhID0gZGVmYXVsdFF1b3RhOwotICAgICAgICAgICAgbV9kZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhID0gZGVmYXVsdFRoaXJkUGFydHlRdW90YTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+JiBtYW5hZ2Vyc1Blck9yaWdpbigpIHsgcmV0dXJu
IG1fbWFuYWdlcnNQZXJPcmlnaW47IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2NF90
IG1fZGVmYXVsdFF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1
b3RhKCkgfTsKLSAgICAgICAgdWludDY0X3QgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhIHsgV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgpIH07Ci0g
ICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fbWFuYWdlcnNQZXJPcmlnaW47Ci0gICAgfTsK
LSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2Vycz4gbV9zdG9y
YWdlUXVvdGFNYW5hZ2VyczsKKyAgICBMb2NrIG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJz
TG9jazsKKyAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyczsKIAog
ICAgIE9wdGlvblNldDxOZXR3b3JrQ2FjaGU6OkNhY2hlT3B0aW9uPiBtX2NhY2hlT3B0aW9uczsK
ICAgICBXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeSBtX21lc3NhZ2VQb3J0Q2hh
bm5lbFJlZ2lzdHJ5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggMzY3NzY3NzQ4MGI4MmE0NDMzZjg1ZDI4
MmIzZTVmYjgwNmE5MWU2My4uNThmZTVjOWY2MDE4MzZhZWY1NjhkOWIzOTc4NTJhOTQxZWM1MjAz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0xNTIsNiArMTUyLDcgQEAgbWVzc2FnZXMgLT4gTmV0d29y
a1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogICAgIENsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5n
TG9jYWxTdG9yYWdlKCkKIAogICAgIFVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2VGb3JUZXN0
aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgc3RydWN0IFdlYkNvcmU6OkNsaWVudE9yaWdp
biBvcmlnaW4pCisgICAgUmVzZXRRdW90YSgpCiAKICAgICBTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlv
bihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbiBh
ZENsaWNrQXR0cmlidXRpb24pCiAgICAgRHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpIC0+IChTdHJpbmcgYWRDbGlja0F0dHJpYnV0aW9uU3RhdGUpIEFzeW5j
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZS5jcHAKaW5kZXggZWZlN2UxNWIwNWY3ZDI1NjEwOWU4NjMyZTJmMzA1ZTIx
YzM2ODRiNi4uMzA4NTBkZTdlY2VjMDA0MTQ4OTUyOTIxYjcwNDNiNWMwY2ZlZjhiZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lLmNwcApAQCAtMTk2LDEzICsxOTYsNjMgQEAgdm9pZCBFbmdpbmU6OmNsZWFyQ2Fj
aGVzRm9yT3JpZ2luKE5ldHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgUEFMOjpTZXNzaW9u
SUQKICAgICB9KTsKIH0KIAotdm9pZCBFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIoTmV0d29y
a1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgY2xpZW50T3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCitzdGF0aWMgdWludDY0X3QgZ2V0RGlyZWN0b3J5
U2l6ZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpCit7CisgICAgdWludDY0X3QgZGlyZWN0
b3J5U2l6ZSA9IDA7CisgICAgRGVxdWU8U3RyaW5nPiBwYXRoczsKKyAgICBwYXRocy5hcHBlbmQo
ZGlyZWN0b3J5UGF0aCk7CisgICAgd2hpbGUgKCFwYXRocy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
YXV0byBwYXRoID0gcGF0aHMudGFrZUZpcnN0KCk7CisgICAgICAgIGlmIChGaWxlU3lzdGVtOjpm
aWxlSXNEaXJlY3RvcnkocGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5r
czo6Tm8pKSB7CisgICAgICAgICAgICBhdXRvIG5ld1BhdGhzID0gRmlsZVN5c3RlbTo6bGlzdERp
cmVjdG9yeShwYXRoLCAiKiJfcyk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIG5ld1BhdGggOiBu
ZXdQYXRocykgeworICAgICAgICAgICAgICAgIC8vIEZpbGVzIGluIEJsb2JzIGRpcmVjdG9yeSBh
cmUgaGFyZCBsaW5rLgorICAgICAgICAgICAgICAgIGF1dG8gZmlsZU5hbWUgPSBGaWxlU3lzdGVt
OjpsYXN0Q29tcG9uZW50T2ZQYXRoSWdub3JpbmdUcmFpbGluZ1NsYXNoKG5ld1BhdGgpOworICAg
ICAgICAgICAgICAgIGlmIChmaWxlTmFtZSA9PSAiQmxvYnMiKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBwYXRocy5hcHBlbmQobmV3UGF0aCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxv
bmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgICAgIEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHBh
dGgsIGZpbGVTaXplKTsKKyAgICAgICAgZGlyZWN0b3J5U2l6ZSArPSBmaWxlU2l6ZTsKKyAgICB9
CisgICAgcmV0dXJuIGRpcmVjdG9yeVNpemU7Cit9CisKK3VpbnQ2NF90IEVuZ2luZTo6ZGlza1Vz
YWdlKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYg
b3JpZ2luKQogewotICAgIGZyb20obmV0d29ya1Byb2Nlc3MsIHNlc3Npb25JRCwgW2NsaWVudE9y
aWdpbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0
byYgZW5naW5lKSBtdXRhYmxlIHsKLSAgICAgICAgZW5naW5lLnJlYWRDYWNoZXNGcm9tRGlzayhj
bGllbnRPcmlnaW4sIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShhdXRvJiYgY2FjaGVzT3JFcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICB9KTsKKyAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKKyAgICBpZiAocm9vdFBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFN0cmluZyBzYWx0UGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChyb290UGF0aCwgInNhbHQiX3MpOworICAgIGF1dG8gc2FsdCA9IHJlYWRPck1ha2VTYWx0
KHNhbHRQYXRoKTsKKyAgICBpZiAoIXNhbHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgS2V5
IGtleShvcmlnaW4udG9wT3JpZ2luLnRvU3RyaW5nKCksIG9yaWdpbi5jbGllbnRPcmlnaW4udG9T
dHJpbmcoKSwgeyB9LCB7IH0sICpzYWx0KTsKKyAgICBTdHJpbmcgZGlyZWN0b3J5UGF0aCA9IEZp
bGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyb290UGF0aCwga2V5Lmhhc2hBc1N0
cmluZygpKTsKKworICAgIFN0cmluZyBzaXplRmlsZVBhdGggPSBDYWNoZXM6OmNhY2hlc1NpemVG
aWxlbmFtZShkaXJlY3RvcnlQYXRoKTsKKyAgICBpZiAoYXV0byByZWNvcmRlZFNpemUgPSByZWFk
U2l6ZUZpbGUoc2l6ZUZpbGVQYXRoKSkKKyAgICAgICAgcmV0dXJuICpyZWNvcmRlZFNpemU7CisK
KyAgICByZXR1cm4gZ2V0RGlyZWN0b3J5U2l6ZShkaXJlY3RvcnlQYXRoKTsKK30KKwordm9pZCBF
bmdpbmU6OnJlcXVlc3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qg
c3BhY2VSZXF1ZXN0ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmIGNhbGxiYWNrKQoreworICAgIGlmICghbV9uZXR3b3Jr
UHJvY2VzcykKKyAgICAgICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6
RGVjaXNpb246OkRlbnkpOworCisgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIgPSBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVvdGFN
YW5hZ2VyKG1fc2Vzc2lvbklELCBvcmlnaW4pOworICAgIGlmICghc3RvcmFnZVF1b3RhTWFuYWdl
cikKKyAgICAgICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b246OkRlbnkpOworCisgICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlT25NYWlu
VGhyZWFkKHNwYWNlUmVxdWVzdGVkLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIEVuZ2luZTo6
RW5naW5lKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgTmV0d29ya1Byb2Nlc3MmIHByb2Nlc3Ms
IFN0cmluZyYmIHJvb3RQYXRoKQpAQCAtMzQxLDcgKzM5MSw3IEBAIHZvaWQgRW5naW5lOjpyZWFk
Q2FjaGVzRnJvbURpc2soY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIENhY2hl
c0NhbGxiCiAKICAgICAgICAgYXV0byYgY2FjaGVzID0gbV9jYWNoZXMuZW5zdXJlKG9yaWdpbiwg
WyZvcmlnaW4sIHRoaXNdIHsKICAgICAgICAgICAgIGF1dG8gcGF0aCA9IGNhY2hlc1Jvb3RQYXRo
KG9yaWdpbik7Ci0gICAgICAgICAgICByZXR1cm4gQ2FjaGVzOjpjcmVhdGUoKnRoaXMsIFdlYkNv
cmU6OkNsaWVudE9yaWdpbiB7IG9yaWdpbiB9LCBXVEZNb3ZlKHBhdGgpLCBtX25ldHdvcmtQcm9j
ZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmlnaW4pKTsKKyAgICAgICAg
ICAgIHJldHVybiBDYWNoZXM6OmNyZWF0ZSgqdGhpcywgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsg
b3JpZ2luIH0sIFdURk1vdmUocGF0aCkpOwogICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiAK
ICAgICAgICAgaWYgKGNhY2hlcy0+aXNJbml0aWFsaXplZCgpKSB7CkBAIC00NzMsMTIgKzUyMywx
MyBAQCB2b2lkIEVuZ2luZTo6cmVtb3ZlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogICAg
IH0pOwogfQogCi12b2lkIEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgs
IHVpbnQ2NF90IHNpemUpCit2b2lkIEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcm
IHBhdGgsIHVpbnQ2NF90IHNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKKyAgICBDb21wbGV0aW9uSGFuZGxlckNhbGxpbmdTY29wZSBjb21wbGV0
aW9uSGFuZGxlckNhbGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgaWYgKCFz
aG91bGRQZXJzaXN0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faW9RdWV1ZS0+ZGlzcGF0
Y2goW3BhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpLCBzaXplXSgpIHsKKyAgICBtX2lvUXVldWUt
PmRpc3BhdGNoKFtwYXRoID0gcGF0aC5pc29sYXRlZENvcHkoKSwgc2l6ZSwgY29tcGxldGlvbkhh
bmRsZXJDYWxsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyKV0oKSBtdXRhYmxl
IHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsU2l6ZUZpbGVMb2NrKTsKICAgICAg
ICAgYXV0byBmaWxlSGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3Rl
bTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7CiAgICAgICAgIGF1dG8gY2xvc2VGaWxlSGFuZGxlciA9
IG1ha2VTY29wZUV4aXQoWyZdIHsKQEAgLTQ4OSw2ICs1NDAsOCBAQCB2b2lkIEVuZ2luZTo6d3Jp
dGVTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90IHNpemUpCiAKICAgICAgICAg
RmlsZVN5c3RlbTo6dHJ1bmNhdGVGaWxlKGZpbGVIYW5kbGUsIDApOwogICAgICAgICBGaWxlU3lz
dGVtOjp3cml0ZVRvRmlsZShmaWxlSGFuZGxlLCBTdHJpbmc6Om51bWJlcihzaXplKS51dGY4KCku
ZGF0YSgpLCBTdHJpbmc6Om51bWJlcihzaXplKS51dGY4KCkubGVuZ3RoKCkpOworCisgICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXJDYWxsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyKV0oKSBtdXRhYmxlIHsgfSk7CiAgICAgfSk7CiB9
CiAKQEAgLTUxMyw4ICs1NjYsOCBAQCBPcHRpb25hbDx1aW50NjRfdD4gRW5naW5lOjpyZWFkU2l6
ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIGlmICghV1RGOjpjb252ZXJ0U2FmZWx5KGZp
bGVTaXplLCBieXRlc1RvUmVhZCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBWZWN0b3I8Y2hhcj4gYnVmZmVyKGJ5dGVzVG9SZWFkKTsKLSAgICBzaXplX3QgdG90YWxCeXRl
c1JlYWQgPSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRhdGEo
KSwgYnVmZmVyLnNpemUoKSk7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IGJ1ZmZlcihieXRl
c1RvUmVhZCk7CisgICAgc2l6ZV90IHRvdGFsQnl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZy
b21GaWxlKGZpbGVIYW5kbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlci5kYXRhKCkp
LCBidWZmZXIuc2l6ZSgpKTsKICAgICBpZiAodG90YWxCeXRlc1JlYWQgIT0gYnl0ZXNUb1JlYWQp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmggYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oCmluZGV4IGEzYWFh
ZjA5MDFjOTVlNjE1MDUyMTlkZDJjMWViN2Y2NTcyMGYwNTYuLjIyZWU2NmJjYTQ3NmJjZTJiY2E0
YjJkNTFkYWNlOTU0N2FkNzE3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaApAQCAtMjksNiArMjksNyBAQAog
I2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdG9y
YWdlUXVvdGFNYW5hZ2VyLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTc5LDEyICs4
MCwxNSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplUXVvdGFVc2VyKE5l
dHdvcmtQcm9jZXNzJiwgUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdp
biYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBzdGF0aWMgdWludDY0X3Qg
ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYpOworICAgIHZvaWQgcmVxdWVzdFNwYWNlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdp
biYsIHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNv
cmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJik7CisKICAgICBib29sIHNob3Vs
ZFBlcnNpc3QoKSBjb25zdCB7IHJldHVybiAhIW1faW9RdWV1ZTt9CiAKICAgICB2b2lkIHdyaXRl
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBOZXR3b3JrQ2FjaGU6OkRhdGEmJiwgV2ViQ29y
ZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKICAgICB2b2lkIHJlYWRG
aWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
TmV0d29ya0NhY2hlOjpEYXRhJiwgaW50IGVycm9yKT4mJik7CiAgICAgdm9pZCByZW1vdmVGaWxl
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwotICAgIHZvaWQgd3JpdGVTaXplRmlsZShjb25zdCBT
dHJpbmcmLCB1aW50NjRfdCBzaXplKTsKKyAgICB2b2lkIHdyaXRlU2l6ZUZpbGUoY29uc3QgU3Ry
aW5nJiwgdWludDY0X3Qgc2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICBz
dGF0aWMgT3B0aW9uYWw8dWludDY0X3Q+IHJlYWRTaXplRmlsZShjb25zdCBTdHJpbmcmKTsKIAog
ICAgIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RQYXRoOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCmluZGV4IDZmYzUzZTAzYzRkNjdhMDBmYTkxZjJi
M2ZjZmJkZDdlMTE5NjhjZTMuLjJjMDMzYzRmMGExMTIwNjZlYWYyYjc3ZTIyYjMxMGFhMmQxNGU3
YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCkBAIC00MDUsNyArNDA1LDcgQEAgdm9p
ZCBDYWNoZTo6cHV0KFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnND
YWxsYmFjayYmIGNhbGxiYWNrKQogICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpPcGVuKTsK
IAogICAgIFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb25zIG9wdGlvbnM7Ci0gICAgdWludDY0X3Qg
c3BhY2VSZXF1aXJlZCA9IDA7CisgICAgaW50NjRfdCBzcGFjZVJlcXVpcmVkID0gMDsKIAogICAg
IGZvciAoYXV0byYgcmVjb3JkIDogcmVjb3JkcykgewogICAgICAgICBhdXRvKiBzYW1lVVJMUmVj
b3JkcyA9IHJlY29yZHNGcm9tVVJMKHJlY29yZC5yZXF1ZXN0LnVybCgpKTsKQEAgLTQxNyw2ICs0
MTcsNyBAQCB2b2lkIENhY2hlOjpwdXQoVmVjdG9yPFJlY29yZD4mJiByZWNvcmRzLCBSZWNvcmRJ
ZGVudGlmaWVyc0NhbGxiYWNrJiYgY2FsbGJhY2spCiAgICAgICAgIGlmIChwb3NpdGlvbiAhPSBu
b3RGb3VuZCkKICAgICAgICAgICAgIHNwYWNlUmVxdWlyZWQgLT0gc2FtZVVSTFJlY29yZHMtPmF0
KHBvc2l0aW9uKS5zaXplOwogICAgIH0KKyAgICBzcGFjZVJlcXVpcmVkID0gc3BhY2VSZXF1aXJl
ZCA8IDA/IDAgOiBzcGFjZVJlcXVpcmVkOwogCiAgICAgbV9jYWNoZXMucmVxdWVzdFNwYWNlKHNw
YWNlUmVxdWlyZWQsIFtjYWNoZXMgPSBtYWtlUmVmKG1fY2FjaGVzKSwgaWRlbnRpZmllciA9IG1f
aWRlbnRpZmllciwgcmVjb3JkcyA9IFdURk1vdmUocmVjb3JkcyksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKE9wdGlvbmFsPERPTUNhY2hlRW5naW5lOjpFcnJvcj4mJiBlcnJvcikgbXV0
YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikgewpAQCAtNDUwLDcgKzQ1MSwxMCBAQCB2b2lkIENh
Y2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgV2ViQ29yZTo6
Q2FjaGVRdWVyeU9wdGlvbgogICAgICAgICByZXR1cm4gc2hvdWxkUmVtb3ZlOwogICAgIH0pOwog
Ci0gICAgY2FsbGJhY2soV1RGTW92ZShyZWNvcmRJZGVudGlmaWVycykpOworICAgIC8vIFRoaXMg
b3BlcmF0aW9uIHdvdWxkIGNoYW5nZSBjYWNoZXMgc2l6ZSwgc28gbWFrZSBzdXJlIGNhbGxiYWNr
IGZpbmlzaGVzIGFmdGVyIHNpemUgZmlsZSBpcyB1cGRhdGVkLgorICAgIG1fY2FjaGVzLnVwZGF0
ZVNpemVGaWxlKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZWNvcmRJZGVudGlmaWVy
cyA9IFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpXSgpIG11dGFibGUgeworICAgICAgICBjYWxs
YmFjayhXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJzKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgQ2Fj
aGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIHJlY29yZElk
ZW50aWZpZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmluZGV4IDAzYTA2MGNlZjJi
YzY3MjAxNGI3NTk2YmM1ZGE0ZWU5NDM4NjFhN2MuLmViYWNiM2MxYmZjMzYzOWRiMTFmZGFlYmRm
YjYyNjlmZWUwNWNkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKQEAgLTU2LDM2
ICs1NiwyMSBAQCBTdHJpbmcgQ2FjaGVzOjpjYWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5n
JiBjYWNoZXNSb290c1BhdGgpCiAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChjYWNoZXNSb290c1BhdGgsICJlc3RpbWF0ZWRzaXplIl9zKTsKIH0KIAotUmVm
PENhY2hlcz4gQ2FjaGVzOjpjcmVhdGUoRW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXImIHF1b3RhTWFuYWdlcikKK1JlZjxDYWNoZXM+IENhY2hlczo6Y3JlYXRlKEVuZ2luZSYg
ZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQYXRo
KQogewotICAgIGF1dG8gY2FjaGVzID0gYWRvcHRSZWYoKm5ldyBDYWNoZXMgeyBlbmdpbmUsIFdU
Rk1vdmUob3JpZ2luKSwgV1RGTW92ZShyb290UGF0aCksIHF1b3RhTWFuYWdlciB9KTsKLSAgICBx
dW90YU1hbmFnZXIuYWRkVXNlcihjYWNoZXMuZ2V0KCkpOwotICAgIHJldHVybiBjYWNoZXM7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2FjaGVzIHsgZW5naW5lLCBXVEZNb3ZlKG9yaWdpbiks
IFdURk1vdmUocm9vdFBhdGgpIH0pOwogfQogCi1DYWNoZXM6OkNhY2hlcyhFbmdpbmUmIGVuZ2lu
ZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCwgV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYgcXVvdGFNYW5hZ2VyKQorQ2FjaGVzOjpDYWNoZXMo
RW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYg
cm9vdFBhdGgpCiAgICAgOiBtX2VuZ2luZSgmZW5naW5lKQogICAgICwgbV9vcmlnaW4oV1RGTW92
ZShvcmlnaW4pKQogICAgICwgbV9yb290UGF0aChXVEZNb3ZlKHJvb3RQYXRoKSkKLSAgICAsIG1f
cXVvdGFNYW5hZ2VyKG1ha2VXZWFrUHRyKHF1b3RhTWFuYWdlcikpCiB7CiB9CiAKIENhY2hlczo6
fkNhY2hlcygpCiB7CiAgICAgQVNTRVJUKG1fcGVuZGluZ1dyaXRpbmdDYWNoZXNUb0Rpc2tDYWxs
YmFja3MuaXNFbXB0eSgpKTsKLQotICAgIGlmIChtX3F1b3RhTWFuYWdlcikKLSAgICAgICAgbV9x
dW90YU1hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotfQotCi12b2lkIENhY2hlczo6d2hlbklu
aXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKLXsKLSAgICBp
bml0aWFsaXplKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11
dGFibGUgewotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihDYWNoZVN0b3JhZ2UsICJDYWNoZXM6OmluaXRpYWxpemUgZmFpbGVkLCByZXBvcnRlZCBzcGFj
ZSB1c2VkIHdpbGwgYmUgemVybyIpOwotICAgICAgICBjYWxsYmFjaygpOwotICAgIH0pOwogfQog
CiB2b2lkIENhY2hlczo6cmV0cmlldmVPcmlnaW5Gcm9tRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
Zm9sZGVyUGF0aCwgV29ya1F1ZXVlJiBxdWV1ZSwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KE9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CkBAIC0yMDgsMTAgKzE5MywxNCBAQCB2b2lkIENhY2hlczo6aW5pdGlhbGl6ZShXZWJDb3JlOjpE
T01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiAgICAgfSk7CiB9
CiAKLXZvaWQgQ2FjaGVzOjp1cGRhdGVTaXplRmlsZSgpCit2b2lkIENhY2hlczo6dXBkYXRlU2l6
ZUZpbGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGlmIChtX2VuZ2luZSkKLSAgICAgICAgbV9lbmdpbmUtPndyaXRlU2l6ZUZpbGUoY2FjaGVz
U2l6ZUZpbGVuYW1lKG1fcm9vdFBhdGgpLCBtX3NpemUpOworICAgIGlmICghbV9lbmdpbmUpIHsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fZW5naW5lLT53cml0ZVNpemVGaWxlKGNhY2hlc1NpemVGaWxlbmFtZShtX3Jvb3RQYXRo
KSwgbV9zaXplLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgQ2FjaGVz
Ojppbml0aWFsaXplU2l6ZSgpCkBAIC0yMzIsMTMgKzIyMSwxMiBAQCB2b2lkIENhY2hlczo6aW5p
dGlhbGl6ZVNpemUoKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgICAgICAgICB1cGRhdGVTaXplRmlsZSgpOwot
Ci0gICAgICAgICAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICAgICAgYXV0byBw
ZW5kaW5nQ2FsbGJhY2tzID0gV1RGTW92ZShtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNr
cyk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogcGVuZGluZ0NhbGxiYWNrcykK
LSAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQpOwotCisgICAgICAgICAgICB1
cGRhdGVTaXplRmlsZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIG11
dGFibGUgeworICAgICAgICAgICAgICAgIG1faXNJbml0aWFsaXplZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgYXV0byBwZW5kaW5nQ2FsbGJhY2tzID0gV1RGTW92ZShtX3BlbmRpbmdJbml0aWFs
aXphdGlvbkNhbGxiYWNrcyk7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6
IHBlbmRpbmdDYWxsYmFja3MpCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVs
bG9wdCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBhdXRvIGRlY29kZWQgPSBDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKCpzdG9yYWdl
KTsKQEAgLTI3MywxMyArMjYxLDExIEBAIHZvaWQgQ2FjaGVzOjpjbGVhcihDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIG1fc3RvcmFnZS0+Y2xl
YXIoU3RyaW5nIHsgfSwgLVdhbGxUaW1lOjppbmZpbml0eSgpLCBbcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsK
LSAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPnJlc2V0U3BhY2VVc2VkKCk7CiAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgcmVzZXRTcGFjZVVzZWQo
KTsKICAgICBjbGVhclBlbmRpbmdXcml0aW5nQ2FjaGVzVG9EaXNrQ2FsbGJhY2tzKCk7CiAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKIH0KQEAgLTUyNSwxMiArNTExLDEyIEBAIHZvaWQgQ2FjaGVz
OjpyZWFkUmVjb3Jkc0xpc3QoQ2FjaGUmIGNhY2hlLCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlRy
YXZlcnNlSGFuZGxlCiAKIHZvaWQgQ2FjaGVzOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VS
ZXF1aXJlZCwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmIGNh
bGxiYWNrKQogewotICAgIGlmICghbV9xdW90YU1hbmFnZXIpIHsKKyAgICBpZiAoIW1fZW5naW5l
KSB7CiAgICAgICAgIGNhbGxiYWNrKEVycm9yOjpRdW90YUV4Y2VlZGVkKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIG1fcXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2Uoc3BhY2VSZXF1
aXJlZCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZGVjaXNpb24pIG11dGFi
bGUgeworICAgIG1fZW5naW5lLT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4sIHNwYWNlUmVxdWlyZWQs
IFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsK
ICAgICAgICAgc3dpdGNoIChkZWNpc2lvbikgewogICAgICAgICBjYXNlIFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OgogICAgICAgICAgICAgY2FsbGJhY2soRXJy
b3I6OlF1b3RhRXhjZWVkZWQpOwpAQCAtNTQ4LDcgKzUzNCw2IEBAIHZvaWQgQ2FjaGVzOjp3cml0
ZVJlY29yZChjb25zdCBDYWNoZSYgY2FjaGUsIGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNv
cmRJbmZvCiAgICAgQVNTRVJUKG1fc2l6ZSA+PSBwcmV2aW91c1JlY29yZFNpemUpOwogICAgIG1f
c2l6ZSArPSByZWNvcmRJbmZvcm1hdGlvbi5zaXplOwogICAgIG1fc2l6ZSAtPSBwcmV2aW91c1Jl
Y29yZFNpemU7Ci0gICAgdXBkYXRlU2l6ZUZpbGUoKTsKIAogICAgIGlmICghc2hvdWxkUGVyc2lz
dCgpKSB7CiAgICAgICAgIG1fdm9sYXRpbGVTdG9yYWdlLnNldChyZWNvcmRJbmZvcm1hdGlvbi5r
ZXksIFdURk1vdmUocmVjb3JkKSk7CkBAIC01NTYsMTMgKzU0MSwxNSBAQCB2b2lkIENhY2hlczo6
d3JpdGVSZWNvcmQoY29uc3QgQ2FjaGUmIGNhY2hlLCBjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYg
cmVjb3JkSW5mbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zdG9yYWdlLT5zdG9y
ZShDYWNoZTo6ZW5jb2RlKHJlY29yZEluZm9ybWF0aW9uLCByZWNvcmQpLCB7IH0sIFtwcm90ZWN0
ZWRTdG9yYWdlID0gbWFrZVJlZigqbV9zdG9yYWdlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKV0oaW50IGVycm9yKSBtdXRhYmxlIHsKKyAgICBtX3N0b3JhZ2UtPnN0b3JlKENhY2hlOjpl
bmNvZGUocmVjb3JkSW5mb3JtYXRpb24sIHJlY29yZCksIHsgfSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1fc3RvcmFn
ZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGludCBlcnJvcikgbXV0YWJsZSB7CiAg
ICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoQ2FjaGVT
dG9yYWdlLCAiQ2FjaGVzOjp3cml0ZVJlY29yZCBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIGVycm9y
KTsKICAgICAgICAgICAgIGNhbGxiYWNrKEVycm9yOjpXcml0ZURpc2spOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9wdCk7CisgICAg
ICAgIHVwZGF0ZVNpemVGaWxlKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFi
bGUgeworICAgICAgICAgICAgY2FsbGJhY2soV1RGOjpudWxsb3B0KTsKKyAgICAgICAgfSk7CiAg
ICAgfSk7CiB9CiAKQEAgLTYwNSw3ICs1OTIsNyBAQCB2b2lkIENhY2hlczo6cmVtb3ZlUmVjb3Jk
KGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmQpCiAKICAgICBBU1NFUlQobV9zaXplID49
IHJlY29yZC5zaXplKTsKICAgICBtX3NpemUgLT0gcmVjb3JkLnNpemU7Ci0gICAgdXBkYXRlU2l6
ZUZpbGUoKTsKKyAgICB1cGRhdGVTaXplRmlsZShbXSB7IH0pOwogCiAgICAgcmVtb3ZlQ2FjaGVF
bnRyeShyZWNvcmQua2V5KTsKIH0KQEAgLTYyMSwxNyArNjA4LDYgQEAgdm9pZCBDYWNoZXM6OnJl
bW92ZUNhY2hlRW50cnkoY29uc3QgTmV0d29ya0NhY2hlOjpLZXkmIGtleSkKICAgICBtX3N0b3Jh
Z2UtPnJlbW92ZShrZXkpOwogfQogCi12b2lkIENhY2hlczo6cmVzZXRTcGFjZVVzZWQoKQotewot
ICAgIG1fc2l6ZSA9IDA7Ci0gICAgdXBkYXRlU2l6ZUZpbGUoKTsKLQotICAgIGlmIChtX3F1b3Rh
TWFuYWdlcikgewotICAgICAgICBtX3F1b3RhTWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci0g
ICAgICAgIG1fcXVvdGFNYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKLSAgICB9Ci19Ci0KIHZvaWQg
Q2FjaGVzOjpjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCkKIHsKICAgICBtYWtlRGlydHkoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGVzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCmluZGV4IDAzMjMxZjNhOWIwNTc2NzJkNjMxYmI5NmU2
N2E2ZWI5OWUxZDdjYmIuLjVkMzk0YTBlNDg4NTdiMDI1Y2FhNDgzNGFkMjZiZTg0N2RkOWY1NTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGVzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUg
IkNhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFn
ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9TdG9yYWdlUXVvdGFVc2VyLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+
CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAKQEAgLTQyLDEwICs0MSwxMCBAQCBuYW1lc3BhY2Ug
Q2FjaGVTdG9yYWdlIHsKIAogY2xhc3MgRW5naW5lOwogCi1jbGFzcyBDYWNoZXMgZmluYWwgOiBw
dWJsaWMgUmVmQ291bnRlZDxDYWNoZXM+LCBwcml2YXRlIFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVz
ZXIgeworY2xhc3MgQ2FjaGVzIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FjaGVzPiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFN0cmluZyBjYWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5n
Jik7Ci0gICAgc3RhdGljIFJlZjxDYWNoZXM+IGNyZWF0ZShFbmdpbmUmLCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXImKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNhY2hlc1NpemVGaWxlbmFtZShjb25zdCBTdHJpbmcm
IGNhY2hlc1Jvb3RzUGF0aCk7CisgICAgc3RhdGljIFJlZjxDYWNoZXM+IGNyZWF0ZShFbmdpbmUm
LCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgpOwogICAgIH5DYWNo
ZXMoKTsKIAogICAgIHN0YXRpYyB2b2lkIHJldHJpZXZlT3JpZ2luRnJvbURpcmVjdG9yeShjb25z
dCBTdHJpbmcmIGZvbGRlclBhdGgsIFdvcmtRdWV1ZSYsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8
dm9pZChPcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+JiYpPiYmKTsKQEAgLTc5LDIyICs3
OCwxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKFdURjo6Q29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKLSAgICB2
b2lkIHJlc2V0U3BhY2VVc2VkKCk7CiAKICAgICB1aW50NjRfdCBzdG9yYWdlU2l6ZSgpIGNvbnN0
OworICAgIHZvaWQgdXBkYXRlU2l6ZUZpbGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
IAogcHJpdmF0ZToKLSAgICBDYWNoZXMoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYs
IFN0cmluZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJik7Ci0KLSAg
ICAvLyBTdG9yYWdlUXVvdGFVc2VyIEFQSS4KLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBDYWNoZXMoRW5naW5lJiwgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJiYsIFN0cmluZyYmIHJvb3RQYXRoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6
ZVNpemUoKTsKICAgICB2b2lkIHJlYWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZvaWQo
RXhwZWN0ZWQ8VmVjdG9yPENhY2hlPiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYm
KT4mJik7CiAgICAgdm9pZCB3cml0ZUNhY2hlc1RvRGlzayhXZWJDb3JlOjpET01DYWNoZUVuZ2lu
ZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwogCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKLQogICAgIHZvaWQgc3RvcmVPcmlnaW4o
V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKICAgICBzdGF0
aWMgT3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiByZWFkT3JpZ2luKGNvbnN0IE5ldHdv
cmtDYWNoZTo6RGF0YSYpOwogCkBAIC0xMDYsOCArMTAwLDYgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgaGFzQWN0aXZlQ2FjaGUoKSBjb25zdDsKIAotICAgIHZvaWQgdXBkYXRlU2l6ZUZpbGUoKTsK
LQogICAgIGJvb2wgbV9pc0luaXRpYWxpemVkIHsgZmFsc2UgfTsKICAgICBFbmdpbmUqIG1fZW5n
aW5lIHsgbnVsbHB0ciB9OwogICAgIHVpbnQ2NF90IG1fdXBkYXRlQ291bnRlciB7IDAgfTsKQEAg
LTEyMiw3ICsxMTQsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJDb3JlOjpET01DYWNoZUVu
Z2luZTo6Q29tcGxldGlvbkNhbGxiYWNrPiBtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNr
czsKICAgICBib29sIG1faXNXcml0aW5nQ2FjaGVzVG9EaXNrIHsgZmFsc2UgfTsKICAgICBEZXF1
ZTxDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5l
OjpFcnJvcj4pPj4gbV9wZW5kaW5nV3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrczsKLSAgICBX
ZWFrUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+IG1fcXVvdGFNYW5hZ2VyOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggYzBmY2Y5YzVmNjAwYWE1
YWMxMTYzZTQ3YTRiMjZkYWM0MjA2NWFhOS4uNmQwYzEyOWE3NDA1MTBkMzg2OTczNzA1YWQwOTJl
ZjEzMmNjMDc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmNwcApAQCAtNTUsNiArNTUsOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogCiAgICAg
ZW5jb2RlciA8PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPDwgbG9jYWxTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlOwogCisgICAgZW5jb2RlciA8PCBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnkg
PDwgY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworCiAgICAgZW5jb2RlciA8
PCBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7CiAgICAgZW5jb2RlciA8PCBwZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhOwogfQpAQCAtMTQxLDYgKzE0MywxOCBAQCBPcHRpb25hbDxXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZShJ
UEM6OkRlYwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMubG9j
YWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqbG9jYWxTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIAorICAgIE9wdGlvbmFsPFN0cmluZz4gY2FjaGVT
dG9yYWdlRGlyZWN0b3J5OworICAgIGRlY29kZXIgPj4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5Owor
ICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZSgqY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5KTsKKworICAgIE9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZT4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGRlY29kZXIg
Pj4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGlmICghY2FjaGVT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
ID0gV1RGTW92ZSgqY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKwogICAg
IE9wdGlvbmFsPHVpbnQ2NF90PiBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7CiAgICAgZGVjb2RlciA+
PiBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7CiAgICAgaWYgKCFwZXJPcmlnaW5TdG9yYWdlUXVvdGEp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
aAppbmRleCAwOTVmMDlkNmFmOTNmOTEzZWJiMjlmNzAyNjdhZTljMWI3NGJlODhlLi5mMjdkZjQ4
OTgwOWYzMTk2MDhiNjgwY2IyYThhMWMxNGI3MDE4NDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKQEAgLTcxLDYgKzcxLDkgQEAg
c3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKICAgICBTdHJpbmcgbG9jYWxTdG9y
YWdlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBsb2NhbFN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CiAKKyAgICBTdHJpbmcgY2FjaGVTdG9yYWdlRGlyZWN0
b3J5OworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGU7CisKICAgICB1aW50NjRfdCBwZXJPcmlnaW5TdG9yYWdlUXVvdGEgeyBX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSB9OwogICAgIHVpbnQ2
NF90IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgeyBXZWJDb3JlOjpTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkgfTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRleCBmYWY4YTUyOGVhMjMwOWFiZmFl
MTc3YmRlZWFiMjdjNWQ1ZjA3MzI5Li45ZWE4OWZiNWJkODAzMDhhNDg1OTgxNjMwMDUxYjExMThm
MWI4NDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAK
QEAgLTY3MiwzICs2NzIsOCBAQCB2b2lkIFdLQ29udGV4dFNldFVzZVNlcGFyYXRlU2VydmljZVdv
cmtlclByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdQogewogICAgIFdlYktp
dDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRVc2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNz
KHVzZVNlcGFyYXRlU2VydmljZVdvcmtlclByb2Nlc3MpOwogfQorCit2b2lkIFdLQ29udGV4dFJl
c2V0UXVvdGEoV0tDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29u
dGV4dCktPnJlc2V0UXVvdGEoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCA3MjNiNWU0N2U2ZTZhYmM2NjQyZGViZTg0YWNj
ZGUxZmE1NjhjNzkwLi4xZDcyYTAwYThkZWFiNDBkMDE0Y2YxNDEzMWU4YjhhMTgyODVkNDU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5o
CkBAIC0xMjYsNiArMTI2LDggQEAgV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0Q2xlYXJMZWdhY3lQ
cml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoV0tDb250ZXh0UmVmIGNvbnQKIAogV0tfRVhQT1JU
IHZvaWQgV0tDb250ZXh0U2V0VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRl
eHRSZWYgY29udGV4dCwgYm9vbCBmb3JjZVNlcnZpY2VXb3JrZXJQcm9jZXNzKTsKIAorV0tfRVhQ
T1JUIHZvaWQgV0tDb250ZXh0UmVzZXRRdW90YShXS0NvbnRleHRSZWYpOworCiAjaWZkZWYgX19j
cGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAppbmRleCA3MmNlNDI1NmJhYWUwN2M5MmVmY2Q0
OThlMTMyMDZiYTI5OTQzYjVhLi43MzFlY2FiZWY4MTcyYWQzZjZmMjYyM2UzMTJmZGM5OTBmNmU3
ZWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuaApAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nl
c3NQcm9tcHRXYXNTaG93biA6IGJvb2w7CiBlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NXYXNHcmFu
dGVkIDogYm9vbDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogc3RydWN0IFNlY3VyaXR5T3JpZ2lu
RGF0YTsKK3N0cnVjdCBDbGllbnRPcmlnaW47CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IDZiNThlNzc2ODc3
Yjg4ZGQ3YzZkNWE2MTc3ODRlYTBhNTJlZjUyZDcuLjY3NGE2MmM2OTcyMWU5NTNkMzA3Y2MzZjlk
OTJhMTY5ZWE0Njg3ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHAKQEAgLTU1Miw2ICs1NTIsMTMgQEAgTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vz
c1Bvb2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGgKICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9y
eSA9IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAKKyAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0
ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkg
OiBudWxsU3RyaW5nKCk7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgp
KSB7CisgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVT
dG9yYWdlRGlyZWN0b3J5ID0gY2FjaGVTdG9yYWdlRGlyZWN0b3J5OworICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3Rv
cmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgfQorCisKICAgICBpZiAobV93ZWJz
aXRlRGF0YVN0b3JlKQogICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnkoKTsKICAgICBpZiAocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eS5pc0VtcHR5KCkpCkBAIC0xNzEzLDYgKzE3MjAsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQogICAgIG1fbmV0d29ya1Byb2Nlc3MgPSBudWxscHRy
OwogfQogCit2b2lkIFdlYlByb2Nlc3NQb29sOjpyZXNldFF1b3RhKCkKK3sKKyAgICBpZiAoIW1f
bmV0d29ya1Byb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFF1b3RhKCksIDApOworfQorCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50
bHlGb3JUZXN0aW5nKCkKIHsKICAgICBpZiAobV9uZXR3b3JrUHJvY2VzcykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IDQ5NjM4YTQ5YWE0ZmU3NTNjNjhlYzQz
ZGQzZTczYWUzZDliZjIxZTkuLmVhYTg0NzNmZWE2MTliMzkwZjRhZjVkMmM3MWRmNzRhZWU2OGMx
MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtNTMwLDYg
KzUzMCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVzZVNlcGFyYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoYm9vbCk7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzOyB9CiAKKyAg
ICB2b2lkIHJlc2V0UXVvdGEoKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlh
bGl6ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KaW5kZXggMGZmM2Vh
MDk2MzFiNTc3ZDFlYTc5MDgyNWUzMDVlZTkzMjNmYmRjNy4uMDcxOTllY2FjZGNiNDc2NDkwNzQz
MzI4ZTk4OWNiYWM1YmFiNGNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5t
bQpAQCAtMTkxLDYgKzE5MSwxMCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRl
RGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICAgICBpZiAoIXBhcmFtZXRlcnMubG9jYWxTdG9yYWdl
RGlyZWN0b3J5LmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKKyAg
ICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IGNhY2hlU3RvcmFnZURpcmVjdG9y
eSgpOworICAgIGlmICghcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgp
KQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJl
Y3RvcnkocGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY2FjaGVT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKwogICAgIHBhcmFtZXRlcnMucGVyT3Jp
Z2luU3RvcmFnZVF1b3RhID0gcGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7CiAgICAgcGFyYW1ldGVy
cy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gcGVyVGhpcmRQYXJ0eU9yaWdpblN0
b3JhZ2VRdW90YSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IGJiOTg0MTY2NDU0YjU2YWVhNGM4
ZGJkNDg1YjcyMTQwMGJiMTg2Y2EuLjRiMjdkZmI0ZjMzMjQ2MTIzNTk1NjNhODdjNDg0OTFhZDRk
ZjUxZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0yMDgzLDYgKzIwODMsMTIgQEAgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2Nh
bFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKICAgICB9CiAKKyAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IHRo
aXMtPmNhY2hlU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0
b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eSA9IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFy
YW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIH0KKwog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5ID0gcmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKICAgICBp
ZiAoIXBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkMDA5MTJkZjRi
NDc0ZjVhMDE1MmYyZWMwM2U5OTVkNWJkNDkwZGY1Li4wYWYwMWZkZjE0NjZiMjdmZDk3NTMxNGI2
M2M2NTc2NTBhOGYyZTRhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTktMTEtMTMgIFNpaHVpIExpdSAgPHNpaHVp
X2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jvc3MtdGhyZWFkIHZlcnNpb24gU3RvcmFnZVF1
b3RhTWFuYWdlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjAzOTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFu
YWdlci5jcHA6IFJlbW92ZWQuIFRoaXMgdW5pdCB0ZXN0IHdhcyB1c2VkIHRvIG1ha2Ugc3VyZSB0
aGUgc3RhdGUgCisgICAgICAgIGNoYW5nZSBpbnNpZGUgU3RvcmFnZVF1b3RhTWFuYWdlciBpcyBj
b3JyZWN0LiBTaW5jZSB3ZSBoYXZlIGNoYW5nZWQgb3VyIGltcGxlbWVudGF0aW9uLCB0aGUgdGVz
dCBpcyBub3QgbmVlZGVkLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHA6IFJlc2V0IFN0b3JhZ2VRdW90YU1hbmFnZXIncyBxdW90YSB2YWx1ZSBiZXR3ZWVu
IHRlc3RzLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lz
dGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFF1b3RhKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisKIDIwMTktMTEt
MTMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFRha2Ugc2Vy
dmljZSB3b3JrZXIgYXNzZXJ0aW9ucyBiYXNlZCBvbiBjbGllbnQgcHJvY2Vzc2VzIGFzc2VydGlv
biBzdGF0ZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTMyYjg1ZTQyZGMxZjE5MjViN2Nm
ZDhhOWI5MzNlYjcyMWQxYWNlYy4uYTcwZTE0NjQ0YzEzODdjNGQ3ZDg1MDdmNjhiMjJlMGMxZTEy
MTcxYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTczNCw3ICs3MzQsNiBAQAogCQk5Mzk5
QkEwNjIzNzExMTRGMDA4MzkyQkYgLyogSW5kZXhlZERCTm90SW5QYWdlQ2FjaGUuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk5QkEw
MzIzNzExMEJGMDA4MzkyQkYgLyogSW5kZXhlZERCTm90SW5QYWdlQ2FjaGUuaHRtbCAqLzsgfTsK
IAkJOTNBRjRFQ0UxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dEZvckltYWdlc19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNBRjRFQ0QxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwICovOyB9OwogCQk5M0FGNEVEMTE1
MDZGMTMwMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0FGNEVDRjE1MDZGMTIzMDA3RkQ1
N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCAqLzsgfTsKLQkJOTNCNjIwNTQyMzRFQTYyQzAwRDQ5
Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNjIwNTMyMzRFQTMyQjAwRDQ5Qjk3IC8qIFN0b3JhZ2VR
dW90YU1hbmFnZXIuY3BwICovOyB9OwogCQk5M0NGQTg2NzFDRUI5RTM4MDAwNTY1QTggLyogYXV0
b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQ0ZBODY2MUNFQjlERTEwMDA1NjVBOCAvKiBhdXRvZm9j
dXNlZC10ZXh0LWlucHV0Lmh0bWwgKi87IH07CiAJCTkzRDExOUZDMjJDNjgwRjcwMDlCRTNDNyAv
KiBsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRDExOUZCMjJDNTcxMTIwMDlC
RTNDNyAvKiBsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sICovOyB9OwogCQk5
M0UyQzU1NTFGRDMyMDQxMDBFMURGNkEgLyogTGluZUVuZGluZy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0UyQzU1NDFGRDMyMDQxMDBFMURGNkEg
LyogTGluZUVuZGluZy5jcHAgKi87IH07CkBAIC0yMTM4LDcgKzIxMzcsNiBAQAogCQk5M0FGNEVD
QTE1MDZGMDM1MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1h
Z2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ld0ZpcnN0Vmlz
dWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzQUY0RUNEMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FGNEVDRjE1MDZGMTIzMDA3RkQ1
N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJs
b3RzLW9mLWltYWdlcy5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTNCNjIw
NTMyMzRFQTMyQjAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVF1b3RhTWFuYWdlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0ZBODY2MUNFQjlERTEwMDA1NjVBOCAvKiBhdXRv
Zm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiYXV0
b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTNDRkE4NjgxQ0VCQ0ZFRDAwMDU2NUE4IC8qIENhbmRpZGF0ZVRlc3RzLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2FuZGlkYXRlVGVzdHMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDExOUZCMjJDNTcxMTIwMDlCRTNDNyAvKiBsb2NhbHN0
b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRo
ID0gImxvY2Fsc3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwiOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzExMCw3ICszMTA4LDYgQEAKIAkJCQk0MTk3M0I1QzFBRjIyODc1
MDA2QzdCMzYgLyogU2hhcmVkQnVmZmVyLmNwcCAqLywKIAkJCQlBMTc5OTE4OTFFMUNBMjQxMDBB
NTA1RUQgLyogU2hhcmVkQnVmZmVyVGVzdC5jcHAgKi8sCiAJCQkJQTE3OTkxOEExRTFDQTI0MTAw
QTUwNUVEIC8qIFNoYXJlZEJ1ZmZlclRlc3QuaCAqLywKLQkJCQk5M0I2MjA1MzIzNEVBMzJCMDBE
NDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8sCiAJCQkJRUNBNjgwQ0QxRTY4Q0Mw
OTAwNzMxRDIwIC8qIFN0cmluZ1V0aWxpdGllcy5tbSAqLywKIAkJCQlDRTRENURFNTFGNjc0M0JB
MDA3MkNGQzYgLyogU3RyaW5nV2l0aERpcmVjdGlvbi5jcHAgKi8sCiAJCQkJOTNBMjU4OTgxRjky
RkYxNTAwM0U1MTBDIC8qIFRleHRDb2RlYy5jcHAgKi8sCkBAIC00ODQ2LDcgKzQ4NDMsNiBAQAog
CQkJCTdDQ0U3RUNGMUE0MTFBN0UwMDQ0N0M0QyAvKiBTdG9wTG9hZGluZ0Zyb21EaWRSZWNlaXZl
UmVzcG9uc2UubW0gaW4gU291cmNlcyAqLywKIAkJCQlDREMwOTMyRTIxQzk5MzQ0MDAzMEM0QjAg
LyogU3RvcFN1c3BlbmRSZXN1bWVBbGxNZWRpYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQxNEFE
Njg2MjI4NUQxQzAwMDc3N0YyRCAvKiBTdG9yYWdlUXVvdGEubW0gaW4gU291cmNlcyAqLywKLQkJ
CQk5M0I2MjA1NDIzNEVBNjJDMDBENDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTVCRTE3MTFENDI4RTRCMDBERDdDNjggLyogU3RvcmVCbG9iVGhl
bkRlbGV0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUQwMUE0MTFBN0UwMDQ0N0M0QyAv
KiBTdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTdDQ0U3RUQxMUE0MTFBN0UwMDQ0N0M0QyAvKiBTdHJpbmdUcnVuY2F0b3IubW0gaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYWQxYzY3YmYwNTJmN2IwYTM0NTNkMDU0ZjI1MjkxOTFlZWYzZjE3Mi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MDMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1N0b3JhZ2VRdW90YVVzZXIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKLQotc3RhdGljIGNvbnN0IGludCBkZWZhdWx0UXVvdGEg
PSAxICogS0I7Ci0KLWNsYXNzIE1vY2tRdW90YVVzZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6
U3RvcmFnZVF1b3RhVXNlciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgTW9ja1F1b3RhVXNlcihT
dG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5hZ2VyKQotICAgICAgICA6IG1fbWFuYWdlcigmbWFuYWdl
cikKLSAgICB7Ci0gICAgICAgIG1hbmFnZXIuYWRkVXNlcigqdGhpcyk7Ci0gICAgfQotCi0gICAg
dm9pZCBzZXRTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKSB7IG1fc3BhY2VVc2VkID0gc3Bh
Y2VVc2VkOyB9Ci0KLXByaXZhdGU6Ci0gICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgZmlu
YWwKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NwYWNlVXNlZDsKLSAgICB9Ci0KLSAgICB2b2lk
IHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIGZp
bmFsCi0gICAgewotICAgICAgICBpZiAoIW1fc3BhY2VVc2VkKQotICAgICAgICAgICAgQVNTRVJU
X0VRKG1fbWFuYWdlci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6OlVuaW5p
dGlhbGl6ZWQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlRfRVEobV9tYW5hZ2Vy
LT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6Q29tcHV0aW5nU3BhY2VVc2Vk
KTsKLQotICAgICAgICAvLyBSZXNldCB1c2FnZSB0byBtb2NrIGRlbGV0aW9uLgotICAgICAgICBt
X3NwYWNlVXNlZCA9IDA7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgfQotCi0gICAgdWludDY0
X3QgbV9zcGFjZVVzZWQgeyAwIH07Ci0gICAgU3RvcmFnZVF1b3RhTWFuYWdlciogbV9tYW5hZ2Vy
OwotfTsKLSAgICAKLVRFU1QoU3RvcmFnZVF1b3RhTWFuYWdlclRlc3QsIEJhc2ljKQotewotICAg
IFN0b3JhZ2VRdW90YU1hbmFnZXIqIHN0b3JhZ2VRdW90YU1hbmFnZXJQdHIgPSBudWxscHRyOwot
ICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIgc3RvcmFnZVF1b3RhTWFuYWdlcihkZWZhdWx0UXVvdGEs
IFsmc3RvcmFnZVF1b3RhTWFuYWdlclB0cl0odWludDY0X3QgcXVvdGEsIHVpbnQ2NF90IGN1cnJl
bnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChP
cHRpb25hbDx1aW50NjRfdD4pPiYmIGNvbXBsZXRpb25IYW5sZGVyKSB7Ci0gICAgICAgIEFTU0VS
VF9UUlVFKHN0b3JhZ2VRdW90YU1hbmFnZXJQdHIpOwotICAgICAgICBBU1NFUlRfRVEoc3RvcmFn
ZVF1b3RhTWFuYWdlclB0ci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6Oldh
aXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIEFsbG93IGFsbCBz
cGFjZSBpbmNyZWFzZSByZXF1ZXN0cy4KLSAgICAgICAgY29tcGxldGlvbkhhbmxkZXIoc3BhY2VJ
bmNyZWFzZSArIGN1cnJlbnRTcGFjZSk7Ci0gICAgfSk7Ci0gICAgc3RvcmFnZVF1b3RhTWFuYWdl
clB0ciA9ICZzdG9yYWdlUXVvdGFNYW5hZ2VyOwotCi0KLSAgICBNb2NrUXVvdGFVc2VyIG1vY2tV
c2VyKHN0b3JhZ2VRdW90YU1hbmFnZXIpOwotCi0gICAgLy8gR3JhbnQgZGlyZWN0bHkuCi0gICAg
c3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2UoMC4xICogS0IsIFsmXShXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNpc2lvbikgewotICAgICAgICBBU1NFUlRf
RVEoZGVjaXNpb24sIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFu
dCk7Ci0gICAgICAgIG1vY2tVc2VyLnNldFNwYWNlVXNlZCgwLjEgKiBLQik7Ci0gICAgfSk7Ci0K
LSAgICAvLyBHcmFudCBhZnRlciBjb21wdXRpbmcgYWNjdXJhdGUgdXNhZ2UuCi0gICAgc3RvcmFn
ZVF1b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2UoMS4wICogS0IsIFsmXShXZWJDb3JlOjpTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNpc2lvbikgewotICAgICAgICBBU1NFUlRfRVEoZGVj
aXNpb24sIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudCk7Ci0g
ICAgICAgIG1vY2tVc2VyLnNldFNwYWNlVXNlZCgxLjAgKiBLQik7Ci0gICAgfSk7Ci0KLSAgICAv
LyBHcmFudCBhZnRlciBjb21wdXRpbmcgYWNjdXJhdGUgdXNhZ2UgYW5kIHJlcXVlc3Rpbmcgc3Bh
Y2UgaW5jcmVhc2UuCi0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2UoMTAgKiBL
QiwgWyZdKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIGRlY2lzaW9uKSB7
Ci0gICAgICAgIEFTU0VSVF9FUShzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyLT5zdGF0ZSgpLCBTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0KTsKLSAgICAg
ICAgQVNTRVJUX0VRKGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNp
c2lvbjo6R3JhbnQpOwotICAgIH0pOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDhhMDczMjU2
NTNmNDI3YWM2ZDIyNmE1YTMzODI2ZWYxMDkzZjhiNDIuLjMwNzg4Y2EzNzc1MGIzN2YyOGFhN2Zk
OGNkZTdhNjdiODE0MGMzZDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwCkBAIC05ODEsNiArOTgxLDggQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKICAgICBj
bGVhclNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zKCk7CiAgICAgY2xlYXJET01DYWNoZXMoKTsK
IAorICAgIHJlc2V0UXVvdGEoKTsKKwogICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRp
ZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwog
CiAgICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CkBAIC0yOTkzLDYgKzI5OTUsMTEgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6dGVybWluYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKQogICAg
IFdLQ29udGV4dFRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKHBsYXRmb3JtQ29udGV4dCgp
KTsKIH0KIAordm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRRdW90YSgpCit7CisgICAgV0tDb250
ZXh0UmVzZXRRdW90YShwbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKICNpZiAhUExBVEZPUk0oQ09D
T0EpCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVdpbGxSdW5UZXN0KGNvbnN0IFRlc3RJ
bnZvY2F0aW9uJikKIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRl
eCBlZDE2OWVhMmMwN2Y1NTA2MTI2MTYyNjgzMDU0ZjVmNjUwYjNmNjdkLi41ZThkZDNhMDA1MTc4
M2M4ZTBmODZhMzM0YjI3Y2Q3NjZhNDg1MGQ0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oCkBAIC0yNjgsNiArMjY4LDggQEAgcHVibGljOgogICAgIHZvaWQgdGVybWlu
YXRlTmV0d29ya1Byb2Nlc3MoKTsKICAgICB2b2lkIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJQcm9j
ZXNzKCk7CiAKKyAgICB2b2lkIHJlc2V0UXVvdGEoKTsKKwogICAgIHZvaWQgcmVtb3ZlQWxsU2Vz
c2lvbkNyZWRlbnRpYWxzKCk7CiAKICAgICB2b2lkIGNsZWFySW5kZXhlZERhdGFiYXNlcygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383557</attachid>
            <date>2019-11-14 09:18:48 -0800</date>
            <delta_ts>2019-11-20 10:43:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203971-20191114091846.patch</filename>
            <type>text/plain</type>
            <size>186949</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNDMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmUwZTQ5N2QzYTYxYjEz
ZGJlMGVlOGM3YmI1ZjA2ODc1ZjJhOThlNy4uNTFhZjg4MTA4NmE0MzRlYTNmMTQwMGFkNGYwOTNm
ODE1ZGM5OThlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAxOS0xMS0xNCAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVy
c2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgYSBsb2NrLWJhc2VkIFN0b3JhZ2VRdW90YU1hbmFn
ZXIgc28gdGhhdCBxdW90YSBjaGVjayBjYW4gYmUgZG9uZSBvbiBkaWZmZXJlbnQgdGhyZWFkcy4K
KworICAgICAgICBBbHNvIGZpeCBzb21lIGJ1Z3MgcmV2ZWFsZWQgYnkgdGhpcyBwYXRjaC4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5j
bWFrZToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0
YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpyZXF1ZXN0
U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRpc2tVc2Fn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpR
dW90YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2
ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21w
dXRlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURC
U2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3BhY2VV
c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpR
dW90YVVzZXI6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjplbnN1cmVRdW90
YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5pc2hD
b21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpJREJTZXJ2ZXI6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGVjcmVhc2VTcGFj
ZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluaXRpYWxpemVRdW90YVVzZXIp
OiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZW5hbWVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6bWF5YmVV
cGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRl
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1S
ZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxl
dGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpyZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtUHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmdldEFsbFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFs
bFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6Z2V0Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aXRl
cmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRU
cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZXF1ZXN0U3BhY2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6d2FpdEZvclJlcXVlc3RTcGFj
ZUNvbXBsZXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3Jl
YXNlVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmpl
Y3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVj
ayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpjbGVhck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhBZnRlclF1
b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRl
clF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkQWZ0ZXJR
dW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnRBZnRl
clF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3JB
ZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRU
cmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6YWJvcnRU
cmFuc2FjdGlvbldpdGhvdXRDYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1
dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bjo6ZGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c3RvcmFnZVF1b3RhTWFuYWdlckdldHRlcik6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oOgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBz
dG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp0cnlHcmFudFJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dXBkYXRlUXVvdGFCYXNlZE9u
VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90
YVVwZGF0ZWRCYXNlZE9uVXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFu
YWdlcjo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
Ojp+U3RvcmFnZVF1b3RhTWFuYWdlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpzcGFjZVVzYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlh
bGl6ZVVzZXJzSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjphZGRVc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVV
c2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJl
cXVlc3RTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjphc2tGb3JNb3JlU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAg
ICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3Rh
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1h
bmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6
cmVzZXRRdW90YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpzdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVv
dGFVc2VyLmg6IFJlbW92ZWQuCisKIDIwMTktMTEtMTMgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBzb21lIFdlYkdQVSBkZW1vcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3Y2Nl
YzgwNGRkMWRlZDZkMjkwMjU4ZmNkZGY5MzZmNGY3NDM1NWFjLi45YmYzZGQ3YzI2ZTYyZGI1N2Zj
ZjgxNWZjNDMyYWU0NDIyYTU5ODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDE5LTEx
LTE0ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENyb3NzLXRo
cmVhZCB2ZXJzaW9uIFN0b3JhZ2VRdW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzk3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRh
U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVtb3Zl
U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6ZGVzdHJveVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
ZGVsZXRlV2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVs
ZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OmNyZWF0ZUlEQlNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjph
ZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OnNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRl
c3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdl
cnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVN0b3JhZ2VR
dW90YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhclN0
b3JhZ2VRdW90YSk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVF1b3RhVXNlcnMpOiBEZWxldGVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6U2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZW5zdXJlT3Jp
Z2luU3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2Vy
cyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6Y2FjaGVSb290UGF0aCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6c2V0SURCUm9vdFBhdGgpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6
OmlkYlJvb3RQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlN0
b3JhZ2VRdW90YU1hbmFnZXJzOjpkZWZhdWx0UXVvdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U3RvcmFnZVF1b3RhTWFuYWdlcnM6OnNldERlZmF1
bHRRdW90YXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U3Rv
cmFnZVF1b3RhTWFuYWdlcnM6Om1hbmFnZXJzUGVyT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OmdldERpcmVjdG9yeVNpemUpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkVuZ2luZTo6ZGlza1VzYWdlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVT
dG9yYWdlOjpFbmdpbmU6OnJlcXVlc3RTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3Rv
cmFnZTo6RW5naW5lOjpyZWFkQ2FjaGVzRnJvbURpc2spOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkVuZ2luZTo6d3JpdGVTaXplRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6RW5naW5lOjpyZWFkU2l6ZUZpbGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkVuZ2luZTo6aW5pdGlhbGl6ZVF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmg6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpwdXQpOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3Rv
cmFnZTo6Q2FjaGVzOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlczo6Q2FjaGVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6On5D
YWNoZXMpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6dXBkYXRlU2l6
ZUZpbGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6aW5pdGlhbGl6
ZVNpemUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6Y2xlYXIpOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVxdWVzdFNwYWNlKToKKyAg
ICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OndyaXRlUmVjb3JkKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlbW92ZVJlY29yZCk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjp3aGVuSW5pdGlhbGl6ZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVzZXRTcGFjZVVzZWQp
OiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlcy5oOgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9TYW5kYm94RXh0ZW5zaW9uQ29j
b2EubW06CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb25JbXBsOjpjb25zdW1lKToK
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAg
ICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRSZXNldFF1b3Rh
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cmVzZXRRdW90YSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmg6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVD
b2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKToKKwogMjAxOS0x
MS0xMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IHRpbWVyIHRvIHN0b3Agc2VydmljZSB3b3JrZXIgcHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5k
ZXggNDAyNjIzZjA5ZTc3OTBhMzY3MGE2MzkzZTBmMjMwZDY3ZmM3MGI4OS4uMDEwYjI4MWJjYmEy
NmM3ODI4ODUyNDJmNzkwMGU4Zjk0Njk4MTFiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMzc5
LDcgKzEzNzksNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
c3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgKICAgICBzdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlci5oCiAgICAgc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKLSAgICBzdG9yYWdl
L1N0b3JhZ2VRdW90YVVzZXIuaAogICAgIHN0b3JhZ2UvU3RvcmFnZVR5cGUuaAogCiAgICAgc3R5
bGUvU3R5bGVDaGFuZ2UuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCBlNjFkYjhjOTQyOGQ5ODRkYTY0Njk2ZTdj
ODQyNzg3NDI2OWMyN2U2Li4wMDgzNGJmMmVkNTU2ZTI4OTg0ZTkzY2Y3M2VjNTI0MWRhMzY0OGI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcApAQCAtNDYsMjQgKzQ2LDI0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgSURCU2VydmVyIHsKIAotUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFn
ZXJHZXR0ZXIpCitSZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0
ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCU2VydmVyKHNlc3Npb25JRCwgV1RG
TW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKSk7CiB9CiAKLVJlZjxJREJTZXJ2ZXI+IElEQlNlcnZl
cjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmIHF1b3RhTWFuYWdlckdldHRlcikK
K1JlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VRdW90YU1hbmFn
ZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSURCU2VydmVyKHNlc3Npb25JRCwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBXVEZNb3ZlKHF1
b3RhTWFuYWdlckdldHRlcikpKTsKIH0KIAotSURCU2VydmVyOjpJREJTZXJ2ZXIoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIp
CitJREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0b3JhZ2VR
dW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiAgICAgOiBDcm9zc1RocmVh
ZFRhc2tIYW5kbGVyKCJJbmRleGVkRGF0YWJhc2UgU2VydmVyIiwgQXV0b2RyYWluZWRQb29sRm9y
UnVuTG9vcDo6VXNlKQogICAgICwgbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAgICwgbV9xdW90
YU1hbmFnZXJHZXR0ZXIoV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKQogewogfQogCi1JREJT
ZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJH
ZXR0ZXIpCitJREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0
dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQogICAgIDogQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlcigi
SW5kZXhlZERhdGFiYXNlIFNlcnZlciIsIEF1dG9kcmFpbmVkUG9vbEZvclJ1bkxvb3A6OlVzZSkK
ICAgICAsIG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKICAgICAsIG1fZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoKGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKQEAgLTY4MywxNTcgKzY4MywyOCBAQCB2b2lkIElE
QlNlcnZlcjo6cGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBW
ZWN0b3I8U2VjdXJpdHlPcgogCiB2b2lkIElEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVs
ZXRlRGF0YWJhc2VzKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgZm9yIChhdXRvJiB1c2Vy
IDogbV9xdW90YVVzZXJzLnZhbHVlcygpKQotICAgICAgICB1c2VyLT5yZXNldFNwYWNlVXNlZCgp
OwotCiAgICAgYXV0byBjYWxsYmFjayA9IG1fZGVsZXRlRGF0YWJhc2VDb21wbGV0aW9uSGFuZGxl
cnMudGFrZShjYWxsYmFja0lEKTsKICAgICBBU1NFUlQoY2FsbGJhY2spOwogICAgIGNhbGxiYWNr
KCk7CiB9CiAKLUlEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90YVVzZXIoSURCU2VydmVyJiBzZXJ2
ZXIsIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1hbmFnZXIsIENsaWVudE9yaWdpbiYmIG9yaWdpbikK
LSAgICA6IG1fc2VydmVyKHNlcnZlcikKLSAgICAsIG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5h
Z2VyKSkKLSAgICAsIG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAsIG1faXNJbml0aWFs
aXplZChtX3NlcnZlci5tX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotewotICAgIGlmIChtYW5h
Z2VyKQotICAgICAgICBtYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKLX0KLQotSURCU2VydmVyOjpR
dW90YVVzZXI6On5RdW90YVVzZXIoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1f
bWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVz
ZXI6OnJlc2V0U3BhY2VVc2VkKCkKLXsKLSAgICBtX3NwYWNlVXNlZCA9IDA7Ci0KLSAgICBpZiAo
IW1fbWFuYWdlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2VydmVyLm1fc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0luaXRp
YWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1faW5pdGlhbGl6YXRpb25D
YWxsYmFjayk7Ci0KLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIC8vIERvIGFk
ZC9yZW1vdmUgdG8gdHJpZ2dlciBjYWxsIHRvIHdoZW5Jbml0aWFsaXplZC4KLSAgICBtX21hbmFn
ZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgIG1fbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7Ci19
Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmNvbXB1dGVTcGFjZVVzZWQoKQotewotICAg
IHJlc2V0U3BhY2VVc2VkKCk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluY3Jl
YXNlU3BhY2VVc2VkKHVpbnQ2NF90IHNpemUpCi17Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQp
Ci0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9zcGFjZVVzZWQgKyBzaXplID4gbV9zcGFj
ZVVzZWQpOwotICAgIG1fc3BhY2VVc2VkICs9IHNpemU7Ci19Ci12b2lkIElEQlNlcnZlcjo6UXVv
dGFVc2VyOjpkZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKQotewotICAgIGlmICghbV9p
c0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fc3BhY2VVc2VkID49
IHNpemUpOwotICAgIG1fc3BhY2VVc2VkIC09IHNpemU7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpR
dW90YVVzZXI6OndoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2spCi17Ci0gICAgaWYgKG1faXNJbml0aWFsaXplZCkgewotICAgICAgICBjYWxsYmFjaygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1faW5pdGlhbGl6YXRpb25DYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spOwotICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2Vk
Rm9yT3JpZ2luKG1fb3JpZ2luKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5p
dGlhbGl6ZVNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgQVNTRVJUKG1faXNJ
bml0aWFsaXplZCB8fCAhbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlKTsKLSAgICBtX3NwYWNlVXNl
ZCA9IHNwYWNlVXNlZDsKLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgaWYgKGF1
dG8gY2FsbGJhY2sgPSBXVEZNb3ZlKG1faW5pdGlhbGl6YXRpb25DYWxsYmFjaykpCi0gICAgICAg
IGNhbGxiYWNrKCk7Ci19Ci0KLUlEQlNlcnZlcjo6UXVvdGFVc2VyJiBJREJTZXJ2ZXI6OmVuc3Vy
ZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICByZXR1cm4gKm1f
cXVvdGFVc2Vycy5lbnN1cmUob3JpZ2luLCBbdGhpcywgJm9yaWdpbl0gewotICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxRdW90YVVzZXI+KCp0aGlzLCBtX3F1b3RhTWFuYWdlckdldHRlcihtX3Nl
c3Npb25JRCwgb3JpZ2luKSwgQ2xpZW50T3JpZ2luIHsgb3JpZ2luIH0pOwotICAgIH0pLml0ZXJh
dG9yLT52YWx1ZTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2Vk
Rm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQotewotICAgIEFTU0VSVCghbV9z
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4s
IG9yaWdpbikpOwotfQotCi12b2lkIElEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdp
bihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uIElEQlNlcnZlcjo6cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1
aW50NjRfdCB0YXNrU2l6ZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBS
ZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fcXVvdGFN
YW5hZ2VyR2V0dGVyKG9yaWdpbik7CisgICAgaWYgKCFzdG9yYWdlUXVvdGFNYW5hZ2VyKQorICAg
ICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk7CiAKLSAgICBh
dXRvIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCA9IHRoaXMtPmRhdGFiYXNlRGlyZWN0b3J5UGF0aElz
b2xhdGVkQ29weSgpOwotICAgIGF1dG8gb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRh
dGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4u
dG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsICJ2
MCIpOwotICAgIGF1dG8gbmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRhdGFiYXNlSWRl
bnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2lu
LCBvcmlnaW4uY2xpZW50T3JpZ2luLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsICJ2MSIpOwotICAg
IGF1dG8gc2l6ZSA9IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVj
dG9yeShvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKLQot
ICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJ
REJTZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbiwgb3JpZ2luLCBzaXpl
KSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmln
aW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlVXNlZCkKLXsKLSAg
ICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbml0aWFsaXplU3BhY2VVc2VkKHNwYWNlVXNlZCk7
CisgICAgcmV0dXJuIHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9uQmFja2dyb3Vu
ZFRocmVhZCh0YXNrU2l6ZSk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpyZXF1ZXN0U3BhY2UoY29u
c3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJiBjYWxsYmFjaykKK3Vp
bnQ2NF90IElEQlNlcnZlcjo6ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdERpcmVjdG9yeSwg
Y29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAgYXV0byogcXVvdGFNYW5hZ2VyID0g
ZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikubWFuYWdlcigpOwotICAgIGlmICghcXVvdGFNYW5hZ2Vy
KSB7Ci0gICAgICAgIGNhbGxiYWNrKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHF1b3RhTWFuYWdlci0+cmVxdWVzdFNw
YWNlKHRhc2tTaXplLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpy
ZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBpZiAoYXV0
byogdXNlciA9IG1fcXVvdGFVc2Vycy5nZXQob3JpZ2luKSkKLSAgICAgICAgdXNlci0+cmVzZXRT
cGFjZVVzZWQoKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OmluY3JlYXNlU3BhY2VVc2VkKGNvbnN0
IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzaXplKQotewotICAgIGVuc3VyZVF1b3Rh
VXNlcihvcmlnaW4pLmluY3JlYXNlU3BhY2VVc2VkKHNpemUpOwotfQotCi12b2lkIElEQlNlcnZl
cjo6ZGVjcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90
IHNpemUpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuZGVjcmVhc2VTcGFjZVVzZWQo
c2l6ZSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjppbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgdGFza1NpemUpCi17Ci0gICAgZW5z
dXJlUXVvdGFVc2VyKG9yaWdpbikuaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodGFza1NpemUp
OwotfQorICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi12b2lkIElEQlNlcnZlcjo6ZGVj
cmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2
NF90IHNwYWNlVXNlZCkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5kZWNyZWFzZVBv
dGVudGlhbFNwYWNlVXNlZChzcGFjZVVzZWQpOworICAgIGF1dG8gb2xkVmVyc2lvbk9yaWdpbkRp
cmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2
ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCByb290RGlyZWN0
b3J5LCAidjAiKTsKKyAgICBhdXRvIG5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRh
YmFzZUlkZW50aWZpZXI6OmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRv
cE9yaWdpbiwgb3JpZ2luLmNsaWVudE9yaWdpbiwgcm9vdERpcmVjdG9yeSwgInYxIik7CisgICAg
cmV0dXJuIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShv
bGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJh
c2VzU2l6ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKIH0KIAogdm9p
ZCBJREJTZXJ2ZXI6OnVwZ3JhZGVGaWxlc0lmTmVjZXNzYXJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCBkM2EyMjNk
OTMyZDkxNTlkNTQ2NjYyOWY3MTdlZmZiNTc3NDEzY2FmLi5iZjJiNDc4ODQ1NDY4ZjNhMzQ5NWJi
ZmU5NTJlYTkwMzcwYzM2M2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAi
SURCQ29ubmVjdGlvblRvQ2xpZW50LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VJZGVudGlmaWVy
LmgiCiAjaW5jbHVkZSAiU3RvcmFnZVF1b3RhTWFuYWdlci5oIgotI2luY2x1ZGUgIlN0b3JhZ2VR
dW90YVVzZXIuaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0
aXZpdHkuaD4KQEAgLTU4LDkgKzU3LDkgQEAgZW51bSBjbGFzcyBTaG91bGRGb3JjZVN0b3AgOiBi
b29sIHsgTm8sIFllcyB9OwogCiBjbGFzcyBJREJTZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
REJTZXJ2ZXI+LCBwdWJsaWMgQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlciwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPElEQlNlcnZlcj4gewogcHVibGljOgotICAgIHVzaW5nIFF1b3RhTWFuYWdlckdldHRl
ciA9IFdURjo6RnVuY3Rpb248U3RvcmFnZVF1b3RhTWFuYWdlciooUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IENsaWVudE9yaWdpbiYpPjsKLSAgICBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKFBB
TDo6U2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKKyAgICB1c2lu
ZyBTdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyID0gV1RGOjpGdW5jdGlvbjxSZWZQdHI8U3RvcmFn
ZVF1b3RhTWFuYWdlcj4oY29uc3QgQ2xpZW50T3JpZ2luJik+OworICAgIHN0YXRpYyBSZWY8SURC
U2VydmVyPiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIm
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6
OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VR
dW90YU1hbmFnZXJHZXR0ZXImJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZ2lzdGVy
Q29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHVucmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwpAQCAtMTEx
LDIxICsxMTAsMTUgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmRE
ZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2b2lkICgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVs
ZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYs
IEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgdm9pZCByZXF1
ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKLSAgICB2
b2lkIGluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2
NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0
IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGluY3JlYXNlU3Bh
Y2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNpemUpOwotICAgIHZvaWQgZGVj
cmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6ZSk7Ci0gICAg
dm9pZCByZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mKTsKLQotICAgIHZvaWQgaW5p
dGlhbGl6ZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikgeyBlbnN1cmVRdW90
YVVzZXIob3JpZ2luKTsgfQorICAgIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIHJlcXVl
c3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHVpbnQ2NF90IGRpc2tVc2FnZShjb25zdCBTdHJpbmcmLCBjb25z
dCBDbGllbnRPcmlnaW4mKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJ5U3RvcChTaG91
bGRGb3JjZVN0b3ApOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lKCk7CiAKIHByaXZh
dGU6Ci0gICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJik7
Ci0gICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGly
ZWN0b3J5UGF0aCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOworICAgIElEQlNlcnZlcihQQUw6OlNl
c3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlckdldHRlciYmKTsKKyAgICBJREJTZXJ2ZXIoUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdl
UXVvdGFNYW5hZ2VyR2V0dGVyJiYpOwogCiAgICAgVW5pcXVlSURCRGF0YWJhc2UmIGdldE9yQ3Jl
YXRlVW5pcXVlSURCRGF0YWJhc2UoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CiAgICAg
CkBAIC0xNDIsNTEgKzEzNSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVEYXRhYmFzZXNN
b2RpZmllZFNpbmNlRm9yVmVyc2lvbihXYWxsVGltZSwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCByZW1vdmVEYXRhYmFzZXNXaXRoT3JpZ2luc0ZvclZlcnNpb24oY29uc3QgVmVjdG9yPFNlY3Vy
aXR5T3JpZ2luRGF0YT4mLCBjb25zdCBTdHJpbmcmKTsKIAotICAgIGNsYXNzIFF1b3RhVXNlciBm
aW5hbCA6IHB1YmxpYyBTdG9yYWdlUXVvdGFVc2VyIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBRdW90YVVzZXIoSURCU2VydmVyJiwgU3Rv
cmFnZVF1b3RhTWFuYWdlciosIENsaWVudE9yaWdpbiYmKTsKLSAgICAgICAgflF1b3RhVXNlcigp
OwotCi0gICAgICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1hbmFnZXIoKSB7IHJldHVybiBtX21h
bmFnZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIHNldFNwYWNlVXNlZCh1aW50NjRfdCBzcGFj
ZVVzZWQpIHsgbV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7IH0KLSAgICAgICAgdm9pZCByZXNldFNw
YWNlVXNlZCgpOwotCi0gICAgICAgIHZvaWQgaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodWlu
dDY0X3QgaW5jcmVhc2UpIHsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlICs9IGluY3JlYXNlOyB9
Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodWludDY0X3QgZGVjcmVh
c2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2VzdGltYXRlZFNwYWNlSW5jcmVh
c2UgPj0gZGVjcmVhc2UpOwotICAgICAgICAgICAgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlIC09
IGRlY3JlYXNlOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VTcGFjZVVzZWQodWlu
dDY0X3Qgc2l6ZSk7Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VTcGFjZVVzZWQodWludDY0X3Qgc2l6
ZSk7Ci0KLSAgICAgICAgdm9pZCBpbml0aWFsaXplU3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNl
ZCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBm
aW5hbAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsKLSAg
ICAgICAgICAgIHJldHVybiBtX3NwYWNlVXNlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZTsK
LSAgICAgICAgfQotICAgICAgICB2b2lkIGNvbXB1dGVTcGFjZVVzZWQoKSBmaW5hbDsKLSAgICAg
ICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5h
bDsKLQotICAgICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwotICAgICAgICBXZWFrUHRyPFN0b3Jh
Z2VRdW90YU1hbmFnZXI+IG1fbWFuYWdlcjsKLSAgICAgICAgQ2xpZW50T3JpZ2luIG1fb3JpZ2lu
OwotICAgICAgICBib29sIG1faXNJbml0aWFsaXplZCB7IGZhbHNlIH07Ci0gICAgICAgIHVpbnQ2
NF90IG1fc3BhY2VVc2VkIHsgMCB9OwotICAgICAgICB1aW50NjRfdCBtX2VzdGltYXRlZFNwYWNl
SW5jcmVhc2UgeyAwIH07Ci0gICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gbV9pbml0
aWFsaXphdGlvbkNhbGxiYWNrOwotICAgIH07Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBRdW90YVVz
ZXImIGVuc3VyZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mKTsKLSAgICB2b2lkIHN0YXJ0
Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZv
aWQgY29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mKTsKLSAgICB2
b2lkIGZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4m
LCB1aW50NjRfdCBzcGFjZVVzZWQpOwotCiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7
CiAgICAgSGFzaE1hcDxJREJDb25uZWN0aW9uSWRlbnRpZmllciwgUmVmUHRyPElEQkNvbm5lY3Rp
b25Ub0NsaWVudD4+IG1fY29ubmVjdGlvbk1hcDsKICAgICBIYXNoTWFwPElEQkRhdGFiYXNlSWRl
bnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFVuaXF1ZUlEQkRhdGFiYXNlPj4gbV91bmlxdWVJREJE
YXRhYmFzZU1hcDsKQEAgLTE5OCw4ICsxNDYsNyBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIG1f
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoOwogCi0gICAgSGFzaE1hcDxDbGllbnRPcmlnaW4sIHN0ZDo6
dW5pcXVlX3B0cjxRdW90YVVzZXI+PiBtX3F1b3RhVXNlcnM7Ci0gICAgUXVvdGFNYW5hZ2VyR2V0
dGVyIG1fcXVvdGFNYW5hZ2VyR2V0dGVyOworICAgIFN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIg
bV9xdW90YU1hbmFnZXJHZXR0ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJ
REJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggOThjZWQ2MzcwOTFkMzYyZGUyYmRj
MTNhZGZmMjhiOWI5NTA5ZmZjNS4uOTUxOGY0ZjE4ZWU2NTVkMjdjNTk1YWNiMDllNzAzMTFkZmE0
NDExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTE5NCw2ICsxOTQs
OSBAQCBJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdAogICAgIG9iamVjdFN0b3JlLT5yZW5hbWUobmV3
TmFtZSk7CiAgICAgdHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlUmVuYW1lZCgqb2JqZWN0U3RvcmUs
IG9sZE5hbWUpOwogCisgICAgbV9vYmplY3RTdG9yZXNCeU5hbWUucmVtb3ZlKG9sZE5hbWUpOwor
ICAgIG1fb2JqZWN0U3RvcmVzQnlOYW1lLnNldChuZXdOYW1lLCBvYmplY3RTdG9yZSk7CisKICAg
ICBtX2RhdGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBuZXdOYW1lKTsKIAogICAgIHJldHVybiBJREJFcnJvciB7IH07CkBAIC00ODQsNiArNDg3LDEx
IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0
b3JOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJCiAgICAgaWYgKG5ld0tleU51bWJlciA8IG9iamVj
dFN0b3JlLT5jdXJyZW50S2V5R2VuZXJhdG9yVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIElEQkVy
cm9yIHsgfTsKIAorICAgIGlmIChuZXdLZXlOdW1iZXIgPj0gKGRvdWJsZSltYXhHZW5lcmF0ZWRL
ZXlWYWx1ZSkgeworICAgICAgICBvYmplY3RTdG9yZS0+c2V0S2V5R2VuZXJhdG9yVmFsdWUobWF4
R2VuZXJhdGVkS2V5VmFsdWUgKyAxKTsKKyAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAg
ICB9CisKICAgICB1aW50NjRfdCBuZXdLZXlJbnRlZ2VyKG5ld0tleU51bWJlcik7CiAgICAgaWYg
KG5ld0tleUludGVnZXIgPD0gdWludDY0X3QobmV3S2V5TnVtYmVyKSkKICAgICAgICAgKytuZXdL
ZXlJbnRlZ2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggZmRlZGE2MzVlYjdkYzA1
ZjdmZjdlMDU4MmNjNDkyZjBjMmQ4MzJiYi4uMjc2NzIyODE3OWM1YzljODExZTZjYzIzMGQxZTM2
OGQ4ZmUxY2QyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0xODYsNTYgKzE4Niw2
IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIHF1b3RhRXJyb3JNZXNzYWdlTmFtZShjb25zdCBjaGFy
KiB0YXNrTmFtZSkKICAgICByZXR1cm4gbWFrZVN0cmluZygiRmFpbGVkIHRvICIsIHRhc2tOYW1l
LCAiIGluIGRhdGFiYXNlIGJlY2F1c2Ugbm90IGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIik7CiB9
CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlcXVlc3RTcGFjZShVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0IGNoYXIq
IHRhc2tOYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElEQkVycm9yJiYpPiYmIGNhbGxiYWNr
KQotewotICAgIG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0
YXNrU2l6ZSwgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHRoaXMsIHdlYWtUcmFuc2Fj
dGlvbiA9IG1ha2VXZWFrUHRyKHRyYW5zYWN0aW9uKSwgdGFza05hbWUsIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgewotICAgICAgICBpZiAoIXdl
YWtUaGlzKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJvciB9
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghd2Vha1Ry
YW5zYWN0aW9uKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJv
ciB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9vd25p
bmdQb2ludGVyRm9yQ2xvc2UpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBjbG9zaW5nIHRoZSBk
YXRhYmFzZSwgdGhlcmUgaXMgbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIG1vZGlmeSB0aGUgZGF0YWJh
c2UgYXQgdGhhdCBwb2ludC4KLSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgVW5rbm93
bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dp
dGNoIChkZWNpc2lvbikgewotICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uOjpEZW55OgotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVk
RXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSh0YXNrTmFtZSkgfSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50
OgotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyB9KTsKLSAgICAgICAgfTsKLSAgICB9
KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBs
ZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYgY2FsbGJhY2spCi17Ci0gICAgcmVxdWVzdFNw
YWNlKHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92ZShjYWxsYmFjaykpOwotfQotCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZp
ZXIsIHVpbnQ2NF90IHRhc2tTaXplKQotewotICAgIG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlh
bFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplKTsKLSAgICBBU1NFUlQo
IW1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5jb250YWlucyhpZGVudGlmaWVyKSk7Ci0gICAg
bV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmFkZChpZGVudGlmaWVyLCB0YXNrU2l6ZSk7Ci19
Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2
NF90IGlkZW50aWZpZXIsIGJvb2wgaXNUYXNrU3VjY2Vzc2Z1bCkKLXsKLSAgICBhdXRvIGl0ZXJh
dG9yID0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmZpbmQoaWRlbnRpZmllcik7Ci0gICAg
QVNTRVJUKGl0ZXJhdG9yICE9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5lbmQoKSk7Ci0g
ICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmln
aW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBpZiAoaXNUYXNrU3VjY2Vzc2Z1bCkKLSAgICAg
ICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRl
cmF0b3ItPnZhbHVlKTsKLSAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MucmVtb3ZlKGl0
ZXJhdG9yKTsKLX0KLQogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVu
T3BlcmF0aW9uKCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24gKCVwKSIsIHRoaXMpOwpAQCAtMjQ2LDI5
ICsxOTYsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVy
YXRpb24oKQogICAgIGlmICghbV9kYXRhYmFzZUluZm8pIHsKICAgICAgICAgaWYgKCFtX2lzT3Bl
bmluZ0JhY2tpbmdTdG9yZSkgewogICAgICAgICAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUg
PSB0cnVlOwotICAgICAgICAgICAgLy8gV2UgZG8gbm90IGtub3cgd2hldGhlciB0aGlzIGlzIGFu
IGV4aXN0aW5nIG9yIGEgbmV3IGRhdGFiYXNlLgotICAgICAgICAgICAgLy8gV2Ugc2V0IGEgc21h
bGwgY29zdCBzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBvcGVuIGFuIGluZmluaXRlIG51
bWJlciBvZiBkYXRhYmFzZS4KLSAgICAgICAgICAgIG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9p
ZGVudGlmaWVyLm9yaWdpbigpLCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0LCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgICAgICAgICAgaWYgKG1fb3duaW5nUG9pbnRlckZvckNsb3NlKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVu
eTogewotICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IElEQlJlc3VsdERhdGE6OmVy
cm9yKG1fY3VycmVudE9wZW5EQlJlcXVlc3QtPnJlcXVlc3REYXRhKCkucmVxdWVzdElkZW50aWZp
ZXIoKSwgSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFt
ZSgib3BlbkRhdGFiYXNlIikgfSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudE9wZW5E
QlJlcXVlc3QtPmNvbm5lY3Rpb24oKS5kaWRPcGVuRGF0YWJhc2UocmVzdWx0KTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudDoKLSAgICAgICAgICAgICAgICAgICAg
YXV0byBjYWxsYmFja0lEID0gdGhpcy0+Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIo
KTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lE
LCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0KTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy0+
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyLCBjYWxsYmFja0lEKSk7Ci0g
ICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
b3BlbkJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTgyMSwyMyArNzQ5LDMwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmFkZE9wZW5EYXRhYmFzZUNvbm5lY3Rpb24oUmVmPFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
CiAgICAgbV9vcGVuRGF0YWJhc2VDb25uZWN0aW9ucy5hZGQoYWRvcHRSZWYoY29ubmVjdGlvbi5s
ZWFrUmVmKCkpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9y
ZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tJ
ZGVudGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShjb25z
dCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6
Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwogCisKKyAgICBJREJEYXRhYmFzZUluZm8g
ZGF0YWJhc2VJbmZvOworICAgIC8vIFF1b3RhIGNoZWNrLgorICAgIGF1dG8gZGVjaXNpb24gPSBt
X3NlcnZlci0+cmVxdWVzdFNwYWNlKGlkZW50aWZpZXIub3JpZ2luKCksIGRlZmF1bHRXcml0ZU9w
ZXJhdGlvbkNvc3QpOworICAgIGlmIChkZWNpc2lvbiA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3Rv
cmUsIGRhdGFiYXNlSW5mbywgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9y
TWVzc2FnZU5hbWUoIk9wZW5CYWNraW5nU3RvcmUiKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmUpOwogICAgIG1fYmFja2luZ1N0b3JlID0g
bV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShpZGVudGlmaWVyKTsKICAgICBtX2JhY2tpbmdT
dG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gbV9iYWNraW5nU3RvcmUtPnN1
cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zKCk7CiAgICAgbV9iYWNraW5nU3RvcmVJc0Vw
aGVtZXJhbCA9IG1fYmFja2luZ1N0b3JlLT5pc0VwaGVtZXJhbCgpOwogCi0gICAgSURCRGF0YWJh
c2VJbmZvIGRhdGFiYXNlSW5mbzsKICAgICBhdXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdl
dE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbyk7Ci0KLSAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5mbywgZXJyb3IsICB0YXNrSWRlbnRp
ZmllcikpOworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJ
bmZvLCBlcnJvcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2lu
Z1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9y
LCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9w
ZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJv
ciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhl
ZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlIik7CkBA
IC04NDgsOCArNzgzLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IEkKICAgICBBU1NFUlQobV9p
c09wZW5pbmdCYWNraW5nU3RvcmUpOwogICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gZmFs
c2U7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh0YXNrSWRlbnRpZmllciwgZXJyb3Iu
aXNOdWxsKCkpOwotCiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpCiAgICAgICAg
IHJldHVybjsKIApAQCAtODYxLDMzICs3OTQsMjMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
Y3JlYXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikg
VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlIik7CiAKLSAgICBhdXRvIHRhc2tT
aXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsKLSAg
ICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAiY3JlYXRlT2JqZWN0U3RvcmUi
LCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNO
dWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAgICAgICAg
ICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICB0aGlzLT5jcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh0YXNr
U2l6ZSwgdHJhbnNhY3Rpb24sIGluZm8sIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJR
dW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRf
dCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2sp
KTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXJ0U3Bh
Y2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwotICAgIHBvc3REYXRhYmFzZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50
aWZpZXIoKSwgaW5mbywgIHF1b3RhRXJyb3IpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRl
T2JqZWN0U3RvcmUsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rp
b24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbykpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29u
c3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikK
K3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZShjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVJbmZvJiBpbmZvKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2Jq
ZWN0U3RvcmUiKTsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwoKSkgewotICAgICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlm
aWVyLCBxdW90YUVycm9yLCBpbmZvKSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0
YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5mbyk7
CisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCB0YXNr
U2l6ZSk7CisgICAgaWYgKGRlY2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
OjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0
b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVv
dGFFcnJvck1lc3NhZ2VOYW1lKCJDcmVhdGVPYmplY3RTdG9yZSIpKSwgaW5mbykpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC05MDMsNyArODI2LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIo
bWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwog
Ci0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5p
c051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5m
by0+YWRkRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvKTsKIApAQCAtOTE1LDE3ICs4MzcsNiBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3Rv
cmUiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBb
dGhpcywgJnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU5hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5kZWxldGVPYmplY3RTdG9yZUFm
dGVyUXVvdGFDaGVjayh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVOYW1lLCBXVEZNb3ZlKGNhbGxi
YWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVj
dFN0b3JlQWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgRXJyb3JDYWxsYmFjayBjYWxs
YmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVy
cm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTkzNiwxNCArODQ3LDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0
ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlT2JqZWN0U3Rv
cmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8tPmlk
ZW50aWZpZXIoKSkpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSwgbV9p
ZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRp
ZmllcigpLCBpbmZvLT5pZGVudGlmaWVyKCkpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1EZWxldGVPYmplY3RTdG9yZShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQogewogICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUiKTsKIAorICAgIGlmIChtX3NlcnZl
ci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlT2JqZWN0
U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBx
dW90YUVycm9yTWVzc2FnZU5hbWUoIkRlbGV0ZU9iamVjdFN0b3JlIikpLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVChtX2JhY2tp
bmdTdG9yZSk7CiAgICAgbV9iYWNraW5nU3RvcmUtPmRlbGV0ZU9iamVjdFN0b3JlKHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIApAQCAtOTY3LDM4ICs4ODMs
MjggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmUoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9i
amVjdFN0b3JlIik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9u
Q29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rp
b24sIHRhc2tTaXplLCAicmVuYW1lT2JqZWN0U3RvcmUiLCBbdGhpcywgdGFza1NpemUsICZ0cmFu
c2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5p
c051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAg
ICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIHRoaXMtPnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRh
c2tTaXplLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBXVEZN
b3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwg
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNh
bGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxs
YmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAg
ICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIElEQkVycm9yIGVycm9y
ID0gcXVvdGFFcnJvcjsKKyAgICBJREJFcnJvciBlcnJvcjsKICAgICBhdXRvKiBpbmZvID0gbV9k
YXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRp
Zmllcik7CiAgICAgaWYgKCFpbmZvKQogICAgICAgICBlcnJvciA9IElEQkVycm9yIHsgVW5rbm93
bkVycm9yLCAiQXR0ZW1wdCB0byByZW5hbWUgbm9uLWV4aXN0YW50IG9iamVjdCBzdG9yZSJfcyB9
OwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7Ci0g
ICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUs
IGVycm9yKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBtX2lkZW50
aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVy
KCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKIH0KIAotdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBu
ZXdOYW1lLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKCFlcnJvci5pc051bGwo
KSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1l
KSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0
ZU9wZXJhdGlvbkNvc3QgKyBuZXdOYW1lLnNpemVJbkJ5dGVzKCk7CisgICAgYXV0byBkZWNpc2lv
biA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCB0YXNrU2l6ZSk7CisgICAgaWYgKGRl
Y2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50
aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1l
KCJSZW5hbWVPYmplY3RTdG9yZSIpKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMTMsNyArOTE5LDYgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RT
dG9yZSIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVy
LCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2Rh
dGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdO
YW1lKTsKIApAQCAtMTAyNSwyOCArOTMwLDIyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNs
ZWFyT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3RpCiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVu
aXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVz
dFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJy
b3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAg
ICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy0+Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNo
ZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWlu
dDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxi
YWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47Ci0gICAgcG9zdERh
dGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8o
KS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllcikpOworICAgIHBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1DbGVhck9iamVjdFN0b3JlLCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQs
IHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllcikp
OwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpCit2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZShjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RT
dG9yZSIpOwogCisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCAwKSA9PSBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1DbGVhck9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJDbGVhck9iamVj
dFN0b3JlIikpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBBU1NFUlQobV9iYWNr
aW5nU3RvcmUpOwogICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIApAQCAtMTA2NywzMyArOTY2
LDIyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4KFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJ
bmRleCIpOwogCi0gICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3Qg
KyBlc3RpbWF0ZVNpemUoaW5mbyk7Ci0gICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNr
U2l6ZSwgImNyZWF0ZUluZGV4IiwgW3RoaXMsIHRhc2tTaXplLCAmdHJhbnNhY3Rpb24sIGluZm8s
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAg
ICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRl
ZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Y3JlYXRlSW5kZXhBZnRlclF1
b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0aW9uLCBpbmZvLCBXVEZNb3ZlKGNhbGxiYWNrKSwg
ZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRl
eEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgRXJyb3JDYWxs
YmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCi17CiAgICAgdWludDY0
X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNr
KSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGFydFNw
YWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVy
KCksIGluZm8sIHF1b3RhRXJyb3IpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgs
IG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlk
ZW50aWZpZXIoKSwgaW5mbykpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
Q3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiBp
bmZvLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1DcmVhdGVJbmRleChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQogewogICAgIEFTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgiKTsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwo
KSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBxdW90YUVycm9yLCBpbmZvKSk7CisgICAgYXV0byB0YXNrU2l6ZSA9IGRl
ZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5mbyk7CisgICAgYXV0byBk
ZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2Uob3JpZ2luLCB0YXNrU2l6ZSk7CisgICAg
aWYgKGRlY2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7Cisg
ICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lkZW50
aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1l
KCJDcmVhdGVJbmRleCIpKSwgaW5mbykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
MTE1LDggKzEwMDMsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRl
SW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4Iik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFz
ayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKLQogICAgIGlmIChlcnJvci5p
c051bGwoKSkgewogICAgICAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOwogICAgICAgICBhdXRv
KiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0
U3RvcmUoaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CkBAIC0xMTMyLDE3ICsxMDE4LDYg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4
Iik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3Ro
aXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAg
IGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJy
b3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5kZWxl
dGVJbmRleEFmdGVyUXVvdGFDaGVjayh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleE5hbWUsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAg
ICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3Zl
KGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0x
MTU5LDE0ICsxMDM0LDE5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4QWZ0
ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgsIGNhbGxiYWNrSUQs
IHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
aW5kZXhJbmZvLT5pZGVudGlmaWVyKCkpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5k
ZXgsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygp
LmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleEluZm8tPmlkZW50aWZp
ZXIoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBj
b25zdCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtRGVsZXRlSW5kZXgoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgdWludDY0
X3QgaW5kZXhJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5k
ZXgiKTsKIAorICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtRGVsZXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVv
dGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIkRlbGV0ZUluZGV4IikpLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllcikpOworICAgICAgICByZXR1cm47
CisgICAgfQorCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBtX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlSW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGluZGV4SWRlbnRpZmllcik7CiAKQEAgLTExOTMsMjMgKzEwNzMsMTEgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24sIHUKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4Iik7CiAKLSAgICBh
dXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUlu
Qnl0ZXMoKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicmVuYW1l
SW5kZXgiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYm
ICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxs
YmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgdGhpcy0+cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwgV1RG
TW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdO
YW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikK
LXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdU
Rk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIElEQkVycm9yIGVycm9yID0gcXVvdGFFcnJvcjsKKyAgICBJREJFcnJvciBlcnJvcjsK
ICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0
aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICBpZiAoIW9iamVjdFN0
b3JlSW5mbykKICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkF0dGVt
cHQgdG8gcmVuYW1lIGluZGV4IGluIG5vbi1leGlzdGFudCBvYmplY3Qgc3RvcmUiX3MgfTsKQEAg
LTEyMTgsMTcgKzEwODYsMTkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhB
ZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkQKICAgICBpZiAoIWlu
ZGV4SW5mbykKICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkF0dGVt
cHQgdG8gcmVuYW1lIG5vbi1leGlzdGFudCBpbmRleCJfcyB9OwogCi0gICAgc3RhcnRTcGFjZUlu
Y3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJl
bmFtZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsK
KyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgsIG1faWRlbnRpZmllci5vcmlnaW4oKSwg
Y2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGVycm9yKSk7CiB9CiAKLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgoY29uc3QgQ2xpZW50T3JpZ2lu
JiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUs
IGNvbnN0IElEQkVycm9yJiBlcnJvcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
ICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFt
ZUluZGV4Iik7CiAKLSAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkpOworICAgIC8v
IFF1b3RhIGNoZWNrLgorICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25D
b3N0ICsgbmV3TmFtZS5zaXplSW5CeXRlcygpOworICAgIGF1dG8gZGVjaXNpb24gPSBtX3NlcnZl
ci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgdGFza1NpemUpOworICAgIGlmIChkZWNpc2lvbiA9PSBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihR
dW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiUmVuYW1lSW5kZXgiKSks
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyNDMsNyArMTExMyw2IEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAot
ICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IuaXNO
dWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAgICAgICBhdXRvKiBvYmplY3RT
dG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlSW5mbyk7CkBA
IC0xMjU3LDUyICsxMTI2LDQwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1S
ZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgcGVyZm9y
bUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CiB9CiAKLXZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktl
eURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RT
dG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNr
KQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEm
IHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYg
dmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUs
IEtleURhdGFDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRk
Iik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVz
dGltYXRlU2l6ZShrZXlEYXRhKSArIGVzdGltYXRlU2l6ZSh2YWx1ZSk7Ci0gICAgQVNTRVJUKG1f
ZGF0YWJhc2VJbmZvKTsKLSAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZvLT5p
bmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShyZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZp
ZXIoKSk7Ci0gICAgaWYgKG9iamVjdFN0b3JlKQotICAgICAgICB0YXNrU2l6ZSArPSBvYmplY3RT
dG9yZS0+aW5kZXhOYW1lcygpLnNpemUoKSAqIHRhc2tTaXplOwotCi0gICAgcmVxdWVzdFNwYWNl
KHRyYW5zYWN0aW9uLCB0YXNrU2l6ZSwgInB1dE9yQWRkIiwgW3RoaXMsIHRhc2tTaXplLCByZXF1
ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIG92
ZXJ3cml0ZU1vZGVdKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlz
TnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICB0aGlzLT5wdXRPckFkZEFmdGVyUXVvdGFDaGVjayh0YXNrU2l6
ZSwgcmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBXVEZNb3ZlKGNh
bGxiYWNrKSwgZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
dXRPckFkZEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJW
YWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0
ZU1vZGUsIEtleURhdGFDYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJy
b3IpCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1
cm47CiAKLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsK
LSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRy
YW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIo
KSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIHF1b3RhRXJyb3IpKTsKKyAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUHV0T3JBZGQsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2FsbGJhY2tJRCwg
cmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0
b3JlSWRlbnRpZmllcigpLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSkpOwogfQogCi12
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBr
ZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgb3JpZ2luYWxSZWNvcmRWYWx1ZSwgSW5kZXhlZERCOjpP
YmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgY29uc3QgSURCRXJyb3ImIHF1
b3RhRXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoY29uc3Qg
Q2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURC
VmFsdWUmIG9yaWdpbmFsUmVjb3JkVmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3Jp
dGVNb2RlIG92ZXJ3cml0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFk
ZCIpOwogCi0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAgICBBU1NFUlQob2JqZWN0U3Rv
cmVJZGVudGlmaWVyKTsKLQogICAgIElEQktleURhdGEgdXNlZEtleTsKICAgICBJREJFcnJvciBl
cnJvcjsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwoKSkgewotICAgICAgICBwb3N0RGF0
YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBxdW90YUVycm9y
LCB1c2VkS2V5KSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0YXNrU2l6ZSA9IGRl
ZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoa2V5RGF0YSkgKyBlc3RpbWF0
ZVNpemUob3JpZ2luYWxSZWNvcmRWYWx1ZSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsK
KyAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdP
YmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIGlmIChvYmplY3RTdG9yZSkK
KyAgICAgICAgdGFza1NpemUgKz0gb2JqZWN0U3RvcmUtPmluZGV4TmFtZXMoKS5zaXplKCkgKiB0
YXNrU2l6ZTsKKyAgICBhdXRvIGRlY2lzaW9uID0gbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmln
aW4sIHRhc2tTaXplKTsKKyAgICBpZiAoZGVjaXNpb24gPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6
RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90
YUVycm9yTWVzc2FnZU5hbWUoIlB1dE9yQWRkIikpLCB1c2VkS2V5KSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOworICAgIEFTU0VSVChvYmpl
Y3RTdG9yZUlkZW50aWZpZXIpOwogICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoSW5kZXhlZERCLCAiJXAgLSBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVB1dE9yQWRkOiBtX2JhY2tpbmdTdG9yZSBpcyBudWxsIiwgdGhpcyk7CiAgICAgICAgIGVy
cm9yID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFs
aWQgZm9yIGNhbGwgdG8gcHV0IG9yIGFkZCJfcyk7CkBAIC0xMzc2LDgwICsxMjMzLDY1IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElECiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IuaXNOdWxsKCkpOwogICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVu
dGlmaWVyLCBlcnJvciwgcmVzdWx0S2V5KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
Z2V0UmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25z
dCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldFJlY29yZERhdGEmIGdl
dFJlY29yZERhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29u
c3QgSURCR2V0UmVjb3JkRGF0YSYgZ2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2Fs
bGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQiKTsKIAotICAgIHdhaXRGb3JS
ZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGdl
dFJlY29yZERhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikg
bXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNh
bGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIHRoaXMtPmdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwg
Z2V0UmVjb3JkRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiBnZXRSZWNvcmREYXRh
LCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lE
ID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAo
IWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICh1aW50NjRfdCBpbmRleElk
ZW50aWZpZXIgPSByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIoKSkKLSAgICAgICAgcG9zdERh
dGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2Fj
dGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGlu
ZGV4SWRlbnRpZmllciwgcmVxdWVzdERhdGEuaW5kZXhSZWNvcmRUeXBlKCksIGdldFJlY29yZERh
dGEua2V5UmFuZ2VEYXRhKSk7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29y
ZCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2Fj
dGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGlu
ZGV4SWRlbnRpZmllciwgcmVxdWVzdERhdGEuaW5kZXhSZWNvcmRUeXBlKCksIGdldFJlY29yZERh
dGEua2V5UmFuZ2VEYXRhKSk7CiAgICAgZWxzZQotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0
UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwg
cmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGdldFJlY29yZERhdGEua2V5UmFu
Z2VEYXRhLCBnZXRSZWNvcmREYXRhLnR5cGUpKTsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdl
dFJlY29yZCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50
cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVy
KCksIGdldFJlY29yZERhdGEua2V5UmFuZ2VEYXRhLCBnZXRSZWNvcmREYXRhLnR5cGUpKTsKIH0K
IAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3JkcyhVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3RE
YXRhLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIEdldEFs
bFJlc3VsdHNDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFs
bFJlY29yZHMoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRB
bGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIEdldEFsbFJlc3VsdHNDYWxsYmFjayBj
YWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHMiKTsKIAotICAgIHdh
aXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERh
dGEsIGdldEFsbFJlY29yZHNEYXRhLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRv
JiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5nZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNr
KHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAg
IH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzQWZ0ZXJRdW90
YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxs
UmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2Fs
bGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJRCwg
cmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIGdldEFsbFJlY29yZHNEYXRhKSk7
CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJlY29yZHMsIG1faWRlbnRpZmllci5vcmlnaW4o
KSwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIGdldEFs
bFJlY29yZHNEYXRhKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRS
ZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgSURCR2V0UmVjb3JkRGF0
YVR5cGUgdHlwZSkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQoY29u
c3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURh
dGEsIElEQkdldFJlY29yZERhdGFUeXBlIHR5cGUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1HZXRSZWNvcmQiKTsKIAotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KICAgICBJREJH
ZXRSZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwg
MCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9z
dERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIHJlc3VsdCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBJREJFcnJvciBlcnJvciA9IG1f
YmFja2luZ1N0b3JlLT5nZXRSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGtleVJhbmdlRGF0YSwgdHlwZSwgcmVzdWx0KTsKIAogICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVz
dWx0KSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29y
ZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVj
b3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKK3ZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwg
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1
aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIHJlY29y
ZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCiB7CiAgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1HZXRJbmRleFJlY29yZCIpOwogCi0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsK
LQogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3Bh
Y2Uob3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgewor
ICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSWRlbnRp
ZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgcmVzdWx0KSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIElEQkVycm9y
IGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldEluZGV4UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRp
Zmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIHJlY29yZFR5cGUs
IHJhbmdlLCByZXN1bHQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3Jk
LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKQEAgLTE0NjMsMTQgKzEzMDUs
MTggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IEkKICAgICBwZXJmb3JtR2V0UmVzdWx0Q2FsbGJh
Y2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KTsKIH0KIAotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJlY29yZHModWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhKQordm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJlY29yZHMoY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRh
JiBnZXRBbGxSZWNvcmRzRGF0YSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJl
Y29yZHMiKTsKIAotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KICAgICBJREJHZXRBbGxS
ZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkg
PT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtR2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJF
cnJvcihRdW90YUV4Y2VlZGVkRXJyb3IpLCBXVEZNb3ZlKHJlc3VsdCkpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgSURCRXJyb3Ig
ZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0QWxsUmVjb3Jkcyh0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGdldEFsbFJlY29yZHNEYXRhLCByZXN1bHQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtR2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgV1RGTW92ZShy
ZXN1bHQpKSk7CkBAIC0xNDg0LDM3ICsxMzMwLDMwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
CiAgICAgcGVyZm9ybUdldEFsbFJlc3VsdHNDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yLCByZXN1bHQpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudChVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxi
YWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQoY29uc3QgSURC
UmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBD
b3VudENhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQiKTsK
IAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywg
cmVxdWVzdERhdGEsIHJhbmdlLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYg
ZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICB0aGlzLT5nZXRDb3VudEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0
RGF0YSwgcmFuZ2UsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Z2V0Q291bnRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxi
YWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAg
ICAgICAgcmV0dXJuOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCwgY2FsbGJhY2tJRCwg
cmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0
b3JlSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIoKSwgcmFuZ2UpKTsK
KyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQsIG1faWRlbnRpZmllci5vcmlnaW4oKSwgY2Fs
bGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRh
Lm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5pbmRleElkZW50aWZpZXIoKSwg
cmFuZ2UpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldENvdW50KHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWlu
dDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0
YSkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudChjb25zdCBDbGllbnRP
cmlnaW4mIG9yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYga2V5UmFuZ2VEYXRhKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQi
KTsKIAorICAgIHVpbnQ2NF90IGNvdW50OworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNl
KG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAg
ICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0Q291bnQsIGNhbGxiYWNrSWRlbnRpZmll
ciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgY291bnQpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgQVNTRVJUKG9iamVj
dFN0b3JlSWRlbnRpZmllcik7Ci0KLSAgICB1aW50NjRfdCBjb3VudDsKICAgICBJREJFcnJvciBl
cnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRDb3VudCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9i
amVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBrZXlSYW5nZURhdGEsIGNvdW50
KTsKIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldENvdW50LCBjYWxsYmFja0lkZW50
aWZpZXIsIGVycm9yLCBjb3VudCkpOwpAQCAtMTUyOCwzNSArMTM2NywyOCBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJRAogICAgIHBlcmZvcm1Db3VudENhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmll
ciwgZXJyb3IsIGNvdW50KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVj
b3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJS
ZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VE
YXRhLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVs
ZXRlUmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VD
b21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92
ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMt
PmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBFcnJvckNhbGxiYWNr
IGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAg
ICAgcmV0dXJuOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQsIGNhbGxiYWNrSUQs
IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RT
dG9yZUlkZW50aWZpZXIoKSwga2V5UmFuZ2VEYXRhKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURl
bGV0ZVJlY29yZCwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0
YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlm
aWVyKCksIGtleVJhbmdlRGF0YSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKK3ZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmln
aW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybURlbGV0ZVJlY29yZCIpOwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9y
ZS0+ZGVsZXRlUmFuZ2UodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIHJhbmdlKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJv
cihRdW90YUV4Y2VlZGVkRXJyb3IpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICBJ
REJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVSYW5nZSh0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgcmFuZ2UpOwogICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcikpOwog
fQogCkBAIC0xNTY4LDM0ICsxNDAwLDI3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1EZWxldGVSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zCiAgICAg
cGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CiB9CiAKLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29u
c3QgSURCQ3Vyc29ySW5mbyYgaW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1
ZXN0RGF0YSwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2Fs
bGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yIik7CiAKLSAgICB3YWl0Rm9y
UmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBp
bmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUg
ewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhX
VEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLT5vcGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCBpbmZvLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
Om9wZW5DdXJzb3JBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3RE
YXRhLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFj
aykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9y
KFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVy
bjsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtT3BlbkN1cnNvciwgY2FsbGJhY2tJRCwgcmVxdWVzdERh
dGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIGluZm8pKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
T3BlbkN1cnNvciwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0
YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgaW5mbykpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtT3BlbkN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJ
REJDdXJzb3JJbmZvJiBpbmZvKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5D
dXJzb3IoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1P
cGVuQ3Vyc29yIik7CiAKICAgICBJREJHZXRSZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3NlcnZl
ci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtT3BlbkN1cnNvciwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IpLCByZXN1bHQp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2lu
Z1N0b3JlLT5vcGVuQ3Vyc29yKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbywgcmVzdWx0KTsK
IAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybU9wZW5DdXJzb3IsIGNhbGxiYWNrSWRlbnRp
ZmllciwgZXJyb3IsIHJlc3VsdCkpOwpAQCAtMTYwOSwzNCArMTQzNCwyNyBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtT3BlbkN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0CiAgICAgcGVyZm9ybUdldFJlc3VsdENhbGxiYWNrKGNhbGxiYWNrSWRlbnRp
ZmllciwgZXJyb3IsIHJlc3VsdCk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJh
dGVDdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0
IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEm
IGRhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6aXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFp
bikgVW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IiKTsKIAotICAgIHdhaXRGb3JSZXF1
ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGRhdGEs
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0g
ICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1v
dmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IHRoaXMtPml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGRhdGEsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
aXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhLCBHZXRSZXN1bHRDYWxsYmFj
ayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAg
ICAgIHJldHVybjsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvciwgY2FsbGJhY2tJ
RCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLmN1cnNv
cklkZW50aWZpZXIoKSwgZGF0YSkpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29y
LCBtX2lkZW50aWZpZXIub3JpZ2luKCksIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0
aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5jdXJzb3JJZGVudGlmaWVyKCksIGRhdGEpKTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBjdXJzb3JJZGVu
dGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSkKK3ZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29yKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2lu
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1
cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhKQogewogICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvciIpOwogCiAgICAgSURCR2V0UmVzdWx0
IHJlc3VsdDsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0
b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUl0ZXJhdGVDdXJzb3IsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3Io
UXVvdGFFeGNlZWRlZEVycm9yKSwgcmVzdWx0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAg
ICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+aXRlcmF0ZUN1cnNvcih0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGN1cnNvcklkZW50aWZpZXIsIGRhdGEsIHJlc3VsdCk7CiAKICAgICBp
ZiAoZXJyb3IuaXNOdWxsKCkpIHsKQEAgLTE2ODgsMTcgKzE1MDYsNiBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdAogCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigp
LmRhdGFiYXNlKCkgPT0gdGhpcyk7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlv
bih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051
bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNvbW1pdFRyYW5zYWN0aW9uQWZ0
ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9uLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19
Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uQWZ0ZXJRdW90YUNo
ZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTcxNCwxMyArMTUyMSwxNSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpjb21taXRUcmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1p
dFRyYW5zYWN0aW9uLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigp
KSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uLCBtX2lkZW50aWZpZXIu
b3JpZ2luKCksIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29t
bWl0VHJhbnNhY3Rpb24oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIpCiB7Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgTE9HKEluZGV4
ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiAt
ICVzIiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShvcmlnaW4sIDApID09IFN0b3JhZ2VR
dW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tS
ZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1
b3RhRXhjZWVkZWRFcnJvciksIHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOworICAgICAgICByZXR1
cm47CisgICAgfQogCiAgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Y29tbWl0
VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdHJh
bnNhY3Rpb25JZGVudGlmaWVyKSk7CkBAIC0xNzUyLDI0ICsxNTYxLDEzIEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsCiAgICAgdHJhbnNhY3Rpb25Db21wbGV0ZWQobV9maW5pc2hpbmdUcmFuc2Fj
dGlvbnMudGFrZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbiwgV2FpdEZvclBlbmRpbmdUYXNrcyB3YWl0Rm9yUGVuZGluZ1Rhc2tzLCBFcnJv
ckNhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2Fj
dGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgRXJyb3JDYWxs
YmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJ
bmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24gLSAl
cyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwogCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigp
LmRhdGFiYXNlKCkgPT0gdGhpcyk7CiAKLSAgICBpZiAod2FpdEZvclBlbmRpbmdUYXNrcyA9PSBX
YWl0Rm9yUGVuZGluZ1Rhc2tzOjpZZXMpIHsKLSAgICAgICAgd2FpdEZvclJlcXVlc3RTcGFjZUNv
bXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rpb24sIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBpZiAo
IWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJv
cikpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHRoaXMtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIFdhaXRGb3JQZW5kaW5nVGFza3M6
Ok5vLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1
cm47CkBAIC0xNzg1LDcgKzE1ODMsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRy
YW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24s
IGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKTsKKyAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiwgbV9pZGVudGlmaWVyLm9yaWdpbigpLCBjYWxs
YmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CiB9CiAKIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZEZpbmlzaEhhbmRsaW5nVmVyc2lvbkNoYW5nZShVbmlxdWVJREJE
YXRhYmFzZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQpAQCAtMTgwNywxMSArMTYwNSwxNiBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoVW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aQogICAgIGludm9rZU9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIo
KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24o
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1B
Ym9ydFRyYW5zYWN0aW9uKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiAt
ICVzIiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKIAorICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG9yaWdpbiwgMCkgPT0gU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihR
dW90YUV4Y2VlZGVkRXJyb3IpLCB0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmFib3J0
VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB0cmFu
c2FjdGlvbklkZW50aWZpZXIpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggZWMzZmMw
YzczZWEzMGUyNGU3YTBjZWU1ODg5ZjM5NjFmMGNjNGMyNy4uNzQ0OTg1MjRmOTE3MTI4MzhhOTZk
MjdmZjg1NmMzNGY3N2NhMDVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTQ0LDYgKzQ0
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQ2xpZW50T3JpZ2luOwogY2xh
c3MgSURCRXJyb3I7CiBjbGFzcyBJREJHZXRBbGxSZXN1bHQ7CiBzdHJ1Y3QgSURCR2V0UmVjb3Jk
RGF0YTsKQEAgLTg5LDE3ICs5MCwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVJbmRleChV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCSW5kZXhJbmZvJiwgRXJyb3JD
YWxsYmFjayk7CiAgICAgdm9pZCBkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSwgRXJyb3JDYWxsYmFjayk7CiAgICAgdm9pZCByZW5hbWVJbmRleChVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRf
dCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjayk7
Ci0gICAgdm9pZCBwdXRPckFkZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmLCBJbmRl
eGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrKTsKLSAgICB2
b2lkIGdldFJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVx
dWVzdERhdGEmLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2spOwot
ICAgIHZvaWQgZ2V0QWxsUmVjb3JkcyhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29u
c3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdldEFsbFJl
c3VsdHNDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRDb3VudChVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBD
b3VudENhbGxiYWNrKTsKLSAgICB2b2lkIGRlbGV0ZVJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
LCBFcnJvckNhbGxiYWNrKTsKLSAgICB2b2lkIG9wZW5DdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCQ3Vyc29ySW5mbyYs
IEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGl0ZXJhdGVDdXJzb3IoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCSXRlcmF0
ZUN1cnNvckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CisgICAgdm9pZCBwdXRPckFkZChjb25z
dCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIElu
ZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2spOworICAg
IHZvaWQgZ2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVjb3Jk
RGF0YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKKyAgICB2b2lkIGdldEFsbFJlY29yZHMoY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdldEFsbFJlc3Vs
dHNDYWxsYmFjayk7CisgICAgdm9pZCBnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYsIENvdW50Q2FsbGJhY2spOworICAgIHZvaWQgZGVsZXRlUmVj
b3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXJyb3JD
YWxsYmFjayk7CisgICAgdm9pZCBvcGVuQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29u
c3QgSURCQ3Vyc29ySW5mbyYsIEdldFJlc3VsdENhbGxiYWNrKTsKKyAgICB2b2lkIGl0ZXJhdGVD
dXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYs
IEdldFJlc3VsdENhbGxiYWNrKTsKICAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBFcnJvckNhbGxiYWNrKTsKLQotICAgIGVudW0gY2xhc3Mg
V2FpdEZvclBlbmRpbmdUYXNrcyB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIGFib3J0VHJhbnNhY3Rp
b24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIFdhaXRGb3JQZW5kaW5nVGFza3MsIEVy
cm9yQ2FsbGJhY2spOworICAgIHZvaWQgYWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiwgRXJyb3JDYWxsYmFjayk7CiAKICAgICB2b2lkIGRpZEZpbmlzaEhhbmRs
aW5nVmVyc2lvbkNoYW5nZShVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCB0cmFu
c2FjdGlvbkRlc3Ryb3llZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJik7CkBAIC0xMzks
NDQgKzEzOCwyNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzY2hlZHVsZVNodXRkb3duRm9yQ2xv
c2UoKTsKIAotICAgIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0
X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJPYmpl
Y3RTdG9yZUluZm8mLCBFcnJvckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQg
cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsK
LSAgICB2b2lkIGNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCSW5kZXhJbmZvJiwgRXJyb3JD
YWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHJlbmFtZUluZGV4QWZ0ZXJRdW90
YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsK
LSAgICB2b2lkIHB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBjb25z
dCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIElu
ZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2ssIGNvbnN0
IElEQkVycm9yJik7Ci0gICAgdm9pZCBkZWxldGVSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFcnJvckNhbGxiYWNrKTsK
LQotICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJvckNh
bGxiYWNrKTsKLSAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmVBZmV0UXVvdGFDaGVjayhVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBF
cnJvckNhbGxiYWNrKTsKLSAgICB2b2lkIGRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYsIEVycm9yQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0UmVjb3JkQWZ0ZXJR
dW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYs
IEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hl
Y2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdl
dEFsbFJlc3VsdHNDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRDb3VudEFmdGVyUXVvdGFDaGVjayhj
b25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIENvdW50Q2FsbGJh
Y2spOwotICAgIHZvaWQgb3BlbkN1cnNvckFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0
RGF0YSYsIGNvbnN0IElEQkN1cnNvckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9p
ZCBpdGVyYXRlQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29u
c3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBj
b21taXRUcmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiwgRXJyb3JDYWxsYmFjayk7Ci0KICAgICAvLyBEYXRhYmFzZSB0aHJlYWQgb3BlcmF0aW9u
cwogICAgIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmll
ciYpOwotICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZp
ZXImLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJh
bnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtQWJvcnRU
cmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICB2b2lkIG9wZW5CYWNraW5n
U3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CisgICAgdm9pZCBwZXJmb3JtQ29t
bWl0VHJhbnNhY3Rpb24oY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
cik7CisgICAgdm9pZCBwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbihjb25zdCBDbGllbnRPcmlnaW4m
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIGJlZ2luVHJhbnNhY3Rpb25JbkJh
Y2tpbmdTdG9yZShjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKLSAgICB2b2lkIHBlcmZvcm1D
cmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RT
dG9yZUluZm8mLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgcGVyZm9ybURlbGV0ZU9iamVj
dFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
Zmllcik7Ci0gICAgdm9pZCBwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5l
d05hbWUsIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtQ2xlYXJPYmplY3RTdG9y
ZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIp
OwotICAgIHZvaWQgcGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNv
bnN0IElEQkluZGV4SW5mbyYsIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtRGVs
ZXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIpOwotICAgIHZvaWQgcGVyZm9ybVJlbmFt
ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNv
bnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRh
JiwgY29uc3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwg
Y29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHBlcmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmLCBJREJHZXRSZWNvcmREYXRhVHlwZSk7Ci0gICAgdm9pZCBwZXJmb3JtR2V0QWxs
UmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0
YSYpOwotICAgIHZvaWQgcGVyZm9ybUdldEluZGV4UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlm
aWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7
Ci0gICAgdm9pZCBwZXJmb3JtR2V0Q291bnQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYpOwotICAgIHZvaWQgcGVyZm9ybURlbGV0ZVJlY29yZCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYpOwotICAgIHZvaWQgcGVyZm9ybU9wZW5DdXJzb3IodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwotICAgIHZvaWQgcGVyZm9ybUl0ZXJh
dGVDdXJzb3IodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYpOworICAg
IHZvaWQgcGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOworICAgIHZvaWQg
cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgdm9pZCBw
ZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IG5ld05hbWUsIGNvbnN0IElEQkVycm9yJik7CisgICAgdm9pZCBwZXJmb3JtQ2xlYXJPYmplY3RT
dG9yZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIHZvaWQgcGVyZm9ybUNyZWF0ZUluZGV4KGNv
bnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4
SW5mbyYpOworICAgIHZvaWQgcGVyZm9ybURlbGV0ZUluZGV4KGNvbnN0IENsaWVudE9yaWdpbiYs
IHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
dWludDY0X3QgaW5kZXhJZGVudGlmaWVyKTsKKyAgICB2b2lkIHBlcmZvcm1SZW5hbWVJbmRleChj
b25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBuZXdOYW1lLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgcGVyZm9ybVB1dE9yQWRkKGNv
bnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5k
ZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOworICAgIHZvaWQgcGVyZm9ybUdldFJl
Y29yZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElEQkdldFJl
Y29yZERhdGFUeXBlKTsKKyAgICB2b2lkIHBlcmZvcm1HZXRBbGxSZWNvcmRzKGNvbnN0IENsaWVu
dE9yaWdpbiYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNE
YXRhJik7CisgICAgdm9pZCBwZXJmb3JtR2V0SW5kZXhSZWNvcmQoY29uc3QgQ2xpZW50T3JpZ2lu
JiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBj
b25zdCBJREJLZXlSYW5nZURhdGEmKTsKKyAgICB2b2lkIHBlcmZvcm1HZXRDb3VudChjb25zdCBD
bGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJik7CisgICAgdm9pZCBwZXJmb3JtRGVsZXRlUmVjb3JkKGNvbnN0IENsaWVudE9yaWdpbiYs
IHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CisgICAgdm9pZCBwZXJmb3JtT3BlbkN1cnNvcihjb25z
dCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJDdXJzb3JJ
bmZvJik7CisgICAgdm9pZCBwZXJmb3JtSXRlcmF0ZUN1cnNvcihjb25zdCBDbGllbnRPcmlnaW4m
LCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1
cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJik7CiAgICAgdm9pZCBw
ZXJmb3JtUHJlZmV0Y2hDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRp
Zmllcik7CiAKICAgICB2b2lkIHBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihj
b25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKQEAgLTE4Niw3ICsxNjgsNyBAQCBwcml2YXRlOgog
CiAgICAgLy8gTWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAgICAgdm9pZCBkaWREZWxldGVCYWNraW5n
U3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pOwotICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IHRh
c2tJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIGRpZFBlcmZvcm1DcmVhdGVP
YmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwg
Y29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRlT2Jq
ZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3JtUmVuYW1l
T2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsK
QEAgLTI0Niw5ICsyMjgsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNEb25lV2l0aEhhcmRDbG9z
ZSgpOwogCiAgICAgdm9pZCByZXF1ZXN0U3BhY2UoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYsIHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYpOwotICAgIHZvaWQgd2FpdEZvclJlcXVlc3RT
cGFjZUNvbXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYpOwotICAgIHZvaWQgc3RhcnRTcGFjZUluY3JlYXNl
VGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrU2l6ZSk7Ci0gICAgdm9pZCBm
aW5pc2hTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCBib29sIGlzVGFza1N1
Y2Nlc3NmdWwpOwogCiAgICAgdm9pZCBjbGVhclRyYW5zYWN0aW9uc09uQ29ubmVjdGlvbihVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW9uLmNwcAppbmRleCBmZTkxMGZhZjk4NDlkYzJiMDQ3ZWJhOTdhZTU2NjU3OWZk
MTNkMjEwLi44MDA2MDY5ODgzNDRmMWIzOWI4YjlmYmMxOTk5ODIxZDgyNjIxYjg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2VDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcApAQCAtNzYsNyArNzYsNyBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6YWJvcnRUcmFuc2FjdGlvbldpdGhv
dXRDYWxsYmFjayhVbmlxdWVJREJEYXRhYgogICAgIGlmICghbV9kYXRhYmFzZSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIG1fZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rp
b24sIFVuaXF1ZUlEQkRhdGFiYXNlOjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpObywgW3RoaXMsIHBy
b3RlY3RlZFRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7Cisg
ICAgbV9kYXRhYmFzZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7CiAgICAg
ICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uTWFwLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmll
cikpOwogICAgICAgICBtX3RyYW5zYWN0aW9uTWFwLnJlbW92ZSh0cmFuc2FjdGlvbklkZW50aWZp
ZXIpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24u
Y3BwCmluZGV4IGE4ZDJiZGM3NDBjODk3MWE1YTdjMDRlNzZjMDMyOWI0NzZhZGM0MjYuLjc2ZWRk
YzQ1YjA3NmJlM2U2OTcyODQ1ZDExZTIxNTBiNmYwN2Q4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCgpCiAgICAgYXV0byBkYXRhYmFzZSA9IG1f
ZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAK
LSAgICBkYXRhYmFzZS0+YWJvcnRUcmFuc2FjdGlvbigqdGhpcywgVW5pcXVlSURCRGF0YWJhc2U6
OldhaXRGb3JQZW5kaW5nVGFza3M6OlllcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpXShhdXRvJiBlcnJvcikgeworICAgIGRhdGFiYXNlLT5hYm9ydFRyYW5zYWN0aW9uKCp0
aGlzLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKGF1dG8mIGVycm9yKSB7
CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjph
Ym9ydCAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGMKICAgICBh
dXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNT
RVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+cHV0T3JBZGQoKnRoaXMsIHJlcXVl
c3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQktl
eURhdGEmIGtleSkgeworICAgIGRhdGFiYXNlLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5RGF0
YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsK
ICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1
dE9yQWRkIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTMwNyw3ICszMDcsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb246OmdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAg
YXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFT
U0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmdldFJlY29yZCgqdGhpcywgcmVx
dWVzdERhdGEsIGdldFJlY29yZERhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3Vs
dCkgeworICAgIGRhdGFiYXNlLT5nZXRSZWNvcmQocmVxdWVzdERhdGEsIGdldFJlY29yZERhdGEs
IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8m
IGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkIChjYWxsYmFjayki
KTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMyOCw3
ICszMjgsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29y
ZHMoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBt
X2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwog
ICAgIAotICAgIGRhdGFiYXNlLT5nZXRBbGxSZWNvcmRzKCp0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0
QWxsUmVjb3Jkc0RhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVx
dWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgewor
ICAgIGRhdGFiYXNlLT5nZXRBbGxSZWNvcmRzKHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0
YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0
byYgZXJyb3IsIGNvbnN0IElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJ
bmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNvcmRzIChj
YWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTM0OSw3ICszNDksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Omdl
dENvdW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgYwogICAgIGF1dG8gZGF0
YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0
YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5nZXRDb3VudCgqdGhpcywgcmVxdWVzdERhdGEs
IGtleVJhbmdlRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1
ZXN0RGF0YV0oYXV0byYgZXJyb3IsIHVpbnQ2NF90IGNvdW50KSB7CisgICAgZGF0YWJhc2UtPmdl
dENvdW50KHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCB1aW50NjRfdCBjb3VudCkg
ewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
Z2V0Q291bnQgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzcwLDcgKzM3MCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbjo6ZGVsZXRlUmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0CiAg
ICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAg
IEFTU0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmRlbGV0ZVJlY29yZCgqdGhp
cywgcmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+ZGVs
ZXRlUmVjb3JkKHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yKSB7CiAgICAgICAgIExP
RyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmQg
KGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
b3BlbkN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAgYXV0byBk
YXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChk
YXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPm9wZW5DdXJzb3IoKnRoaXMsIHJlcXVlc3RE
YXRhLCBpbmZvLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3RE
YXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRh
YmFzZS0+b3BlbkN1cnNvcihyZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJl
c3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFr
VGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQxMiw3ICs0MTIsNyBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+
ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5p
dGVyYXRlQ3Vyc29yKCp0aGlzLCByZXF1ZXN0RGF0YSwgZGF0YSwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdl
dFJlc3VsdCYgcmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPml0ZXJhdGVDdXJzb3IocmVxdWVzdERh
dGEsIGRhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERh
dGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNv
ciAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SW5Qcm9jZXNzSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCmluZGV4IDkxMTFmNTk3OGUzYjgwNjE4NTVj
MjBmNWFmYWE1YjY1NWRjY2VhMjEuLmQ0NzU0ODBiNGJkZDIzNTNjZDg3Y2IwYWE5YmMzNDEzYzkz
YWNkY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC02MSwzNiArNjEsMzUgQEAg
UmVmPEluUHJvY2Vzc0lEQlNlcnZlcj4gSW5Qcm9jZXNzSURCU2VydmVyOjpjcmVhdGUoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBjb24KIAogSW5Qcm9jZXNzSURCU2VydmVyOjp+SW5Qcm9jZXNz
SURCU2VydmVyKCkgPSBkZWZhdWx0OwogCi1TdG9yYWdlUXVvdGFNYW5hZ2VyKiBJblByb2Nlc3NJ
REJTZXJ2ZXI6OnF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK1JlZlB0
cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBJblByb2Nlc3NJREJTZXJ2ZXI6OnF1b3RhTWFuYWdlcihj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKICAgICByZXR1cm4gbV9xdW90YU1hbmFnZXJz
LmVuc3VyZShvcmlnaW4sIFtdIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U3RvcmFnZVF1
b3RhTWFuYWdlcj4oU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCksIFtdKHVpbnQ2
NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2Us
IGF1dG8gY2FsbGJhY2spIHsKKyAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmNy
ZWF0ZShTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSwgW10geworICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0sIFtdKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJy
ZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKICAgICAg
ICAgICAgIGNhbGxiYWNrKHF1b3RhICsgY3VycmVudFNwYWNlICsgc3BhY2VJbmNyZWFzZSk7CiAg
ICAgICAgIH0pOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQotc3RhdGljIGlu
bGluZSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFNYW5hZ2VyR2V0dGVyIHN0b3JhZ2VRdW90
YU1hbmFnZXJHZXR0ZXIoSW5Qcm9jZXNzSURCU2VydmVyJiBzZXJ2ZXIpCi17Ci0gICAgcmV0dXJu
IFt3ZWFrU2VydmVyID0gbWFrZVdlYWtQdHIoc2VydmVyKV0oUEFMOjpTZXNzaW9uSUQsIGNvbnN0
IGF1dG8mIG9yaWdpbikgewotICAgICAgICByZXR1cm4gd2Vha1NlcnZlciA/IHdlYWtTZXJ2ZXIt
PnF1b3RhTWFuYWdlcihvcmlnaW4pIDogbnVsbHB0cjsKLSAgICB9OworICAgIH0pLml0ZXJhdG9y
LT52YWx1ZTsKIH0KIAogSW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklEKQotICAgIDogbV9zZXJ2ZXIoSURCU2VydmVyOjpJREJTZXJ2
ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIHN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIoKnRoaXMpKSkK
IHsKICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKICAgICBtX2Nvbm5lY3Rpb25Ub1Nl
cnZlciA9IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGUoKnRoaXMpOwog
ICAgIG1fY29ubmVjdGlvblRvQ2xpZW50ID0gSURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGll
bnQ6OmNyZWF0ZSgqdGhpcyk7CisgICAgbV9zZXJ2ZXIgPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6
Y3JlYXRlKHNlc3Npb25JRCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikgbXV0YWJsZSB7CisgICAgICAgIHJldHVybiB3ZWFr
VGhpcyA/IHF1b3RhTWFuYWdlcihvcmlnaW4pIDogbnVsbHB0cjsKKyAgICB9KTsKIH0KIAogSW5Q
cm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKLSAgICA6IG1fc2VydmVy
KElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklELCBkYXRhYmFzZURpcmVjdG9y
eVBhdGgsIHN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIoKnRoaXMpKSkKIHsKICAgICByZWxheEFk
b3B0aW9uUmVxdWlyZW1lbnQoKTsKICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlciA9IElEQkNsaWVu
dDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGUoKnRoaXMpOwogICAgIG1fY29ubmVjdGlv
blRvQ2xpZW50ID0gSURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQ6OmNyZWF0ZSgqdGhp
cyk7CisgICAgbV9zZXJ2ZXIgPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25J
RCwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigq
dGhpcyldKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKSBtdXRhYmxlIHsKKyAgICAgICAgcmV0
dXJuIHdlYWtUaGlzID8gcXVvdGFNYW5hZ2VyKG9yaWdpbikgOiBudWxscHRyOworICAgIH0pOwog
fQogCiBJREJDb25uZWN0aW9uSWRlbnRpZmllciBJblByb2Nlc3NJREJTZXJ2ZXI6OmlkZW50aWZp
ZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCmluZGV4IGM3YjUzMjFjYTM2MWM3NDFl
NTJkNDVlYzE4YTgzMThmYWQwODI5YzAuLjBkZDk3NDQyMzA5YzhlNzRhNjA3Njk4MWJkOGViOTBm
YTY5NGQ2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKQEAgLTYzLDkgKzYzLDggQEAgcHVi
bGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2
ZXImIGNvbm5lY3Rpb25Ub1NlcnZlcigpIGNvbnN0OwogICAgIElEQlNlcnZlcjo6SURCQ29ubmVj
dGlvblRvQ2xpZW50JiBjb25uZWN0aW9uVG9DbGllbnQoKSBjb25zdDsKLSAgICBJREJTZXJ2ZXI6
OklEQlNlcnZlciYgc2VydmVyKCkgeyByZXR1cm4gbV9zZXJ2ZXIuZ2V0KCk7IH0KLQotICAgIElE
QlNlcnZlcjo6SURCU2VydmVyJiBpZGJTZXJ2ZXIoKSB7IHJldHVybiBtX3NlcnZlci5nZXQoKTsg
fQorICAgIElEQlNlcnZlcjo6SURCU2VydmVyJiBzZXJ2ZXIoKSB7IHJldHVybiAqbV9zZXJ2ZXI7
IH0KKyAgICBJREJTZXJ2ZXI6OklEQlNlcnZlciYgaWRiU2VydmVyKCkgeyByZXR1cm4gKm1fc2Vy
dmVyOyB9CiAKICAgICAvLyBJREJDb25uZWN0aW9uVG9TZXJ2ZXIKICAgICB2b2lkIGRlbGV0ZURh
dGFiYXNlKGNvbnN0IElEQlJlcXVlc3REYXRhJikgZmluYWw7CkBAIC0xMjUsMTcgKzEyNCwxNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKSBvdmVycmlkZSB7IFJlZkNvdW50ZWQ8SW5Qcm9jZXNz
SURCU2VydmVyPjo6cmVmKCk7IH0KICAgICB2b2lkIGRlcmVmKCkgb3ZlcnJpZGUgeyBSZWZDb3Vu
dGVkPEluUHJvY2Vzc0lEQlNlcnZlcj46OmRlcmVmKCk7IH0KIAotICAgIFN0b3JhZ2VRdW90YU1h
bmFnZXIqIHF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mKTsKKyAgICBSZWZQdHI8U3Rv
cmFnZVF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyKGNvbnN0IENsaWVudE9yaWdpbiYpOwogCiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IEluUHJvY2Vzc0lEQlNlcnZlcihQQUw6OlNlc3Npb25JRCk7
CiAgICAgSW5Qcm9jZXNzSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlRGlyZWN0b3J5UGF0aCk7CiAKLSAgICBSZWY8SURCU2VydmVyOjpJREJTZXJ2ZXI+IG1f
c2VydmVyOworICAgIFJlZlB0cjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gbV9zZXJ2ZXI7CiAgICAg
UmVmUHRyPElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyPiBtX2Nvbm5lY3Rpb25Ub1Nl
cnZlcjsKICAgICBSZWZQdHI8SURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQ+IG1fY29u
bmVjdGlvblRvQ2xpZW50OwogCi0gICAgSGFzaE1hcDxDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVl
X3B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9xdW90YU1hbmFnZXJzOworICAgIEhhc2hNYXA8
Q2xpZW50T3JpZ2luLCBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fcXVvdGFNYW5hZ2Vy
czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NzJlOTkyMTBjN2VhZDg1NzI5
MWQyZTI4NmY2NDA2MWFmZmZmYTJiLi4yODczYzllZTFlMWQzMGVmN2UxMzUwZDlmMWJmYmI1NTc2
ZDMwOTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xMTI4LDcgKzExMjgsNiBAQAogCQk0MUQyOEQwRDIxMzlFMDU4MDBGNDIw
NkYgLyogTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFEMjhEMEIyMTM5RTAxRDAwRjQyMDZGIC8qIExpYldl
YlJUQ1N0YXRzQ29sbGVjdG9yLmNwcCAqLzsgfTsKIAkJNDFENDFDNjcyMjU2ODc0RjAwNjk3OTQy
IC8qIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUQ0MUM2NTIyNTY4NTkyMDA2OTc5NDIgLyogU2VydmljZVdv
cmtlckludGVybmFscy5tbSAqLzsgfTsKIAkJNDFERTdDN0MyMjJEQTE0MzAwNTMyQjY1IC8qIFN0
b3JhZ2VRdW90YU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQxREU3QzdCMjIyREExM0UwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2Vy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNDFE
RTdDN0QyMjJEQTE0ODAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YVVzZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxREU3Qzc4MjIyREExM0MwMDUzMkI2
NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDFERUZDQjYxRTU2QzFCRDAwMEQ5RTVGIC8qIEpTRE9NTWFwTGlr
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFERUZD
QjQxRTU2QzFCOTAwMEQ5RTVGIC8qIEpTRE9NTWFwTGlrZS5oICovOyB9OwogCQk0MUUxQjFEMTBG
RjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRTFCMUNCMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0
cmFjdFdvcmtlci5oICovOyB9OwogCQk0MUU5RENFNzIzMTk3NEJGMDBGMzU5NDkgLyogQmxvYkxv
YWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFF
OURDRTQyMzE5NzNGRTAwRjM1OTQ5IC8qIEJsb2JMb2FkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzQ2MSw3ICs3NDYwLDYgQEAKIAkJNDFE
MjhEMEMyMTM5RTAxRTAwRjQyMDZGIC8qIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmg7IHBh
dGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDFENDFDNjUyMjU2ODU5MjAwNjk3OTQyIC8qIFNlcnZpY2VXb3JrZXJJ
bnRlcm5hbHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZXJ2
aWNlV29ya2VySW50ZXJuYWxzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUQ1
MUJCMjFFNEUyRTgxMDAxMzFBNUIgLyogTGliV2ViUlRDQXVkaW9Gb3JtYXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGliV2ViUlRDQXVkaW9Gb3JtYXQuaDsgcGF0aCA9IGxp
YndlYnJ0Yy9MaWJXZWJSVENBdWRpb0Zvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0MURFN0M3ODIyMkRBMTNDMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhVXNlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlUXVvdGFVc2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxREU3QzdBMjIyREExM0QwMDUzMkI2NSAvKiBTdG9yYWdl
UXVvdGFNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0
b3JhZ2VRdW90YU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURF
N0M3QjIyMkRBMTNFMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlUXVvdGFNYW5hZ2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxREVGQ0IyMUU1NkMxQjkwMDBEOUU1RiAvKiBKU0RPTUJpbmRp
bmdJbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBK
U0RPTUJpbmRpbmdJbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NzA5Myw3ICsxNzA5MSw2IEBACiAJCQkJMUEzNzYzNkExQTJFNjhCQjAwOUE3RUUyIC8qIFN0b3Jh
Z2VOYW1lc3BhY2VQcm92aWRlci5oICovLAogCQkJCTQxREU3QzdBMjIyREExM0QwMDUzMkI2NSAv
KiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLywKIAkJCQk0MURFN0M3QjIyMkRBMTNFMDA1MzJC
NjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5oICovLAotCQkJCTQxREU3Qzc4MjIyREExM0MwMDUz
MkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggKi8sCiAJCQkJNTE2NkQzQ0MxRThFRDQxMTAwQUQ2
MkUzIC8qIFN0b3JhZ2VUeXBlLmggKi8sCiAJCQkpOwogCQkJaW5kZW50V2lkdGggPSA0OwpAQCAt
MzIyMTIsNyArMzIyMDksNiBAQAogCQkJCUM1MEQwRTgzMEZGNDI3MjkwMEFDMjY0NCAvKiBTdG9y
YWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTM3NjM2QzFBMkU2OEJCMDA5QTdF
RTIgLyogU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MURF
N0M3QzIyMkRBMTQzMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNDFERTdDN0QyMjJEQTE0ODAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YVVzZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTVDOUVGMkYzMjFGMDYxOTAwMDNCREM1NiAvKiBTdG9yYWdlU2Vz
c2lvblByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTY2RDNDRDFFOEVENDhGMDBBRDYy
RTMgLyogU3RvcmFnZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2ODJEMjAwMUY3OTc4MzAw
MEM4NjNEQiAvKiBTdG9yZWRDcmVkZW50aWFsc1BvbGljeS5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAppbmRleCA4NTI1
NzUyZTYzMzQ3OTUzMGVmMTRlY2I3NGY4NWJhZjY4ZDljNTViLi5hMzE5NjRlM2E2ODE2ZmRlMjJj
Mzc1NDM4ZTNlMmNkZGI4YjMxN2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVF1b3RhTWFuYWdlci5jcHAKQEAgLTI3LDIxMyArMjcsMTIzIEBACiAjaW5jbHVkZSAiU3Rv
cmFnZVF1b3RhTWFuYWdlci5oIgogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlN0
b3JhZ2VRdW90YVVzZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdG9yYWdlUXVvdGFNYW5hZ2VyOjp+U3RvcmFnZVF1b3Rh
TWFuYWdlcigpCitSZWY8U3RvcmFnZVF1b3RhTWFuYWdlcj4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6
Y3JlYXRlKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmIHVzYWdlR2V0dGVyLCBRdW90YUlu
Y3JlYXNlUmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3RlcikKIHsKLSAgICB3aGlsZSAo
IW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMu
dGFrZUZpcnN0KCkuY2FsbGJhY2soRGVjaXNpb246OkRlbnkpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFN0b3JhZ2VRdW90YU1hbmFnZXIocXVvdGEsIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBX
VEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKSk7CiB9CiAKLXVpbnQ2NF90IFN0b3JhZ2VR
dW90YU1hbmFnZXI6OnNwYWNlVXNhZ2UoKSBjb25zdAorU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3Rv
cmFnZVF1b3RhTWFuYWdlcih1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRl
ciwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpCisgICAg
OiBtX3F1b3RhKHF1b3RhKQorICAgICwgbV91c2FnZUdldHRlcihXVEZNb3ZlKHVzYWdlR2V0dGVy
KSkKKyAgICAsIG1fcXVvdGFJbmNyZWFzZVJlcXVlc3RlcihXVEZNb3ZlKHF1b3RhSW5jcmVhc2VS
ZXF1ZXN0ZXIpKQorICAgICwgbV93b3JrUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlN0b3JhZ2VR
dW90YU1hbmFnZXIgQmFja2dyb3VuZCBRdWV1ZSIsIFdvcmtRdWV1ZTo6VHlwZTo6U2VyaWFsKSkK
KyAgICAsIG1faW5pdGlhbFF1b3RhKHF1b3RhKQogewotICAgIHVpbnQ2NF90IHVzYWdlID0gMDsK
LSAgICBmb3IgKGF1dG8mIHVzZXIgOiBtX3VzZXJzKQotICAgICAgICB1c2FnZSArPSB1c2VyLT5z
cGFjZVVzZWQoKTsKLSAgICByZXR1cm4gdXNhZ2U7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFu
YWdlcjo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpCit2b2lkIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCh1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCwg
UmVxdWVzdENhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgaWYgKCFtX3F1b3RhKQotICAgICAg
ICByZXR1cm47CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGF1dG8gZGVmYXVs
dFF1b3RhU3RlcCA9IG1fcXVvdGEgLyAxMDsKLSAgICBtX3F1b3RhID0gc3RkOjptYXgobV9xdW90
YSwgZGVmYXVsdFF1b3RhU3RlcCAqICgoc3BhY2VVc2FnZSgpIC8gZGVmYXVsdFF1b3RhU3RlcCkg
KyAxKSk7Ci19Ci0KLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZO
ZWVkZWQoKQotewotICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPFN0b3JhZ2VRdW90YVVzZXIqPiB1c2Vy
c1RvSW5pdGlhbGl6ZTsKLSAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogbV9wZW5kaW5nSW5pdGlh
bGl6YXRpb25Vc2VycykgewotICAgICAgICBpZiAoa2V5VmFsdWUudmFsdWUgPT0gV2hlbkluaXRp
YWxpemVkQ2FsbGVkOjpObykgewotICAgICAgICAgICAga2V5VmFsdWUudmFsdWUgPSBXaGVuSW5p
dGlhbGl6ZWRDYWxsZWQ6OlllczsKLSAgICAgICAgICAgIHVzZXJzVG9Jbml0aWFsaXplLmFwcGVu
ZChrZXlWYWx1ZS5rZXkpOworICAgIC8vIEZhc3QgcGF0aC4KKyAgICBpZiAobV9xdW90YUNvdW50
RG93bkxvY2sudHJ5TG9jaygpKSB7CisgICAgICAgIGlmICh0cnlHcmFudFJlcXVlc3Qoc3BhY2VS
ZXF1ZXN0ZWQpKSB7CisgICAgICAgICAgICBtX3F1b3RhQ291bnREb3duTG9jay51bmxvY2soKTsK
KyAgICAgICAgICAgIGNhbGxiYWNrKERlY2lzaW9uOjpHcmFudCk7CisgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9xdW90YUNvdW50RG93bkxvY2sudW5sb2NrKCk7CiAg
ICAgfQotICAgIGZvciAoYXV0byogdXNlciA6IHVzZXJzVG9Jbml0aWFsaXplKSB7Ci0gICAgICAg
IGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmNvbnRhaW5zKHVzZXIpKQotICAgICAg
ICAgICAgYXNrVXNlclRvSW5pdGlhbGl6ZSgqdXNlcik7Ci0gICAgfQorCisgICAgbV9jYWxsYmFj
a3MuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2go
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc3BhY2VSZXF1ZXN0ZWRdIHsK
KyAgICAgICAgYXV0byBkZWNpc2lvbiA9IHJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZChz
cGFjZVJlcXVlc3RlZCk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZGVjaXNpb25dIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
bV9jYWxsYmFja3MuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbGJhY2sgPSBtX2Nh
bGxiYWNrcy50YWtlRmlyc3QoKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGRlY2lzaW9uKTsKKyAg
ICAgICAgfSk7CisgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNl
clRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQorU3RvcmFnZVF1b3RhTWFuYWdl
cjo6RGVjaXNpb24gU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5k
VGhyZWFkKHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkKQogewotICAgIHVzZXIud2hlbkluaXRpYWxp
emVkKFt0aGlzLCAmdXNlciwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oKSB7Ci0gICAg
ICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CiAKLSAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMu
cmVtb3ZlKCZ1c2VyKSkKLSAgICAgICAgICAgIG1fdXNlcnMuYWRkKCZ1c2VyKTsKKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX3F1b3RhQ291bnREb3duTG9jayk7CiAKLSAgICAgICAgaWYgKCFtX3Bl
bmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICBpZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkKKyAgICAgICAgcmV0dXJu
IERlY2lzaW9uOjpHcmFudDsKIAotICAgICAgICAvLyBNYWtlIHN1cmUgcXVvdGEgaXMgc2V0IGJl
Zm9yZSBoYW5kbGluZyBmaXJzdCByZXF1ZXN0LgotICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0
ZTo6VW5pbml0aWFsaXplZCkgewotICAgICAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VV
c2FnZSgpOwotICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJl
cXVlc3Q7Ci0gICAgICAgIH0KKyAgICBtX3VzYWdlID0gbV91c2FnZUdldHRlcigpOworICAgIHVw
ZGF0ZVF1b3RhQmFzZWRPblVzYWdlKCk7CisgICAgbV9xdW90YUNvdW50RG93biA9IG1fdXNhZ2Ug
PCBtX3F1b3RhID8gbV9xdW90YSAtIG1fdXNhZ2UgOiAwOworICAgIGlmICh0cnlHcmFudFJlcXVl
c3Qoc3BhY2VSZXF1ZXN0ZWQpKQorICAgICAgICByZXR1cm4gRGVjaXNpb246OkdyYW50OwogCi0g
ICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKLSAgICB9KTsKLX0KKyAgICAvLyBC
bG9jayB0aGlzIHRocmVhZCB1bnRpbCBnZXR0aW5nIGRlY3Npb24gZm9yIHF1b3RhIGluY3JlYXNl
LgorICAgIEJpbmFyeVNlbWFwaG9yZSBzZW1hcGhvcmU7CisgICAgY2FsbE9uTWFpblRocmVhZChb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzcGFjZVJlcXVlc3RlZCwgJnNl
bWFwaG9yZV0geworICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVv
dGFNYW5hZ2VyIGFza3MgZm9yIHF1b3RhIGluY3JlYXNlICUiIFBSSXU2NCwgdGhpcywgc3BhY2VS
ZXF1ZXN0ZWQpOworICAgICAgICBtX3F1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIobV9xdW90YSwgbV91
c2FnZSwgc3BhY2VSZXF1ZXN0ZWQsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksICZzZW1hcGhvcmVdKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkgeworICAgICAgICAg
ICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlciByZWNlaXZl
cyBxdW90YSBpbmNyZWFzZSByZXNwb25zZSAlIiBQUkl1NjQsIHRoaXMsIG5ld1F1b3RhID8gKm5l
d1F1b3RhIDogMCk7CisgICAgICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi12b2lk
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFkZFVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKLXsK
LSAgICBBU1NFUlQoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnMoJnVzZXIp
KTsKLSAgICBBU1NFUlQoIW1fdXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBtX3BlbmRpbmdJ
bml0aWFsaXphdGlvblVzZXJzLmFkZCgmdXNlciwgV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpObyk7
CisgICAgICAgICAgICBpZiAobmV3UXVvdGEpCisgICAgICAgICAgICAgICAgbV9xdW90YSA9ICpu
ZXdRdW90YTsKIAotICAgIGlmICghbV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAg
ICBhc2tVc2VyVG9Jbml0aWFsaXplKHVzZXIpOwotfQorICAgICAgICAgICAgc2VtYXBob3JlLnNp
Z25hbCgpOworICAgICAgICB9KTsKKyAgICB9KTsKIAotYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpzaG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3QKLXsK
LSAgICBpZiAoIXNwYWNlSW5jcmVhc2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzZW1h
cGhvcmUud2FpdCgpOwogCi0gICAgcmV0dXJuIHNwYWNlVXNhZ2UoKSArIHNwYWNlSW5jcmVhc2Ug
PiBtX3F1b3RhOworICAgIG1fdXNhZ2UgPSBtX3VzYWdlR2V0dGVyKCk7CisgICAgbV9xdW90YUNv
dW50RG93biA9IG1fdXNhZ2UgPCBtX3F1b3RhID8gbV9xdW90YSAtIG1fdXNhZ2UgOiAwOworICAg
IHJldHVybiB0cnlHcmFudFJlcXVlc3Qoc3BhY2VSZXF1ZXN0ZWQpID8gRGVjaXNpb246OkdyYW50
IDogRGVjaXNpb246OkRlbnk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3Zl
VXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQorYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp0
cnlHcmFudFJlcXVlc3QodWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQpCiB7Ci0gICAgQVNTRVJUKG1f
dXNlcnMuY29udGFpbnMoJnVzZXIpIHx8IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29u
dGFpbnMoJnVzZXIpKTsKLSAgICBtX3VzZXJzLnJlbW92ZSgmdXNlcik7Ci0gICAgaWYgKG1fcGVu
ZGluZ0luaXRpYWxpemF0aW9uVXNlcnMucmVtb3ZlKCZ1c2VyKSAmJiBtX3BlbmRpbmdJbml0aWFs
aXphdGlvblVzZXJzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBXaGVuIGJlaW5nIGNsZWFyZWQs
IHF1b3RhIHVzZXJzIG1heSByZW1vdmUgdGhlbXNlbHZlcyBhbmQgYWRkIHRoZW1zZWx2ZXMgdG8g
dHJpZ2dlciByZWluaXRpYWxpemF0aW9uLgotICAgICAgICAvLyBMZXQncyB3YWl0IGZvciBhZGRV
c2VyIHRvIGJlIGNhbGxlZCBiZWZvcmUgcHJvY2Vzc2luZyBwZW5kaW5nIHJlcXVlc3RzLgotICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMp
XSB7Ci0gICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKLSAg
ICAgICAgfSk7CisgICAgQVNTRVJUKG1fcXVvdGFDb3VudERvd25Mb2NrLmlzTG9ja2VkKCkpOwor
ICAgIGlmIChzcGFjZVJlcXVlc3RlZCA8PSBtX3F1b3RhQ291bnREb3duKSB7CisgICAgICAgIG1f
cXVvdGFDb3VudERvd24gLT0gc3BhY2VSZXF1ZXN0ZWQ7CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9Ci0KLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIFJlcXVlc3RDYWxsYmFjayYmIGNh
bGxiYWNrKQorICAgIAordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVRdW90YUJhc2Vk
T25Vc2FnZSgpCiB7Ci0gICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShj
YWxsYmFjaykgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXNwYWNlSW5j
cmVhc2UpIHsKLSAgICAgICAgY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAo
IW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcGVu
ZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spIH0p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZEFza0Zvck1vcmVTcGFj
ZShzcGFjZUluY3JlYXNlKSkgewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBz
cGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKLQotICAgICAgICAvLyBUcnkgcHJv
Y2Vzc2luZyByZXF1ZXN0IGFnYWluIGFmdGVyIG1ha2luZyBzdXJlIHVzYWdlIGlzIGFjY3VyYXRl
LgotICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKLSAgICAgICAg
Zm9yIChhdXRvJiB1c2VyIDogY29weVRvVmVjdG9yKG1fdXNlcnMpKQotICAgICAgICAgICAgdXNl
ci0+Y29tcHV0ZVNwYWNlVXNlZCgpOwotCi0gICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6
YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9z
dGF0ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgIGFza0Zvck1vcmVTcGFj
ZShzcGFjZUluY3JlYXNlKTsKLSAgICAgICAgcmV0dXJuOworICAgIC8vIFdoZW4gU3RvcmFnZVF1
b3RhTWFuYWdlciBpcyB1c2VkIGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugd2FudCB0byBtYWtlIHN1
cmUgaXRzIGluaXRpYWwgcXVvdGEgaXMgYmlnZ2VyIHRoYW4gY3VycmVudCBkaXNrIHVzYWdlLAor
ICAgIC8vIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHF1b3RhIHdhcyBpbmNyZWFz
ZWQgdG8gYXQgbGVhc3QgdGhlIGRpc2sgdXNhZ2UgdW5kZXIgdXNlcidzIHBlcm1pc3Npb24gYmVm
b3JlLgorICAgIEFTU0VSVChtX3F1b3RhQ291bnREb3duTG9jay5pc0xvY2tlZCgpKTsKKyAgICBp
ZiAoIW1fcXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlKSB7CisgICAgICAgIG1fcXVvdGFVcGRhdGVk
QmFzZWRPblVzYWdlID0gdHJ1ZTsKKyAgICAgICAgYXV0byBkZWZhdWx0UXVvdGFTdGVwID0gbV9x
dW90YSAvIDEwOworICAgICAgICBtX3F1b3RhID0gc3RkOjptYXgobV9xdW90YSwgZGVmYXVsdFF1
b3RhU3RlcCAqICgobV91c2FnZSAvIGRlZmF1bHRRdW90YVN0ZXApICsgMSkpOwogICAgIH0KLQot
ICAgIG1fc3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgIGNhbGxi
YWNrKERlY2lzaW9uOjpHcmFudCk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNr
Rm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpCit2b2lkIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlKCkKIHsKLSAgICBBU1NFUlQoc2hv
dWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpKTsKLSAgICBBU1NFUlQobV9zdGF0ZSA9
PSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlKTsKLQotICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2Us
ICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSAlIiBQUkl1NjQsIHRo
aXMsIHNwYWNlSW5jcmVhc2UpOwotICAgIG1fc3RhdGUgPSBTdGF0ZTo6V2FpdGluZ0ZvclNwYWNl
SW5jcmVhc2VSZXNwb25zZTsKLSAgICBtX3NwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIobV9xdW90YSwg
c3BhY2VVc2FnZSgpLCBzcGFjZUluY3JlYXNlLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cigqdGhpcyldKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkgewotICAgICAgICBpZiAoIXdl
YWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJFTEVBU0VfTE9HKFN0b3Jh
Z2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSByZWNlaXZlZCBy
ZXNwb25zZSAlIiBQUkl1NjQsIHRoaXMsIG5ld1F1b3RhID8gKm5ld1F1b3RhIDogMCk7Ci0KLSAg
ICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgIHByb2Nl
c3NQZW5kaW5nUmVxdWVzdHMobmV3UXVvdGEpOwotICAgIH0pOworICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fcXVvdGFDb3VudERvd25Mb2NrKTsKKyAgICBtX3F1b3RhID0gbV9pbml0aWFsUXVvdGE7
CisgICAgbV9xdW90YUNvdW50RG93biA9IDA7CisgICAgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNh
Z2UgPSBmYWxzZTsKIH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGlu
Z1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkKK3ZvaWQgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cmVzZXRRdW90YSgpCiB7Ci0gICAgaWYgKG1fcGVuZGluZ1JlcXVlc3RzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG5ld1F1b3RhKQotICAgICAgICBtX3F1
b3RhID0gKm5ld1F1b3RhOwotCi0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OldhaXRpbmdGb3JT
cGFjZUluY3JlYXNlUmVzcG9uc2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wZW5k
aW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX3N0YXRlID09IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2UpIHsKLSAgICAgICAgYXV0
byByZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIGJvb2wg
c2hvdWxkQWxsb3dSZXF1ZXN0ID0gIXNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNl
SW5jcmVhc2UpOwotCi0gICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VR
dW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMgZmlyc3QgcmVxdWVzdCBkZWNpc2lv
biBpcyAlZCIsIHRoaXMsIHNob3VsZEFsbG93UmVxdWVzdCk7Ci0KLSAgICAgICAgbV9zdGF0ZSA9
IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3Q7Ci0gICAgICAgIHJlcXVlc3QuY2FsbGJh
Y2soc2hvdWxkQWxsb3dSZXF1ZXN0ID8gRGVjaXNpb246OkdyYW50IDogRGVjaXNpb246OkRlbnkp
OwotICAgIH0KLQotICAgIHdoaWxlICghbV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGF1dG8mIHJlcXVlc3QgPSBtX3BlbmRpbmdSZXF1ZXN0cy5maXJzdCgpOwotCi0gICAg
ICAgIGlmIChzaG91bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNlKSkgewot
ICAgICAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVz
dCkgewotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q29tcHV0aW5nU3BhY2VVc2Vk
OwotICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdXNlciA6IGNvcHlUb1ZlY3RvcihtX3VzZXJz
KSkKLSAgICAgICAgICAgICAgICAgICAgdXNlci0+Y29tcHV0ZVNwYWNlVXNlZCgpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBtX3N0YXRlID0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZTsKLSAgICAgICAgICAgIHVpbnQ2
NF90IHNwYWNlSW5jcmVhc2UgPSAwOwotICAgICAgICAgICAgZm9yIChhdXRvJiBwZW5kaW5nUmVx
dWVzdCA6IG1fcGVuZGluZ1JlcXVlc3RzKQotICAgICAgICAgICAgICAgIHNwYWNlSW5jcmVhc2Ug
Kz0gcGVuZGluZ1JlcXVlc3Quc3BhY2VJbmNyZWFzZTsKLSAgICAgICAgICAgIGFza0Zvck1vcmVT
cGFjZShzcGFjZUluY3JlYXNlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgICAg
ICBtX3BlbmRpbmdSZXF1ZXN0cy50YWtlRmlyc3QoKS5jYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQp
OwotICAgIH0KKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3F1b3RhQ291bnREb3duTG9jayk7Cisg
ICAgbV9xdW90YSA9IG1faW5pdGlhbFF1b3RhOworICAgIG1fcXVvdGFDb3VudERvd24gPSAwOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVF1b3RhTWFuYWdlci5oCmluZGV4IDA5NTY2MzA2ZjU1OTFhYmI1OWQwYWZkOGVlYTQ4Njc5
YTVmNmM2M2MuLjU5OWI4M2QxZjY2MjY4YWFkZmI0NDhkYWRhMWUzYjJmMmI4YTdlMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCkBAIC0yNSw3NyAr
MjUsNTYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDbGllbnRPcmlnaW4uaCIKICNp
bmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU3RvcmFnZVF1b3RhVXNlcjsKLQotY2xhc3MgU3RvcmFn
ZVF1b3RhTWFuYWdlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTdG9yYWdlUXVvdGFNYW5hZ2Vy
PiB7CitjbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPFN0b3JhZ2VRdW90YU1hbmFnZXI+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U3RvcmFnZVF1
b3RhTWFuYWdlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IHVzaW5nIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQodWludDY0
X3QgcXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmKT47Ci0gICAgU3Rv
cmFnZVF1b3RhTWFuYWdlcih1aW50NjRfdCBxdW90YSwgU3BhY2VJbmNyZWFzZVJlcXVlc3RlciYm
IHNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIpCi0gICAgICAgIDogbV9xdW90YShxdW90YSkKLSAgICAg
ICAgLCBtX3NwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIoV1RGTW92ZShzcGFjZUluY3JlYXNlUmVxdWVz
dGVyKSkKLSAgICB7Ci0gICAgfQotICAgIFdFQkNPUkVfRVhQT1JUIH5TdG9yYWdlUXVvdGFNYW5h
Z2VyKCk7CisgICAgdXNpbmcgVXNhZ2VHZXR0ZXIgPSBXVEY6OkZ1bmN0aW9uPHVpbnQ2NF90KCk+
OworICAgIHVzaW5nIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQo
dWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50VXNhZ2UsIHVpbnQ2NF90IHJl
cXVlc3RlZEluY3JlYXNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVpbnQ2NF90
Pik+JiYpPjsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFN0b3JhZ2VRdW90YU1hbmFn
ZXI+IGNyZWF0ZSh1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJl
cXVlc3RlciYmKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVmYXVsdFRoaXJk
UGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkgeyByZXR1cm4gcXVv
dGEgLyAxMDsgfQotCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBkZWZhdWx0UXVvdGEo
KSB7IHJldHVybiAxMDAwICogTUI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGRl
ZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB7IHJldHVybiBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhRnJv
bVBlck9yaWdpblF1b3RhKGRlZmF1bHRRdW90YSgpKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhZGRVc2VyKFN0b3JhZ2VRdW90YVVzZXImKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlbW92ZVVzZXIoU3RvcmFnZVF1b3RhVXNlciYpOwotCiAgICAgZW51bSBjbGFzcyBEZWNpc2lv
biB7IERlbnksIEdyYW50IH07CiAgICAgdXNpbmcgUmVxdWVzdENhbGxiYWNrID0gQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChEZWNpc2lvbik+OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVz
dFNwYWNlKHVpbnQ2NF90LCBSZXF1ZXN0Q2FsbGJhY2smJik7Ci0gICAgdm9pZCByZXNldFF1b3Rh
KHVpbnQ2NF90IG5ld1F1b3RhKSB7IG1fcXVvdGEgPSBuZXdRdW90YTsgfQorICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKHVpbnQ2NF90LCBSZXF1ZXN0Q2Fs
bGJhY2smJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRGVjaXNpb24gcmVxdWVzdFNwYWNlT25CYWNr
Z3JvdW5kVGhyZWFkKHVpbnQ2NF90KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRl
UXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOwotCi0gICAgZW51bSBjbGFzcyBTdGF0ZSB7Ci0gICAg
ICAgIFVuaW5pdGlhbGl6ZWQsCi0gICAgICAgIENvbXB1dGluZ1NwYWNlVXNlZCwKLSAgICAgICAg
V2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSwKLSAgICAgICAgQXNraW5nRm9yTW9yZVNw
YWNlLAotICAgICAgICBNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3QsCi0gICAgfTsKLSAgICBTdGF0
ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICAvLyBUZXN0IG9ubHkuCisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNldFF1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZSgpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRRdW90YSgpOwogCiBwcml2YXRlOgotICAgIHVp
bnQ2NF90IHNwYWNlVXNhZ2UoKSBjb25zdDsKLSAgICBib29sIHNob3VsZEFza0Zvck1vcmVTcGFj
ZSh1aW50NjRfdCBzcGFjZUluY3JlYXNlKSBjb25zdDsKLSAgICB2b2lkIGFza0Zvck1vcmVTcGFj
ZSh1aW50NjRfdCBzcGFjZUluY3JlYXNlKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZVVzZXJzSWZO
ZWVkZWQoKTsKLSAgICB2b2lkIGFza1VzZXJUb0luaXRpYWxpemUoU3RvcmFnZVF1b3RhVXNlciYp
OworICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYs
IFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJik7CisgICAgYm9vbCB0cnlHcmFudFJlcXVlc3QodWlu
dDY0X3QpOwogCi0gICAgdm9pZCBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2
NF90Pik7CisgICAgdm9pZCB1cGRhdGVRdW90YUJhc2VkT25Vc2FnZSgpOwogCisgICAgTG9jayBt
X3F1b3RhQ291bnREb3duTG9jazsKKyAgICB1aW50NjRfdCBtX3F1b3RhQ291bnREb3duIHsgMCB9
OwogICAgIHVpbnQ2NF90IG1fcXVvdGEgeyAwIH07CisgICAgdWludDY0X3QgbV91c2FnZSB7IDAg
fTsKIAotICAgIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIgbV9zcGFjZUluY3JlYXNlUmVxdWVzdGVy
OworICAgIFVzYWdlR2V0dGVyIG1fdXNhZ2VHZXR0ZXI7CisgICAgUXVvdGFJbmNyZWFzZVJlcXVl
c3RlciBtX3F1b3RhSW5jcmVhc2VSZXF1ZXN0ZXI7CiAKLSAgICBlbnVtIGNsYXNzIFdoZW5Jbml0
aWFsaXplZENhbGxlZCB7IE5vLCBZZXMgfTsKLSAgICBIYXNoTWFwPFN0b3JhZ2VRdW90YVVzZXIq
LCBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ+IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnM7Ci0g
ICAgSGFzaFNldDxTdG9yYWdlUXVvdGFVc2VyKj4gbV91c2VyczsKKyAgICBEZXF1ZTxSZXF1ZXN0
Q2FsbGJhY2s+IG1fY2FsbGJhY2tzOworICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOwog
Ci0gICAgc3RydWN0IFBlbmRpbmdSZXF1ZXN0IHsKLSAgICAgICAgdWludDY0X3Qgc3BhY2VJbmNy
ZWFzZTsKLSAgICAgICAgUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrOwotICAgIH07Ci0gICAgRGVx
dWU8UGVuZGluZ1JlcXVlc3Q+IG1fcGVuZGluZ1JlcXVlc3RzOworICAgIGJvb2wgbV9xdW90YVVw
ZGF0ZWRCYXNlZE9uVXNhZ2UgeyBmYWxzZSB9OwogCi0gICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRl
OjpVbmluaXRpYWxpemVkIH07CisgICAgLy8gVGVzdCBvbmx5LgorICAgIHVpbnQ2NF90IG1faW5p
dGlhbFF1b3RhIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYjcxMGNlZWM2MGM1ZGU1MGM2MDlkMjMxYjBmMGRmOTY3NDk0OTQyMC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VRdW90YVVzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFN0b3JhZ2VRdW90YVVzZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgflN0
b3JhZ2VRdW90YVVzZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIHVpbnQ2NF90IHNwYWNl
VXNlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgpIHsg
fTsKLSAgICB2aXJ0dWFsIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjYWxsYmFjaykgeyBjYWxsYmFjaygpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCmluZGV4IDVmMjNjYzY2YWExMWY3ZDI4ZTc2MTVjY2I4NTEzNjdjMjAzMTViZTMuLjY1ZDZh
MDE2ZjUxYjAxZWRkNjg1YTAwMjk0MWQ0YjI3ZTNkNjM5MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC02NSw2ICs2NSw3IEBACiAj
aW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9DbGllbnRPcmlnaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZUphci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRE5TLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EZXByZWNhdGVkR2xvYmFs
U2V0dGluZ3MuaD4KQEAgLTMxNiw2ICszMTcsOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJgog
ICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwogICAgIHNldFNlc3Npb24oc2Vz
c2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwog
CisgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKKyAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5T
dG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVT
dG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNh
Y2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKICAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgpAQCAtMzI2LDcgKzMzMCw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycyYmCiAgICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVy
bWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICB9CiAjZW5kaWYKLSAgICBpbml0aWFsaXpl
U3RvcmFnZVF1b3RhKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAg
ICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKIApAQCAtNDM0LDI4ICs0MzcsMzkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJD
YWNoZWRDcmVkZW50aWFscygpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRh
U3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogeworICAgIGF1
dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lv
bklEOworCisgICAgYWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJh
bWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworCiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0gICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CisgICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQs
IHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKICAgICBpZiAocGFyZW50UHJvY2Vzc0hhc1NlcnZpY2VXb3JrZXJFbnRp
dGxlbWVudCgpKQotICAgICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihwYXJhbWV0ZXJzLm5l
dHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIHBhcmFtZXRlcnMuc2VydmljZVdvcmtl
clByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBhZGRTZXJ2aWNl
V29ya2VyU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCiAKLSAgICBtX3N0b3JhZ2VNYW5h
Z2VyU2V0LT5hZGQocGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklE
LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgaW5pdGlhbGl6ZVN0b3JhZ2VRdW90
YShwYXJhbWV0ZXJzKTsKKyAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBw
YXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCiAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6
OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
KTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShjb25z
dCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3ZvaWQgTmV0d29ya1By
b2Nlc3M6OmFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1
b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYgY2FjaGVSb290UGF0aEhhbmRsZSkKIHsKLSAgICBhdXRvJiBtYW5hZ2VycyA9ICBtX3N0b3Jh
Z2VRdW90YU1hbmFnZXJzLmVuc3VyZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5zZXNzaW9uSUQsIFtdIHsKLSAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsg
fTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgbWFuYWdlcnMuc2V0RGVmYXVsdFF1b3Rh
cyhwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBh
cnR5T3JpZ2luU3RvcmFnZVF1b3RhKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25T
dG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIGF1dG9baXRlciwgaXNOZXdFbnRyeV0gPSBt
X3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKKyAg
ICBpZiAoaXNOZXdFbnRyeSkgeworICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkoY2FjaGVSb290UGF0aEhhbmRsZSk7CisgICAgICAgIGl0ZXItPnZhbHVlID0gbWFr
ZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcj4oY2FjaGVSb290UGF0aCwgZGVmYXVs
dFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29y
a1Byb2Nlc3M6OnJlbW92ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVv
dGFNYW5hZ2Vyc0xvY2spOworICAgIEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vy
cy5jb250YWlucyhzZXNzaW9uSUQpKTsKKyAgICBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vy
cy5yZW1vdmUoc2Vzc2lvbklEKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5l
dHdvcmtTZXNzaW9uKGNvbnN0IEZ1bmN0aW9uPHZvaWQoTmV0d29ya1Nlc3Npb24mKT4mIGZ1bmN0
b3IpCkBAIC01NzYsOCArNTkwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Np
b24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogI2VuZGlmCiAKICAgICBtX3N0b3JhZ2VNYW5h
Z2VyU2V0LT5yZW1vdmUoc2Vzc2lvbklEKTsKLQotICAgIG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMu
cmVtb3ZlKHNlc3Npb25JRCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQpAQCAtMTQ2OCw5ICsxNDgwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vi
c2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2kKICAgICBp
ZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkg
JiYgIXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICBjbGVhckRpc2tDYWNoZShtb2Rp
ZmllZFNpbmNlLCBbY2xlYXJUYXNrc0hhbmRsZXIgPSBXVEZNb3ZlKGNsZWFyVGFza3NIYW5kbGVy
KV0geyB9KTsKIAotICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRh
VHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzKSB8fCB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6RE9NQ2FjaGUpKQotICAgICAgICBjbGVhclN0b3JhZ2VRdW90YShzZXNz
aW9uSUQpOwotCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFU
eXBlOjpBZENsaWNrQXR0cmlidXRpb25zKSkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya1Nl
c3Npb24gPSB0aGlzLT5uZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICAgICAgbmV0
d29ya1Nlc3Npb24tPmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKCk7CkBAIC0xNTYzLDE5ICsxNTcy
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW8KICAgICAgICAgfQogICAgICAgICBXZWJDb3Jl
OjpDcmVkZW50aWFsU3RvcmFnZTo6cmVtb3ZlU2Vzc2lvbkNyZWRlbnRpYWxzV2l0aE9yaWdpbnMo
b3JpZ2luRGF0YXMpOwogICAgIH0KLQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc3RvcmFnZSBx
dW90YSBjbGVhcmluZyBmb3IgdGhlc2Ugb3JpZ2lucy4KLX0KLQotdm9pZCBOZXR3b3JrUHJvY2Vz
czo6Y2xlYXJTdG9yYWdlUXVvdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQotewotICAgIGF1
dG8gaXRlcmF0b3IgPSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsKLSAg
ICBpZiAoaXRlcmF0b3IgPT0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbmQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byYgbWFuYWdlcnMgPSBpdGVyYXRvci0+dmFsdWU7Ci0gICAgZm9y
IChhdXRvJiBtYW5hZ2VyIDogbWFuYWdlcnMubWFuYWdlcnNQZXJPcmlnaW4oKSkKLSAgICAgICAg
bWFuYWdlci52YWx1ZS0+cmVzZXRRdW90YShtYW5hZ2Vycy5kZWZhdWx0UXVvdGEobWFuYWdlci5r
ZXkpKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjE3
LDEwICsyMjEzLDEwIEBAIFJlZjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gTmV0d29ya1Byb2Nlc3M6
OmNyZWF0ZUlEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uCiAgICAgICAgIHBhdGggPSBt
X2lkYkRhdGFiYXNlUGF0aHMuZ2V0KHNlc3Npb25JRCk7CiAgICAgfQogCi0gICAgcmV0dXJuIElE
QlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklELCBwYXRoLCBbdGhpcywgd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBh
dXRvJiBvcmlnaW4pIC0+IFN0b3JhZ2VRdW90YU1hbmFnZXIqIHsKKyAgICByZXR1cm4gSURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIHBhdGgsIFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSURdKGNvbnN0IGF1dG8mIG9yaWdpbikgLT4gUmVm
UHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gJnRoaXMtPnN0b3JhZ2VRdW90
YU1hbmFnZXIoc2Vzc2lvbklELCBvcmlnaW4pOworICAgICAgICByZXR1cm4gc3RvcmFnZVF1b3Rh
TWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbik7CiAgICAgfSk7CiB9CiAKQEAgLTIzMDcsOCArMjMw
MywxOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJgogICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
Ojpjb25zdW1lUGVybWFuZW50bHkoaGFuZGxlKTsKICAgICAgICAgaWYgKCFpbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnkuaXNFbXB0eSgpKQogICAgICAgICAgICAgcG9zdFN0b3JhZ2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJk5ldHdvcmtQcm9jZXNzOjplbnN1cmVQYXRoRXhpc3Rz
LCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpKTsKKyAgICAgICAgc2V0U2Vzc2lvblN0b3JhZ2VR
dW90YU1hbmFnZXJJREJSb290UGF0aChzZXNzaW9uSUQsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSk7CiAgICAgfQogfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRTZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlcklEQlJvb3RQYXRoKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3Ry
aW5nJiBpZGJSb290UGF0aCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIGF1dG8qIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VyID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7CisgICAg
QVNTRVJUKHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKTsKKyAgICBzZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlci0+c2V0SURCUm9vdFBhdGgoaWRiUm9vdFBhdGgpOworfQorCiAjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnN5bmNMb2Nh
bFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpA
QCAtMjMyNSw5ICsyMzMxLDE0IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyTGVnYWN5UHJp
dmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKCkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6dXBkYXRl
UXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAgICBhdXRvJiBtYW5hZ2VyID0gc3Rv
cmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbik7Ci0gICAgbWFuYWdlci5yZXNldFF1
b3RhKG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuZmluZChzZXNzaW9uSUQpLT52YWx1ZS5kZWZhdWx0
UXVvdGEob3JpZ2luKSk7Ci0gICAgbWFuYWdlci51cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdl
KCk7CisgICAgYXV0byBzdG9yYWdlUXVvdGFNYW5hZ2VyID0gdGhpcy0+c3RvcmFnZVF1b3RhTWFu
YWdlcihzZXNzaW9uSUQsIG9yaWdpbik7CisgICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVzZXRR
dW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVz
ZXRRdW90YSgpCit7CisgICAgZm9yIChhdXRvJiBzdG9yYWdlUXVvdGFNYW5hZ2VyIDogZXhpc3Rp
bmdTdG9yYWdlUXVvdGFNYW5hZ2VycygpKQorICAgICAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5y
ZXNldFF1b3RhKCk7CiB9CiAKICNpZiBFTkFCTEUoU0FOREJPWF9FWFRFTlNJT05TKQpAQCAtMjQw
NCw2MiArMjQxNSw0OCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXF1ZXN0U3RvcmFnZVNwYWNl
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50TwogICAgIHBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3NQcm94eTo6UmVxdWVzdFN0b3JhZ2VTcGFjZSB7IHNlc3Npb25JRCwgb3JpZ2luLCBxdW90YSwg
Y3VycmVudFNpemUsIHNwYWNlUmVxdWlyZWQgfSwgV1RGTW92ZShjYWxsYmFjayksIDApOwogfQog
Ci1jbGFzcyBRdW90YVVzZXJJbml0aWFsaXplciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9y
YWdlUXVvdGFVc2VyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBleHBsaWNpdCBRdW90YVVzZXJJbml0aWFsaXplcihTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5h
Z2VyKQotICAgICAgICA6IG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKLSAgICB7Ci0g
ICAgICAgIG1hbmFnZXIuYWRkVXNlcigqdGhpcyk7Ci0gICAgfQotCi0gICAgflF1b3RhVXNlcklu
aXRpYWxpemVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgICAgICBt
X21hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgICAgICBpZiAobV9jYWxsYmFjaykKLSAg
ICAgICAgICAgIG1fY2FsbGJhY2soKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gU3RvcmFn
ZVF1b3RhVXNlciBBUEkuCi0gICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgZmluYWwKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9CitSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VR
dW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4m
IG9yaWdpbikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2Vyc0xvY2spOworICAgIGF1dG8qIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyID0gbV9z
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7CisgICAgaWYgKCFzZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICB2
b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2sp
IGZpbmFsCi0gICAgewotICAgICAgICBtX2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7Ci0g
ICAgfQorICAgIFN0cmluZyBpZGJSb290UGF0aDsKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKKyAgICBpZGJSb290UGF0aCA9IHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5pZGJSb290
UGF0aCgpOworI2VuZGlmCisgICAgU3RvcmFnZVF1b3RhTWFuYWdlcjo6VXNhZ2VHZXR0ZXIgdXNh
Z2VHZXR0ZXIgPSBbY2FjaGVSb290UGF0aCA9IHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5j
YWNoZVJvb3RQYXRoKCksIGlkYlJvb3RQYXRoLCBvcmlnaW5dKCkgeworICAgICAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsgICAgCiAKLSAgICBXZWFrUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+
IG1fbWFuYWdlcjsKLSAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IG1fY2FsbGJhY2s7Ci19
OworICAgICAgICB1aW50NjRfdCB1c2FnZSA9IDA7CisgICAgICAgIHVzYWdlICs9IENhY2hlU3Rv
cmFnZTo6RW5naW5lOjpkaXNrVXNhZ2UoY2FjaGVSb290UGF0aCwgb3JpZ2luKTsKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICAgICAgdXNhZ2UgKz0gSURCU2VydmVyOjpJREJTZXJ2
ZXI6OmRpc2tVc2FnZShpZGJSb290UGF0aCwgb3JpZ2luKTsKKyNlbmRpZgogCi12b2lkIE5ldHdv
cmtQcm9jZXNzOjppbml0aWFsaXplUXVvdGFVc2VycyhTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5h
Z2VyLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2lu
KQotewotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBvcmlnaW4sIHVzZXIgPSBtYWtlVW5pcXVlPFF1b3Rh
VXNlckluaXRpYWxpemVyPihtYW5hZ2VyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgcmV0dXJuIHVz
YWdlOworICAgIH07CisgICAgU3RvcmFnZVF1b3RhTWFuYWdlcjo6UXVvdGFJbmNyZWFzZVJlcXVl
c3RlciBxdW90YUluY3JlYXNlUmVxdWVzdGVyID0gW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCBzZXNzaW9uSUQsIG9yaWdpbl0gKHVpbnQ2NF90IGN1cnJlbnRRdW90YSwgdWlu
dDY0X3QgY3VycmVudFNwYWNlLCB1aW50NjRfdCByZXF1ZXN0ZWRJbmNyZWFzZSwgYXV0byYmIGNh
bGxiYWNrKSB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgICAgIGlmICgh
d2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMtPmlkYlNlcnZlcihz
ZXNzaW9uSUQpLmluaXRpYWxpemVRdW90YVVzZXIob3JpZ2luKTsKLSAgICAgICAgQ2FjaGVTdG9y
YWdlOjpFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIoKnRoaXMsIHNlc3Npb25JRCwgb3JpZ2lu
LCBbdXNlciA9IFdURk1vdmUodXNlcildIHsgfSk7Ci0gICAgfSk7CisgICAgICAgICAgICBjYWxs
YmFjayh7IH0pOworICAgICAgICByZXF1ZXN0U3RvcmFnZVNwYWNlKHNlc3Npb25JRCwgb3JpZ2lu
LCBjdXJyZW50UXVvdGEsIGN1cnJlbnRTcGFjZSwgcmVxdWVzdGVkSW5jcmVhc2UsIFdURk1vdmUo
Y2FsbGJhY2spKTsKKyAgICB9OworCisgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VyLT5lbnN1cmVPcmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2VyKG9yaWdpbiwgc2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXItPmRlZmF1bHRRdW90YShvcmlnaW4pLCBXVEZNb3ZlKHVzYWdlR2V0dGVy
KSwgV1RGTW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKSk7CiB9CiAKLVN0b3JhZ2VRdW90YU1h
bmFnZXImIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCitWZWN0b3I8UmVmUHRyPFN0
b3JhZ2VRdW90YU1hbmFnZXI+PiBOZXR3b3JrUHJvY2Vzczo6ZXhpc3RpbmdTdG9yYWdlUXVvdGFN
YW5hZ2VycygpCiB7Ci0gICAgYXV0byYgc3RvcmFnZVF1b3RhTWFuYWdlcnMgPSBtX3N0b3JhZ2VR
dW90YU1hbmFnZXJzLmVuc3VyZShzZXNzaW9uSUQsIFtdIHsKLSAgICAgICAgcmV0dXJuIFN0b3Jh
Z2VRdW90YU1hbmFnZXJzIHsgfTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgcmV0dXJu
ICpzdG9yYWdlUXVvdGFNYW5hZ2Vycy5tYW5hZ2Vyc1Blck9yaWdpbigpLmVuc3VyZShvcmlnaW4s
IFt0aGlzLCAmc3RvcmFnZVF1b3RhTWFuYWdlcnMsIHNlc3Npb25JRCwgJm9yaWdpbl0gewotICAg
ICAgICBhdXRvIG1hbmFnZXIgPSBtYWtlVW5pcXVlPFN0b3JhZ2VRdW90YU1hbmFnZXI+KHN0b3Jh
Z2VRdW90YU1hbmFnZXJzLmRlZmF1bHRRdW90YShvcmlnaW4pLCBbdGhpcywgc2Vzc2lvbklELCBv
cmlnaW5dKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNw
YWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKLSAgICAgICAgICAgIHRoaXMtPnJlcXVlc3RT
dG9yYWdlU3BhY2Uoc2Vzc2lvbklELCBvcmlnaW4sIHF1b3RhLCBjdXJyZW50U3BhY2UsIHNwYWNl
SW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGluaXRp
YWxpemVRdW90YVVzZXJzKCptYW5hZ2VyLCBzZXNzaW9uSUQsIG9yaWdpbik7Ci0gICAgICAgIHJl
dHVybiBtYW5hZ2VyOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIFZlY3RvcjxSZWZQ
dHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4+IHJlc3VsdDsKKworICAgIGZvciAoYXV0byYgc2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXIgOiBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy52YWx1
ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8gc3RvcmFnZVF1b3RhTWFuYWdlciA6IHNlc3Npb25T
dG9yYWdlUXVvdGFNYW5hZ2VyLT5leGlzdGluZ1N0b3JhZ2VRdW90YU1hbmFnZXJzKCkpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0b3JhZ2VRdW90YU1hbmFnZXIpOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IGY2MmYwMWQzODBmNDAxMDU1
MmFhZDM4ODlhNDk3ZDUxMjZmOGEzNTMuLmQwOWU1MDJhMTY4N2Q3MTU0NmRmNDRjYTRkZTZkYzdi
MDBmYmNiZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgKQEAgLTI4NCw2ICsyODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckxlZ2FjeVBy
aXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpOwogCiAgICAgdm9pZCB1cGRhdGVRdW90YUJhc2Vk
T25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJik7CisgICAgdm9pZCByZXNldFF1b3RhKCk7CiAKICNpZiBFTkFCTEUoU0FOREJP
WF9FWFRFTlNJT05TKQogICAgIHZvaWQgZ2V0U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYmKT4mJik7CkBAIC0zMjcsNyArMzI4LDggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0QWRDbGlja0F0dHJpYnV0aW9uQ29udmVyc2lvblVSTEZvclRl
c3RpbmcoUEFMOjpTZXNzaW9uSUQsIFVSTCYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OwogICAgIHZvaWQgbWFya0FkQ2xpY2tBdHRyaWJ1dGlvbnNBc0V4cGlyZWRGb3JUZXN0aW5nKFBB
TDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCi0gICAgV2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYgc3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25J
RCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcj4+IGV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMoKTsKIAog
ICAgIHZvaWQgYWRkS2VwdEFsaXZlTG9hZChSZWY8TmV0d29ya1Jlc291cmNlTG9hZGVyPiYmKTsK
ICAgICB2b2lkIHJlbW92ZUtlcHRBbGl2ZUxvYWQoTmV0d29ya1Jlc291cmNlTG9hZGVyJik7CkBA
IC00NDIsNiArNDQ0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbGxlY3RJbmRleGVkRGF0YWJh
c2VPcmlnaW5zRm9yVmVyc2lvbihjb25zdCBTdHJpbmcmLCBIYXNoU2V0PFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YT4mKTsKICAgICBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YT4gaW5kZXhlZERhdGFiYXNlT3JpZ2lucyhjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIFJlZjxX
ZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcj4gY3JlYXRlSURCU2VydmVyKFBBTDo6U2Vzc2lv
bklEKTsKKyAgICB2b2lkIHNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgo
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgaWRiUm9vdFBhdGgpOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC00NjEsOCArNDY0LDQ0IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwZXJmb3JtTmV4dFN0b3JhZ2VUYXNrKCk7CiAgICAgdm9pZCBlbnN1cmVQYXRoRXhp
c3RzKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKLSAgICB2b2lkIGNsZWFyU3RvcmFnZVF1b3RhKFBB
TDo6U2Vzc2lvbklEKTsKLSAgICB2b2lkIGluaXRpYWxpemVTdG9yYWdlUXVvdGEoY29uc3QgV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmKTsKKyAgICBjbGFzcyBTZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlciB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoK
KyAgICAgICAgU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoY29uc3QgU3RyaW5nJiBjYWNoZVJv
b3RQYXRoLCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5
UXVvdGEpCisgICAgICAgICAgICA6IG1fY2FjaGVSb290UGF0aChjYWNoZVJvb3RQYXRoKQorICAg
ICAgICAgICAgLCBtX2RlZmF1bHRRdW90YShkZWZhdWx0UXVvdGEpCisgICAgICAgICAgICAsIG1f
ZGVmYXVsdFRoaXJkUGFydHlRdW90YShkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhKGNvbnN0IFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYgb3JpZ2luKSBjb25zdCB7IHJldHVybiBvcmlnaW4udG9wT3JpZ2luID09
IG9yaWdpbi5jbGllbnRPcmlnaW4gPyBtX2RlZmF1bHRRdW90YSA6IG1fZGVmYXVsdFRoaXJkUGFy
dHlRdW90YTsgfQorCisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
PiBlbnN1cmVPcmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2VyKFdlYkNvcmU6OkNsaWVudE9yaWdpbiBv
cmlnaW4sIHVpbnQ2NF90IHF1b3RhLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpVc2Fn
ZUdldHRlciYmIHVzYWdlR2V0dGVyLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpRdW90
YUluY3JlYXNlUmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3RlcikKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0b1tpdGVyLCBpc05ld0VudHJ5XSA9IG1fc3RvcmFnZVF1b3RhTWFuYWdl
cnMuYWRkKG9yaWdpbiwgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAoaXNOZXdFbnRyeSkKKyAg
ICAgICAgICAgICAgICBpdGVyLT52YWx1ZSA9IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6
OmNyZWF0ZShxdW90YSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdURk1vdmUocXVvdGFJbmNyZWFz
ZVJlcXVlc3RlcikpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIoKml0ZXItPnZhbHVl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2Vy
cygpIHsgcmV0dXJuIG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMudmFsdWVzKCk7IH0KKworICAgICAg
ICBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlUm9v
dFBhdGg7IH0KKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICAgICAgdm9pZCBzZXRJ
REJSb290UGF0aChjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKSB7IG1faWRiUm9vdFBhdGggPSBp
ZGJSb290UGF0aDsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV9pZGJSb290UGF0aDsgfQorI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAg
ICBTdHJpbmcgbV9jYWNoZVJvb3RQYXRoOworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQor
ICAgICAgICBTdHJpbmcgbV9pZGJSb290UGF0aDsKKyNlbmRpZgorICAgICAgICB1aW50NjRfdCBt
X2RlZmF1bHRRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90
YSgpIH07CisgICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YSB7IFdlYkNv
cmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB9OworICAg
ICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdpbiwgUmVmUHRyPFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXI+PiBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzOworICAgIH07CisgICAgdm9p
ZCBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgdWludDY0X3Qg
ZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJp
bmcmIGNhY2hlUm9vdFBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpOworICAgIHZvaWQg
cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQpOwogCiAgICAg
Ly8gQ29ubmVjdGlvbnMgdG8gV2ViUHJvY2Vzc2VzLgogICAgIEhhc2hNYXA8V2ViQ29yZTo6UHJv
Y2Vzc0lkZW50aWZpZXIsIFJlZjxOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4+IG1fd2Vi
UHJvY2Vzc0Nvbm5lY3Rpb25zOwpAQCAtNTMzLDIzICs1NzIsOCBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKICAgICAKLSAgICBj
bGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VycyB7Ci0gICAgcHVibGljOgotICAgICAgICB1aW50NjRf
dCBkZWZhdWx0UXVvdGEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pIGNvbnN0
IHsgcmV0dXJuIG9yaWdpbi50b3BPcmlnaW4gPT0gb3JpZ2luLmNsaWVudE9yaWdpbiA/IG1fZGVm
YXVsdFF1b3RhIDogbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhOyB9Ci0gICAgICAgIHZvaWQgc2V0
RGVmYXVsdFF1b3Rhcyh1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGly
ZFBhcnR5UXVvdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZGVmYXVsdFF1b3RhID0gZGVm
YXVsdFF1b3RhOwotICAgICAgICAgICAgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhID0gZGVmYXVs
dFRoaXJkUGFydHlRdW90YTsKLSAgICAgICAgfQotCi0gICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6
Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
cj4+JiBtYW5hZ2Vyc1Blck9yaWdpbigpIHsgcmV0dXJuIG1fbWFuYWdlcnNQZXJPcmlnaW47IH0K
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFF1b3RhIHsgV2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCkgfTsKLSAgICAgICAgdWludDY0
X3QgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
cjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgpIH07Ci0gICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6
Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
cj4+IG1fbWFuYWdlcnNQZXJPcmlnaW47Ci0gICAgfTsKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lv
bklELCBTdG9yYWdlUXVvdGFNYW5hZ2Vycz4gbV9zdG9yYWdlUXVvdGFNYW5hZ2VyczsKKyAgICBM
b2NrIG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jazsKKyAgICBIYXNoTWFwPFBBTDo6
U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI+PiBt
X3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyczsKIAogICAgIE9wdGlvblNldDxOZXR3b3JrQ2Fj
aGU6OkNhY2hlT3B0aW9uPiBtX2NhY2hlT3B0aW9uczsKICAgICBXZWJDb3JlOjpNZXNzYWdlUG9y
dENoYW5uZWxSZWdpc3RyeSBtX21lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMu
aW4KaW5kZXggMzY3NzY3NzQ4MGI4MmE0NDMzZjg1ZDI4MmIzZTVmYjgwNmE5MWU2My4uNThmZTVj
OWY2MDE4MzZhZWY1NjhkOWIzOTc4NTJhOTQxZWM1MjAzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0x
NTIsNiArMTUyLDcgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIg
ewogICAgIENsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5nTG9jYWxTdG9yYWdlKCkKIAogICAgIFVw
ZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2VGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgc3RydWN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4pCisgICAgUmVzZXRRdW90
YSgpCiAKICAgICBTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbiBhZENsaWNrQXR0cmlidXRpb24pCiAgICAg
RHVtcEFkQ2xpY2tBdHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+IChTdHJp
bmcgYWRDbGlja0F0dHJpYnV0aW9uU3RhdGUpIEFzeW5jCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKaW5kZXgg
ZWZlN2UxNWIwNWY3ZDI1NjEwOWU4NjMyZTJmMzA1ZTIxYzM2ODRiNi4uMzA4NTBkZTdlY2VjMDA0
MTQ4OTUyOTIxYjcwNDNiNWMwY2ZlZjhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcApAQCAtMTk2LDEz
ICsxOTYsNjMgQEAgdm9pZCBFbmdpbmU6OmNsZWFyQ2FjaGVzRm9yT3JpZ2luKE5ldHdvcmtQcm9j
ZXNzJiBuZXR3b3JrUHJvY2VzcywgUEFMOjpTZXNzaW9uSUQKICAgICB9KTsKIH0KIAotdm9pZCBF
bmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIoTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNz
LCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYg
Y2xpZW50T3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCitzdGF0aWMgdWludDY0X3QgZ2V0RGlyZWN0b3J5U2l6ZShjb25zdCBTdHJpbmcmIGRpcmVj
dG9yeVBhdGgpCit7CisgICAgdWludDY0X3QgZGlyZWN0b3J5U2l6ZSA9IDA7CisgICAgRGVxdWU8
U3RyaW5nPiBwYXRoczsKKyAgICBwYXRocy5hcHBlbmQoZGlyZWN0b3J5UGF0aCk7CisgICAgd2hp
bGUgKCFwYXRocy5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byBwYXRoID0gcGF0aHMudGFrZUZp
cnN0KCk7CisgICAgICAgIGlmIChGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkocGF0aCwgRmls
ZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKSB7CisgICAgICAgICAgICBh
dXRvIG5ld1BhdGhzID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShwYXRoLCAiKiJfcyk7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8mIG5ld1BhdGggOiBuZXdQYXRocykgeworICAgICAgICAgICAg
ICAgIC8vIEZpbGVzIGluIEJsb2JzIGRpcmVjdG9yeSBhcmUgaGFyZCBsaW5rLgorICAgICAgICAg
ICAgICAgIGF1dG8gZmlsZU5hbWUgPSBGaWxlU3lzdGVtOjpsYXN0Q29tcG9uZW50T2ZQYXRoSWdu
b3JpbmdUcmFpbGluZ1NsYXNoKG5ld1BhdGgpOworICAgICAgICAgICAgICAgIGlmIChmaWxlTmFt
ZSA9PSAiQmxvYnMiKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBwYXRocy5hcHBlbmQobmV3UGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7Cisg
ICAgICAgIEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHBhdGgsIGZpbGVTaXplKTsKKyAgICAgICAg
ZGlyZWN0b3J5U2l6ZSArPSBmaWxlU2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIGRpcmVjdG9yeVNp
emU7Cit9CisKK3VpbnQ2NF90IEVuZ2luZTo6ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdFBh
dGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQogewotICAgIGZyb20obmV0
d29ya1Byb2Nlc3MsIHNlc3Npb25JRCwgW2NsaWVudE9yaWdpbiwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYgZW5naW5lKSBtdXRhYmxlIHsKLSAg
ICAgICAgZW5naW5lLnJlYWRDYWNoZXNGcm9tRGlzayhjbGllbnRPcmlnaW4sIFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgY2FjaGVzT3JFcnJv
cikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9
KTsKLSAgICB9KTsKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAocm9vdFBh
dGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0cmluZyBzYWx0UGF0aCA9
IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyb290UGF0aCwgInNhbHQiX3Mp
OworICAgIGF1dG8gc2FsdCA9IHJlYWRPck1ha2VTYWx0KHNhbHRQYXRoKTsKKyAgICBpZiAoIXNh
bHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgS2V5IGtleShvcmlnaW4udG9wT3JpZ2luLnRv
U3RyaW5nKCksIG9yaWdpbi5jbGllbnRPcmlnaW4udG9TdHJpbmcoKSwgeyB9LCB7IH0sICpzYWx0
KTsKKyAgICBTdHJpbmcgZGlyZWN0b3J5UGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChyb290UGF0aCwga2V5Lmhhc2hBc1N0cmluZygpKTsKKworICAgIFN0cmluZyBz
aXplRmlsZVBhdGggPSBDYWNoZXM6OmNhY2hlc1NpemVGaWxlbmFtZShkaXJlY3RvcnlQYXRoKTsK
KyAgICBpZiAoYXV0byByZWNvcmRlZFNpemUgPSByZWFkU2l6ZUZpbGUoc2l6ZUZpbGVQYXRoKSkK
KyAgICAgICAgcmV0dXJuICpyZWNvcmRlZFNpemU7CisKKyAgICByZXR1cm4gZ2V0RGlyZWN0b3J5
U2l6ZShkaXJlY3RvcnlQYXRoKTsKK30KKwordm9pZCBFbmdpbmU6OnJlcXVlc3RTcGFjZShjb25z
dCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYm
IGNhbGxiYWNrKQoreworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgY2FsbGJh
Y2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpOworCisgICAg
UmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIg
PSBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmln
aW4pOworICAgIGlmICghc3RvcmFnZVF1b3RhTWFuYWdlcikKKyAgICAgICAgY2FsbGJhY2soV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpOworCisgICAgc3RvcmFn
ZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKHNwYWNlUmVxdWVzdGVkLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIEVuZ2luZTo6RW5naW5lKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgTmV0d29ya1Byb2Nlc3MmIHByb2Nlc3MsIFN0cmluZyYmIHJvb3RQYXRoKQpAQCAt
MzQxLDcgKzM5MSw3IEBAIHZvaWQgRW5naW5lOjpyZWFkQ2FjaGVzRnJvbURpc2soY29uc3QgV2Vi
Q29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIENhY2hlc0NhbGxiCiAKICAgICAgICAgYXV0byYg
Y2FjaGVzID0gbV9jYWNoZXMuZW5zdXJlKG9yaWdpbiwgWyZvcmlnaW4sIHRoaXNdIHsKICAgICAg
ICAgICAgIGF1dG8gcGF0aCA9IGNhY2hlc1Jvb3RQYXRoKG9yaWdpbik7Ci0gICAgICAgICAgICBy
ZXR1cm4gQ2FjaGVzOjpjcmVhdGUoKnRoaXMsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IG9yaWdp
biB9LCBXVEZNb3ZlKHBhdGgpLCBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2Vy
KG1fc2Vzc2lvbklELCBvcmlnaW4pKTsKKyAgICAgICAgICAgIHJldHVybiBDYWNoZXM6OmNyZWF0
ZSgqdGhpcywgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgb3JpZ2luIH0sIFdURk1vdmUocGF0aCkp
OwogICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiAKICAgICAgICAgaWYgKGNhY2hlcy0+aXNJ
bml0aWFsaXplZCgpKSB7CkBAIC00NzMsMTIgKzUyMywxMyBAQCB2b2lkIEVuZ2luZTo6cmVtb3Zl
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogICAgIH0pOwogfQogCi12b2lkIEVuZ2luZTo6
d3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90IHNpemUpCit2b2lkIEVu
Z2luZTo6d3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90IHNpemUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBDb21w
bGV0aW9uSGFuZGxlckNhbGxpbmdTY29wZSBjb21wbGV0aW9uSGFuZGxlckNhbGxlcihXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1faW9RdWV1ZS0+ZGlzcGF0Y2goW3BhdGggPSBwYXRoLmlzb2xhdGVk
Q29weSgpLCBzaXplXSgpIHsKKyAgICBtX2lvUXVldWUtPmRpc3BhdGNoKFtwYXRoID0gcGF0aC5p
c29sYXRlZENvcHkoKSwgc2l6ZSwgY29tcGxldGlvbkhhbmRsZXJDYWxsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyQ2FsbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIoZ2xvYmFsU2l6ZUZpbGVMb2NrKTsKICAgICAgICAgYXV0byBmaWxlSGFuZGxlID0gRmls
ZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7
CiAgICAgICAgIGF1dG8gY2xvc2VGaWxlSGFuZGxlciA9IG1ha2VTY29wZUV4aXQoWyZdIHsKQEAg
LTQ4OSw2ICs1NDAsOCBAQCB2b2lkIEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcm
IHBhdGgsIHVpbnQ2NF90IHNpemUpCiAKICAgICAgICAgRmlsZVN5c3RlbTo6dHJ1bmNhdGVGaWxl
KGZpbGVIYW5kbGUsIDApOwogICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlSGFu
ZGxlLCBTdHJpbmc6Om51bWJlcihzaXplKS51dGY4KCkuZGF0YSgpLCBTdHJpbmc6Om51bWJlcihz
aXplKS51dGY4KCkubGVuZ3RoKCkpOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbY29tcGxldGlvbkhhbmRsZXJDYWxsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyQ2Fs
bGVyKV0oKSBtdXRhYmxlIHsgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTUxMyw4ICs1NjYsOCBAQCBP
cHRpb25hbDx1aW50NjRfdD4gRW5naW5lOjpyZWFkU2l6ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
KQogICAgIGlmICghV1RGOjpjb252ZXJ0U2FmZWx5KGZpbGVTaXplLCBieXRlc1RvUmVhZCkpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyKGJ5
dGVzVG9SZWFkKTsKLSAgICBzaXplX3QgdG90YWxCeXRlc1JlYWQgPSBGaWxlU3lzdGVtOjpyZWFk
RnJvbUZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CisgICAg
VmVjdG9yPHVuc2lnbmVkIGNoYXI+IGJ1ZmZlcihieXRlc1RvUmVhZCk7CisgICAgc2l6ZV90IHRv
dGFsQnl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGVIYW5kbGUsIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlci5kYXRhKCkpLCBidWZmZXIuc2l6ZSgpKTsKICAgICBp
ZiAodG90YWxCeXRlc1JlYWQgIT0gYnl0ZXNUb1JlYWQpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZS5oCmluZGV4IGEzYWFhZjA5MDFjOTVlNjE1MDUyMTlkZDJjMWVi
N2Y2NTcyMGYwNTYuLjIyZWU2NmJjYTQ3NmJjZTJiY2E0YjJkNTFkYWNlOTU0N2FkNzE3Y2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmUuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURh
dGEuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50
T3JpZ2luLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg+CiAjaW5j
bHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTc5LDEyICs4MCwxNSBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgdm9pZCBpbml0aWFsaXplUXVvdGFVc2VyKE5ldHdvcmtQcm9jZXNzJiwgUEFMOjpTZXNz
aW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CiAKKyAgICBzdGF0aWMgdWludDY0X3QgZGlza1VzYWdlKGNvbnN0IFN0cmluZyYg
cm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHZvaWQgcmVxdWVz
dFNwYWNlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNwYWNlUmVxdWVz
dGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6
OkRlY2lzaW9uKT4mJik7CisKICAgICBib29sIHNob3VsZFBlcnNpc3QoKSBjb25zdCB7IHJldHVy
biAhIW1faW9RdWV1ZTt9CiAKICAgICB2b2lkIHdyaXRlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVu
YW1lLCBOZXR3b3JrQ2FjaGU6OkRhdGEmJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBs
ZXRpb25DYWxsYmFjayYmKTsKICAgICB2b2lkIHJlYWRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgTmV0d29ya0NhY2hlOjpEYXRhJiwgaW50
IGVycm9yKT4mJik7CiAgICAgdm9pZCByZW1vdmVGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUp
OwotICAgIHZvaWQgd3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmLCB1aW50NjRfdCBzaXplKTsK
KyAgICB2b2lkIHdyaXRlU2l6ZUZpbGUoY29uc3QgU3RyaW5nJiwgdWludDY0X3Qgc2l6ZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICBzdGF0aWMgT3B0aW9uYWw8dWludDY0X3Q+
IHJlYWRTaXplRmlsZShjb25zdCBTdHJpbmcmKTsKIAogICAgIGNvbnN0IFN0cmluZyYgcm9vdFBh
dGgoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RQYXRoOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUu
Y3BwCmluZGV4IDZmYzUzZTAzYzRkNjdhMDBmYTkxZjJiM2ZjZmJkZDdlMTE5NjhjZTMuLjJjMDMz
YzRmMGExMTIwNjZlYWYyYjc3ZTIyYjMxMGFhMmQxNGU3YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwCkBAIC00MDUsNyArNDA1LDcgQEAgdm9pZCBDYWNoZTo6cHV0KFZlY3RvcjxSZWNv
cmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmIGNhbGxiYWNrKQogICAg
IEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpPcGVuKTsKIAogICAgIFdlYkNvcmU6OkNhY2hlUXVl
cnlPcHRpb25zIG9wdGlvbnM7Ci0gICAgdWludDY0X3Qgc3BhY2VSZXF1aXJlZCA9IDA7CisgICAg
aW50NjRfdCBzcGFjZVJlcXVpcmVkID0gMDsKIAogICAgIGZvciAoYXV0byYgcmVjb3JkIDogcmVj
b3JkcykgewogICAgICAgICBhdXRvKiBzYW1lVVJMUmVjb3JkcyA9IHJlY29yZHNGcm9tVVJMKHJl
Y29yZC5yZXF1ZXN0LnVybCgpKTsKQEAgLTQxNyw2ICs0MTcsNyBAQCB2b2lkIENhY2hlOjpwdXQo
VmVjdG9yPFJlY29yZD4mJiByZWNvcmRzLCBSZWNvcmRJZGVudGlmaWVyc0NhbGxiYWNrJiYgY2Fs
bGJhY2spCiAgICAgICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkKICAgICAgICAgICAgIHNw
YWNlUmVxdWlyZWQgLT0gc2FtZVVSTFJlY29yZHMtPmF0KHBvc2l0aW9uKS5zaXplOwogICAgIH0K
KyAgICBzcGFjZVJlcXVpcmVkID0gc3BhY2VSZXF1aXJlZCA8IDA/IDAgOiBzcGFjZVJlcXVpcmVk
OwogCiAgICAgbV9jYWNoZXMucmVxdWVzdFNwYWNlKHNwYWNlUmVxdWlyZWQsIFtjYWNoZXMgPSBt
YWtlUmVmKG1fY2FjaGVzKSwgaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgcmVjb3JkcyA9IFdU
Rk1vdmUocmVjb3JkcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKE9wdGlvbmFsPERP
TUNhY2hlRW5naW5lOjpFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJv
cikgewpAQCAtNDUwLDcgKzQ1MSwxMCBAQCB2b2lkIENhY2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgV2ViQ29yZTo6Q2FjaGVRdWVyeU9wdGlvbgogICAgICAg
ICByZXR1cm4gc2hvdWxkUmVtb3ZlOwogICAgIH0pOwogCi0gICAgY2FsbGJhY2soV1RGTW92ZShy
ZWNvcmRJZGVudGlmaWVycykpOworICAgIC8vIFRoaXMgb3BlcmF0aW9uIHdvdWxkIGNoYW5nZSBj
YWNoZXMgc2l6ZSwgc28gbWFrZSBzdXJlIGNhbGxiYWNrIGZpbmlzaGVzIGFmdGVyIHNpemUgZmls
ZSBpcyB1cGRhdGVkLgorICAgIG1fY2FjaGVzLnVwZGF0ZVNpemVGaWxlKFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCByZWNvcmRJZGVudGlmaWVycyA9IFdURk1vdmUocmVjb3JkSWRlbnRp
ZmllcnMpXSgpIG11dGFibGUgeworICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKHJlY29yZElkZW50
aWZpZXJzKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgQ2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0
KGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIHJlY29yZElkZW50aWZpZXJzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNo
ZXMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VF
bmdpbmVDYWNoZXMuY3BwCmluZGV4IDAzYTA2MGNlZjJiYzY3MjAxNGI3NTk2YmM1ZGE0ZWU5NDM4
NjFhN2MuLmViYWNiM2MxYmZjMzYzOWRiMTFmZGFlYmRmYjYyNjlmZWUwNWNkNGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKQEAgLTU2LDM2ICs1NiwyMSBAQCBTdHJpbmcgQ2FjaGVz
OjpjYWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBjYWNoZXNSb290c1BhdGgpCiAgICAg
cmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZXNSb290c1Bh
dGgsICJlc3RpbWF0ZWRzaXplIl9zKTsKIH0KIAotUmVmPENhY2hlcz4gQ2FjaGVzOjpjcmVhdGUo
RW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYg
cm9vdFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXImIHF1b3RhTWFuYWdlcikKK1Jl
ZjxDYWNoZXM+IENhY2hlczo6Y3JlYXRlKEVuZ2luZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRP
cmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQYXRoKQogewotICAgIGF1dG8gY2FjaGVzID0g
YWRvcHRSZWYoKm5ldyBDYWNoZXMgeyBlbmdpbmUsIFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShy
b290UGF0aCksIHF1b3RhTWFuYWdlciB9KTsKLSAgICBxdW90YU1hbmFnZXIuYWRkVXNlcihjYWNo
ZXMuZ2V0KCkpOwotICAgIHJldHVybiBjYWNoZXM7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q2FjaGVzIHsgZW5naW5lLCBXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUocm9vdFBhdGgpIH0pOwog
fQogCi1DYWNoZXM6OkNhY2hlcyhFbmdpbmUmIGVuZ2luZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
ciYgcXVvdGFNYW5hZ2VyKQorQ2FjaGVzOjpDYWNoZXMoRW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgpCiAgICAgOiBtX2VuZ2lu
ZSgmZW5naW5lKQogICAgICwgbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICwgbV9yb290
UGF0aChXVEZNb3ZlKHJvb3RQYXRoKSkKLSAgICAsIG1fcXVvdGFNYW5hZ2VyKG1ha2VXZWFrUHRy
KHF1b3RhTWFuYWdlcikpCiB7CiB9CiAKIENhY2hlczo6fkNhY2hlcygpCiB7CiAgICAgQVNTRVJU
KG1fcGVuZGluZ1dyaXRpbmdDYWNoZXNUb0Rpc2tDYWxsYmFja3MuaXNFbXB0eSgpKTsKLQotICAg
IGlmIChtX3F1b3RhTWFuYWdlcikKLSAgICAgICAgbV9xdW90YU1hbmFnZXItPnJlbW92ZVVzZXIo
KnRoaXMpOwotfQotCi12b2lkIENhY2hlczo6d2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKLXsKLSAgICBpbml0aWFsaXplKFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoZXJy
b3IpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihDYWNoZVN0b3JhZ2UsICJDYWNoZXM6
OmluaXRpYWxpemUgZmFpbGVkLCByZXBvcnRlZCBzcGFjZSB1c2VkIHdpbGwgYmUgemVybyIpOwot
ICAgICAgICBjYWxsYmFjaygpOwotICAgIH0pOwogfQogCiB2b2lkIENhY2hlczo6cmV0cmlldmVP
cmlnaW5Gcm9tRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZm9sZGVyUGF0aCwgV29ya1F1ZXVlJiBx
dWV1ZSwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkNsaWVu
dE9yaWdpbj4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yMDgsMTAgKzE5MywxNCBAQCB2
b2lkIENhY2hlczo6aW5pdGlhbGl6ZShXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlv
bkNhbGxiYWNrJiYgY2FsbGJhY2spCiAgICAgfSk7CiB9CiAKLXZvaWQgQ2FjaGVzOjp1cGRhdGVT
aXplRmlsZSgpCit2b2lkIENhY2hlczo6dXBkYXRlU2l6ZUZpbGUoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChtX2VuZ2luZSkKLSAgICAg
ICAgbV9lbmdpbmUtPndyaXRlU2l6ZUZpbGUoY2FjaGVzU2l6ZUZpbGVuYW1lKG1fcm9vdFBhdGgp
LCBtX3NpemUpOworICAgIGlmICghbV9lbmdpbmUpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZW5naW5lLT53cml0ZVNpemVG
aWxlKGNhY2hlc1NpemVGaWxlbmFtZShtX3Jvb3RQYXRoKSwgbV9zaXplLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgQ2FjaGVzOjppbml0aWFsaXplU2l6ZSgpCkBAIC0y
MzIsMTMgKzIyMSwxMiBAQCB2b2lkIENhY2hlczo6aW5pdGlhbGl6ZVNpemUoKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fc2l6ZSA9IHNpemU7
Ci0gICAgICAgICAgICB1cGRhdGVTaXplRmlsZSgpOwotCi0gICAgICAgICAgICBtX2lzSW5pdGlh
bGl6ZWQgPSB0cnVlOwotICAgICAgICAgICAgYXV0byBwZW5kaW5nQ2FsbGJhY2tzID0gV1RGTW92
ZShtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNrcyk7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIGNhbGxiYWNrIDogcGVuZGluZ0NhbGxiYWNrcykKLSAgICAgICAgICAgICAgICBjYWxsYmFj
ayhXVEY6Om51bGxvcHQpOwotCisgICAgICAgICAgICB1cGRhdGVTaXplRmlsZShbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAg
IG1faXNJbml0aWFsaXplZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYXV0byBwZW5kaW5nQ2Fs
bGJhY2tzID0gV1RGTW92ZShtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNrcyk7CisgICAg
ICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IHBlbmRpbmdDYWxsYmFja3MpCisgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBhdXRvIGRlY29kZWQgPSBD
YWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKCpzdG9yYWdlKTsKQEAgLTI3MywxMyArMjYxLDExIEBA
IHZvaWQgQ2FjaGVzOjpjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiAgICAgICAgIG1fc3RvcmFnZS0+Y2xlYXIoU3RyaW5nIHsgfSwgLVdhbGxUaW1l
OjppbmZpbml0eSgpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAg
ICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAgICAgIHByb3RlY3RlZFRo
aXMtPmNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKLSAgICAgICAgICAgIHByb3RlY3RlZFRo
aXMtPnJlc2V0U3BhY2VVc2VkKCk7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwog
ICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhck1lbW9yeVJlcHJl
c2VudGF0aW9uKCk7Ci0gICAgcmVzZXRTcGFjZVVzZWQoKTsKICAgICBjbGVhclBlbmRpbmdXcml0
aW5nQ2FjaGVzVG9EaXNrQ2FsbGJhY2tzKCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0K
QEAgLTUyNSwxMiArNTExLDEyIEBAIHZvaWQgQ2FjaGVzOjpyZWFkUmVjb3Jkc0xpc3QoQ2FjaGUm
IGNhY2hlLCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlRyYXZlcnNlSGFuZGxlCiAKIHZvaWQgQ2Fj
aGVzOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VSZXF1aXJlZCwgV2ViQ29yZTo6RE9NQ2Fj
aGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIGlmICghbV9x
dW90YU1hbmFnZXIpIHsKKyAgICBpZiAoIW1fZW5naW5lKSB7CiAgICAgICAgIGNhbGxiYWNrKEVy
cm9yOjpRdW90YUV4Y2VlZGVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fcXVv
dGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2Uoc3BhY2VSZXF1aXJlZCwgW2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgeworICAgIG1fZW5naW5lLT5yZXF1
ZXN0U3BhY2UobV9vcmlnaW4sIHNwYWNlUmVxdWlyZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKICAgICAgICAgc3dpdGNoIChkZWNpc2lv
bikgewogICAgICAgICBjYXNlIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
OjpEZW55OgogICAgICAgICAgICAgY2FsbGJhY2soRXJyb3I6OlF1b3RhRXhjZWVkZWQpOwpAQCAt
NTQ4LDcgKzUzNCw2IEBAIHZvaWQgQ2FjaGVzOjp3cml0ZVJlY29yZChjb25zdCBDYWNoZSYgY2Fj
aGUsIGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmRJbmZvCiAgICAgQVNTRVJUKG1fc2l6
ZSA+PSBwcmV2aW91c1JlY29yZFNpemUpOwogICAgIG1fc2l6ZSArPSByZWNvcmRJbmZvcm1hdGlv
bi5zaXplOwogICAgIG1fc2l6ZSAtPSBwcmV2aW91c1JlY29yZFNpemU7Ci0gICAgdXBkYXRlU2l6
ZUZpbGUoKTsKIAogICAgIGlmICghc2hvdWxkUGVyc2lzdCgpKSB7CiAgICAgICAgIG1fdm9sYXRp
bGVTdG9yYWdlLnNldChyZWNvcmRJbmZvcm1hdGlvbi5rZXksIFdURk1vdmUocmVjb3JkKSk7CkBA
IC01NTYsMTMgKzU0MSwxNSBAQCB2b2lkIENhY2hlczo6d3JpdGVSZWNvcmQoY29uc3QgQ2FjaGUm
IGNhY2hlLCBjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mbwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgbV9zdG9yYWdlLT5zdG9yZShDYWNoZTo6ZW5jb2RlKHJlY29yZElu
Zm9ybWF0aW9uLCByZWNvcmQpLCB7IH0sIFtwcm90ZWN0ZWRTdG9yYWdlID0gbWFrZVJlZigqbV9z
dG9yYWdlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oaW50IGVycm9yKSBtdXRhYmxl
IHsKKyAgICBtX3N0b3JhZ2UtPnN0b3JlKENhY2hlOjplbmNvZGUocmVjb3JkSW5mb3JtYXRpb24s
IHJlY29yZCksIHsgfSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJv
dGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1fc3RvcmFnZSksIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKGludCBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoQ2FjaGVTdG9yYWdlLCAiQ2FjaGVzOjp3cml0ZVJl
Y29yZCBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIGVycm9yKTsKICAgICAgICAgICAgIGNhbGxiYWNr
KEVycm9yOjpXcml0ZURpc2spOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIGNhbGxiYWNrKFdURjo6bnVsbG9wdCk7CisgICAgICAgIHVwZGF0ZVNpemVGaWxlKFtjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgeworICAgICAgICAgICAgY2FsbGJh
Y2soV1RGOjpudWxsb3B0KTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTYwNSw3ICs1
OTIsNyBAQCB2b2lkIENhY2hlczo6cmVtb3ZlUmVjb3JkKGNvbnN0IFJlY29yZEluZm9ybWF0aW9u
JiByZWNvcmQpCiAKICAgICBBU1NFUlQobV9zaXplID49IHJlY29yZC5zaXplKTsKICAgICBtX3Np
emUgLT0gcmVjb3JkLnNpemU7Ci0gICAgdXBkYXRlU2l6ZUZpbGUoKTsKKyAgICB1cGRhdGVTaXpl
RmlsZShbXSB7IH0pOwogCiAgICAgcmVtb3ZlQ2FjaGVFbnRyeShyZWNvcmQua2V5KTsKIH0KQEAg
LTYyMSwxNyArNjA4LDYgQEAgdm9pZCBDYWNoZXM6OnJlbW92ZUNhY2hlRW50cnkoY29uc3QgTmV0
d29ya0NhY2hlOjpLZXkmIGtleSkKICAgICBtX3N0b3JhZ2UtPnJlbW92ZShrZXkpOwogfQogCi12
b2lkIENhY2hlczo6cmVzZXRTcGFjZVVzZWQoKQotewotICAgIG1fc2l6ZSA9IDA7Ci0gICAgdXBk
YXRlU2l6ZUZpbGUoKTsKLQotICAgIGlmIChtX3F1b3RhTWFuYWdlcikgewotICAgICAgICBtX3F1
b3RhTWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci0gICAgICAgIG1fcXVvdGFNYW5hZ2VyLT5h
ZGRVc2VyKCp0aGlzKTsKLSAgICB9Ci19Ci0KIHZvaWQgQ2FjaGVzOjpjbGVhck1lbW9yeVJlcHJl
c2VudGF0aW9uKCkKIHsKICAgICBtYWtlRGlydHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmggYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5o
CmluZGV4IDAzMjMxZjNhOWIwNTc2NzJkNjMxYmI5NmU2N2E2ZWI5OWUxZDdjYmIuLjVkMzk0YTBl
NDg4NTdiMDI1Y2FhNDgzNGFkMjZiZTg0N2RkOWY1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNo
ZXMuaApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkNhY2hlU3RvcmFnZUVuZ2luZUNhY2hl
LmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
Q2xpZW50T3JpZ2luLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFVc2VyLmg+CiAj
aW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+
CiAKQEAgLTQyLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlIHsKIAogY2xhc3Mg
RW5naW5lOwogCi1jbGFzcyBDYWNoZXMgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWNoZXM+
LCBwcml2YXRlIFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVzZXIgeworY2xhc3MgQ2FjaGVzIGZpbmFs
IDogcHVibGljIFJlZkNvdW50ZWQ8Q2FjaGVzPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFN0cmlu
ZyBjYWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIFJlZjxDYWNo
ZXM+IGNyZWF0ZShFbmdpbmUmLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9v
dFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXImKTsKKyAgICBzdGF0aWMgU3RyaW5n
IGNhY2hlc1NpemVGaWxlbmFtZShjb25zdCBTdHJpbmcmIGNhY2hlc1Jvb3RzUGF0aCk7CisgICAg
c3RhdGljIFJlZjxDYWNoZXM+IGNyZWF0ZShFbmdpbmUmLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4m
JiwgU3RyaW5nJiYgcm9vdFBhdGgpOwogICAgIH5DYWNoZXMoKTsKIAogICAgIHN0YXRpYyB2b2lk
IHJldHJpZXZlT3JpZ2luRnJvbURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGZvbGRlclBhdGgsIFdv
cmtRdWV1ZSYsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxXZWJDb3JlOjpD
bGllbnRPcmlnaW4+JiYpPiYmKTsKQEAgLTc5LDIyICs3OCwxNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNsZWFyKFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNs
ZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKLSAgICB2b2lkIHJlc2V0U3BhY2VVc2VkKCk7CiAK
ICAgICB1aW50NjRfdCBzdG9yYWdlU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU2l6ZUZp
bGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogcHJpdmF0ZToKLSAgICBDYWNoZXMo
RW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYsIFN0cmluZyYmIHJvb3RQYXRoLCBXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJik7Ci0KLSAgICAvLyBTdG9yYWdlUXVvdGFVc2VyIEFQ
SS4KLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NpemU7
IH0KKyAgICBDYWNoZXMoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYsIFN0cmluZyYm
IHJvb3RQYXRoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVNpemUoKTsKICAgICB2b2lkIHJlYWRD
YWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8VmVjdG9yPENhY2hlPiwg
V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7CiAgICAgdm9pZCB3cml0ZUNh
Y2hlc1RvRGlzayhXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYp
OwogCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KSBmaW5hbDsKLQogICAgIHZvaWQgc3RvcmVPcmlnaW4oV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6
OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKICAgICBzdGF0aWMgT3B0aW9uYWw8V2ViQ29yZTo6Q2xp
ZW50T3JpZ2luPiByZWFkT3JpZ2luKGNvbnN0IE5ldHdvcmtDYWNoZTo6RGF0YSYpOwogCkBAIC0x
MDYsOCArMTAwLDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaGFzQWN0aXZlQ2FjaGUoKSBjb25z
dDsKIAotICAgIHZvaWQgdXBkYXRlU2l6ZUZpbGUoKTsKLQogICAgIGJvb2wgbV9pc0luaXRpYWxp
emVkIHsgZmFsc2UgfTsKICAgICBFbmdpbmUqIG1fZW5naW5lIHsgbnVsbHB0ciB9OwogICAgIHVp
bnQ2NF90IG1fdXBkYXRlQ291bnRlciB7IDAgfTsKQEAgLTEyMiw3ICsxMTQsNiBAQCBwcml2YXRl
OgogICAgIFZlY3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNr
PiBtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNrczsKICAgICBib29sIG1faXNXcml0aW5n
Q2FjaGVzVG9EaXNrIHsgZmFsc2UgfTsKICAgICBEZXF1ZTxDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KE9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpFcnJvcj4pPj4gbV9wZW5kaW5nV3Jp
dGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrczsKLSAgICBXZWFrUHRyPFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI+IG1fcXVvdGFNYW5hZ2VyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQ2FjaGVT
dG9yYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9TYW5kYm94RXh0
ZW5zaW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9TYW5kYm94RXh0ZW5z
aW9uQ29jb2EubW0KaW5kZXggNTY3YzRiZWU5NjYxMWYyOGY5ZjExY2EyOWI3MjJmOTE5Y2ZlOTU4
Yi4uMDE3Y2NlZDM1M2NlOTE5ZWI3OTk4MWJjODUxOTk2YTY0MjY0OGFhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvU2FuZGJveEV4dGVuc2lvbkNvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1NhbmRib3hFeHRlbnNpb25Db2NvYS5tbQpAQCAt
NjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhc2FuZGJveF9jaGVjayhnZXRw
aWQoKSwgMCwgU0FOREJPWF9GSUxURVJfTk9ORSk7CiAjZWxzZQogICAgICAgICBpZiAobV9oYW5k
bGUgPT0gLTEpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBhIHNh
bmRib3ggZXh0ZW5zaW9uIGZvciAnJXMnLCBlcnJubyA9ICVkIiwgbV90b2tlbiwgZXJybm8pOwor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY29uc3VtZSBhIHNhbmRib3ggZXh0ZW5z
aW9uIGZvciAnJXMnLCBlcnJubyA9ICVkIiwgbV90b2tlbiwgZXJybm8pOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX2hhbmRsZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNw
cCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApp
bmRleCBjMGZjZjljNWY2MDBhYTVhYzExNjNlNDdhNGIyNmRhYzQyMDY1YWE5Li42ZDBjMTI5YTc0
MDUxMGQzODY5NzM3MDVhZDA5MmVmMTMyY2MwNzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCkBAIC01NSw2ICs1NSw4IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVu
Y29kZXIpIGNvbnN0CiAKICAgICBlbmNvZGVyIDw8IGxvY2FsU3RvcmFnZURpcmVjdG9yeSA8PCBs
b2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CiAKKyAgICBlbmNvZGVyIDw8IGNh
Y2hlU3RvcmFnZURpcmVjdG9yeSA8PCBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGU7CisKICAgICBlbmNvZGVyIDw8IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKICAgICBlbmNvZGVy
IDw8IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7CiB9CkBAIC0xNDEsNiArMTQzLDE4
IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBX
VEZNb3ZlKCpsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCisgICAgT3B0
aW9uYWw8U3RyaW5nPiBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgZGVjb2RlciA+PiBjYWNo
ZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJl
Y3RvcnkgPSBXVEZNb3ZlKCpjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOworCisgICAgT3B0aW9uYWw8
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7CisgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGU7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworCiAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHBlck9yaWdpblN0b3JhZ2VR
dW90YTsKICAgICBkZWNvZGVyID4+IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKICAgICBpZiAoIXBl
ck9yaWdpblN0b3JhZ2VRdW90YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IDA5NWYwOWQ2YWY5M2Y5MTNlYmIyOWY3MDI2N2Fl
OWMxYjc0YmU4OGUuLmYyN2RmNDg5ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0YjcwMTg0MzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
aApAQCAtNzEsNiArNzEsOSBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgewog
ICAgIFN0cmluZyBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlIGxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKIAorICAgIFN0cmlu
ZyBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNh
Y2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKwogICAgIHVpbnQ2NF90IHBlck9y
aWdpblN0b3JhZ2VRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRR
dW90YSgpIH07CiAgICAgdWludDY0X3QgcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSB7
IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB9
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4
IGZhZjhhNTI4ZWEyMzA5YWJmYWUxNzdiZGVlYWIyN2M1ZDVmMDczMjkuLjllYTg5ZmI1YmQ4MDMw
OGE0ODU5ODE2MzAwNTFiMTExOGYxYjg0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0LmNwcApAQCAtNjcyLDMgKzY3Miw4IEBAIHZvaWQgV0tDb250ZXh0U2V0
VXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
Ym9vbCB1CiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFVzZVNlcGFyYXRl
U2VydmljZVdvcmtlclByb2Nlc3ModXNlU2VwYXJhdGVTZXJ2aWNlV29ya2VyUHJvY2Vzcyk7CiB9
CisKK3ZvaWQgV0tDb250ZXh0UmVzZXRRdW90YShXS0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAg
ICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0KS0+cmVzZXRRdW90YSgpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCmluZGV4IDcyM2I1ZTQ3
ZTZlNmFiYzY2NDJkZWJlODRhY2NkZTFmYTU2OGM3OTAuLjFkNzJhMDBhOGRlYWI0MGQwMTRjZjE0
MTMxZThiOGExODI4NWQ0NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS0NvbnRleHRQcml2YXRlLmgKQEAgLTEyNiw2ICsxMjYsOCBAQCBXS19FWFBPUlQgdm9pZCBX
S0NvbnRleHRDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZShXS0NvbnRleHRS
ZWYgY29udAogCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRVc2VTZXBhcmF0ZVNlcnZpY2VX
b3JrZXJQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250ZXh0LCBib29sIGZvcmNlU2VydmljZVdvcmtl
clByb2Nlc3MpOwogCitXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRSZXNldFF1b3RhKFdLQ29udGV4
dFJlZik7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IDcy
Y2U0MjU2YmFhZTA3YzkyZWZjZDQ5OGUxMzIwNmJhMjk5NDNiNWEuLjczMWVjYWJlZjgxNzJhZDNm
NmYyNjIzZTMxMmZkYzk5MGY2ZTdlZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Niw2ICs1Niw3IEBAIGVu
dW0gY2xhc3MgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIDogYm9vbDsKIGVudW0gY2xhc3Mg
U3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQgOiBib29sOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBz
dHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOworc3RydWN0IENsaWVudE9yaWdpbjsKIH0KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAKaW5kZXggNDA2OGVlNDFmZmNkNmRmOTVhM2QzYjUxNmJiYzI1MzBlMmM5OTg5MS4uMTI2OTFm
MTY4YzZhNzY3ZWY1M2MyMGVjMWE4NzU1MzVmYzY2ZDJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtNTUxLDYgKzU1MSwxMiBAQCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURh
dGFTdG9yZSogd2l0aAogICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwogICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIAorICAgIGF1dG8gY2FjaGVTdG9yYWdl
RGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNo
ZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKKyAgICBpZiAoIWNhY2hlU3RvcmFn
ZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBjYWNoZVN0b3JhZ2VEaXJlY3Rv
cnk7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURp
cmVjdG9yeShjYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICB9
CisKICAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQogICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBpZiAocGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCkBAIC0xNzA5LDYgKzE3MTUsMTQgQEAgdm9p
ZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKQogICAgIG1fbmV0d29y
a1Byb2Nlc3MgPSBudWxscHRyOwogfQogCit2b2lkIFdlYlByb2Nlc3NQb29sOjpyZXNldFF1b3Rh
KCkKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFF1
b3RhKCksIDApOworfQorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kTmV0d29ya1Byb2Nlc3NX
aWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nKCkKIHsKICAgICBpZiAobV9uZXR3b3JrUHJv
Y2VzcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IDRiMGU1
MDliNTU1NjUyMjZkMzE2NTRmYzI1ZDFmMWI0YzU5ZWM3ZDUuLmRhNDU5MjlhMWEwYzcxODAxOGNi
NzRlMjQ5MTJlYTZjMjk0Mjk3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuaApAQCAtNTMwLDYgKzUzMCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVzZVNlcGFy
YXRlU2VydmljZVdvcmtlclByb2Nlc3MoYm9vbCk7CiAgICAgYm9vbCB1c2VTZXBhcmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV91c2VTZXBhcmF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzOyB9CiAKKyAgICB2b2lkIHJlc2V0UXVvdGEoKTsKKwogcHJpdmF0ZToKICAgICB2
b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29j
b2EubW0KaW5kZXggMGZmM2VhMDk2MzFiNTc3ZDFlYTc5MDgyNWUzMDVlZTkzMjNmYmRjNy4uMDcx
OTllY2FjZGNiNDc2NDkwNzQzMzI4ZTk4OWNiYWM1YmFiNGNhYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNp
dGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtMTkxLDYgKzE5MSwxMCBAQCBXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICAgICBpZiAoIXBhcmFt
ZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMubG9j
YWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAKKyAgICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IGNh
Y2hlU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGlmICghcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3Rvcnks
IHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKwogICAg
IHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gcGVyT3JpZ2luU3RvcmFnZVF1b3Rh
KCk7CiAgICAgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gcGVy
VGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IGJi
OTg0MTY2NDU0YjU2YWVhNGM4ZGJkNDg1YjcyMTQwMGJiMTg2Y2EuLjRiMjdkZmI0ZjMzMjQ2MTIz
NTk1NjNhODdjNDg0OTFhZDRkZjUxZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0yMDgzLDYgKzIw
ODMsMTIgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFy
YW1ldGVycygpCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRX
cml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9y
YWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICB9CiAKKyAgICBhdXRvIGNhY2hlU3Rv
cmFnZURpcmVjdG9yeSA9IHRoaXMtPmNhY2hlU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGlmICgh
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBwYXJhbWV0ZXJzLmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSA9IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3Rv
cmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOworICAgIH0KKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIHBhcmFt
ZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gcmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnkoKTsKICAgICBpZiAoIXBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
LmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCBmZWQ2NzUzYzVlMmJmMDczYzZiNzcyOTJiMjBhZmQ4MDA3MGU5YWZlLi5iZTQyMmM5
OGIwMWJhNjQxNzE2ZDQxZDAyYTk4ODJlYjA5ZTFjZGZhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTktMTEtMTQg
IFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jvc3MtdGhyZWFk
IHZlcnNpb24gU3RvcmFnZVF1b3RhTWFuYWdlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHA6IFJlbW92ZWQuIFRoaXMgdW5pdCB0ZXN0IHdhcyB1
c2VkIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGUgCisgICAgICAgIGNoYW5nZSBpbnNpZGUgU3RvcmFn
ZVF1b3RhTWFuYWdlciBpcyBjb3JyZWN0LiBTaW5jZSB3ZSBoYXZlIGNoYW5nZWQgb3VyIGltcGxl
bWVudGF0aW9uLCB0aGUgdGVzdCBpcyBub3QgbmVlZGVkLgorCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6IFJlc2V0IFN0b3JhZ2VRdW90YU1hbmFnZXIncyBx
dW90YSB2YWx1ZSBiZXR3ZWVuIHRlc3RzLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpyZXNldFF1b3RhKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmg6CisKIDIwMTktMTEtMTMgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtFV1NdIFBhcnNlIGpzY19yZXN1bHRzLmpzb24gZm9yIEpTQyB0ZXN0cwpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlMzJiODVlNDJkYzFmMTkyNWI3Y2ZkOGE5YjkzM2Vi
NzIxZDFhY2VjLi5hNzBlMTQ2NDRjMTM4N2M0ZDdkODUwN2Y2OGIyMmUwYzFlMTIxNzFhIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzM0LDcgKzczNCw2IEBACiAJCTkzOTlCQTA2MjM3MTEx
NEYwMDgzOTJCRiAvKiBJbmRleGVkREJOb3RJblBhZ2VDYWNoZS5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTlCQTAzMjM3MTEwQkYw
MDgzOTJCRiAvKiBJbmRleGVkREJOb3RJblBhZ2VDYWNoZS5odG1sICovOyB9OwogCQk5M0FGNEVD
RTE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1h
Z2VzX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0FGNEVDRDE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgKi87IH07CiAJCTkzQUY0RUQxMTUwNkYxMzAwMDdG
RDU3RSAvKiBsb3RzLW9mLWltYWdlcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNGMTUwNkYxMjMwMDdGRDU3RSAvKiBsb3Rz
LW9mLWltYWdlcy5odG1sICovOyB9OwotCQk5M0I2MjA1NDIzNEVBNjJDMDBENDlCOTcgLyogU3Rv
cmFnZVF1b3RhTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0I2MjA1MzIzNEVBMzJCMDBENDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdl
ci5jcHAgKi87IH07CiAJCTkzQ0ZBODY3MUNFQjlFMzgwMDA1NjVBOCAvKiBhdXRvZm9jdXNlZC10
ZXh0LWlucHV0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNDRkE4NjYxQ0VCOURFMTAwMDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRleHQt
aW5wdXQuaHRtbCAqLzsgfTsKIAkJOTNEMTE5RkMyMkM2ODBGNzAwOUJFM0M3IC8qIGxvY2Fsc3Rv
cmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNEMTE5RkIyMkM1NzExMjAwOUJFM0M3IC8qIGxv
Y2Fsc3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwgKi87IH07CiAJCTkzRTJDNTU1MUZE
MzIwNDEwMEUxREY2QSAvKiBMaW5lRW5kaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTJDNTU0MUZEMzIwNDEwMEUxREY2QSAvKiBMaW5lRW5k
aW5nLmNwcCAqLzsgfTsKQEAgLTIxMzgsNyArMjEzNyw2IEBACiAJCTkzQUY0RUNBMTUwNkYwMzUw
MDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV3Rmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0Rm9ySW1hZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNB
RjRFQ0QxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZv
ckltYWdlc19CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQUY0RUNGMTUwNkYxMjMwMDdGRDU3RSAvKiBsb3Rz
LW9mLWltYWdlcy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImxvdHMtb2YtaW1h
Z2VzLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0I2MjA1MzIzNEVBMzJC
MDBENDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTNDRkE4NjYxQ0VCOURFMTAwMDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRl
eHQtaW5wdXQuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJhdXRvZm9jdXNlZC10
ZXh0LWlucHV0Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0NGQTg2ODFD
RUJDRkVEMDAwNTY1QTggLyogQ2FuZGlkYXRlVGVzdHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBDYW5kaWRhdGVUZXN0cy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTNEMTE5RkIyMkM1NzExMjAwOUJFM0M3IC8qIGxvY2Fsc3RvcmFnZS1vcGVu
LXdpbmRvdy1wcml2YXRlLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibG9jYWxz
dG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zMTEwLDcgKzMxMDgsNiBAQAogCQkJCTQxOTczQjVDMUFGMjI4NzUwMDZDN0IzNiAv
KiBTaGFyZWRCdWZmZXIuY3BwICovLAogCQkJCUExNzk5MTg5MUUxQ0EyNDEwMEE1MDVFRCAvKiBT
aGFyZWRCdWZmZXJUZXN0LmNwcCAqLywKIAkJCQlBMTc5OTE4QTFFMUNBMjQxMDBBNTA1RUQgLyog
U2hhcmVkQnVmZmVyVGVzdC5oICovLAotCQkJCTkzQjYyMDUzMjM0RUEzMkIwMEQ0OUI5NyAvKiBT
dG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLywKIAkJCQlFQ0E2ODBDRDFFNjhDQzA5MDA3MzFEMjAg
LyogU3RyaW5nVXRpbGl0aWVzLm1tICovLAogCQkJCUNFNEQ1REU1MUY2NzQzQkEwMDcyQ0ZDNiAv
KiBTdHJpbmdXaXRoRGlyZWN0aW9uLmNwcCAqLywKIAkJCQk5M0EyNTg5ODFGOTJGRjE1MDAzRTUx
MEMgLyogVGV4dENvZGVjLmNwcCAqLywKQEAgLTQ4NDYsNyArNDg0Myw2IEBACiAJCQkJN0NDRTdF
Q0YxQTQxMUE3RTAwNDQ3QzRDIC8qIFN0b3BMb2FkaW5nRnJvbURpZFJlY2VpdmVSZXNwb25zZS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUNEQzA5MzJFMjFDOTkzNDQwMDMwQzRCMCAvKiBTdG9wU3Vz
cGVuZFJlc3VtZUFsbE1lZGlhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE0QUQ2ODYyMjg1RDFD
MDAwNzc3RjJEIC8qIFN0b3JhZ2VRdW90YS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTkzQjYyMDU0
MjM0RUE2MkMwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxNUJFMTcxMUQ0MjhFNEIwMEREN0M2OCAvKiBTdG9yZUJsb2JUaGVuRGVsZXRlLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRDAxQTQxMUE3RTAwNDQ3QzRDIC8qIFN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0ND
RTdFRDExQTQxMUE3RTAwNDQ3QzRDIC8qIFN0cmluZ1RydW5jYXRvci5tbSBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1N0b3JhZ2VR
dW90YU1hbmFnZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1N0b3Jh
Z2VRdW90YU1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDFjNjdi
ZjA1MmY3YjBhMzQ1M2QwNTRmMjUyOTE5MWVlZjNmMTcyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBA
Ci0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0q
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUg
PFdlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFn
ZVF1b3RhVXNlci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkgewotCi1zdGF0aWMgY29uc3QgaW50IGRlZmF1bHRRdW90YSA9IDEgKiBLQjsK
LQotY2xhc3MgTW9ja1F1b3RhVXNlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlUXVv
dGFVc2VyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBNb2NrUXVvdGFVc2VyKFN0b3JhZ2VRdW90
YU1hbmFnZXImIG1hbmFnZXIpCi0gICAgICAgIDogbV9tYW5hZ2VyKCZtYW5hZ2VyKQotICAgIHsK
LSAgICAgICAgbWFuYWdlci5hZGRVc2VyKCp0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFNw
YWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpIHsgbV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7IH0K
LQotcHJpdmF0ZToKLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fc3BhY2VVc2VkOwotICAgIH0KLQotICAgIHZvaWQgd2hlbkluaXRp
YWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykgZmluYWwKLSAgICB7
Ci0gICAgICAgIGlmICghbV9zcGFjZVVzZWQpCi0gICAgICAgICAgICBBU1NFUlRfRVEobV9tYW5h
Z2VyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6VW5pbml0aWFsaXplZCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFTU0VSVF9FUShtX21hbmFnZXItPnN0YXRlKCks
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0YXRlOjpDb21wdXRpbmdTcGFjZVVzZWQpOwotCi0gICAg
ICAgIC8vIFJlc2V0IHVzYWdlIHRvIG1vY2sgZGVsZXRpb24uCi0gICAgICAgIG1fc3BhY2VVc2Vk
ID0gMDsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICB9Ci0KLSAgICB1aW50NjRfdCBtX3NwYWNl
VXNlZCB7IDAgfTsKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBtX21hbmFnZXI7Ci19OwotICAg
IAotVEVTVChTdG9yYWdlUXVvdGFNYW5hZ2VyVGVzdCwgQmFzaWMpCi17Ci0gICAgU3RvcmFnZVF1
b3RhTWFuYWdlciogc3RvcmFnZVF1b3RhTWFuYWdlclB0ciA9IG51bGxwdHI7Ci0gICAgU3RvcmFn
ZVF1b3RhTWFuYWdlciBzdG9yYWdlUXVvdGFNYW5hZ2VyKGRlZmF1bHRRdW90YSwgWyZzdG9yYWdl
UXVvdGFNYW5hZ2VyUHRyXSh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3VycmVudFNwYWNlLCB1
aW50NjRfdCBzcGFjZUluY3JlYXNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVp
bnQ2NF90Pik+JiYgY29tcGxldGlvbkhhbmxkZXIpIHsKLSAgICAgICAgQVNTRVJUX1RSVUUoc3Rv
cmFnZVF1b3RhTWFuYWdlclB0cik7Ci0gICAgICAgIEFTU0VSVF9FUShzdG9yYWdlUXVvdGFNYW5h
Z2VyUHRyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6V2FpdGluZ0ZvclNw
YWNlSW5jcmVhc2VSZXNwb25zZSk7Ci0KLSAgICAgICAgLy8gQWxsb3cgYWxsIHNwYWNlIGluY3Jl
YXNlIHJlcXVlc3RzLgotICAgICAgICBjb21wbGV0aW9uSGFubGRlcihzcGFjZUluY3JlYXNlICsg
Y3VycmVudFNwYWNlKTsKLSAgICB9KTsKLSAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyID0gJnN0
b3JhZ2VRdW90YU1hbmFnZXI7Ci0KLQotICAgIE1vY2tRdW90YVVzZXIgbW9ja1VzZXIoc3RvcmFn
ZVF1b3RhTWFuYWdlcik7Ci0KLSAgICAvLyBHcmFudCBkaXJlY3RseS4KLSAgICBzdG9yYWdlUXVv
dGFNYW5hZ2VyLnJlcXVlc3RTcGFjZSgwLjEgKiBLQiwgWyZdKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OkRlY2lzaW9uIGRlY2lzaW9uKSB7Ci0gICAgICAgIEFTU0VSVF9FUShkZWNpc2lv
biwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50KTsKLSAgICAg
ICAgbW9ja1VzZXIuc2V0U3BhY2VVc2VkKDAuMSAqIEtCKTsKLSAgICB9KTsKLQotICAgIC8vIEdy
YW50IGFmdGVyIGNvbXB1dGluZyBhY2N1cmF0ZSB1c2FnZS4KLSAgICBzdG9yYWdlUXVvdGFNYW5h
Z2VyLnJlcXVlc3RTcGFjZSgxLjAgKiBLQiwgWyZdKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OkRlY2lzaW9uIGRlY2lzaW9uKSB7Ci0gICAgICAgIEFTU0VSVF9FUShkZWNpc2lvbiwgV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50KTsKLSAgICAgICAgbW9j
a1VzZXIuc2V0U3BhY2VVc2VkKDEuMCAqIEtCKTsKLSAgICB9KTsKLQotICAgIC8vIEdyYW50IGFm
dGVyIGNvbXB1dGluZyBhY2N1cmF0ZSB1c2FnZSBhbmQgcmVxdWVzdGluZyBzcGFjZSBpbmNyZWFz
ZS4KLSAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLnJlcXVlc3RTcGFjZSgxMCAqIEtCLCBbJl0oV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNpb24pIHsKLSAgICAgICAg
QVNTRVJUX0VRKHN0b3JhZ2VRdW90YU1hbmFnZXJQdHItPnN0YXRlKCksIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OlN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3QpOwotICAgICAgICBBU1NFUlRf
RVEoZGVjaXNpb24sIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFu
dCk7Ci0gICAgfSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggOGEwNzMyNTY1M2Y0MjdhYzZk
MjI2YTVhMzM4MjZlZjEwOTNmOGI0Mi4uMzA3ODhjYTM3NzUwYjM3ZjI4YWE3ZmQ4Y2RlN2E2N2I4
MTQwYzNkMyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAg
LTk4MSw2ICs5ODEsOCBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0
ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZQogICAgIGNsZWFyU2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbnMoKTsKICAgICBjbGVhckRPTUNhY2hlcygpOwogCisgICAgcmVz
ZXRRdW90YSgpOworCiAgICAgV0tDb250ZXh0U2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGVGb3JT
ZXJ2aWNlV29ya2VyVGVzdGluZyhwbGF0Zm9ybUNvbnRleHQoKSwgdHJ1ZSk7CiAKICAgICBXS0Nv
bnRleHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZyhUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuY29udGV4dCgpKTsKQEAgLTI5OTMsNiArMjk5NSwxMSBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjp0ZXJtaW5hdGVTZXJ2aWNlV29ya2VyUHJvY2VzcygpCiAgICAgV0tDb250ZXh0
VGVybWluYXRlU2VydmljZVdvcmtlclByb2Nlc3MocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCit2
b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFF1b3RhKCkKK3sKKyAgICBXS0NvbnRleHRSZXNldFF1
b3RhKHBsYXRmb3JtQ29udGV4dCgpKTsKK30KKwogI2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtV2lsbFJ1blRlc3QoY29uc3QgVGVzdEludm9jYXRpb24m
KQogewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5o
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmluZGV4IGVkMTY5ZWEy
YzA3ZjU1MDYxMjYxNjI2ODMwNTRmNWY2NTBiM2Y2N2QuLjVlOGRkM2EwMDUxNzgzYzhlMGY4NmEz
MzRiMjdjZDc2NmE0ODUwZDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgKQEAgLTI2OCw2ICsyNjgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXJtaW5hdGVOZXR3b3Jr
UHJvY2VzcygpOwogICAgIHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKTsKIAor
ICAgIHZvaWQgcmVzZXRRdW90YSgpOworCiAgICAgdm9pZCByZW1vdmVBbGxTZXNzaW9uQ3JlZGVu
dGlhbHMoKTsKIAogICAgIHZvaWQgY2xlYXJJbmRleGVkRGF0YWJhc2VzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383972</attachid>
            <date>2019-11-20 10:43:57 -0800</date>
            <delta_ts>2019-11-20 15:22:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203971-20191120104356.patch</filename>
            <type>text/plain</type>
            <size>177188</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjFlODk3ODhlZWQwMzEz
YTY4MzMzNzAyMzBiNTk2MjZmOGE3ZWY2NC4uOTk2N2MyYTUzN2I1NzFlN2UxMDRiOGI5YzgyOTE2
MGFjMTdlYmVjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAxOS0xMS0yMCAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVy
c2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3MjkwMzQ5
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCBhIGxvY2stYmFzZWQgU3RvcmFnZVF1b3RhTWFuYWdlciBzbyB0aGF0IHF1b3RhIGNoZWNr
IGNhbiBiZSBkb25lIG9uIGRpZmZlcmVudCB0aHJlYWRzLgorICAgICAgICBJZiBzcGFjZSByZXF1
ZXN0IGlzIG1hZGUgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCwgaXQgbmVlZHMgdG8gaG9sZCBhIGxv
Y2sgdW50aWwgaXQgaXMgZmluaXNoZWQsIHNvIG5vIHJlcXVlc3QKKyAgICAgICAgZnJvbSBkaWZm
ZXJlbnQgdGhyZWFkcyBjYW4gYmUgcGVyZm9ybWVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAg
IElmIHNwYWNlIHJlcXVlc3QgaXMgbWFkZSBvbiB0aGUgbWFpbiB0aHJlYWQsIHdlIHdpbGwgZGlz
cGF0Y2ggaXQgdG8gYSBiYWNrZ3JvdW5kIHRocmVhZCBhbmQgc2NoZWR1bGUgYSBjYWxsbGJhY2sK
KyAgICAgICAgdG8gdGhlIG1haW4gdGhyZWFkIHdoZW4gd2UgaGF2ZSB0aGUgcmVzdWx0LCBzbyB0
aGUgbWFpbiB0aHJlYWQgd2lsbCBub3QgYmUgYmxvY2tlZC4KKworICAgICAgICBDb3ZlcmVkIGJ5
IGV4aXN0aW5nIHF1b3RhIHJlbGF0ZWQgdGVzdHMuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtl
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6SURCU2VydmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpkaWRQZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRhYmFz
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnJlcXVlc3RTcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlza1VzYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OlF1b3Rh
VXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6
UXVvdGFVc2VyOjp+UXVvdGFVc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmNvbXB1dGVT
cGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2
ZXI6OlF1b3RhVXNlcjo6aW5jcmVhc2VTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6ZGVjcmVhc2VTcGFjZVVzZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1b3Rh
VXNlcjo6d2hlbkluaXRpYWxpemVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmluaXRpYWxpemVTcGFjZVVzZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmVuc3VyZVF1b3RhVXNl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6c3Rh
cnRDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmZpbmlzaENvbXB1
dGluZ1NwYWNlVXNlZEZvck9yaWdpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6cmVzZXRTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVNwYWNlVXNl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6aW5j
cmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpJREJTZXJ2ZXI6OmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4K
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6aW5pdGlhbGl6ZVF1b3RhVXNlcik6IERl
bGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRPcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3Jl
YXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1SZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xl
YXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1E
ZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpyZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFk
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtUHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdl
dEFsbFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5D
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
aXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6YWJv
cnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZXF1ZXN0U3BhY2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6d2FpdEZvclJlcXVlc3RT
cGFjZUNvbXBsZXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUlu
Y3JlYXNlVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVP
YmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFD
aGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpjbGVhck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhBZnRl
clF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhB
ZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkQWZ0
ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnRB
ZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJz
b3JBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjb21t
aXRUcmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6YWJv
cnRUcmFuc2FjdGlvbldpdGhvdXRDYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
OnB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6ZGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c3RvcmFnZVF1b3RhTWFuYWdlckdldHRlcik6IERlbGV0ZWQu
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5o
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBzdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dHJ5R3JhbnRSZXF1ZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRP
blVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlc2V0UXVv
dGFVcGRhdGVkQmFzZWRPblVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OnJlc2V0UXVvdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
cjo6flN0b3JhZ2VRdW90YU1hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcjo6c3BhY2VVc2FnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmluaXRp
YWxpemVVc2Vyc0lmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YWRkVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzaG91bGRBc2tGb3JNb3JlU3BhY2UgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3Zl
VXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjph
c2tGb3JNb3JlU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3RhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRR
dW90YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpz
dGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2Vy
Lmg6IFJlbW92ZWQuCisKIDIwMTktMTEtMjAgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBh
cHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI1MjE2MSk6IGJveC1zaGFkb3cgd2l0
aCBpbnNldCBhbmQgcm91bmRlZCBib3JkZXJzIGlzIGNsaXBwZWQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOWY2ZWZk
ZTU2Y2NiY2U0N2EzOGE5NWZkNThlODQ2ZTFhYmFkNzhkOS4uMmJlYjQ3MWJmN2YyYTM3N2QwNWQ1
N2NmNGNmOWY4OTYyMmFmN2NmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MCBAQAorMjAxOS0xMS0y
MCAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJl
YWQgdmVyc2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3
MjkwMzQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOiBJbnRyb2R1Y2UgY2xhc3MgU2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgdG8gbWFuYWdlIGFsbCAKKyAgICAgICAgU3RvcmFnZVF1
b3RhTWFuYWdlcnMgb2YgdGhlIHNhbWUgc2Vzc2lvbi4gCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjphZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlSURCU2VydmVyKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24pOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1h
bmFnZXJJREJSb290UGF0aCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjp1cGRh
dGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OnN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6aW5pdGlhbGl6ZVN0b3JhZ2VRdW90YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpjbGVhclN0b3JhZ2VRdW90YSk6IERlbGV0ZWQuCisgICAgICAgICgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVF1b3Rh
VXNlcnMpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
Lmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlcjo6ZW5zdXJlT3JpZ2luU3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZXhpc3Rp
bmdTdG9yYWdlUXVvdGFNYW5hZ2Vycyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
OjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6Y2FjaGVSb290UGF0aCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6
c2V0SURCUm9vdFBhdGgpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXI6OmlkYlJvb3RQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OlN0b3JhZ2VRdW90YU1hbmFnZXJzOjpkZWZhdWx0UXVvdGEgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U3RvcmFnZVF1
b3RhTWFuYWdlcnM6OnNldERlZmF1bHRRdW90YXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6U3RvcmFnZVF1b3RhTWFuYWdlcnM6Om1hbmFnZXJzUGVyT3JpZ2lu
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNz
YWdlcy5pbjoKKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Z2V0RGlyZWN0b3J5U2l6
ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpkaXNrVXNhZ2UpOiBz
dGF0aWMgZnVuY3Rpb24gdG8gZ2V0IHRoZSBkaXNrIHVzYWdlIG9mIENhY2hlU3RvcmFnZS4KKyAg
ICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJlcXVlc3RTcGFjZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpyZWFkQ2FjaGVzRnJvbURpc2spOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6d3JpdGVTaXplRmlsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpyZWFkU2l6ZUZpbGUpOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6aW5pdGlhbGl6ZVF1b3RhVXNlcik6
IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpwdXQpOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmUpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6Q2FjaGVzKToKKyAgICAgICAgKFdlYktpdDo6Q2Fj
aGVTdG9yYWdlOjpDYWNoZXM6On5DYWNoZXMpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3Jh
Z2U6OkNhY2hlczo6dXBkYXRlU2l6ZUZpbGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3Jh
Z2U6OkNhY2hlczo6aW5pdGlhbGl6ZVNpemUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3Jh
Z2U6OkNhY2hlczo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hl
czo6cmVxdWVzdFNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6
OndyaXRlUmVjb3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJl
bW92ZVJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjp3aGVu
SW5pdGlhbGl6ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlczo6cmVzZXRTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oOgorCisgICAgICAgICogU2hhcmVkL1dl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5oOiBBZGQgYSBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgcGFyYW1l
dGVyIHNvIHdlIGtub3cgdGhlIGRpcmVjb3RyeSBvZiAKKyAgICAgICAgQ2FjaGVTdG9yYWdlIHdo
ZW4gd2Ugc3RhcnQgdXNpbmcgV2Vic2l0ZURhdGFTdG9yZS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwOgorICAgICAgICAoV0tXZWJzaXRlRGF0
YVN0b3JlUmVzZXRRdW90YSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURh
dGFTdG9yZVJlZi5oOiBBZGQgYSBDIEFQSSBmb3IgcmVzZXRpbmcgcXVvdGEgaW4gVGVzdFJ1bm5l
ci4KKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6cmVzZXRRdW90YSk6CisgICAg
ICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6
cmVzZXRRdW90YSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuaDoKKwogMjAxOS0xMS0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCB3ZWJraXRweSBmYWlsdXJlcyBhZnRlciByMjUyNjU1
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UKaW5kZXggNDAyNjIzZjA5ZTc3OTBhMzY3MGE2MzkzZTBmMjMwZDY3
ZmM3MGI4OS4uMDEwYjI4MWJjYmEyNmM3ODI4ODUyNDJmNzkwMGU4Zjk0Njk4MTFiMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCkBAIC0xMzc5LDcgKzEzNzksNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgKICAgICBzdG9y
YWdlL1N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oCiAgICAgc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmgKLSAgICBzdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaAogICAgIHN0b3JhZ2UvU3Rv
cmFnZVR5cGUuaAogCiAgICAgc3R5bGUvU3R5bGVDaGFuZ2UuaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCBlNjFk
YjhjOTQyOGQ5ODRkYTY0Njk2ZTdjODQyNzg3NDI2OWMyN2U2Li5iZjQ4YmIxMjliZTk0NjMxYTYz
NGM1YWZmNWNjYTY1OGE3MDFkYWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtNDYsMjggKzQ2LDI4IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIAotUmVmPElEQlNlcnZl
cj4gSURCU2VydmVyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBRdW90YU1hbmFn
ZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitSZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6
OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJTcGFj
ZVJlcXVlc3RlciYmIHF1b3RhTWFuYWdlckdldHRlcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBJREJTZXJ2ZXIoc2Vzc2lvbklELCBXVEZNb3ZlKHF1b3RhTWFuYWdlckdldHRlcikpKTsK
IH0KIAotUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgUXVvdGFNYW5hZ2Vy
R2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpj
cmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGly
ZWN0b3J5UGF0aCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYgcXVvdGFNYW5h
Z2VyR2V0dGVyKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlNlcnZlcihzZXNzaW9u
SUQsIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKSk7
CiB9CiAKLUlEQlNlcnZlcjo6SURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgUXVv
dGFNYW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorSURCU2VydmVyOjpJREJTZXJ2
ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1
ZXN0ZXImJiBzcGFjZVJlcXVlc3RlcikKICAgICA6IENyb3NzVGhyZWFkVGFza0hhbmRsZXIoIklu
ZGV4ZWREYXRhYmFzZSBTZXJ2ZXIiLCBBdXRvZHJhaW5lZFBvb2xGb3JSdW5Mb29wOjpVc2UpCiAg
ICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCi0gICAgLCBtX3F1b3RhTWFuYWdlckdldHRlcihX
VEZNb3ZlKHF1b3RhTWFuYWdlckdldHRlcikpCisgICAgLCBtX3NwYWNlUmVxdWVzdGVyKFdURk1v
dmUoc3BhY2VSZXF1ZXN0ZXIpKQogewogfQogCi1JREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBR
dW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitJREJTZXJ2ZXI6OklEQlNl
cnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJl
Y3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXImJiBzcGFjZVJlcXVl
c3RlcikKICAgICA6IENyb3NzVGhyZWFkVGFza0hhbmRsZXIoIkluZGV4ZWREYXRhYmFzZSBTZXJ2
ZXIiLCBBdXRvZHJhaW5lZFBvb2xGb3JSdW5Mb29wOjpVc2UpCiAgICAgLCBtX3Nlc3Npb25JRChz
ZXNzaW9uSUQpCiAgICAgLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aChkYXRhYmFzZURpcmVjdG9y
eVBhdGgpCi0gICAgLCBtX3F1b3RhTWFuYWdlckdldHRlcihXVEZNb3ZlKHF1b3RhTWFuYWdlckdl
dHRlcikpCisgICAgLCBtX3NwYWNlUmVxdWVzdGVyKFdURk1vdmUoc3BhY2VSZXF1ZXN0ZXIpKQog
ewogICAgIExPRyhJbmRleGVkREIsICJJREJTZXJ2ZXIgY3JlYXRlZCBhdCBwYXRoICVzIiwgZGF0
YWJhc2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAgIHBvc3REYXRhYmFzZVRhc2so
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjp1cGdyYWRlRmlsZXNJZk5l
Y2Vzc2FyeSkpOwpAQCAtNjgzLDE1NyArNjgzLDI1IEBAIHZvaWQgSURCU2VydmVyOjpwZXJmb3Jt
Q2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9y
CiAKIHZvaWQgSURCU2VydmVyOjpkaWRQZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRhYmFzZXModWlu
dDY0X3QgY2FsbGJhY2tJRCkKIHsKLSAgICBmb3IgKGF1dG8mIHVzZXIgOiBtX3F1b3RhVXNlcnMu
dmFsdWVzKCkpCi0gICAgICAgIHVzZXItPnJlc2V0U3BhY2VVc2VkKCk7Ci0KICAgICBhdXRvIGNh
bGxiYWNrID0gbV9kZWxldGVEYXRhYmFzZUNvbXBsZXRpb25IYW5kbGVycy50YWtlKGNhbGxiYWNr
SUQpOwogICAgIEFTU0VSVChjYWxsYmFjayk7CiAgICAgY2FsbGJhY2soKTsKIH0KIAotSURCU2Vy
dmVyOjpRdW90YVVzZXI6OlF1b3RhVXNlcihJREJTZXJ2ZXImIHNlcnZlciwgU3RvcmFnZVF1b3Rh
TWFuYWdlciogbWFuYWdlciwgQ2xpZW50T3JpZ2luJiYgb3JpZ2luKQotICAgIDogbV9zZXJ2ZXIo
c2VydmVyKQotICAgICwgbV9tYW5hZ2VyKG1ha2VXZWFrUHRyKG1hbmFnZXIpKQotICAgICwgbV9v
cmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICwgbV9pc0luaXRpYWxpemVkKG1fc2VydmVyLm1f
c2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCi17Ci0gICAgaWYgKG1hbmFnZXIpCi0gICAgICAgIG1h
bmFnZXItPmFkZFVzZXIoKnRoaXMpOwotfQotCi1JREJTZXJ2ZXI6OlF1b3RhVXNlcjo6flF1b3Rh
VXNlcigpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5yZW1vdmVV
c2VyKCp0aGlzKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6cmVzZXRTcGFjZVVz
ZWQoKQotewotICAgIG1fc3BhY2VVc2VkID0gMDsKLQotICAgIGlmICghbV9tYW5hZ2VyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zZXJ2ZXIubV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVCghbV9pbml0aWFsaXphdGlvbkNhbGxiYWNrKTsKLQotICAg
IG1faXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgLy8gRG8gYWRkL3JlbW92ZSB0byB0cmln
Z2VyIGNhbGwgdG8gd2hlbkluaXRpYWxpemVkLgotICAgIG1fbWFuYWdlci0+cmVtb3ZlVXNlcigq
dGhpcyk7Ci0gICAgbV9tYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKLX0KLQotdm9pZCBJREJTZXJ2
ZXI6OlF1b3RhVXNlcjo6Y29tcHV0ZVNwYWNlVXNlZCgpCi17Ci0gICAgcmVzZXRTcGFjZVVzZWQo
KTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5jcmVhc2VTcGFjZVVzZWQodWlu
dDY0X3Qgc2l6ZSkKLXsKLSAgICBpZiAoIW1faXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJu
OwotICAgIEFTU0VSVChtX3NwYWNlVXNlZCArIHNpemUgPiBtX3NwYWNlVXNlZCk7Ci0gICAgbV9z
cGFjZVVzZWQgKz0gc2l6ZTsKLX0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNl
U3BhY2VVc2VkKHVpbnQ2NF90IHNpemUpCi17Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0g
ICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9zcGFjZVVzZWQgPj0gc2l6ZSk7Ci0gICAgbV9z
cGFjZVVzZWQgLT0gc2l6ZTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6d2hlbklu
aXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKLXsKLSAgICBp
ZiAobV9pc0luaXRpYWxpemVkKSB7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbV9pbml0aWFsaXphdGlvbkNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayk7Ci0gICAgbV9zZXJ2ZXIuc3RhcnRDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4obV9vcmln
aW4pOwotfQotCi12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2Vk
KHVpbnQ2NF90IHNwYWNlVXNlZCkKLXsKLSAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkIHx8ICFt
X2VzdGltYXRlZFNwYWNlSW5jcmVhc2UpOwotICAgIG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOwot
ICAgIG1faXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBpZiAoYXV0byBjYWxsYmFjayA9IFdU
Rk1vdmUobV9pbml0aWFsaXphdGlvbkNhbGxiYWNrKSkKLSAgICAgICAgY2FsbGJhY2soKTsKLX0K
LQotSURCU2VydmVyOjpRdW90YVVzZXImIElEQlNlcnZlcjo6ZW5zdXJlUXVvdGFVc2VyKGNvbnN0
IENsaWVudE9yaWdpbiYgb3JpZ2luKQotewotICAgIHJldHVybiAqbV9xdW90YVVzZXJzLmVuc3Vy
ZShvcmlnaW4sIFt0aGlzLCAmb3JpZ2luXSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFF1
b3RhVXNlcj4oKnRoaXMsIG1fcXVvdGFNYW5hZ2VyR2V0dGVyKG1fc2Vzc2lvbklELCBvcmlnaW4p
LCBDbGllbnRPcmlnaW4geyBvcmlnaW4gfSk7Ci0gICAgfSkuaXRlcmF0b3ItPnZhbHVlOwotfQot
Ci12b2lkIElEQlNlcnZlcjo6c3RhcnRDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3Qg
Q2xpZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAgQVNTRVJUKCFtX3Nlc3Npb25JRC5pc0VwaGVt
ZXJhbCgpKTsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJklEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbiwgb3JpZ2luKSk7Ci19Ci0K
LXZvaWQgSURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9y
aWdpbiYgb3JpZ2luKQorU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gSURCU2VydmVyOjpy
ZXF1ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXpl
KQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgYXV0byBkYXRhYmFzZURp
cmVjdG9yeVBhdGggPSB0aGlzLT5kYXRhYmFzZURpcmVjdG9yeVBhdGhJc29sYXRlZENvcHkoKTsK
LSAgICBhdXRvIG9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZp
ZXI6OmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3Jp
Z2luLmNsaWVudE9yaWdpbiwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCAidjAiKTsKLSAgICBhdXRv
IG5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZpZXI6OmRhdGFi
YXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3JpZ2luLmNsaWVu
dE9yaWdpbiwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCAidjEiKTsKLSAgICBhdXRvIHNpemUgPSBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JEaXJlY3Rvcnkob2xkVmVyc2lv
bk9yaWdpbkRpcmVjdG9yeSkgKyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1NpemVG
b3JEaXJlY3RvcnkobmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSk7Ci0KLSAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpmaW5p
c2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4sIG9yaWdpbiwgc2l6ZSkpOwotfQotCi12b2lk
IElEQlNlcnZlcjo6ZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVu
dE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgZW5zdXJlUXVvdGFV
c2VyKG9yaWdpbikuaW5pdGlhbGl6ZVNwYWNlVXNlZChzcGFjZVVzZWQpOworICAgIHJldHVybiBt
X3NwYWNlUmVxdWVzdGVyKG9yaWdpbiwgdGFza1NpemUpOwogfQogCi12b2lkIElEQlNlcnZlcjo6
cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0YXNrU2l6
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+
JiYgY2FsbGJhY2spCit1aW50NjRfdCBJREJTZXJ2ZXI6OmRpc2tVc2FnZShjb25zdCBTdHJpbmcm
IHJvb3REaXJlY3RvcnksIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQogewotICAgIGF1dG8q
IHF1b3RhTWFuYWdlciA9IGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLm1hbmFnZXIoKTsKLSAgICBp
ZiAoIXF1b3RhTWFuYWdlcikgewotICAgICAgICBjYWxsYmFjayhTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpEZWNpc2lvbjo6RGVueSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBxdW90YU1h
bmFnZXItPnJlcXVlc3RTcGFjZSh0YXNrU2l6ZSwgV1RGTW92ZShjYWxsYmFjaykpOwotfQotCi12
b2lkIElEQlNlcnZlcjo6cmVzZXRTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4p
Ci17Ci0gICAgaWYgKGF1dG8qIHVzZXIgPSBtX3F1b3RhVXNlcnMuZ2V0KG9yaWdpbikpCi0gICAg
ICAgIHVzZXItPnJlc2V0U3BhY2VVc2VkKCk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjppbmNyZWFz
ZVNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc2l6ZSkKLXsK
LSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbmNyZWFzZVNwYWNlVXNlZChzaXplKTsKLX0K
LQotdm9pZCBJREJTZXJ2ZXI6OmRlY3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYg
b3JpZ2luLCB1aW50NjRfdCBzaXplKQotewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmRl
Y3JlYXNlU3BhY2VVc2VkKHNpemUpOwotfQotCi12b2lkIElEQlNlcnZlcjo6aW5jcmVhc2VQb3Rl
bnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tT
aXplKQotewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmluY3JlYXNlUG90ZW50aWFsU3Bh
Y2VVc2VkKHRhc2tTaXplKTsKLX0KKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotdm9p
ZCBJREJTZXJ2ZXI6OmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdp
biYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9y
aWdpbikuZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoc3BhY2VVc2VkKTsKKyAgICBhdXRvIG9s
ZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZpZXI6OmRhdGFiYXNl
RGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3JpZ2luLmNsaWVudE9y
aWdpbiwgcm9vdERpcmVjdG9yeSwgInYwIik7CisgICAgYXV0byBuZXdWZXJzaW9uT3JpZ2luRGly
ZWN0b3J5ID0gSURCRGF0YWJhc2VJZGVudGlmaWVyOjpkYXRhYmFzZURpcmVjdG9yeVJlbGF0aXZl
VG9Sb290KG9yaWdpbi50b3BPcmlnaW4sIG9yaWdpbi5jbGllbnRPcmlnaW4sIHJvb3REaXJlY3Rv
cnksICJ2MSIpOworICAgIHJldHVybiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1Np
emVGb3JEaXJlY3Rvcnkob2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeSkgKyBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JEaXJlY3RvcnkobmV3VmVyc2lvbk9yaWdpbkRpcmVj
dG9yeSk7CiB9CiAKIHZvaWQgSURCU2VydmVyOjp1cGdyYWRlRmlsZXNJZk5lY2Vzc2FyeSgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
dmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVy
LmgKaW5kZXggZDNhMjIzZDkzMmQ5MTU5ZDU0NjY2MjlmNzE3ZWZmYjU3NzQxM2NhZi4uMDZmMzEz
MjEyYzlmOTRiMmZkZjM4YjJjZjRhMTIwMDU1MTM2YTM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApAQCAtMzAsNyArMzAs
NiBAQAogI2luY2x1ZGUgIklEQkNvbm5lY3Rpb25Ub0NsaWVudC5oIgogI2luY2x1ZGUgIklEQkRh
dGFiYXNlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlN0b3JhZ2VRdW90YU1hbmFnZXIuaCIKLSNp
bmNsdWRlICJTdG9yYWdlUXVvdGFVc2VyLmgiCiAjaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uaCIKICNpbmNsdWRlIDxw
YWwvSHlzdGVyZXNpc0FjdGl2aXR5Lmg+CkBAIC01OCw5ICs1Nyw5IEBAIGVudW0gY2xhc3MgU2hv
dWxkRm9yY2VTdG9wIDogYm9vbCB7IE5vLCBZZXMgfTsKIAogY2xhc3MgSURCU2VydmVyIDogcHVi
bGljIFJlZkNvdW50ZWQ8SURCU2VydmVyPiwgcHVibGljIENyb3NzVGhyZWFkVGFza0hhbmRsZXIs
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxJREJTZXJ2ZXI+IHsKIHB1YmxpYzoKLSAgICB1c2luZyBR
dW90YU1hbmFnZXJHZXR0ZXIgPSBXVEY6OkZ1bmN0aW9uPFN0b3JhZ2VRdW90YU1hbmFnZXIqKFBB
TDo6U2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mKT47Ci0gICAgc3RhdGljIFJlZjxJREJT
ZXJ2ZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SURCU2VydmVyPiBjcmVhdGUoUEFMOjpTZXNzaW9u
SUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBRdW90YU1hbmFnZXJHZXR0
ZXImJik7CisgICAgdXNpbmcgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyID0gRnVu
Y3Rpb248U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24oY29uc3QgQ2xpZW50T3JpZ2luJiwg
dWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQpPjsKKyAgICBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3Jl
YXRlKFBBTDo6U2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXImJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6OlNl
c3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VRdW90
YU1hbmFnZXJTcGFjZVJlcXVlc3RlciYmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVn
aXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgdW5yZWdpc3RlckNvbm5lY3Rpb24oSURCQ29ubmVjdGlvblRvQ2xpZW50Jik7CkBA
IC0xMTEsMjEgKzExMCwxNSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbG9z
ZUFuZERlbGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2UoV2FsbFRpbWUsIEZ1bmN0aW9uPHZvaWQg
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VB
bmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRh
dGE+JiwgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICB2b2lk
IHJlcXVlc3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYpOwot
ICAgIHZvaWQgaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwg
dWludDY0X3QgdGFza1NpemUpOwotICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQo
Y29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUpOwotICAgIHZvaWQgaW5jcmVh
c2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6ZSk7Ci0gICAgdm9p
ZCBkZWNyZWFzZVNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzaXplKTsK
LSAgICB2b2lkIHJlc2V0U3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYpOwotCi0gICAgdm9p
ZCBpbml0aWFsaXplUXVvdGFVc2VyKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKSB7IGVuc3Vy
ZVF1b3RhVXNlcihvcmlnaW4pOyB9CisgICAgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24g
cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdWludDY0X3QgZGlza1VzYWdlKGNvbnN0IFN0cmluZyYs
IGNvbnN0IENsaWVudE9yaWdpbiYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0cnlTdG9w
KFNob3VsZEZvcmNlU3RvcCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN1bWUoKTsKIAog
cHJpdmF0ZToKLSAgICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQsIFF1b3RhTWFuYWdlckdldHRl
ciYmKTsKLSAgICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VEaXJlY3RvcnlQYXRoLCBRdW90YU1hbmFnZXJHZXR0ZXImJik7CisgICAgSURCU2VydmVyKFBB
TDo6U2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXImJik7CisgICAg
SURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5
UGF0aCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYpOwogCiAgICAgVW5pcXVl
SURCRGF0YWJhc2UmIGdldE9yQ3JlYXRlVW5pcXVlSURCRGF0YWJhc2UoY29uc3QgSURCRGF0YWJh
c2VJZGVudGlmaWVyJik7CiAgICAgCkBAIC0xNDIsNTEgKzEzNSw2IEBAIHByaXZhdGU6CiAgICAg
dm9pZCByZW1vdmVEYXRhYmFzZXNNb2RpZmllZFNpbmNlRm9yVmVyc2lvbihXYWxsVGltZSwgY29u
c3QgU3RyaW5nJik7CiAgICAgdm9pZCByZW1vdmVEYXRhYmFzZXNXaXRoT3JpZ2luc0ZvclZlcnNp
b24oY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mLCBjb25zdCBTdHJpbmcmKTsKIAot
ICAgIGNsYXNzIFF1b3RhVXNlciBmaW5hbCA6IHB1YmxpYyBTdG9yYWdlUXVvdGFVc2VyIHsKLSAg
ICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBRdW90
YVVzZXIoSURCU2VydmVyJiwgU3RvcmFnZVF1b3RhTWFuYWdlciosIENsaWVudE9yaWdpbiYmKTsK
LSAgICAgICAgflF1b3RhVXNlcigpOwotCi0gICAgICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1h
bmFnZXIoKSB7IHJldHVybiBtX21hbmFnZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIHNldFNw
YWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpIHsgbV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7IH0K
LSAgICAgICAgdm9pZCByZXNldFNwYWNlVXNlZCgpOwotCi0gICAgICAgIHZvaWQgaW5jcmVhc2VQ
b3RlbnRpYWxTcGFjZVVzZWQodWludDY0X3QgaW5jcmVhc2UpIHsgbV9lc3RpbWF0ZWRTcGFjZUlu
Y3JlYXNlICs9IGluY3JlYXNlOyB9Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFj
ZVVzZWQodWludDY0X3QgZGVjcmVhc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCht
X2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgPj0gZGVjcmVhc2UpOwotICAgICAgICAgICAgbV9lc3Rp
bWF0ZWRTcGFjZUluY3JlYXNlIC09IGRlY3JlYXNlOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQg
aW5jcmVhc2VTcGFjZVVzZWQodWludDY0X3Qgc2l6ZSk7Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VT
cGFjZVVzZWQodWludDY0X3Qgc2l6ZSk7Ci0KLSAgICAgICAgdm9pZCBpbml0aWFsaXplU3BhY2VV
c2VkKHVpbnQ2NF90IHNwYWNlVXNlZCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB1aW50NjRf
dCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
bV9pc0luaXRpYWxpemVkKTsKLSAgICAgICAgICAgIHJldHVybiBtX3NwYWNlVXNlZCArIG1fZXN0
aW1hdGVkU3BhY2VJbmNyZWFzZTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGNvbXB1dGVTcGFj
ZVVzZWQoKSBmaW5hbDsKLSAgICAgICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKLQotICAgICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwot
ICAgICAgICBXZWFrUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IG1fbWFuYWdlcjsKLSAgICAgICAg
Q2xpZW50T3JpZ2luIG1fb3JpZ2luOwotICAgICAgICBib29sIG1faXNJbml0aWFsaXplZCB7IGZh
bHNlIH07Ci0gICAgICAgIHVpbnQ2NF90IG1fc3BhY2VVc2VkIHsgMCB9OwotICAgICAgICB1aW50
NjRfdCBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgeyAwIH07Ci0gICAgICAgIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4gbV9pbml0aWFsaXphdGlvbkNhbGxiYWNrOwotICAgIH07Ci0KLSAgICBX
RUJDT1JFX0VYUE9SVCBRdW90YVVzZXImIGVuc3VyZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmln
aW4mKTsKLSAgICB2b2lkIHN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENs
aWVudE9yaWdpbiYpOwotICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbihjb25zdCBD
bGllbnRPcmlnaW4mKTsKLSAgICB2b2lkIGZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdp
bihjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzcGFjZVVzZWQpOwotCiAgICAgUEFMOjpT
ZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAgICAgSGFzaE1hcDxJREJDb25uZWN0aW9uSWRlbnRpZmll
ciwgUmVmUHRyPElEQkNvbm5lY3Rpb25Ub0NsaWVudD4+IG1fY29ubmVjdGlvbk1hcDsKICAgICBI
YXNoTWFwPElEQkRhdGFiYXNlSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFVuaXF1ZUlEQkRh
dGFiYXNlPj4gbV91bmlxdWVJREJEYXRhYmFzZU1hcDsKQEAgLTE5OCw4ICsxNDYsNyBAQCBwcml2
YXRlOgogCiAgICAgU3RyaW5nIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoOwogCi0gICAgSGFzaE1h
cDxDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxRdW90YVVzZXI+PiBtX3F1b3RhVXNlcnM7
Ci0gICAgUXVvdGFNYW5hZ2VyR2V0dGVyIG1fcXVvdGFNYW5hZ2VyR2V0dGVyOworICAgIFN0b3Jh
Z2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciBtX3NwYWNlUmVxdWVzdGVyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCBmZjA5
MGY3NmJiNWQ0MjgzOTI2NTYxODhlZmE3ZmYxYzk0NWIxYzljLi40MTA1NTEyZWI4NTdkYTMzYmMw
YzVkMTA2NWFmOGQxZTMxNmE0NTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTE4
Niw1NiArMTg2LDYgQEAgc3RhdGljIGlubGluZSBTdHJpbmcgcXVvdGFFcnJvck1lc3NhZ2VOYW1l
KGNvbnN0IGNoYXIqIHRhc2tOYW1lKQogICAgIHJldHVybiBtYWtlU3RyaW5nKCJGYWlsZWQgdG8g
IiwgdGFza05hbWUsICIgaW4gZGF0YWJhc2UgYmVjYXVzZSBub3QgZW5vdWdoIHNwYWNlIGZvciBk
b21haW4iKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVxdWVzdFNwYWNlKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCB0YXNrU2l6ZSwg
Y29uc3QgY2hhciogdGFza05hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+
JiYgY2FsbGJhY2spCi17Ci0gICAgbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX2lkZW50aWZpZXIu
b3JpZ2luKCksIHRhc2tTaXplLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgdGhpcywg
d2Vha1RyYW5zYWN0aW9uID0gbWFrZVdlYWtQdHIodHJhbnNhY3Rpb24pLCB0YXNrTmFtZSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7Ci0gICAg
ICAgIGlmICghd2Vha1RoaXMpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgVW5r
bm93bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCF3ZWFrVHJhbnNhY3Rpb24pIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsg
VW5rbm93bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChtX293bmluZ1BvaW50ZXJGb3JDbG9zZSkgewotICAgICAgICAgICAgLy8gV2UgYXJlIGNs
b3NpbmcgdGhlIGRhdGFiYXNlLCB0aGVyZSBpcyBubyBwb2ludCBpbiB0cnlpbmcgdG8gbW9kaWZ5
IHRoZSBkYXRhYmFzZSBhdCB0aGF0IHBvaW50LgotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJy
b3IgeyBVbmtub3duRXJyb3IgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7Ci0gICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFu
YWdlcjo6RGVjaXNpb246OkRlbnk6Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFF1
b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKHRhc2tOYW1lKSB9KTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNp
c2lvbjo6R3JhbnQ6Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IH0pOwotICAgICAg
ICB9OwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjp3YWl0Rm9yUmVxdWVz
dFNwYWNlQ29tcGxldGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJiBjYWxsYmFjaykKLXsKLSAg
ICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIDAsICIiLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19
Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2sodWludDY0
X3QgaWRlbnRpZmllciwgdWludDY0X3QgdGFza1NpemUpCi17Ci0gICAgbV9zZXJ2ZXItPmluY3Jl
YXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUpOwot
ICAgIEFTU0VSVCghbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmNvbnRhaW5zKGlkZW50aWZp
ZXIpKTsKLSAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuYWRkKGlkZW50aWZpZXIsIHRh
c2tTaXplKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFz
ZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgYm9vbCBpc1Rhc2tTdWNjZXNzZnVsKQotewotICAg
IGF1dG8gaXRlcmF0b3IgPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZmluZChpZGVudGlm
aWVyKTsKLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tz
LmVuZCgpKTsKLSAgICBtX3NlcnZlci0+ZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVu
dGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+dmFsdWUpOwotICAgIGlmIChpc1Rhc2tTdWNjZXNz
ZnVsKQotICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9y
aWdpbigpLCBpdGVyYXRvci0+dmFsdWUpOwotICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNr
cy5yZW1vdmUoaXRlcmF0b3IpOwotfQotCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
Q3VycmVudE9wZW5PcGVyYXRpb24oKQogewogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbiAoJXApIiwgdGhpcyk7
CkBAIC0yNDYsMjkgKzE5Niw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJy
ZW50T3Blbk9wZXJhdGlvbigpCiAgICAgaWYgKCFtX2RhdGFiYXNlSW5mbykgewogICAgICAgICBp
ZiAoIW1faXNPcGVuaW5nQmFja2luZ1N0b3JlKSB7CiAgICAgICAgICAgICBtX2lzT3BlbmluZ0Jh
Y2tpbmdTdG9yZSA9IHRydWU7Ci0gICAgICAgICAgICAvLyBXZSBkbyBub3Qga25vdyB3aGV0aGVy
IHRoaXMgaXMgYW4gZXhpc3Rpbmcgb3IgYSBuZXcgZGF0YWJhc2UuCi0gICAgICAgICAgICAvLyBX
ZSBzZXQgYSBzbWFsbCBjb3N0IHNvIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIG9wZW4gYW4g
aW5maW5pdGUgbnVtYmVyIG9mIGRhdGFiYXNlLgotICAgICAgICAgICAgbV9zZXJ2ZXItPnJlcXVl
c3RTcGFjZShtX2lkZW50aWZpZXIub3JpZ2luKCksIGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3Qs
IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXShhdXRvIGRlY2lzaW9uKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9vd25pbmdQb2ludGVyRm9yQ2xvc2Up
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIHN3aXRjaCAo
ZGVjaXNpb24pIHsKLSAgICAgICAgICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRl
Y2lzaW9uOjpEZW55OiB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gSURCUmVz
dWx0RGF0YTo6ZXJyb3IobV9jdXJyZW50T3BlbkRCUmVxdWVzdC0+cmVxdWVzdERhdGEoKS5yZXF1
ZXN0SWRlbnRpZmllcigpLCBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJv
ck1lc3NhZ2VOYW1lKCJvcGVuRGF0YWJhc2UiKSB9KTsKLSAgICAgICAgICAgICAgICAgICAgbV9j
dXJyZW50T3BlbkRCUmVxdWVzdC0+Y29ubmVjdGlvbigpLmRpZE9wZW5EYXRhYmFzZShyZXN1bHQp
OwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0ID0gbnVsbHB0cjsK
LSAgICAgICAgICAgICAgICAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50OgotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGNhbGxiYWNrSUQgPSB0aGlzLT5nZW5lcmF0ZVVuaXF1ZUNhbGxiYWNr
SWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAgICAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNr
KGNhbGxiYWNrSUQsIGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QpOwotICAgICAgICAgICAgICAg
ICAgICB0aGlzLT5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIsIGNhbGxi
YWNrSUQpKTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODIxLDIzICs3NDksMzAgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6YWRkT3BlbkRhdGFiYXNlQ29ubmVjdGlvbihSZWY8VW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW8KICAgICBtX29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmFkZChhZG9wdFJlZihj
b25uZWN0aW9uLmxlYWtSZWYoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVu
QmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgdWlu
dDY0X3QgdGFza0lkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2lu
Z1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKICAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJ
REJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSAoJXApIiwgdGhpcyk7CiAKKyAgICBJREJEYXRh
YmFzZUluZm8gZGF0YWJhc2VJbmZvOworICAgIG1fb3JpZ2luID0gaWRlbnRpZmllci5vcmlnaW4o
KTsKKyAgICAvLyBRdW90YSBjaGVjay4KKyAgICBhdXRvIGRlY2lzaW9uID0gbV9zZXJ2ZXItPnJl
cXVlc3RTcGFjZShtX29yaWdpbiwgZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCk7CisgICAgaWYg
KGRlY2lzaW9uID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAg
ICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBJREJF
cnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiT3BlbkJhY2tp
bmdTdG9yZSIpKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgQVNTRVJUKCFtX2Jh
Y2tpbmdTdG9yZSk7CiAgICAgbV9iYWNraW5nU3RvcmUgPSBtX3NlcnZlci0+Y3JlYXRlQmFja2lu
Z1N0b3JlKGlkZW50aWZpZXIpOwogICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVv
dXNUcmFuc2FjdGlvbnMgPSBtX2JhY2tpbmdTdG9yZS0+c3VwcG9ydHNTaW11bHRhbmVvdXNUcmFu
c2FjdGlvbnMoKTsKICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gbV9iYWNraW5nU3Rv
cmUtPmlzRXBoZW1lcmFsKCk7CiAKLSAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJbmZvOwog
ICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUlu
Zm8oZGF0YWJhc2VJbmZvKTsKLQotICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9y
ZSwgZGF0YWJhc2VJbmZvLCBlcnJvciwgIHRhc2tJZGVudGlmaWVyKSk7CisgICAgcG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yKSk7CiB9CiAKLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJh
c2VJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIHVpbnQ2NF90IHRhc2tJZGVudGlm
aWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJ
REJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBlcnJvcikKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURC
RGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUiKTsKQEAgLTg0OCw4ICs3ODMsNiBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNl
SW5mbyYgaW5mbywgY29uc3QgSQogICAgIEFTU0VSVChtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSk7
CiAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSBmYWxzZTsKIAotICAgIGZpbmlzaFNwYWNl
SW5jcmVhc2VUYXNrKHRhc2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7Ci0KICAgICBpZiAo
bV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04NjEsMzcg
Kzc5NCwyNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Y3Jl
YXRlT2JqZWN0U3RvcmUiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVy
YXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGluZm8pOwotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2Fj
dGlvbiwgdGFza1NpemUsICJjcmVhdGVPYmplY3RTdG9yZSIsIFt0aGlzLCB0YXNrU2l6ZSwgJnRy
YW5zYWN0aW9uLCBpbmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9y
KSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgp
ICE9IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShl
cnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNy
ZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgaW5m
bywgV1RGTW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFz
a1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJ
REJPYmplY3RTdG9yZUluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElE
QkVycm9yJiBxdW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNh
bGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJ
RCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFj
a0lELCB0YXNrU2l6ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBj
YWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvLCAgcXVvdGFF
cnJvcikpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJ
RCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbykpOwogfQogCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYg
cXVvdGFFcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RT
dG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGlu
Zm8pCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fYmFja2lu
Z1N0b3JlKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUNyZWF0ZU9iamVjdFN0b3JlIik7CiAKLSAgICBpZiAoIXF1b3RhRXJyb3IuaXNOdWxsKCkp
IHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNh
bGxiYWNrSWRlbnRpZmllciwgcXVvdGFFcnJvciwgaW5mbykpOworICAgIC8vIFF1b3RhIGNoZWNr
LgorICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1h
dGVTaXplKGluZm8pOworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCB0
YXNrU2l6ZSkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAg
ICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRl
bnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5h
bWUoIkNyZWF0ZU9iamVjdFN0b3JlIikpLCBpbmZvKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIElEQkVycm9yIGVycm9yID0gbV9i
YWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5m
byk7CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2Fs
bGJhY2tJZGVudGlmaWVyLCBlcnJvciwgaW5mbykpOwpAQCAtOTAyLDcgKzgyNCw2IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0co
SW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2Jq
ZWN0U3RvcmUiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRp
ZmllciwgZXJyb3IuaXNOdWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkKICAgICAgICAg
bV9kYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAKQEAgLTkxNCwx
NyArODM1LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRl
bGV0ZU9iamVjdFN0b3JlIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0
cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVOYW1lLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBp
ZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9y
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+ZGVsZXRl
T2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTmFtZSwg
V1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkZWxldGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIEVycm9y
Q2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2Fs
bGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lE
KQogICAgICAgICByZXR1cm47CkBAIC05NDMsNiArODUzLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvCiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSIpOwogCisg
ICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4sIDApID09IFN0b3JhZ2VRdW90
YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBs
eShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybURlbGV0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3Rh
RXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJEZWxldGVPYmplY3RTdG9yZSIp
KSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5n
U3RvcmUtPmRlbGV0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyKTsKIApAQCAtOTY1LDI4ICs4ODAsMTUgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cmVuYW1lT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJh
bnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIo
bWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlIik7CiAKLSAgICBhdXRv
IHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUluQnl0
ZXMoKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicmVuYW1lT2Jq
ZWN0U3RvcmUiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBuZXdOYW1lLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9y
KSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgp
ICE9IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShl
cnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPnJl
bmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwot
ICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFm
dGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYg
cXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIElEQkVycm9yIGVycm9yID0gcXVvdGFFcnJvcjsKKyAgICBJREJF
cnJvciBlcnJvcjsKICAgICBhdXRvKiBpbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlz
dGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgaWYgKCFpbmZvKQog
ICAgICAgICBlcnJvciA9IElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQXR0ZW1wdCB0byByZW5h
bWUgbm9uLWV4aXN0YW50IG9iamVjdCBzdG9yZSJfcyB9OwogCi0gICAgc3RhcnRTcGFjZUluY3Jl
YXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFt
ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigp
LCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIGVycm9yKSk7CiB9CiAKQEAgLTk5NSw4
ICs4OTcsMTAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0
b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY28KICAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVJlbmFtZU9iamVjdFN0b3JlIik7CiAKLSAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0g
ICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKKyAg
ICAvLyBRdW90YSBjaGVjay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0
aW9uQ29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVl
c3RTcGFjZShtX29yaWdpbiwgdGFza1NpemUpID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVj
dFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwg
cXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJSZW5hbWVPYmplY3RTdG9yZSIpKSwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBuZXdOYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMTEs
NyArOTE1LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVj
dFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRh
c2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlz
TnVsbCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIApAQCAtMTAyMywxNyArOTI2LDYgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiB0cmFuc2FjdGkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJ
bmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUiKTsK
IAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywg
JnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5jbGVhck9iamVjdFN0b3JlQWZl
dFF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgV1RGTW92ZShj
YWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9i
amVjdFN0b3JlQWZldFF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgRXJyb3JDYWxsYmFjayBj
YWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAg
IHJldHVybjsKQEAgLTEwNDUsNiArOTM3LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1DbGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uCiAg
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DbGVhck9iamVjdFN0b3JlIik7CiAKKyAgICBpZiAobV9z
ZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29yaWdpbiwgMCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6
RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ2xlYXJP
YmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJy
b3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiQ2xlYXJPYmplY3RTdG9yZSIpKSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBJREJF
cnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIApAQCAtMTA2NCwzMyArOTYxLDIx
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRl
eCIpOwogCi0gICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBl
c3RpbWF0ZVNpemUoaW5mbyk7Ci0gICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNrU2l6
ZSwgImNyZWF0ZUluZGV4IiwgW3RoaXMsIHRhc2tTaXplLCAmdHJhbnNhY3Rpb24sIGluZm8sIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAg
ICBpZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVy
cm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Y3JlYXRlSW5kZXhBZnRlclF1b3Rh
Q2hlY2sodGFza1NpemUsIHRyYW5zYWN0aW9uLCBpbmZvLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJy
b3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleEFm
dGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgRXJyb3JDYWxsYmFj
ayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCi17CiAgICAgdWludDY0X3Qg
Y2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7
CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGFydFNwYWNl
SW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
Q3JlYXRlSW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCks
IGluZm8sIHF1b3RhRXJyb3IpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgsIGNh
bGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIAot
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIHF1b3Rh
RXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQogewogICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgiKTsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051
bGwoKSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCwgY2Fs
bGJhY2tJZGVudGlmaWVyLCBxdW90YUVycm9yLCBpbmZvKSk7CisgICAgYXV0byB0YXNrU2l6ZSA9
IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5mbyk7CisgICAgaWYg
KG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4sIHRhc2tTaXplKSA9PSBTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVw
bHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1DcmVhdGVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2Vl
ZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiQ3JlYXRlSW5kZXgiKSksIGluZm8pKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTExMiw4ICs5OTcsNiBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4Iik7
CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
LmlzTnVsbCgpKTsKLQogICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAgICAgICBBU1NFUlQo
bV9kYXRhYmFzZUluZm8pOwogICAgICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFi
YXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mby5vYmplY3RTdG9yZUlkZW50
aWZpZXIoKSk7CkBAIC0xMTI5LDE3ICsxMDEyLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
ZGVsZXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikg
VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4Iik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNw
YWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBpbmRleE5hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1
dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICB0aGlzLT5kZWxldGVJbmRleEFmdGVyUXVvdGFDaGVjayh0cmFu
c2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUsIFdURk1vdmUoY2FsbGJh
Y2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhB
ZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24s
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUs
IEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0
b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxs
YmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xMTY0LDYgKzEwMzYsMTEgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSUQKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5k
ZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZUluZGV4Iik7CiAK
KyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29yaWdpbiwgMCkgPT0gU3RvcmFnZVF1
b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtRGVsZXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNl
ZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIkRlbGV0ZUluZGV4IikpLCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllcikpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBJREJFcnJvciBlcnJvciA9IG1f
YmFja2luZ1N0b3JlLT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0
b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyKTsKIApAQCAtMTE4OSwyMyArMTA2NiwxMSBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgi
KTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgbmV3
TmFtZS5zaXplSW5CeXRlcygpOwotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2FjdGlvbiwgdGFza1Np
emUsICJyZW5hbWVJbmRleCIsIFt0aGlzLCB0YXNrU2l6ZSwgJnRyYW5zYWN0aW9uLCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3Iu
aXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAgICAg
ICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICB0aGlzLT5yZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh0YXNrU2l6
ZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBu
ZXdOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNr
U2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBx
dW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBxdW90YUVycm9yOworICAgIElEQkVy
cm9yIGVycm9yOwogICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5p
bmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIGlm
ICghb2JqZWN0U3RvcmVJbmZvKQogICAgICAgICBlcnJvciA9IElEQkVycm9yIHsgVW5rbm93bkVy
cm9yLCAiQXR0ZW1wdCB0byByZW5hbWUgaW5kZXggaW4gbm9uLWV4aXN0YW50IG9iamVjdCBzdG9y
ZSJfcyB9OwpAQCAtMTIxNCw3ICsxMDc5LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVu
YW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkQKICAg
ICBpZiAoIWluZGV4SW5mbykKICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJv
ciwgIkF0dGVtcHQgdG8gcmVuYW1lIG5vbi1leGlzdGFudCBpbmRleCJfcyB9OwogCi0gICAgc3Rh
cnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRp
ZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwg
ZXJyb3IpKTsKIH0KIApAQCAtMTIyMyw4ICsxMDg3LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElECiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihk
YikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCIpOwogCi0gICAgaWYgKCFl
cnJvci5pc051bGwoKSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJ
bmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBp
bmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKKyAgICAvLyBRdW90YSBjaGVjay4KKyAgICBhdXRv
IHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUluQnl0
ZXMoKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29yaWdpbiwgdGFza1NpemUp
ID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3RE
YXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJSZW5hbWVJbmRl
eCIpKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTIzOSw3ICsxMTA1LDYgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCIp
OwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJv
ci5pc051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CiAgICAgICAgIGF1dG8qIG9i
amVjdFN0b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9y
ZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZv
KTsKQEAgLTEyNTMsNTIgKzExMTgsMzkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBw
ZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKIH0KIAotdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3Qg
SURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlLCBJbmRleGVkREI6Ok9i
amVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sgY2Fs
bGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0
RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZh
bHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRl
TW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cHV0
T3JBZGQiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0
ICsgZXN0aW1hdGVTaXplKGtleURhdGEpICsgZXN0aW1hdGVTaXplKHZhbHVlKTsKLSAgICBBU1NF
UlQobV9kYXRhYmFzZUluZm8pOwotICAgIGF1dG8qIG9iamVjdFN0b3JlID0gbV9kYXRhYmFzZUlu
Zm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRl
bnRpZmllcigpKTsKLSAgICBpZiAob2JqZWN0U3RvcmUpCi0gICAgICAgIHRhc2tTaXplICs9IG9i
amVjdFN0b3JlLT5pbmRleE5hbWVzKCkuc2l6ZSgpICogdGFza1NpemU7Ci0KLSAgICByZXF1ZXN0
U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicHV0T3JBZGQiLCBbdGhpcywgdGFza1NpemUs
IHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgb3ZlcndyaXRlTW9kZV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJy
b3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAg
ICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHRh
c2tTaXplLCByZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIFdURk1v
dmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBJREJS
ZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0
IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3Zl
cndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVv
dGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1Np
emUpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJRCwgcmVxdWVzdERh
dGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRp
ZmllcigpLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgcXVvdGFFcnJvcikpOworICAg
IHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNh
Y3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBr
ZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJW
YWx1ZSYgb3JpZ2luYWxSZWNvcmRWYWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0
ZU1vZGUgb3ZlcndyaXRlTW9kZSwgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCit2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRh
LCBjb25zdCBJREJWYWx1ZSYgb3JpZ2luYWxSZWNvcmRWYWx1ZSwgSW5kZXhlZERCOjpPYmplY3RT
dG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVB1dE9yQWRkIik7CiAKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIEFTU0VS
VChvYmplY3RTdG9yZUlkZW50aWZpZXIpOwotCiAgICAgSURCS2V5RGF0YSB1c2VkS2V5OwogICAg
IElEQkVycm9yIGVycm9yOwogCi0gICAgaWYgKCFxdW90YUVycm9yLmlzTnVsbCgpKSB7Ci0gICAg
ICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIs
IHF1b3RhRXJyb3IsIHVzZWRLZXkpKTsKKyAgICAvLyBRdW90YSBjaGVjay4KKyAgICBhdXRvIHRh
c2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShrZXlEYXRh
KSArIGVzdGltYXRlU2l6ZShvcmlnaW5hbFJlY29yZFZhbHVlKTsKKyAgICBBU1NFUlQobV9kYXRh
YmFzZUluZm8pOworICAgIGF1dG8qIG9iamVjdFN0b3JlID0gbV9kYXRhYmFzZUluZm8tPmluZm9G
b3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgaWYgKG9i
amVjdFN0b3JlKQorICAgICAgICB0YXNrU2l6ZSArPSBvYmplY3RTdG9yZS0+aW5kZXhOYW1lcygp
LnNpemUoKSAqIHRhc2tTaXplOworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1fb3Jp
Z2luLCB0YXNrU2l6ZSkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsK
KyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRp
ZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUo
IlB1dE9yQWRkIikpLCB1c2VkS2V5KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBB
U1NFUlQobV9iYWNraW5nU3RvcmUpOworICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIp
OwogICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
SW5kZXhlZERCLCAiJXAgLSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkOiBtX2Jh
Y2tpbmdTdG9yZSBpcyBudWxsIiwgdGhpcyk7CiAgICAgICAgIGVycm9yID0gSURCRXJyb3IoSW52
YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFsaWQgZm9yIGNhbGwgdG8gcHV0
IG9yIGFkZCJfcyk7CkBAIC0xMzcyLDI2ICsxMjI0LDE0IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElECiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1h
aW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQiKTsKIAotICAgIGZpbmlz
aFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwog
ICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVz
dWx0S2V5KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYg
cmVxdWVzdERhdGEsIGNvbnN0IElEQkdldFJlY29yZERhdGEmIGdldFJlY29yZERhdGEsIEdldFJl
c3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3Jk
KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0UmVjb3JkRGF0
YSYgZ2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlE
QkRhdGFiYXNlOjpnZXRSZWNvcmQiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0
aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGdldFJlY29yZERhdGEsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAg
IGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJy
b3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMt
PmdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgV1RG
TW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpn
ZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
LCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiBnZXRSZWNvcmREYXRhLCBHZXRSZXN1bHRDYWxsYmFj
ayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE0MDIsMjIgKzEyNDIsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6Z2V0UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0
RGEKICAgICAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCwgY2FsbGJhY2tJRCwgcmVxdWVz
dERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRl
bnRpZmllcigpLCBnZXRSZWNvcmREYXRhLmtleVJhbmdlRGF0YSwgZ2V0UmVjb3JkRGF0YS50eXBl
KSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHMoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRh
LCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3Qg
SURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBHZXRBbGxSZXN1bHRzQ2Fs
bGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0co
SW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzIik7CiAK
LSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJl
cXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkg
ewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Z2V0QWxsUmVjb3Jkc0FmdGVyUXVv
dGFDaGVjayhyZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jkc0RhdGEsIFdURk1vdmUoY2FsbGJhY2sp
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3Jkc0Fm
dGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElE
QkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSwgR2V0QWxsUmVzdWx0c0NhbGxi
YWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTQzMCw5ICsxMjU5LDEzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSCiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihk
YikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQiKTsKIAotICAgIEFTU0VSVCht
X2JhY2tpbmdTdG9yZSk7Ci0KICAgICBJREJHZXRSZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3Nl
cnZlci0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNv
cmQsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgcmVz
dWx0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9iYWNraW5nU3Rv
cmUpOwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldFJlY29yZCh0cmFu
c2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5UmFuZ2VEYXRhLCB0
eXBlLCByZXN1bHQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBj
YWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKQEAgLTE0NDMsOSArMTI3NiwxMyBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5k
ZXhSZWNvcmQiKTsKIAotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KICAgICBJREJHZXRS
ZXN1bHQgcmVzdWx0OworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCAw
KSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJy
b3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgcmVzdWx0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIElEQkVycm9yIGVycm9yID0gbV9i
YWNraW5nU3RvcmUtPmdldEluZGV4UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIHJlY29yZFR5cGUsIHJhbmdlLCByZXN1
bHQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKQEAgLTE0NjQsOSArMTMwMSwxMyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRzIik7
CiAKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotCiAgICAgSURCR2V0QWxsUmVzdWx0IHJl
c3VsdDsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29yaWdpbiwgMCkgPT0gU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtR2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihR
dW90YUV4Y2VlZGVkRXJyb3IpLCBXVEZNb3ZlKHJlc3VsdCkpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgSURCRXJyb3IgZXJyb3Ig
PSBtX2JhY2tpbmdTdG9yZS0+Z2V0QWxsUmVjb3Jkcyh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGdl
dEFsbFJlY29yZHNEYXRhLCByZXN1bHQpOwogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
R2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgV1RGTW92ZShyZXN1bHQp
KSk7CkBAIC0xNDgwLDIyICsxMzIxLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uCiAgICAg
cGVyZm9ybUdldEFsbFJlc3VsdHNDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBy
ZXN1bHQpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudChVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJl
cXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxiYWNrIGNh
bGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQoY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENh
bGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9H
KEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQiKTsKIAotICAg
IHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVz
dERhdGEsIHJhbmdlLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3Ip
IG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBj
YWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICB0aGlzLT5nZXRDb3VudEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwg
cmFuZ2UsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6Z2V0Q291bnRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJl
cXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxiYWNrIGNh
bGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJl
RXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTUwNyw2ICsxMzM3LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1HZXRDb3VudCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlCiAg
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCIpOwogCisgICAgaWYgKG1fc2VydmVyLT5y
ZXF1ZXN0U3BhY2UobV9vcmlnaW4sIDApID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
OjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldENvdW50LCBjYWxs
YmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciksIDApKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAgICAgQVNT
RVJUKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAKQEAgLTE1MjQsMjIgKzEzNTksMTEgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldENvdW50KHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSUQKICAgICBwZXJmb3JtQ291bnRDYWxsYmFjayhjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yLCBjb3VudCk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRl
bGV0ZVJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29u
c3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtl
eVJhbmdlRGF0YSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRlbGV0ZVJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWlu
KSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVz
dFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBrZXlSYW5n
ZURhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJs
ZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNr
KFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICB0aGlzLT5kZWxldGVSZWNvcmRBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGtleVJhbmdl
RGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkZWxldGVSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEm
IHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgRXJyb3JD
YWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQp
CiAgICAgICAgIHJldHVybjsKQEAgLTE1NTEsOCArMTM3NSwxMiBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSQogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIs
ICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkIik7CiAKLSAgICBJ
REJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVSYW5nZSh0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgcmFuZ2UpOworICAgIGlmIChtX3NlcnZl
ci0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNp
c2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVSZWNv
cmQsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdT
dG9yZS0+ZGVsZXRlUmFuZ2UodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIHJhbmdlKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVSZWNvcmQs
IGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpKTsKIH0KIApAQCAtMTU2NCwyMiArMTM5MiwxMSBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29ucwogICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxi
YWNrSWRlbnRpZmllciwgZXJyb3IpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVu
Q3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8sIEdl
dFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1
cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkN1cnNvcklu
Zm8mIGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6b3BlbkN1cnNvciIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJh
bnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051
bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+b3BlbkN1cnNvckFmdGVy
UXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgaW5mbywgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0p
OwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNr
KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCQ3Vyc29ySW5mbyYg
aW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJh
Y2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAg
aWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xNTkyLDYgKzE0MDksMTAgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJzb3IodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREIKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJzb3IiKTsKIAogICAgIElEQkdldFJlc3VsdCByZXN1
bHQ7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4sIDApID09IFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRh
c2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUGVyZm9ybU9wZW5DdXJzb3IsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFF
eGNlZWRlZEVycm9yKSwgcmVzdWx0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgSURC
RXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkN1cnNvcih0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGluZm8sIHJlc3VsdCk7CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1PcGVu
Q3Vyc29yLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKQEAgLTE2MDUsMjIg
KzE0MjYsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybU9wZW5DdXJzb3Io
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIHBlcmZvcm1HZXRSZXN1bHRD
YWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpOwogfQogCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykK
K3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSwgR2V0UmVz
dWx0Q2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29y
Iik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3Ro
aXMsIHJlcXVlc3REYXRhLCBkYXRhLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRv
JiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5pdGVyYXRlQ3Vyc29yQWZ0ZXJRdW90YUNoZWNr
KHJlcXVlc3REYXRhLCBkYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hlY2soY29uc3Qg
SURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYg
ZGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJh
Y2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAg
aWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xNjMzLDYgKzE0NDMsMTAgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvciIpOwogCiAgICAgSURCR2V0UmVzdWx0IHJl
c3VsdDsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29yaWdpbiwgMCkgPT0gU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtSXRlcmF0ZUN1cnNvciwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihR
dW90YUV4Y2VlZGVkRXJyb3IpLCByZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAg
ICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5pdGVyYXRlQ3Vyc29yKHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY3Vyc29ySWRlbnRpZmllciwgZGF0YSwgcmVzdWx0KTsKIAogICAgIGlm
IChlcnJvci5pc051bGwoKSkgewpAQCAtMTY4NCwxNyArMTQ5OCw2IEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
IHRyYW5zYWN0CiAKICAgICBBU1NFUlQodHJhbnNhY3Rpb24uZGF0YWJhc2VDb25uZWN0aW9uKCku
ZGF0YWJhc2UoKSA9PSB0aGlzKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9u
KHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Y29tbWl0VHJhbnNhY3Rpb25BZnRl
clF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0K
LQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hl
Y2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIEVycm9yQ2FsbGJh
Y2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tP
ckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAg
ICAgICByZXR1cm47CkBAIC0xNzE1LDggKzE1MTgsMTAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2EKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIpCiB7Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0g
ICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRU
cmFuc2FjdGlvbiAtICVzIiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29yaWdpbiwg
MCkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9z
dERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSWRlbnRpZmll
ciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yKSwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2lu
Z1N0b3JlLT5jb21taXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uLCBjYWxsYmFja0lkZW50aWZp
ZXIsIGVycm9yLCB0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKQEAgLTE3NDgsMjQgKzE1NTMsMTMg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICB0cmFuc2FjdGlvbkNvbXBsZXRlZChtX2Zp
bmlzaGluZ1RyYW5zYWN0aW9ucy50YWtlKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwogfQogCi12
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXYWl0Rm9yUGVuZGluZ1Rhc2tzIHdhaXRGb3JQZW5k
aW5nVGFza3MsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjphYm9ydFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0
aW9uLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRU
cmFuc2FjdGlvbiAtICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5n
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBBU1NFUlQodHJhbnNhY3Rpb24uZGF0YWJh
c2VDb25uZWN0aW9uKCkuZGF0YWJhc2UoKSA9PSB0aGlzKTsKIAotICAgIGlmICh3YWl0Rm9yUGVu
ZGluZ1Rhc2tzID09IFdhaXRGb3JQZW5kaW5nVGFza3M6OlllcykgewotICAgICAgICB3YWl0Rm9y
UmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAg
ICAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFj
ayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgdGhpcy0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgV2FpdEZv
clBlbmRpbmdUYXNrczo6Tm8sIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICAgICAgfSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQp
CiAgICAgICAgIHJldHVybjsKQEAgLTE4MDgsNiArMTYwMiwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbgogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIs
ICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiAtICVzIiwg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAor
ICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCAwKSA9PSBTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVw
bHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1BYm9ydFRyYW5zYWN0aW9uLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3Rh
RXhjZWVkZWRFcnJvciksIHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOworICAgICAgICByZXR1cm47
CisgICAgfQorCiAgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+YWJvcnRUcmFu
c2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBs
eShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybUFib3J0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHRyYW5zYWN0
aW9uSWRlbnRpZmllcikpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCBlYzNmYzBjNzNl
YTMwZTI0ZTdhMGNlZTU4ODlmMzk2MWYwY2M0YzI3Li44ZTgyYTgxNDAwYzlhNzE2NDQxYTA2OTk3
Y2VkZTNmMDMyOGM1YjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAtNDQsNiArNDQsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBDbGllbnRPcmlnaW47CiBjbGFzcyBJ
REJFcnJvcjsKIGNsYXNzIElEQkdldEFsbFJlc3VsdDsKIHN0cnVjdCBJREJHZXRSZWNvcmREYXRh
OwpAQCAtODksMTcgKzkwLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZUluZGV4KFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJJbmRleEluZm8mLCBFcnJvckNhbGxi
YWNrKTsKICAgICB2b2lkIGRlbGV0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1l
LCBFcnJvckNhbGxiYWNrKTsKICAgICB2b2lkIHJlbmFtZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGlu
ZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrKTsKLSAg
ICB2b2lkIHB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJS
ZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIEluZGV4ZWRE
Qjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2spOwotICAgIHZvaWQg
Z2V0UmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0
RGF0YSYsIGNvbnN0IElEQkdldFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAg
dm9pZCBnZXRBbGxSZWNvcmRzKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJ
REJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgR2V0QWxsUmVzdWx0
c0NhbGxiYWNrKTsKLSAgICB2b2lkIGdldENvdW50KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIENvdW50
Q2FsbGJhY2spOwotICAgIHZvaWQgZGVsZXRlUmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEVy
cm9yQ2FsbGJhY2spOwotICAgIHZvaWQgb3BlbkN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJDdXJzb3JJbmZvJiwgR2V0
UmVzdWx0Q2FsbGJhY2spOwotICAgIHZvaWQgaXRlcmF0ZUN1cnNvcihVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJdGVyYXRlQ3Vy
c29yRGF0YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKKyAgICB2b2lkIHB1dE9yQWRkKGNvbnN0IElE
QlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhl
ZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayk7CisgICAgdm9p
ZCBnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRSZWNvcmREYXRh
JiwgR2V0UmVzdWx0Q2FsbGJhY2spOworICAgIHZvaWQgZ2V0QWxsUmVjb3Jkcyhjb25zdCBJREJS
ZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgR2V0QWxsUmVzdWx0c0Nh
bGxiYWNrKTsKKyAgICB2b2lkIGdldENvdW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3Qg
SURCS2V5UmFuZ2VEYXRhJiwgQ291bnRDYWxsYmFjayk7CisgICAgdm9pZCBkZWxldGVSZWNvcmQo
Y29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFcnJvckNhbGxi
YWNrKTsKKyAgICB2b2lkIG9wZW5DdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJ
REJDdXJzb3JJbmZvJiwgR2V0UmVzdWx0Q2FsbGJhY2spOworICAgIHZvaWQgaXRlcmF0ZUN1cnNv
cihjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwgR2V0
UmVzdWx0Q2FsbGJhY2spOwogICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwotCi0gICAgZW51bSBjbGFzcyBXYWl0
Rm9yUGVuZGluZ1Rhc2tzIHsgTm8sIFllcyB9OwotICAgIHZvaWQgYWJvcnRUcmFuc2FjdGlvbihV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgV2FpdEZvclBlbmRpbmdUYXNrcywgRXJyb3JD
YWxsYmFjayk7CisgICAgdm9pZCBhYm9ydFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mLCBFcnJvckNhbGxiYWNrKTsKIAogICAgIHZvaWQgZGlkRmluaXNoSGFuZGxpbmdW
ZXJzaW9uQ2hhbmdlKFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIHRyYW5zYWN0
aW9uRGVzdHJveWVkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mKTsKQEAgLTEzOSwzNyAr
MTM4LDIwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNjaGVkdWxlU2h1dGRvd25Gb3JDbG9zZSgp
OwogCi0gICAgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0
YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQk9iamVjdFN0
b3JlSW5mbyYsIEVycm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCByZW5h
bWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAg
IHZvaWQgY3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJJbmRleEluZm8mLCBFcnJvckNhbGxi
YWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgcmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hl
Y2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAg
IHZvaWQgcHV0T3JBZGRBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIGNvbnN0IElE
QlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhl
ZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjaywgY29uc3QgSURC
RXJyb3ImKTsKLSAgICB2b2lkIGRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJS
ZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEVycm9yQ2FsbGJhY2spOwotCi0g
ICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIEVycm9yQ2FsbGJh
Y2spOwotICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIEVycm9y
Q2FsbGJhY2spOwotICAgIHZvaWQgZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRSZWNvcmRBZnRlclF1b3Rh
Q2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiwgR2V0
UmVzdWx0Q2FsbGJhY2spOwotICAgIHZvaWQgZ2V0QWxsUmVjb3Jkc0FmdGVyUXVvdGFDaGVjayhj
b25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgR2V0QWxs
UmVzdWx0c0NhbGxiYWNrKTsKLSAgICB2b2lkIGdldENvdW50QWZ0ZXJRdW90YUNoZWNrKGNvbnN0
IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgQ291bnRDYWxsYmFjayk7
Ci0gICAgdm9pZCBvcGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRh
JiwgY29uc3QgSURCQ3Vyc29ySW5mbyYsIEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGl0
ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJ
REJJdGVyYXRlQ3Vyc29yRGF0YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGNvbW1p
dFRyYW5zYWN0aW9uQWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
LCBFcnJvckNhbGxiYWNrKTsKLQogICAgIC8vIERhdGFiYXNlIHRocmVhZCBvcGVyYXRpb25zCiAg
ICAgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7
Ci0gICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYs
IHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKTsKKyAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29u
c3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CiAgICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJhbnNh
Y3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCBwZXJmb3JtQWJvcnRUcmFu
c2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIGJlZ2luVHJhbnNhY3Rp
b25JbkJhY2tpbmdTdG9yZShjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKLSAgICB2b2lkIHBl
cmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJP
YmplY3RTdG9yZUluZm8mLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgcGVyZm9ybUNyZWF0
ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3Jl
SW5mbyYpOwogICAgIHZvaWQgcGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9pZCBwZXJm
b3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElEQkVycm9y
Jik7CiAgICAgdm9pZCBwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwotICAgIHZvaWQgcGVyZm9ybUNy
ZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYsIGNv
bnN0IElEQkVycm9yJik7CisgICAgdm9pZCBwZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJik7CiAgICAgdm9pZCBwZXJmb3JtRGVsZXRl
SW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIpOwogICAgIHZvaWQgcGVyZm9ybVJlbmFtZUlu
ZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0
IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiwg
Y29uc3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgY29u
c3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIHBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEm
LCBjb25zdCBJREJWYWx1ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKTsK
ICAgICB2b2lkIHBlcmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJREJHZXRS
ZWNvcmREYXRhVHlwZSk7CiAgICAgdm9pZCBwZXJmb3JtR2V0QWxsUmVjb3Jkcyh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYpOwogICAgIHZvaWQgcGVy
Zm9ybUdldEluZGV4UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6Oklu
ZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CkBAIC0xODYsNyArMTY4LDcg
QEAgcHJpdmF0ZToKIAogICAgIC8vIE1haW4gdGhyZWFkIGNhbGxiYWNrcwogICAgIHZvaWQgZGlk
RGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKTsKLSAgICB2b2lkIGRp
ZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3Im
LCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcik7CisgICAgdm9pZCBkaWRPcGVuQmFja2luZ1N0b3Jl
KGNvbnN0IElEQkRhdGFiYXNlSW5mbyYsIGNvbnN0IElEQkVycm9yJik7CiAgICAgdm9pZCBkaWRQ
ZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJFcnJvciYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOwogICAgIHZvaWQgZGlkUGVy
Zm9ybURlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCRXJyb3ImLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZGlk
UGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCRXJyb3ImLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgbmV3TmFtZSk7CkBAIC0yNDUsMTEgKzIyNyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXli
ZUZpbmlzaEhhcmRDbG9zZSgpOwogICAgIGJvb2wgaXNEb25lV2l0aEhhcmRDbG9zZSgpOwogCi0g
ICAgdm9pZCByZXF1ZXN0U3BhY2UoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2
NF90IHRhc2tTaXplLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoSURCRXJyb3ImJik+JiYpOwotICAgIHZvaWQgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBs
ZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoSURCRXJyb3ImJik+JiYpOwotICAgIHZvaWQgc3RhcnRTcGFjZUluY3JlYXNlVGFzayh1aW50
NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrU2l6ZSk7Ci0gICAgdm9pZCBmaW5pc2hTcGFj
ZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCBib29sIGlzVGFza1N1Y2Nlc3NmdWwp
OwotCiAgICAgdm9pZCBjbGVhclRyYW5zYWN0aW9uc09uQ29ubmVjdGlvbihVbmlxdWVJREJEYXRh
YmFzZUNvbm5lY3Rpb24mKTsKIAogICAgIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNh
bGxiYWNrSWRlbnRpZmllcigpOwpAQCAtMzA1LDcgKzI4Miw3IEBAIHByaXZhdGU6CiAKICAgICBI
YXNoU2V0PElEQlJlc291cmNlSWRlbnRpZmllcj4gbV9jdXJzb3JQcmVmZXRjaGVzOwogCi0gICAg
SGFzaE1hcDx1aW50NjRfdCwgdWludDY0X3Q+IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrczsK
KyAgICBDbGllbnRPcmlnaW4gbV9vcmlnaW47CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAKaW5kZXggZmU5
MTBmYWY5ODQ5ZGMyYjA0N2ViYTk3YWU1NjY1NzlmZDEzZDIxMC4uODAwNjA2OTg4MzQ0ZjFiMzli
OGI5ZmJjMTk5OTgyMWQ4MjYyMWI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
Q29ubmVjdGlvbi5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZUNv
bm5lY3Rpb246OmFib3J0VHJhbnNhY3Rpb25XaXRob3V0Q2FsbGJhY2soVW5pcXVlSURCRGF0YWIK
ICAgICBpZiAoIW1fZGF0YWJhc2UpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX2RhdGFi
YXNlLT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBVbmlxdWVJREJEYXRhYmFzZTo6V2Fp
dEZvclBlbmRpbmdUYXNrczo6Tm8sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCB0cmFuc2FjdGlvbklk
ZW50aWZpZXJdKGNvbnN0IElEQkVycm9yJikgeworICAgIG1fZGF0YWJhc2UtPmFib3J0VHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb24sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCB0cmFuc2FjdGlvbklkZW50
aWZpZXJdKGNvbnN0IElEQkVycm9yJikgewogICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbk1h
cC5jb250YWlucyh0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKICAgICAgICAgbV90cmFuc2FjdGlv
bk1hcC5yZW1vdmUodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB9KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAppbmRleCBhOGQyYmRjNzQwYzg5NzFh
NWE3YzA0ZTc2YzAzMjliNDc2YWRjNDI2Li43NmVkZGM0NWIwNzZiZTNlNjk3Mjg0NWQxMWUyMTUw
YjZmMDdkODY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24u
Y3BwCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
YWJvcnQoKQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJh
c2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogCi0gICAgZGF0YWJhc2UtPmFib3J0VHJhbnNh
Y3Rpb24oKnRoaXMsIFVuaXF1ZUlEQkRhdGFiYXNlOjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpZZXMs
IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0oYXV0byYgZXJyb3IpIHsKKyAg
ICBkYXRhYmFzZS0+YWJvcnRUcmFuc2FjdGlvbigqdGhpcywgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpXShhdXRvJiBlcnJvcikgewogICAgICAgICBMT0coSW5kZXhlZERCLCAi
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6YWJvcnQgKGNhbGxiYWNrKSIpOwogICAgICAg
ICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjg2LDcgKzI4Niw3IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6cHV0T3JBZGQoY29uc3QgSURCUmVx
dWVzdERhdGEmIHJlcXVlc3REYXRhLCBjCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VD
b25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAg
ZGF0YWJhc2UtPnB1dE9yQWRkKCp0aGlzLCByZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIG92
ZXJ3cml0ZU1vZGUsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVz
dERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsKKyAgICBkYXRhYmFz
ZS0+cHV0T3JBZGQocmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBl
cnJvciwgY29uc3QgSURCS2V5RGF0YSYga2V5KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRPckFkZCAoY2FsbGJhY2spIik7CiAgICAg
ICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMDcsNyArMzA3LDcg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRSZWNvcmQoY29uc3QgSURC
UmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLAogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNl
Q29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAg
IGRhdGFiYXNlLT5nZXRSZWNvcmQoKnRoaXMsIHJlcXVlc3REYXRhLCBnZXRSZWNvcmREYXRhLCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBl
cnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRhYmFzZS0+Z2V0UmVj
b3JkKHJlcXVlc3REYXRhLCBnZXRSZWNvcmREYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0
JiByZXN1bHQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb246OmdldFJlY29yZCAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMjgsNyArMzI4LDcgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGEKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFi
YXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+Z2V0QWxs
UmVjb3JkcygqdGhpcywgcmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29u
c3QgSURCR2V0QWxsUmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRhYmFzZS0+Z2V0QWxsUmVjb3Jk
cyhyZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jkc0RhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRBbGxS
ZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3JkcyAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICgh
d2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zNDksNyArMzQ5LDcgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0
YSYgcmVxdWVzdERhdGEsIGMKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rp
b24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFz
ZS0+Z2V0Q291bnQoKnRoaXMsIHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCB1aW50
NjRfdCBjb3VudCkgeworICAgIGRhdGFiYXNlLT5nZXRDb3VudChyZXF1ZXN0RGF0YSwga2V5UmFu
Z2VEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRh
XShhdXRvJiBlcnJvciwgdWludDY0X3QgY291bnQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwg
IlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50IChjYWxsYmFjaykiKTsKICAg
ICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM3MCw3ICszNzAs
NyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZChjb25z
dCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdAogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFi
YXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAot
ICAgIGRhdGFiYXNlLT5kZWxldGVSZWNvcmQoKnRoaXMsIHJlcXVlc3REYXRhLCBrZXlSYW5nZURh
dGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1
dG8mIGVycm9yKSB7CisgICAgZGF0YWJhc2UtPmRlbGV0ZVJlY29yZChyZXF1ZXN0RGF0YSwga2V5
UmFuZ2VEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3RE
YXRhXShhdXRvJiBlcnJvcikgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYg
KCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9wZW5DdXJzb3IoY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYXRhLAogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVj
dGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFi
YXNlLT5vcGVuQ3Vyc29yKCp0aGlzLCByZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHdlYWtUaGlz
ID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElE
QkdldFJlc3VsdCYgcmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPm9wZW5DdXJzb3IocmVxdWVzdERh
dGEsIGluZm8sIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERh
dGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvciAo
Y2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC00MTIsNyArNDEyLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpp
dGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGEKICAgICBhdXRvIGRh
dGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRh
dGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+aXRlcmF0ZUN1cnNvcigqdGhpcywgcmVxdWVz
dERhdGEsIGRhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVz
dERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgeworICAgIGRh
dGFiYXNlLT5pdGVyYXRlQ3Vyc29yKHJlcXVlc3REYXRhLCBkYXRhLCBbdGhpcywgd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURC
R2V0UmVzdWx0JiByZXN1bHQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IgKGNhbGxiYWNrKSIpOwogICAgICAgICBp
ZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVy
LmNwcAppbmRleCA5MTExZjU5NzhlM2I4MDYxODU1YzIwZjVhZmFhNWI2NTVkY2NlYTIxLi43MzJh
Y2QxYmU4M2U2NWY2ZjllZmIyYzM0NTZiMTI4ZTNkM2ZmZGNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURC
U2VydmVyLmNwcApAQCAtNjEsMzYgKzYxLDUxIEBAIFJlZjxJblByb2Nlc3NJREJTZXJ2ZXI+IElu
UHJvY2Vzc0lEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uCiAK
IEluUHJvY2Vzc0lEQlNlcnZlcjo6fkluUHJvY2Vzc0lEQlNlcnZlcigpID0gZGVmYXVsdDsKIAot
U3RvcmFnZVF1b3RhTWFuYWdlciogSW5Qcm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIoY29u
c3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCitSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gSW5Q
cm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4p
CiB7CiAgICAgcmV0dXJuIG1fcXVvdGFNYW5hZ2Vycy5lbnN1cmUob3JpZ2luLCBbXSB7Ci0gICAg
ICAgIHJldHVybiBtYWtlVW5pcXVlPFN0b3JhZ2VRdW90YU1hbmFnZXI+KFN0b3JhZ2VRdW90YU1h
bmFnZXI6OmRlZmF1bHRRdW90YSgpLCBbXSh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3VycmVu
dFNwYWNlLCB1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBhdXRvIGNhbGxiYWNrKSB7CisgICAgICAg
IHJldHVybiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUoU3RvcmFnZVF1b3RhTWFuYWdlcjo6
ZGVmYXVsdFF1b3RhKCksIFtdIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9LCBb
XSh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3VycmVudFNwYWNlLCB1aW50NjRfdCBzcGFjZUlu
Y3JlYXNlLCBhdXRvIGNhbGxiYWNrKSB7CiAgICAgICAgICAgICBjYWxsYmFjayhxdW90YSArIGN1
cnJlbnRTcGFjZSArIHNwYWNlSW5jcmVhc2UpOwogICAgICAgICB9KTsKLSAgICB9KS5pdGVyYXRv
ci0+dmFsdWUuZ2V0KCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSURCU2VydmVyOjpJREJTZXJ2ZXI6
OlF1b3RhTWFuYWdlckdldHRlciBzdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyKEluUHJvY2Vzc0lE
QlNlcnZlciYgc2VydmVyKQotewotICAgIHJldHVybiBbd2Vha1NlcnZlciA9IG1ha2VXZWFrUHRy
KHNlcnZlcildKFBBTDo6U2Vzc2lvbklELCBjb25zdCBhdXRvJiBvcmlnaW4pIHsKLSAgICAgICAg
cmV0dXJuIHdlYWtTZXJ2ZXIgPyB3ZWFrU2VydmVyLT5xdW90YU1hbmFnZXIob3JpZ2luKSA6IG51
bGxwdHI7Ci0gICAgfTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIEluUHJvY2Vzc0lE
QlNlcnZlcjo6SW5Qcm9jZXNzSURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKLSAg
ICA6IG1fc2VydmVyKElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklELCBzdG9y
YWdlUXVvdGFNYW5hZ2VyR2V0dGVyKCp0aGlzKSkpCiB7CiAgICAgcmVsYXhBZG9wdGlvblJlcXVp
cmVtZW50KCk7CiAgICAgbV9jb25uZWN0aW9uVG9TZXJ2ZXIgPSBJREJDbGllbnQ6OklEQkNvbm5l
Y3Rpb25Ub1NlcnZlcjo6Y3JlYXRlKCp0aGlzKTsKICAgICBtX2Nvbm5lY3Rpb25Ub0NsaWVudCA9
IElEQlNlcnZlcjo6SURCQ29ubmVjdGlvblRvQ2xpZW50OjpjcmVhdGUoKnRoaXMpOworICAgIG1f
c2VydmVyID0gSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIFt0aGlzLCB3
ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4s
IHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkKSBtdXRhYmxlIHsKKyAgICAgICAgUmVmUHRyPFN0b3Jh
Z2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIgPSB3ZWFrVGhpcyA/IHF1b3RhTWFu
YWdlcihvcmlnaW4pIDogbnVsbHB0cjsKKyAgICAgICAgaWYgKCFzdG9yYWdlUXVvdGFNYW5hZ2Vy
KQorICAgICAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55
OworCisgICAgICAgIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIHJlc3VsdDsKKyAgICAg
ICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHNwYWNlUmVxdWVzdGVkLCBbJnJl
c3VsdF0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CisgICAgICAgICAgICByZXN1bHQgPSBkZWNp
c2lvbjsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSk7CiB9CiAK
IEluUHJvY2Vzc0lEQlNlcnZlcjo6SW5Qcm9jZXNzSURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpCi0gICAgOiBtX3Nl
cnZlcihJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgZGF0YWJhc2VEaXJl
Y3RvcnlQYXRoLCBzdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyKCp0aGlzKSkpCiB7CiAgICAgcmVs
YXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CiAgICAgbV9jb25uZWN0aW9uVG9TZXJ2ZXIgPSBJREJD
bGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y3JlYXRlKCp0aGlzKTsKICAgICBtX2Nvbm5l
Y3Rpb25Ub0NsaWVudCA9IElEQlNlcnZlcjo6SURCQ29ubmVjdGlvblRvQ2xpZW50OjpjcmVhdGUo
KnRoaXMpOworICAgIG1fc2VydmVyID0gSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShzZXNz
aW9uSUQsIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpXShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VSZXF1
ZXN0ZWQpIG11dGFibGUgeworICAgICAgICBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3Rv
cmFnZVF1b3RhTWFuYWdlciA9IHdlYWtUaGlzID8gcXVvdGFNYW5hZ2VyKG9yaWdpbikgOiBudWxs
cHRyOworICAgICAgICBpZiAoIXN0b3JhZ2VRdW90YU1hbmFnZXIpCisgICAgICAgICAgICByZXR1
cm4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk7CisKKyAgICAgICAgU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gcmVzdWx0OworICAgICAgICBzdG9yYWdlUXVvdGFNYW5h
Z2VyLT5yZXF1ZXN0U3BhY2Uoc3BhY2VSZXF1ZXN0ZWQsIFsmcmVzdWx0XShhdXRvIGRlY2lzaW9u
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRlY2lzaW9uOworICAgICAgICB9KTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9KTsKIH0KIAogSURCQ29ubmVjdGlvbklkZW50
aWZpZXIgSW5Qcm9jZXNzSURCU2VydmVyOjppZGVudGlmaWVyKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJ
REJTZXJ2ZXIuaAppbmRleCBjN2I1MzIxY2EzNjFjNzQxZTUyZDQ1ZWMxOGE4MzE4ZmFkMDgyOWMw
Li4wZGQ5NzQ0MjMwOWM4ZTc0YTYwNzY5ODFiZDhlYjkwZmE2OTRkNjE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vz
c0lEQlNlcnZlci5oCkBAIC02Myw5ICs2Myw4IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBjb25uZWN0aW9uVG9TZXJ2ZXIo
KSBjb25zdDsKICAgICBJREJTZXJ2ZXI6OklEQkNvbm5lY3Rpb25Ub0NsaWVudCYgY29ubmVjdGlv
blRvQ2xpZW50KCkgY29uc3Q7Ci0gICAgSURCU2VydmVyOjpJREJTZXJ2ZXImIHNlcnZlcigpIHsg
cmV0dXJuIG1fc2VydmVyLmdldCgpOyB9Ci0KLSAgICBJREJTZXJ2ZXI6OklEQlNlcnZlciYgaWRi
U2VydmVyKCkgeyByZXR1cm4gbV9zZXJ2ZXIuZ2V0KCk7IH0KKyAgICBJREJTZXJ2ZXI6OklEQlNl
cnZlciYgc2VydmVyKCkgeyByZXR1cm4gKm1fc2VydmVyOyB9CisgICAgSURCU2VydmVyOjpJREJT
ZXJ2ZXImIGlkYlNlcnZlcigpIHsgcmV0dXJuICptX3NlcnZlcjsgfQogCiAgICAgLy8gSURCQ29u
bmVjdGlvblRvU2VydmVyCiAgICAgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBJREJSZXF1ZXN0
RGF0YSYpIGZpbmFsOwpAQCAtMTI1LDE3ICsxMjQsMTcgQEAgcHVibGljOgogICAgIHZvaWQgcmVm
KCkgb3ZlcnJpZGUgeyBSZWZDb3VudGVkPEluUHJvY2Vzc0lEQlNlcnZlcj46OnJlZigpOyB9CiAg
ICAgdm9pZCBkZXJlZigpIG92ZXJyaWRlIHsgUmVmQ291bnRlZDxJblByb2Nlc3NJREJTZXJ2ZXI+
OjpkZXJlZigpOyB9CiAKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBxdW90YU1hbmFnZXIoY29u
c3QgQ2xpZW50T3JpZ2luJik7CisgICAgUmVmUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IHF1b3Rh
TWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBJ
blByb2Nlc3NJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQpOwogICAgIEluUHJvY2Vzc0lEQlNlcnZl
cihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpOwog
Ci0gICAgUmVmPElEQlNlcnZlcjo6SURCU2VydmVyPiBtX3NlcnZlcjsKKyAgICBSZWZQdHI8SURC
U2VydmVyOjpJREJTZXJ2ZXI+IG1fc2VydmVyOwogICAgIFJlZlB0cjxJREJDbGllbnQ6OklEQkNv
bm5lY3Rpb25Ub1NlcnZlcj4gbV9jb25uZWN0aW9uVG9TZXJ2ZXI7CiAgICAgUmVmUHRyPElEQlNl
cnZlcjo6SURCQ29ubmVjdGlvblRvQ2xpZW50PiBtX2Nvbm5lY3Rpb25Ub0NsaWVudDsKIAotICAg
IEhhc2hNYXA8Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZVF1b3RhTWFuYWdl
cj4+IG1fcXVvdGFNYW5hZ2VyczsKKyAgICBIYXNoTWFwPENsaWVudE9yaWdpbiwgUmVmUHRyPFN0
b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3F1b3RhTWFuYWdlcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggMGY0OGNmMGY3MzhlNzMwNzMzYzZjNDMzYjA4OWYwYzk4YjM1NGMwZi4u
M2QwMmVkMTRjYzI4ZDQxNDRmZThlYTc3MGRlNmIyODgyYjA5ZTg4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEyOSw3ICsx
MTI5LDYgQEAKIAkJNDFEMjhEMEQyMTM5RTA1ODAwRjQyMDZGIC8qIExpYldlYlJUQ1N0YXRzQ29s
bGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxRDI4RDBCMjEzOUUwMUQwMEY0MjA2RiAvKiBMaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5jcHAg
Ki87IH07CiAJCTQxRDQxQzY3MjI1Njg3NEYwMDY5Nzk0MiAvKiBTZXJ2aWNlV29ya2VySW50ZXJu
YWxzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFE
NDFDNjUyMjU2ODU5MjAwNjk3OTQyIC8qIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMubW0gKi87IH07
CiAJCTQxREU3QzdDMjIyREExNDMwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MURFN0M3QjIyMkRB
MTNFMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTQxREU3QzdEMjIyREExNDgwMDUzMkI2NSAv
KiBTdG9yYWdlUXVvdGFVc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MURFN0M3ODIyMkRBMTNDMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhVXNlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxREVG
Q0I2MUU1NkMxQkQwMDBEOUU1RiAvKiBKU0RPTU1hcExpa2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxREVGQ0I0MUU1NkMxQjkwMDBEOUU1RiAvKiBK
U0RPTU1hcExpa2UuaCAqLzsgfTsKIAkJNDFFMUIxRDEwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3Ry
YWN0V29ya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MUUxQjFDQjBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCAqLzsgfTsKIAkJ
NDFFOURDRTcyMzE5NzRCRjAwRjM1OTQ5IC8qIEJsb2JMb2FkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRTlEQ0U0MjMxOTczRkUwMEYzNTk0OSAv
KiBCbG9iTG9hZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTc0NjYsNyArNzQ2NSw2IEBACiAJCTQxRDI4RDBDMjEzOUUwMUUwMEY0MjA2RiAv
KiBMaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBMaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5oOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJU
Q1N0YXRzQ29sbGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRDQxQzY1
MjI1Njg1OTIwMDY5Nzk0MiAvKiBTZXJ2aWNlV29ya2VySW50ZXJuYWxzLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VydmljZVdvcmtlckludGVybmFscy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFENTFCQjIxRTRFMkU4MTAwMTMxQTVCIC8q
IExpYldlYlJUQ0F1ZGlvRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IExpYldlYlJUQ0F1ZGlvRm9ybWF0Lmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDQXVkaW9G
b3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDFERTdDNzgyMjJEQTEzQzAw
NTMyQjY1IC8qIFN0b3JhZ2VRdW90YVVzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3RvcmFnZVF1b3RhVXNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MURFN0M3QTIyMkRBMTNEMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFERTdDN0IyMjJEQTEzRTAwNTMyQjY1IC8q
IFN0b3JhZ2VRdW90YU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3RvcmFnZVF1b3RhTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURF
RkNCMjFFNTZDMUI5MDAwRDlFNUYgLyogSlNET01CaW5kaW5nSW50ZXJuYWxzLmpzICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gSlNET01CaW5kaW5nSW50ZXJuYWxzLmpz
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcxMDQsNyArMTcxMDIsNiBAQAogCQkJ
CTFBMzc2MzZBMUEyRTY4QkIwMDlBN0VFMiAvKiBTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCAq
LywKIAkJCQk0MURFN0M3QTIyMkRBMTNEMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5j
cHAgKi8sCiAJCQkJNDFERTdDN0IyMjJEQTEzRTAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFn
ZXIuaCAqLywKLQkJCQk0MURFN0M3ODIyMkRBMTNDMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhVXNl
ci5oICovLAogCQkJCTUxNjZEM0NDMUU4RUQ0MTEwMEFENjJFMyAvKiBTdG9yYWdlVHlwZS5oICov
LAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKQEAgLTMyMjI1LDcgKzMyMjIyLDYgQEAKIAkJ
CQlDNTBEMEU4MzBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUEzNzYzNkMxQTJFNjhCQjAwOUE3RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFERTdDN0MyMjJEQTE0MzAwNTMyQjY1IC8q
IFN0b3JhZ2VRdW90YU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQxREU3QzdEMjIyREEx
NDgwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzlF
RjJGMzIxRjA2MTkwMDAzQkRDNTYgLyogU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE2NkQzQ0QxRThFRDQ4RjAwQUQ2MkUzIC8qIFN0b3JhZ2VUeXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0NjgyRDIwMDFGNzk3ODMwMDBDODYzREIgLyogU3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKaW5kZXggODUyNTc1MmU2MzM0Nzk1MzBlZjE0ZWNiNzRm
ODViYWY2OGQ5YzU1Yi4uNTQyNjQxZGEzYTNlZTQ1NTM3MTg2NGZlZjFjZDliY2E3YmM2NjVjYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCkBA
IC0yNywyMTMgKzI3LDEzMiBAQAogI2luY2x1ZGUgIlN0b3JhZ2VRdW90YU1hbmFnZXIuaCIKIAog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTdG9yYWdlUXVvdGFVc2VyLmgiCisjaW5j
bHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
U3RvcmFnZVF1b3RhTWFuYWdlcjo6flN0b3JhZ2VRdW90YU1hbmFnZXIoKQorUmVmPFN0b3JhZ2VR
dW90YU1hbmFnZXI+IFN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZSh1aW50NjRfdCBxdW90YSwg
VXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3Rh
SW5jcmVhc2VSZXF1ZXN0ZXIpCiB7Ci0gICAgd2hpbGUgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0Vt
cHR5KCkpCi0gICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpLmNhbGxiYWNrKERl
Y2lzaW9uOjpEZW55KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9yYWdlUXVvdGFNYW5h
Z2VyKHF1b3RhLCBXVEZNb3ZlKHVzYWdlR2V0dGVyKSwgV1RGTW92ZShxdW90YUluY3JlYXNlUmVx
dWVzdGVyKSkpOwogfQogCi11aW50NjRfdCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzcGFjZVVzYWdl
KCkgY29uc3QKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0
X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYgdXNhZ2VHZXR0ZXIsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0
ZXImJiBxdW90YUluY3JlYXNlUmVxdWVzdGVyKQorICAgIDogbV9xdW90YShxdW90YSkKKyAgICAs
IG1fdXNhZ2VHZXR0ZXIoV1RGTW92ZSh1c2FnZUdldHRlcikpCisgICAgLCBtX3F1b3RhSW5jcmVh
c2VSZXF1ZXN0ZXIoV1RGTW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKSkKKyAgICAsIG1fd29y
a1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJTdG9yYWdlUXVvdGFNYW5hZ2VyIEJhY2tncm91bmQg
UXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OlNlcmlhbCkpCisgICAgLCBtX2luaXRpYWxRdW90YShx
dW90YSkKIHsKLSAgICB1aW50NjRfdCB1c2FnZSA9IDA7Ci0gICAgZm9yIChhdXRvJiB1c2VyIDog
bV91c2VycykKLSAgICAgICAgdXNhZ2UgKz0gdXNlci0+c3BhY2VVc2VkKCk7Ci0gICAgcmV0dXJu
IHVzYWdlOwogfQogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRP
blNwYWNlVXNhZ2UoKQordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UodWlu
dDY0X3Qgc3BhY2VSZXF1ZXN0ZWQsIFJlcXVlc3RDYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAg
IGlmICghbV9xdW90YSkKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgcmVxdWVz
dFNwYWNlT25NYWluVGhyZWFkKHNwYWNlUmVxdWVzdGVkLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAg
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gZGVmYXVsdFF1b3RhU3RlcCA9IG1fcXVvdGEgLyAx
MDsKLSAgICBtX3F1b3RhID0gc3RkOjptYXgobV9xdW90YSwgZGVmYXVsdFF1b3RhU3RlcCAqICgo
c3BhY2VVc2FnZSgpIC8gZGVmYXVsdFF1b3RhU3RlcCkgKyAxKSk7CisgICAgfQorICAgIGNhbGxi
YWNrKHJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZChzcGFjZVJlcXVlc3RlZCkpOwogfQog
Ci12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCkKK3Zv
aWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKHVpbnQ2NF90
IHNwYWNlUmVxdWVzdGVkLCBSZXF1ZXN0Q2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBpZiAo
bV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgVmVjdG9yPFN0b3JhZ2VRdW90YVVz
ZXIqPiB1c2Vyc1RvSW5pdGlhbGl6ZTsKLSAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogbV9wZW5k
aW5nSW5pdGlhbGl6YXRpb25Vc2VycykgewotICAgICAgICBpZiAoa2V5VmFsdWUudmFsdWUgPT0g
V2hlbkluaXRpYWxpemVkQ2FsbGVkOjpObykgewotICAgICAgICAgICAga2V5VmFsdWUudmFsdWUg
PSBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ6OlllczsKLSAgICAgICAgICAgIHVzZXJzVG9Jbml0aWFs
aXplLmFwcGVuZChrZXlWYWx1ZS5rZXkpOworICAgIC8vIEZhc3QgcGF0aC4KKyAgICBpZiAobV9x
dW90YUNvdW50RG93bkxvY2sudHJ5TG9jaygpKSB7CisgICAgICAgIGlmICh0cnlHcmFudFJlcXVl
c3Qoc3BhY2VSZXF1ZXN0ZWQpKSB7CisgICAgICAgICAgICBtX3F1b3RhQ291bnREb3duTG9jay51
bmxvY2soKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKERlY2lzaW9uOjpHcmFudCk7CisgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9xdW90YUNvdW50RG93bkxvY2sudW5s
b2NrKCk7CiAgICAgfQotICAgIGZvciAoYXV0byogdXNlciA6IHVzZXJzVG9Jbml0aWFsaXplKSB7
Ci0gICAgICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmNvbnRhaW5zKHVzZXIp
KQotICAgICAgICAgICAgYXNrVXNlclRvSW5pdGlhbGl6ZSgqdXNlcik7Ci0gICAgfQorCisgICAg
bV9jYWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBtX3dvcmtRdWV1ZS0+
ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc3BhY2VSZXF1
ZXN0ZWRdIHsKKyAgICAgICAgYXV0byBkZWNpc2lvbiA9IHJlcXVlc3RTcGFjZU9uQmFja2dyb3Vu
ZFRocmVhZChzcGFjZVJlcXVlc3RlZCk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZGVjaXNpb25dIHsKKyAgICAgICAgICAg
IEFTU0VSVCghbV9jYWxsYmFja3MuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbGJh
Y2sgPSBtX2NhbGxiYWNrcy50YWtlRmlyc3QoKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGRlY2lz
aW9uKTsKKyAgICAgICAgfSk7CisgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdl
cjo6YXNrVXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQorU3RvcmFnZVF1
b3RhTWFuYWdlcjo6RGVjaXNpb24gU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25C
YWNrZ3JvdW5kVGhyZWFkKHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkKQogewotICAgIHVzZXIud2hl
bkluaXRpYWxpemVkKFt0aGlzLCAmdXNlciwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0o
KSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47CisgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CiAKLSAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0
aW9uVXNlcnMucmVtb3ZlKCZ1c2VyKSkKLSAgICAgICAgICAgIG1fdXNlcnMuYWRkKCZ1c2VyKTsK
KyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3F1b3RhQ291bnREb3duTG9jayk7CiAKLSAgICAgICAg
aWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICBpZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkKKyAgICAg
ICAgcmV0dXJuIERlY2lzaW9uOjpHcmFudDsKIAotICAgICAgICAvLyBNYWtlIHN1cmUgcXVvdGEg
aXMgc2V0IGJlZm9yZSBoYW5kbGluZyBmaXJzdCByZXF1ZXN0LgotICAgICAgICBpZiAobV9zdGF0
ZSA9PSBTdGF0ZTo6VW5pbml0aWFsaXplZCkgewotICAgICAgICAgICAgdXBkYXRlUXVvdGFCYXNl
ZE9uU3BhY2VVc2FnZSgpOwotICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNp
c2lvbkZvclJlcXVlc3Q7Ci0gICAgICAgIH0KKyAgICBtX3VzYWdlID0gbV91c2FnZUdldHRlcigp
OworICAgIHVwZGF0ZVF1b3RhQmFzZWRPblVzYWdlKCk7CisgICAgbV9xdW90YUNvdW50RG93biA9
IG1fdXNhZ2UgPCBtX3F1b3RhID8gbV9xdW90YSAtIG1fdXNhZ2UgOiAwOworICAgIGlmICh0cnlH
cmFudFJlcXVlc3Qoc3BhY2VSZXF1ZXN0ZWQpKQorICAgICAgICByZXR1cm4gRGVjaXNpb246Okdy
YW50OwogCi0gICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKLSAgICB9KTsKLX0K
KyAgICAvLyBCbG9jayB0aGlzIHRocmVhZCB1bnRpbCBnZXR0aW5nIGRlY3Npb24gZm9yIHF1b3Rh
IGluY3JlYXNlLgorICAgIEJpbmFyeVNlbWFwaG9yZSBzZW1hcGhvcmU7CisgICAgY2FsbE9uTWFp
blRocmVhZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzcGFjZVJlcXVl
c3RlZCwgJnNlbWFwaG9yZV0geworICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBT
dG9yYWdlUXVvdGFNYW5hZ2VyIGFza3MgZm9yIHF1b3RhIGluY3JlYXNlICUiIFBSSXU2NCwgdGhp
cywgc3BhY2VSZXF1ZXN0ZWQpOworICAgICAgICBtX3F1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIobV9x
dW90YSwgbV91c2FnZSwgc3BhY2VSZXF1ZXN0ZWQsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksICZzZW1hcGhvcmVdKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdl
ciByZWNlaXZlcyBxdW90YSBpbmNyZWFzZSByZXNwb25zZSAlIiBQUkl1NjQsIHRoaXMsIG5ld1F1
b3RhID8gKm5ld1F1b3RhIDogMCk7CisgICAgICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFkZFVzZXIoU3RvcmFnZVF1b3RhVXNlciYg
dXNlcikKLXsKLSAgICBBU1NFUlQoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFp
bnMoJnVzZXIpKTsKLSAgICBBU1NFUlQoIW1fdXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBt
X3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmFkZCgmdXNlciwgV2hlbkluaXRpYWxpemVkQ2Fs
bGVkOjpObyk7CisgICAgICAgICAgICBpZiAobmV3UXVvdGEpCisgICAgICAgICAgICAgICAgbV9x
dW90YSA9ICpuZXdRdW90YTsKIAotICAgIGlmICghbV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgp
KQotICAgICAgICBhc2tVc2VyVG9Jbml0aWFsaXplKHVzZXIpOwotfQorICAgICAgICAgICAgc2Vt
YXBob3JlLnNpZ25hbCgpOworICAgICAgICB9KTsKKyAgICB9KTsKIAotYm9vbCBTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpzaG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkg
Y29uc3QKLXsKLSAgICBpZiAoIXNwYWNlSW5jcmVhc2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBzZW1hcGhvcmUud2FpdCgpOwogCi0gICAgcmV0dXJuIHNwYWNlVXNhZ2UoKSArIHNwYWNl
SW5jcmVhc2UgPiBtX3F1b3RhOworICAgIG1fdXNhZ2UgPSBtX3VzYWdlR2V0dGVyKCk7CisgICAg
bV9xdW90YUNvdW50RG93biA9IG1fdXNhZ2UgPCBtX3F1b3RhID8gbV9xdW90YSAtIG1fdXNhZ2Ug
OiAwOworICAgIHJldHVybiB0cnlHcmFudFJlcXVlc3Qoc3BhY2VSZXF1ZXN0ZWQpID8gRGVjaXNp
b246OkdyYW50IDogRGVjaXNpb246OkRlbnk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdl
cjo6cmVtb3ZlVXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQorYm9vbCBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjp0cnlHcmFudFJlcXVlc3QodWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQpCiB7Ci0gICAg
QVNTRVJUKG1fdXNlcnMuY29udGFpbnMoJnVzZXIpIHx8IG1fcGVuZGluZ0luaXRpYWxpemF0aW9u
VXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBtX3VzZXJzLnJlbW92ZSgmdXNlcik7Ci0gICAg
aWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMucmVtb3ZlKCZ1c2VyKSAmJiBtX3BlbmRp
bmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBXaGVuIGJlaW5n
IGNsZWFyZWQsIHF1b3RhIHVzZXJzIG1heSByZW1vdmUgdGhlbXNlbHZlcyBhbmQgYWRkIHRoZW1z
ZWx2ZXMgdG8gdHJpZ2dlciByZWluaXRpYWxpemF0aW9uLgotICAgICAgICAvLyBMZXQncyB3YWl0
IGZvciBhZGRVc2VyIHRvIGJlIGNhbGxlZCBiZWZvcmUgcHJvY2Vzc2luZyBwZW5kaW5nIHJlcXVl
c3RzLgotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKHRoaXMpXSB7Ci0gICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMu
aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMo
eyB9KTsKLSAgICAgICAgfSk7CisgICAgQVNTRVJUKG1fcXVvdGFDb3VudERvd25Mb2NrLmlzTG9j
a2VkKCkpOworICAgIGlmIChzcGFjZVJlcXVlc3RlZCA8PSBtX3F1b3RhQ291bnREb3duKSB7Cisg
ICAgICAgIG1fcXVvdGFDb3VudERvd24gLT0gc3BhY2VSZXF1ZXN0ZWQ7CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9Ci0KLXZvaWQgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIFJlcXVlc3RDYWxs
YmFjayYmIGNhbGxiYWNrKQorICAgIAordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVR
dW90YUJhc2VkT25Vc2FnZSgpCiB7Ci0gICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwg
V1RGTW92ZShjYWxsYmFjaykgfSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAvLyBXaGVuIFN0b3Jh
Z2VRdW90YU1hbmFnZXIgaXMgdXNlZCBmb3IgdGhlIGZpcnN0IHRpbWUsIHdlIHdhbnQgdG8gbWFr
ZSBzdXJlIGl0cyBpbml0aWFsIHF1b3RhIGlzIGJpZ2dlciB0aGFuIGN1cnJlbnQgZGlzayB1c2Fn
ZSwKKyAgICAvLyBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBxdW90YSB3YXMgaW5j
cmVhc2VkIHRvIGF0IGxlYXN0IHRoZSBkaXNrIHVzYWdlIHVuZGVyIHVzZXIncyBwZXJtaXNzaW9u
IGJlZm9yZS4KKyAgICBBU1NFUlQobV9xdW90YUNvdW50RG93bkxvY2suaXNMb2NrZWQoKSk7Cisg
ICAgaWYgKCFtX3F1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZSkgeworICAgICAgICBtX3F1b3RhVXBk
YXRlZEJhc2VkT25Vc2FnZSA9IHRydWU7CisgICAgICAgIGF1dG8gZGVmYXVsdFF1b3RhU3RlcCA9
IG1fcXVvdGEgLyAxMDsKKyAgICAgICAgbV9xdW90YSA9IHN0ZDo6bWF4KG1fcXVvdGEsIGRlZmF1
bHRRdW90YVN0ZXAgKiAoKG1fdXNhZ2UgLyBkZWZhdWx0UXVvdGFTdGVwKSArIDEpKTsKICAgICB9
Ci0KLSAgICBpZiAoIXNwYWNlSW5jcmVhc2UpIHsKLSAgICAgICAgY2FsbGJhY2soRGVjaXNpb246
OkdyYW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGluaXRpYWxpemVVc2Vyc0lm
TmVlZGVkKCk7Ci0KLSAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2Us
IFdURk1vdmUoY2FsbGJhY2spIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KHNob3VsZEFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKSkgewotICAgICAgICBtX3BlbmRp
bmdSZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsK
LQotICAgICAgICAvLyBUcnkgcHJvY2Vzc2luZyByZXF1ZXN0IGFnYWluIGFmdGVyIG1ha2luZyBz
dXJlIHVzYWdlIGlzIGFjY3VyYXRlLgotICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkNvbXB1dGlu
Z1NwYWNlVXNlZDsKLSAgICAgICAgZm9yIChhdXRvJiB1c2VyIDogY29weVRvVmVjdG9yKG1fdXNl
cnMpKQotICAgICAgICAgICAgdXNlci0+Y29tcHV0ZVNwYWNlVXNlZCgpOwotCi0gICAgICAgIGlm
ICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0g
ICAgICAgIGFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fc3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0Owot
ICAgIGNhbGxiYWNrKERlY2lzaW9uOjpHcmFudCk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFu
YWdlcjo6YXNrRm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpCit2b2lkIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlKCkKIHsKLSAgICBB
U1NFUlQoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpKTsKLSAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlKTsKLQotICAgIFJFTEVBU0VfTE9H
KFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSAlIiBQ
Ukl1NjQsIHRoaXMsIHNwYWNlSW5jcmVhc2UpOwotICAgIG1fc3RhdGUgPSBTdGF0ZTo6V2FpdGlu
Z0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZTsKLSAgICBtX3NwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIo
bV9xdW90YSwgc3BhY2VVc2FnZSgpLCBzcGFjZUluY3JlYXNlLCBbdGhpcywgd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cigqdGhpcyldKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkgewotICAgICAg
ICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJFTEVBU0Vf
TE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSBy
ZWNlaXZlZCByZXNwb25zZSAlIiBQUkl1NjQsIHRoaXMsIG5ld1F1b3RhID8gKm5ld1F1b3RhIDog
MCk7Ci0KLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAg
ICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMobmV3UXVvdGEpOwotICAgIH0pOworICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1fcXVvdGFDb3VudERvd25Mb2NrKTsKKyAgICBtX3F1b3RhID0gbV9pbml0
aWFsUXVvdGE7CisgICAgbV9xdW90YUNvdW50RG93biA9IDA7CisgICAgbV9xdW90YVVwZGF0ZWRC
YXNlZE9uVXNhZ2UgPSBmYWxzZTsKIH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9j
ZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkKK3ZvaWQgU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90YSgpCiB7Ci0gICAgaWYgKG1fcGVuZGluZ1JlcXVl
c3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG5ld1F1b3RhKQotICAg
ICAgICBtX3F1b3RhID0gKm5ld1F1b3RhOwotCi0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6Oldh
aXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2UpIHsKLSAg
ICAgICAgYXV0byByZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCk7Ci0gICAg
ICAgIGJvb2wgc2hvdWxkQWxsb3dSZXF1ZXN0ID0gIXNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1
ZXN0LnNwYWNlSW5jcmVhc2UpOwotCi0gICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAt
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMgZmlyc3QgcmVxdWVz
dCBkZWNpc2lvbiBpcyAlZCIsIHRoaXMsIHNob3VsZEFsbG93UmVxdWVzdCk7Ci0KLSAgICAgICAg
bV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3Q7Ci0gICAgICAgIHJlcXVl
c3QuY2FsbGJhY2soc2hvdWxkQWxsb3dSZXF1ZXN0ID8gRGVjaXNpb246OkdyYW50IDogRGVjaXNp
b246OkRlbnkpOwotICAgIH0KLQotICAgIHdoaWxlICghbV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGF1dG8mIHJlcXVlc3QgPSBtX3BlbmRpbmdSZXF1ZXN0cy5maXJzdCgp
OwotCi0gICAgICAgIGlmIChzaG91bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3Jl
YXNlKSkgewotICAgICAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9u
Rm9yUmVxdWVzdCkgewotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q29tcHV0aW5n
U3BhY2VVc2VkOwotICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdXNlciA6IGNvcHlUb1ZlY3Rv
cihtX3VzZXJzKSkKLSAgICAgICAgICAgICAgICAgICAgdXNlci0+Y29tcHV0ZVNwYWNlVXNlZCgp
OwotCi0gICAgICAgICAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZTsKLSAgICAgICAg
ICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UgPSAwOwotICAgICAgICAgICAgZm9yIChhdXRvJiBw
ZW5kaW5nUmVxdWVzdCA6IG1fcGVuZGluZ1JlcXVlc3RzKQotICAgICAgICAgICAgICAgIHNwYWNl
SW5jcmVhc2UgKz0gcGVuZGluZ1JlcXVlc3Quc3BhY2VJbmNyZWFzZTsKLSAgICAgICAgICAgIGFz
a0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0
OwotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy50YWtlRmlyc3QoKS5jYWxsYmFjayhEZWNpc2lv
bjo6R3JhbnQpOwotICAgIH0KKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3F1b3RhQ291bnREb3du
TG9jayk7CisgICAgbV9xdW90YSA9IG1faW5pdGlhbFF1b3RhOworICAgIG1fcXVvdGFDb3VudERv
d24gPSAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCmluZGV4IDA5NTY2MzA2ZjU1OTFhYmI1OWQwYWZk
OGVlYTQ4Njc5YTVmNmM2M2MuLmViNjRhMjAzOTY5Njk1NTJkNjI3NjhmY2VjYzcxNWRhYTIxM2Vh
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCkBA
IC0yNSw3NyArMjUsNTggQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDbGllbnRPcmln
aW4uaCIKICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYv
RGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU3RvcmFnZVF1b3RhVXNlcjsKLQotY2xh
c3MgU3RvcmFnZVF1b3RhTWFuYWdlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTdG9yYWdlUXVv
dGFNYW5hZ2VyPiB7CitjbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VyIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFN0b3JhZ2VRdW90YU1hbmFnZXI+LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8
U3RvcmFnZVF1b3RhTWFuYWdlcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIHVzaW5nIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEY6OkZ1bmN0aW9uPHZv
aWQodWludDY0X3QgcXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmKT47
Ci0gICAgU3RvcmFnZVF1b3RhTWFuYWdlcih1aW50NjRfdCBxdW90YSwgU3BhY2VJbmNyZWFzZVJl
cXVlc3RlciYmIHNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIpCi0gICAgICAgIDogbV9xdW90YShxdW90
YSkKLSAgICAgICAgLCBtX3NwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIoV1RGTW92ZShzcGFjZUluY3Jl
YXNlUmVxdWVzdGVyKSkKLSAgICB7Ci0gICAgfQotICAgIFdFQkNPUkVfRVhQT1JUIH5TdG9yYWdl
UXVvdGFNYW5hZ2VyKCk7CisgICAgdXNpbmcgVXNhZ2VHZXR0ZXIgPSBXVEY6OkZ1bmN0aW9uPHVp
bnQ2NF90KCk+OworICAgIHVzaW5nIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEY6OkZ1bmN0
aW9uPHZvaWQodWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50VXNhZ2UsIHVp
bnQ2NF90IHJlcXVlc3RlZEluY3JlYXNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFs
PHVpbnQ2NF90Pik+JiYpPjsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFN0b3JhZ2VR
dW90YU1hbmFnZXI+IGNyZWF0ZSh1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJ
bmNyZWFzZVJlcXVlc3RlciYmKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVm
YXVsdFRoaXJkUGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkgeyBy
ZXR1cm4gcXVvdGEgLyAxMDsgfQotCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBkZWZh
dWx0UXVvdGEoKSB7IHJldHVybiAxMDAwICogTUI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIHVp
bnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB7IHJldHVybiBkZWZhdWx0VGhpcmRQYXJ0
eVF1b3RhRnJvbVBlck9yaWdpblF1b3RhKGRlZmF1bHRRdW90YSgpKTsgfQogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhZGRVc2VyKFN0b3JhZ2VRdW90YVVzZXImKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJlbW92ZVVzZXIoU3RvcmFnZVF1b3RhVXNlciYpOwotCiAgICAgZW51bSBjbGFz
cyBEZWNpc2lvbiB7IERlbnksIEdyYW50IH07CiAgICAgdXNpbmcgUmVxdWVzdENhbGxiYWNrID0g
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNpc2lvbik+OwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVxdWVzdFNwYWNlKHVpbnQ2NF90LCBSZXF1ZXN0Q2FsbGJhY2smJik7Ci0gICAgdm9pZCBy
ZXNldFF1b3RhKHVpbnQ2NF90IG5ld1F1b3RhKSB7IG1fcXVvdGEgPSBuZXdRdW90YTsgfQotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCk7CiAK
LSAgICBlbnVtIGNsYXNzIFN0YXRlIHsKLSAgICAgICAgVW5pbml0aWFsaXplZCwKLSAgICAgICAg
Q29tcHV0aW5nU3BhY2VVc2VkLAotICAgICAgICBXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3Bv
bnNlLAotICAgICAgICBBc2tpbmdGb3JNb3JlU3BhY2UsCi0gICAgICAgIE1ha2luZ0RlY2lzaW9u
Rm9yUmVxdWVzdCwKLSAgICB9OwotICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZTsgfQorICAgIC8vIFRlc3Qgb25seS4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0
UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNl
dFF1b3RhKCk7CiAKIHByaXZhdGU6Ci0gICAgdWludDY0X3Qgc3BhY2VVc2FnZSgpIGNvbnN0Owot
ICAgIGJvb2wgc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpIGNv
bnN0OwotICAgIHZvaWQgYXNrRm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpOwor
ICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYsIFF1
b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJik7CiAKLSAgICB2b2lkIGluaXRpYWxpemVVc2Vyc0lmTmVl
ZGVkKCk7Ci0gICAgdm9pZCBhc2tVc2VyVG9Jbml0aWFsaXplKFN0b3JhZ2VRdW90YVVzZXImKTsK
KyAgICB2b2lkIHJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCh1aW50NjRfdCwgUmVxdWVzdENhbGxi
YWNrJiYpOworICAgIERlY2lzaW9uIHJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCh1aW50
NjRfdCk7CiAKLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0
X3Q+KTsKKyAgICBib29sIHRyeUdyYW50UmVxdWVzdCh1aW50NjRfdCk7CisgICAgdm9pZCB1cGRh
dGVRdW90YUJhc2VkT25Vc2FnZSgpOwogCisgICAgTG9jayBtX3F1b3RhQ291bnREb3duTG9jazsK
KyAgICB1aW50NjRfdCBtX3F1b3RhQ291bnREb3duIHsgMCB9OwogICAgIHVpbnQ2NF90IG1fcXVv
dGEgeyAwIH07CisgICAgdWludDY0X3QgbV91c2FnZSB7IDAgfTsKIAotICAgIFNwYWNlSW5jcmVh
c2VSZXF1ZXN0ZXIgbV9zcGFjZUluY3JlYXNlUmVxdWVzdGVyOworICAgIFVzYWdlR2V0dGVyIG1f
dXNhZ2VHZXR0ZXI7CisgICAgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciBtX3F1b3RhSW5jcmVhc2VS
ZXF1ZXN0ZXI7CiAKLSAgICBlbnVtIGNsYXNzIFdoZW5Jbml0aWFsaXplZENhbGxlZCB7IE5vLCBZ
ZXMgfTsKLSAgICBIYXNoTWFwPFN0b3JhZ2VRdW90YVVzZXIqLCBXaGVuSW5pdGlhbGl6ZWRDYWxs
ZWQ+IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnM7Ci0gICAgSGFzaFNldDxTdG9yYWdlUXVv
dGFVc2VyKj4gbV91c2VyczsKKyAgICBEZXF1ZTxSZXF1ZXN0Q2FsbGJhY2s+IG1fY2FsbGJhY2tz
OworICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOwogCi0gICAgc3RydWN0IFBlbmRpbmdS
ZXF1ZXN0IHsKLSAgICAgICAgdWludDY0X3Qgc3BhY2VJbmNyZWFzZTsKLSAgICAgICAgUmVxdWVz
dENhbGxiYWNrIGNhbGxiYWNrOwotICAgIH07Ci0gICAgRGVxdWU8UGVuZGluZ1JlcXVlc3Q+IG1f
cGVuZGluZ1JlcXVlc3RzOworICAgIGJvb2wgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgeyBm
YWxzZSB9OwogCi0gICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpVbmluaXRpYWxpemVkIH07Cisg
ICAgLy8gVGVzdCBvbmx5LgorICAgIHVpbnQ2NF90IG1faW5pdGlhbFF1b3RhIHsgMCB9OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlUXVvdGFVc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VR
dW90YVVzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcxMGNlZWM2MGM1ZGU1
MGM2MDlkMjMxYjBmMGRmOTY3NDk0OTQyMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9Db21w
bGV0aW9uSGFuZGxlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFN0b3JhZ2VR
dW90YVVzZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgflN0b3JhZ2VRdW90YVVzZXIoKSA9IGRl
ZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQg
d2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykgeyBj
YWxsYmFjaygpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDVmMjNjYzY2YWEx
MWY3ZDI4ZTc2MTVjY2I4NTEzNjdjMjAzMTViZTMuLjBiM2EzODFkZTdiMjRmODhiNjgzNjczNDVm
ZDVkMmQ2OTUzZTY0NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFT
dG9yZS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW5jbHVk
ZSAiV2Vic2l0ZURhdGFUeXBlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRE5TLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9EZXByZWNhdGVkR2xvYmFsU2V0dGluZ3MuaD4KQEAgLTMxNiw2
ICszMTcsOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3Mo
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJgogICAgIGF1dG8gc2Vzc2lvbklEID0g
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFt
ZXRlcnMuc2Vzc2lvbklEOwogICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lv
bjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwogCisgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBhZGRTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRh
U3RvcmVQYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBhZGRJ
bmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKICNlbmRpZgpAQCAtMzI2LDcgKzMzMCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6Omlu
aXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYm
CiAgICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQs
IFdURk1vdmUocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwg
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKICAgICB9CiAjZW5kaWYKLSAgICBpbml0aWFsaXplU3RvcmFnZVF1b3RhKHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAgICAgbV9zdG9yYWdlTWFuYWdlclNl
dC0+YWRkKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5s
b2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIApAQCAtNDM0LDI4ICs0
MzcsMzkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogeworICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOworCisgICAgYWRkU2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3Jh
Z2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOworCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0g
ICAgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5zZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAg
YWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBp
ZiAocGFyZW50UHJvY2Vzc0hhc1NlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpKQotICAgICAgICBh
ZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5zZXNzaW9uSUQsIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRl
bGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOworICAgICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihzZXNzaW9u
SUQsIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxl
ZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnkp
LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwogI2VuZGlmCiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQocGFyYW1ldGVy
cy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmxvY2FsU3Rv
cmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwotCi0gICAgaW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShwYXJhbWV0ZXJzKTsKKyAgICBt
X3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFn
ZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogCiAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3Rv
cmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKIH0KIAotdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6aW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShjb25zdCBXZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgdWludDY0X3QgZGVmYXVs
dFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNh
Y2hlUm9vdFBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgY2FjaGVSb290UGF0aEhhbmRs
ZSkKIHsKLSAgICBhdXRvJiBtYW5hZ2VycyA9ICBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmVuc3Vy
ZShwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIFtdIHsKLSAg
ICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsgfTsKLSAgICB9KS5pdGVyYXRvci0+
dmFsdWU7Ci0gICAgbWFuYWdlcnMuc2V0RGVmYXVsdFF1b3RhcyhwYXJhbWV0ZXJzLnBlck9yaWdp
blN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3Rh
KTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xv
Y2spOworICAgIGF1dG9baXRlciwgaXNOZXdFbnRyeV0gPSBtX3Nlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2Vycy5hZGQoc2Vzc2lvbklELCBudWxscHRyKTsKKyAgICBpZiAoaXNOZXdFbnRyeSkgewor
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoY2FjaGVSb290UGF0
aEhhbmRsZSk7CisgICAgICAgIGl0ZXItPnZhbHVlID0gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlcj4oY2FjaGVSb290UGF0aCwgZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQ
YXJ0eVF1b3RhKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlbW92ZVNlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAg
IEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5jb250YWlucyhzZXNzaW9uSUQp
KTsKKyAgICBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5yZW1vdmUoc2Vzc2lvbklEKTsK
IH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTZXNzaW9uKGNvbnN0IEZ1
bmN0aW9uPHZvaWQoTmV0d29ya1Nlc3Npb24mKT4mIGZ1bmN0b3IpCkBAIC01NzYsOCArNTkwLDYg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQogI2VuZGlmCiAKICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW1vdmUoc2Vzc2lv
bklEKTsKLQotICAgIG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Npb25JRCk7CiB9
CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMTQ2OCw5ICsxNDgw
LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2kKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5j
b250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkgJiYgIXNlc3Npb25JRC5pc0VwaGVt
ZXJhbCgpKQogICAgICAgICBjbGVhckRpc2tDYWNoZShtb2RpZmllZFNpbmNlLCBbY2xlYXJUYXNr
c0hhbmRsZXIgPSBXVEZNb3ZlKGNsZWFyVGFza3NIYW5kbGVyKV0geyB9KTsKIAotICAgIGlmICh3
ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJh
c2VzKSB8fCB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RE9NQ2Fj
aGUpKQotICAgICAgICBjbGVhclN0b3JhZ2VRdW90YShzZXNzaW9uSUQpOwotCiAgICAgaWYgKHdl
YnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpBZENsaWNrQXR0cmlidXRp
b25zKSkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0aGlzLT5uZXR3b3Jr
U2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICAgICAgbmV0d29ya1Nlc3Npb24tPmNsZWFyQWRD
bGlja0F0dHJpYnV0aW9uKCk7CkBAIC0xNTYzLDE5ICsxNTcyLDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgT3B0aW8KICAgICAgICAgfQogICAgICAgICBXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFnZTo6
cmVtb3ZlU2Vzc2lvbkNyZWRlbnRpYWxzV2l0aE9yaWdpbnMob3JpZ2luRGF0YXMpOwogICAgIH0K
LQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc3RvcmFnZSBxdW90YSBjbGVhcmluZyBmb3IgdGhl
c2Ugb3JpZ2lucy4KLX0KLQotdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJTdG9yYWdlUXVvdGEo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQotewotICAgIGF1dG8gaXRlcmF0b3IgPSBtX3N0b3Jh
Z2VRdW90YU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsKLSAgICBpZiAoaXRlcmF0b3IgPT0gbV9z
dG9yYWdlUXVvdGFNYW5hZ2Vycy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYg
bWFuYWdlcnMgPSBpdGVyYXRvci0+dmFsdWU7Ci0gICAgZm9yIChhdXRvJiBtYW5hZ2VyIDogbWFu
YWdlcnMubWFuYWdlcnNQZXJPcmlnaW4oKSkKLSAgICAgICAgbWFuYWdlci52YWx1ZS0+cmVzZXRR
dW90YShtYW5hZ2Vycy5kZWZhdWx0UXVvdGEobWFuYWdlci5rZXkpKTsKIH0KIAogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjE3LDEwICsyMjEzLDE2IEBAIFJlZjxJ
REJTZXJ2ZXI6OklEQlNlcnZlcj4gTmV0d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZlcihQQUw6
OlNlc3Npb25JRCBzZXNzaW9uCiAgICAgICAgIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0aHMuZ2V0
KHNlc3Npb25JRCk7CiAgICAgfQogCi0gICAgcmV0dXJuIElEQlNlcnZlcjo6SURCU2VydmVyOjpj
cmVhdGUoc2Vzc2lvbklELCBwYXRoLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlz
KV0oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBhdXRvJiBvcmlnaW4pIC0+IFN0b3Jh
Z2VRdW90YU1hbmFnZXIqIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gJnRoaXMtPnN0b3JhZ2VRdW90YU1hbmFnZXIo
c2Vzc2lvbklELCBvcmlnaW4pOworICAgIHJldHVybiBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3Jl
YXRlKHNlc3Npb25JRCwgcGF0aCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyks
IHNlc3Npb25JRF0oY29uc3QgYXV0byYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCkg
eworICAgICAgICBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdl
ciA9IHdlYWtUaGlzID8gdGhpcy0+c3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIG9yaWdp
bikgOiBudWxscHRyOworICAgICAgICBpZiAoIXN0b3JhZ2VRdW90YU1hbmFnZXIpCisgICAgICAg
ICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk7CisKKyAgICAg
ICAgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gcmVzdWx0OworICAgICAgICBzdG9yYWdl
UXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2Uoc3BhY2VSZXF1ZXN0ZWQsIFsmcmVzdWx0XShhdXRv
IGRlY2lzaW9uKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRlY2lzaW9uOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9KTsKIH0KIApAQCAtMjMwNyw4
ICsyMzA5LDE4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVNlc3Np
b24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmCiAgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShoYW5kbGUpOwogICAgICAgICBpZiAoIWluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBwb3N0U3RvcmFnZVRhc2so
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVBhdGhF
eGlzdHMsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSkpOworICAgICAgICBzZXRTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKHNlc3Npb25JRCwgaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5KTsKICAgICB9CiB9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldFNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBTdHJpbmcmIGlkYlJvb3RQYXRoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jayk7CisgICAgYXV0byogc2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXIgPSBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5nZXQoc2Vzc2lvbklEKTsK
KyAgICBBU1NFUlQoc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpOworICAgIHNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyLT5zZXRJREJSb290UGF0aChpZGJSb290UGF0aCk7Cit9CisKICNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c3lu
Y0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0yMzI1LDkgKzIzMzcsMTggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJMZWdh
Y3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoKQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjp1
cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQogewotICAgIGF1dG8mIG1hbmFnZXIg
PSBzdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsKLSAgICBtYW5hZ2VyLnJl
c2V0UXVvdGEobV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCktPnZhbHVlLmRl
ZmF1bHRRdW90YShvcmlnaW4pKTsKLSAgICBtYW5hZ2VyLnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNl
VXNhZ2UoKTsKKyAgICBhdXRvIHN0b3JhZ2VRdW90YU1hbmFnZXIgPSB0aGlzLT5zdG9yYWdlUXVv
dGFNYW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsKKyAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5y
ZXNldFF1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZSgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNz
OjpyZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
c2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jayk7CisgICAgaWYgKGF1dG8qIHNlc3Npb25T
dG9yYWdlUXVvdGFNYW5hZ2VyID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZ2V0KHNl
c3Npb25JRCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHN0b3JhZ2VRdW90YU1hbmFnZXIgOiBzZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+ZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2VycygpKQor
ICAgICAgICAgICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVzZXRRdW90YSgpOworICAgIH0KKyAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9O
UykKQEAgLTI0MDQsNjIgKzI0MjUsMzYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVxdWVzdFN0
b3JhZ2VTcGFjZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENsaWVudE8KICAgICBw
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzUHJveHk6OlJlcXVlc3RTdG9yYWdlU3BhY2UgeyBzZXNzaW9uSUQsIG9yaWdp
biwgcXVvdGEsIGN1cnJlbnRTaXplLCBzcGFjZVJlcXVpcmVkIH0sIFdURk1vdmUoY2FsbGJhY2sp
LCAwKTsKIH0KIAotY2xhc3MgUXVvdGFVc2VySW5pdGlhbGl6ZXIgZmluYWwgOiBwdWJsaWMgV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhVXNlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgZXhwbGljaXQgUXVvdGFVc2VySW5pdGlhbGl6ZXIoU3RvcmFnZVF1b3RhTWFu
YWdlciYgbWFuYWdlcikKLSAgICAgICAgOiBtX21hbmFnZXIobWFrZVdlYWtQdHIobWFuYWdlcikp
Ci0gICAgewotICAgICAgICBtYW5hZ2VyLmFkZFVzZXIoKnRoaXMpOwotICAgIH0KLQotICAgIH5R
dW90YVVzZXJJbml0aWFsaXplcigpCi0gICAgewotICAgICAgICBpZiAobV9tYW5hZ2VyKQotICAg
ICAgICAgICAgbV9tYW5hZ2VyLT5yZW1vdmVVc2VyKCp0aGlzKTsKLSAgICAgICAgaWYgKG1fY2Fs
bGJhY2spCi0gICAgICAgICAgICBtX2NhbGxiYWNrKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IC8vIFN0b3JhZ2VRdW90YVVzZXIgQVBJLgotICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0
IGZpbmFsCi0gICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQorUmVmUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IE5ldHdvcmtQcm9jZXNz
OjpzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xp
ZW50T3JpZ2luJiBvcmlnaW4pCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9zZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBhdXRvKiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlciA9IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzLmdldChzZXNzaW9uSUQpOworICAg
IGlmICghc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpCisgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNhbGxiYWNrKSBmaW5hbAotICAgIHsKLSAgICAgICAgbV9jYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spOwotICAgIH0KKyAgICBTdHJpbmcgaWRiUm9vdFBhdGg7CisjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCisgICAgaWRiUm9vdFBhdGggPSBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
ci0+aWRiUm9vdFBhdGgoKTsKKyNlbmRpZgorICAgIFN0b3JhZ2VRdW90YU1hbmFnZXI6OlVzYWdl
R2V0dGVyIHVzYWdlR2V0dGVyID0gW2NhY2hlUm9vdFBhdGggPSBzZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlci0+Y2FjaGVSb290UGF0aCgpLCBpZGJSb290UGF0aCwgb3JpZ2luXSgpIHsKKyAgICAg
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7ICAgIAogCi0gICAgV2Vha1B0cjxTdG9yYWdlUXVv
dGFNYW5hZ2VyPiBtX21hbmFnZXI7Ci0gICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2Nh
bGxiYWNrOwotfTsKKyAgICAgICAgdWludDY0X3QgdXNhZ2UgPSAwOworICAgICAgICB1c2FnZSAr
PSBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6ZGlza1VzYWdlKGNhY2hlUm9vdFBhdGgsIG9yaWdpbik7
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisgICAgICAgIHVzYWdlICs9IElEQlNlcnZl
cjo6SURCU2VydmVyOjpkaXNrVXNhZ2UoaWRiUm9vdFBhdGgsIG9yaWdpbik7CisjZW5kaWYKIAot
dm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVF1b3RhVXNlcnMoU3RvcmFnZVF1b3RhTWFu
YWdlciYgbWFuYWdlciwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmln
aW4mIG9yaWdpbikKLXsKLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtU
aGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwgb3JpZ2luLCB1c2VyID0gbWFrZVVu
aXF1ZTxRdW90YVVzZXJJbml0aWFsaXplcj4obWFuYWdlcildKCkgbXV0YWJsZSB7CisgICAgICAg
IHJldHVybiB1c2FnZTsKKyAgICB9OworICAgIFN0b3JhZ2VRdW90YU1hbmFnZXI6OlF1b3RhSW5j
cmVhc2VSZXF1ZXN0ZXIgcXVvdGFJbmNyZWFzZVJlcXVlc3RlciA9IFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKSwgc2Vzc2lvbklELCBvcmlnaW5dICh1aW50NjRfdCBjdXJyZW50
UXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3QgcmVxdWVzdGVkSW5jcmVhc2Us
IGF1dG8mJiBjYWxsYmFjaykgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
ICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLT5p
ZGJTZXJ2ZXIoc2Vzc2lvbklEKS5pbml0aWFsaXplUXVvdGFVc2VyKG9yaWdpbik7Ci0gICAgICAg
IENhY2hlU3RvcmFnZTo6RW5naW5lOjppbml0aWFsaXplUXVvdGFVc2VyKCp0aGlzLCBzZXNzaW9u
SUQsIG9yaWdpbiwgW3VzZXIgPSBXVEZNb3ZlKHVzZXIpXSB7IH0pOwotICAgIH0pOwotfQorICAg
ICAgICAgICAgY2FsbGJhY2soeyB9KTsKKyAgICAgICAgcmVxdWVzdFN0b3JhZ2VTcGFjZShzZXNz
aW9uSUQsIG9yaWdpbiwgY3VycmVudFF1b3RhLCBjdXJyZW50U3BhY2UsIHJlcXVlc3RlZEluY3Jl
YXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgfTsKIAotU3RvcmFnZVF1b3RhTWFuYWdlciYg
TmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBhdXRvJiBzdG9yYWdlUXVv
dGFNYW5hZ2VycyA9IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuZW5zdXJlKHNlc3Npb25JRCwgW10g
ewotICAgICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcnMgeyB9OwotICAgIH0pLml0ZXJh
dG9yLT52YWx1ZTsKLSAgICByZXR1cm4gKnN0b3JhZ2VRdW90YU1hbmFnZXJzLm1hbmFnZXJzUGVy
T3JpZ2luKCkuZW5zdXJlKG9yaWdpbiwgW3RoaXMsICZzdG9yYWdlUXVvdGFNYW5hZ2Vycywgc2Vz
c2lvbklELCAmb3JpZ2luXSB7Ci0gICAgICAgIGF1dG8gbWFuYWdlciA9IG1ha2VVbmlxdWU8U3Rv
cmFnZVF1b3RhTWFuYWdlcj4oc3RvcmFnZVF1b3RhTWFuYWdlcnMuZGVmYXVsdFF1b3RhKG9yaWdp
biksIFt0aGlzLCBzZXNzaW9uSUQsIG9yaWdpbl0odWludDY0X3QgcXVvdGEsIHVpbnQ2NF90IGN1
cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgYXV0byBjYWxsYmFjaykgewotICAg
ICAgICAgICAgdGhpcy0+cmVxdWVzdFN0b3JhZ2VTcGFjZShzZXNzaW9uSUQsIG9yaWdpbiwgcXVv
dGEsIGN1cnJlbnRTcGFjZSwgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAg
ICAgICB9KTsKLSAgICAgICAgaW5pdGlhbGl6ZVF1b3RhVXNlcnMoKm1hbmFnZXIsIHNlc3Npb25J
RCwgb3JpZ2luKTsKLSAgICAgICAgcmV0dXJuIG1hbmFnZXI7Ci0gICAgfSkuaXRlcmF0b3ItPnZh
bHVlOworICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+ZW5zdXJlT3JpZ2lu
U3RvcmFnZVF1b3RhTWFuYWdlcihvcmlnaW4sIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5k
ZWZhdWx0UXVvdGEob3JpZ2luKSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdURk1vdmUocXVvdGFJ
bmNyZWFzZVJlcXVlc3RlcikpOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IGY2MmYwMWQzODBm
NDAxMDU1MmFhZDM4ODlhNDk3ZDUxMjZmOGEzNTMuLjhlZjM4MThmZWNlOGQzYzM2ZDFmNmEyZjM0
YTgyNWYxYjYwNGM5N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmgKQEAgLTI4NCw2ICsyODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckxl
Z2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpOwogCiAgICAgdm9pZCB1cGRhdGVRdW90
YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luJik7CisgICAgdm9pZCByZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5T
SU9OUykKICAgICB2b2lkIGdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlQXJyYXkmJik+JiYpOwpAQCAtMzI3LDcgKzMyOCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEFkQ2xpY2tBdHRyaWJ1dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKFBB
TDo6U2Vzc2lvbklELCBVUkwmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2
b2lkIG1hcmtBZENsaWNrQXR0cmlidXRpb25zQXNFeHBpcmVkRm9yVGVzdGluZyhQQUw6OlNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAotICAgIFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXImIHN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVv
dGFNYW5hZ2VyPiBzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJD
b3JlOjpDbGllbnRPcmlnaW4mKTsKIAogICAgIHZvaWQgYWRkS2VwdEFsaXZlTG9hZChSZWY8TmV0
d29ya1Jlc291cmNlTG9hZGVyPiYmKTsKICAgICB2b2lkIHJlbW92ZUtlcHRBbGl2ZUxvYWQoTmV0
d29ya1Jlc291cmNlTG9hZGVyJik7CkBAIC00NDIsNiArNDQzLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNvbGxlY3RJbmRleGVkRGF0YWJhc2VPcmlnaW5zRm9yVmVyc2lvbihjb25zdCBTdHJpbmcm
LCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mKTsKICAgICBIYXNoU2V0PFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gaW5kZXhlZERhdGFiYXNlT3JpZ2lucyhjb25zdCBT
dHJpbmcmIHBhdGgpOwogICAgIFJlZjxXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcj4gY3Jl
YXRlSURCU2VydmVyKFBBTDo6U2Vzc2lvbklEKTsKKyAgICB2b2lkIHNldFNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgaWRi
Um9vdFBhdGgpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC00NjEs
OCArNDYzLDQ0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwZXJmb3JtTmV4dFN0b3JhZ2VUYXNrKCk7
CiAgICAgdm9pZCBlbnN1cmVQYXRoRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKLSAgICB2
b2lkIGNsZWFyU3RvcmFnZVF1b3RhKFBBTDo6U2Vzc2lvbklEKTsKLSAgICB2b2lkIGluaXRpYWxp
emVTdG9yYWdlUXVvdGEoY29uc3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMmKTsKKyAgICBj
bGFzcyBTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlciB7CisgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXIoY29uc3QgU3RyaW5nJiBjYWNoZVJvb3RQYXRoLCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVp
bnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEpCisgICAgICAgICAgICA6IG1fY2FjaGVSb290
UGF0aChjYWNoZVJvb3RQYXRoKQorICAgICAgICAgICAgLCBtX2RlZmF1bHRRdW90YShkZWZhdWx0
UXVvdGEpCisgICAgICAgICAgICAsIG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YShkZWZhdWx0VGhp
cmRQYXJ0eVF1b3RhKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdWludDY0X3QgZGVm
YXVsdFF1b3RhKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKSBjb25zdCB7IHJl
dHVybiBvcmlnaW4udG9wT3JpZ2luID09IG9yaWdpbi5jbGllbnRPcmlnaW4gPyBtX2RlZmF1bHRR
dW90YSA6IG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YTsgfQorCisgICAgICAgIFJlZlB0cjxXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBlbnN1cmVPcmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2Vy
KFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4sIHVpbnQ2NF90IHF1b3RhLCBXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpVc2FnZUdldHRlciYmIHVzYWdlR2V0dGVyLCBXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFz
ZVJlcXVlc3RlcikKKyAgICAgICAgeworICAgICAgICAgICAgYXV0b1tpdGVyLCBpc05ld0VudHJ5
XSA9IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuYWRkKG9yaWdpbiwgbnVsbHB0cik7CisgICAgICAg
ICAgICBpZiAoaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICBpdGVyLT52YWx1ZSA9IFdlYkNv
cmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZShxdW90YSwgV1RGTW92ZSh1c2FnZUdldHRl
ciksIFdURk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3RlcikpOworICAgICAgICAgICAgcmV0dXJu
IG1ha2VSZWZQdHIoKml0ZXItPnZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gZXhp
c3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2VycygpIHsgcmV0dXJuIG1fc3RvcmFnZVF1b3RhTWFuYWdl
cnMudmFsdWVzKCk7IH0KKworICAgICAgICBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgoKSBj
b25zdCB7IHJldHVybiBtX2NhY2hlUm9vdFBhdGg7IH0KKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKKyAgICAgICAgdm9pZCBzZXRJREJSb290UGF0aChjb25zdCBTdHJpbmcmIGlkYlJvb3RQ
YXRoKSB7IG1faWRiUm9vdFBhdGggPSBpZGJSb290UGF0aDsgfQorICAgICAgICBjb25zdCBTdHJp
bmcmIGlkYlJvb3RQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9pZGJSb290UGF0aDsgfQorI2VuZGlm
CisKKyAgICBwcml2YXRlOgorICAgICAgICBTdHJpbmcgbV9jYWNoZVJvb3RQYXRoOworI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgICAgICBTdHJpbmcgbV9pZGJSb290UGF0aDsKKyNl
bmRpZgorICAgICAgICB1aW50NjRfdCBtX2RlZmF1bHRRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpIH07CisgICAgICAgIHVpbnQ2NF90IG1fZGVmYXVs
dFRoaXJkUGFydHlRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRU
aGlyZFBhcnR5UXVvdGEoKSB9OworICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdp
biwgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3N0b3JhZ2VRdW90YU1h
bmFnZXJzOworICAgIH07CisgICAgdm9pZCBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQ
QUw6OlNlc3Npb25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhp
cmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgsIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIo
UEFMOjpTZXNzaW9uSUQpOwogCiAgICAgLy8gQ29ubmVjdGlvbnMgdG8gV2ViUHJvY2Vzc2VzLgog
ICAgIEhhc2hNYXA8V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIFJlZjxOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcz4+IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zOwpAQCAtNTMzLDIzICs1
NzEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCB7IGZhbHNl
IH07CiAjZW5kaWYKICAgICAKLSAgICBjbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VycyB7Ci0gICAg
cHVibGljOgotICAgICAgICB1aW50NjRfdCBkZWZhdWx0UXVvdGEoY29uc3QgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJiBvcmlnaW4pIGNvbnN0IHsgcmV0dXJuIG9yaWdpbi50b3BPcmlnaW4gPT0gb3Jp
Z2luLmNsaWVudE9yaWdpbiA/IG1fZGVmYXVsdFF1b3RhIDogbV9kZWZhdWx0VGhpcmRQYXJ0eVF1
b3RhOyB9Ci0gICAgICAgIHZvaWQgc2V0RGVmYXVsdFF1b3Rhcyh1aW50NjRfdCBkZWZhdWx0UXVv
dGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1fZGVmYXVsdFF1b3RhID0gZGVmYXVsdFF1b3RhOwotICAgICAgICAgICAgbV9kZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhID0gZGVmYXVsdFRoaXJkUGFydHlRdW90YTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+JiBtYW5hZ2Vyc1Blck9yaWdpbigpIHsgcmV0dXJu
IG1fbWFuYWdlcnNQZXJPcmlnaW47IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2NF90
IG1fZGVmYXVsdFF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1
b3RhKCkgfTsKLSAgICAgICAgdWludDY0X3QgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhIHsgV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgpIH07Ci0g
ICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fbWFuYWdlcnNQZXJPcmlnaW47Ci0gICAgfTsK
LSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2Vycz4gbV9zdG9y
YWdlUXVvdGFNYW5hZ2VyczsKKyAgICBMb2NrIG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJz
TG9jazsKKyAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyczsKIAog
ICAgIE9wdGlvblNldDxOZXR3b3JrQ2FjaGU6OkNhY2hlT3B0aW9uPiBtX2NhY2hlT3B0aW9uczsK
ICAgICBXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeSBtX21lc3NhZ2VQb3J0Q2hh
bm5lbFJlZ2lzdHJ5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggMzY3NzY3NzQ4MGI4MmE0NDMzZjg1ZDI4
MmIzZTVmYjgwNmE5MWU2My4uMzYxZTkwNzAxMDlkZTVjYmY0NTE4MjE0ZmY4YTg5MDhkYmQ5NThl
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0xNjMsNCArMTYzLDYgQEAgbWVzc2FnZXMgLT4gTmV0d29y
a1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogCiAgICAgU2V0U2VydmljZVdvcmtlckZldGNoVGlt
ZW91dEZvclRlc3RpbmcoU2Vjb25kcyBzZWNvbmRzKSAtPiAoKSBTeW5jaHJvbm91cwogICAgIFJl
c2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSAtPiAoKSBTeW5jaHJvbm91
cworCisgICAgUmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+ICgpIEFzeW5j
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZS5jcHAKaW5kZXggZWZlN2UxNWIwNWY3ZDI1NjEwOWU4NjMyZTJmMzA1
ZTIxYzM2ODRiNi4uMGEzNWE5MGNkNjc5ODI2ODMzOWZmMzUzOTg3ODRkMjFlYzk4YWQzMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VF
bmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lLmNwcApAQCAtMTk2LDEzICsxOTYsNjMgQEAgdm9pZCBFbmdpbmU6OmNsZWFy
Q2FjaGVzRm9yT3JpZ2luKE5ldHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgUEFMOjpTZXNz
aW9uSUQKICAgICB9KTsKIH0KIAotdm9pZCBFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIoTmV0
d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNv
bnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgY2xpZW50T3JpZ2luLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCitzdGF0aWMgdWludDY0X3QgZ2V0RGlyZWN0
b3J5U2l6ZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpCit7CisgICAgdWludDY0X3QgZGly
ZWN0b3J5U2l6ZSA9IDA7CisgICAgRGVxdWU8U3RyaW5nPiBwYXRoczsKKyAgICBwYXRocy5hcHBl
bmQoZGlyZWN0b3J5UGF0aCk7CisgICAgd2hpbGUgKCFwYXRocy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgYXV0byBwYXRoID0gcGF0aHMudGFrZUZpcnN0KCk7CisgICAgICAgIGlmIChGaWxlU3lzdGVt
OjpmaWxlSXNEaXJlY3RvcnkocGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNM
aW5rczo6Tm8pKSB7CisgICAgICAgICAgICBhdXRvIG5ld1BhdGhzID0gRmlsZVN5c3RlbTo6bGlz
dERpcmVjdG9yeShwYXRoLCAiKiJfcyk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIG5ld1BhdGgg
OiBuZXdQYXRocykgeworICAgICAgICAgICAgICAgIC8vIEZpbGVzIGluIC9CbG9icyBkaXJlY3Rv
cnkgYXJlIGhhcmQgbGluay4KKyAgICAgICAgICAgICAgICBhdXRvIGZpbGVOYW1lID0gRmlsZVN5
c3RlbTo6bGFzdENvbXBvbmVudE9mUGF0aElnbm9yaW5nVHJhaWxpbmdTbGFzaChuZXdQYXRoKTsK
KyAgICAgICAgICAgICAgICBpZiAoZmlsZU5hbWUgPT0gIkJsb2JzIikKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKG5ld1BhdGgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBsb25nIGxvbmcgZmlsZVNpemUgPSAwOworICAgICAgICBGaWxlU3lzdGVtOjpnZXRGaWxlU2l6
ZShwYXRoLCBmaWxlU2l6ZSk7CisgICAgICAgIGRpcmVjdG9yeVNpemUgKz0gZmlsZVNpemU7Cisg
ICAgfQorICAgIHJldHVybiBkaXJlY3RvcnlTaXplOworfQorCit1aW50NjRfdCBFbmdpbmU6OmRp
c2tVc2FnZShjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mIG9yaWdpbikKIHsKLSAgICBmcm9tKG5ldHdvcmtQcm9jZXNzLCBzZXNzaW9uSUQsIFtjbGll
bnRPcmlnaW4sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KGF1dG8mIGVuZ2luZSkgbXV0YWJsZSB7Ci0gICAgICAgIGVuZ2luZS5yZWFkQ2FjaGVzRnJvbURp
c2soY2xpZW50T3JpZ2luLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oYXV0byYmIGNhY2hlc09yRXJyb3IpIG11dGFibGUgewotICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7CisgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CisgICAgaWYgKHJvb3RQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBTdHJpbmcgc2FsdFBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQocm9vdFBhdGgsICJzYWx0Il9zKTsKKyAgICBhdXRvIHNhbHQgPSByZWFkT3JNYWtl
U2FsdChzYWx0UGF0aCk7CisgICAgaWYgKCFzYWx0KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IEtleSBrZXkob3JpZ2luLnRvcE9yaWdpbi50b1N0cmluZygpLCBvcmlnaW4uY2xpZW50T3JpZ2lu
LnRvU3RyaW5nKCksIHsgfSwgeyB9LCAqc2FsdCk7CisgICAgU3RyaW5nIGRpcmVjdG9yeVBhdGgg
PSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocm9vdFBhdGgsIGtleS5oYXNo
QXNTdHJpbmcoKSk7CisKKyAgICBTdHJpbmcgc2l6ZUZpbGVQYXRoID0gQ2FjaGVzOjpjYWNoZXNT
aXplRmlsZW5hbWUoZGlyZWN0b3J5UGF0aCk7CisgICAgaWYgKGF1dG8gcmVjb3JkZWRTaXplID0g
cmVhZFNpemVGaWxlKHNpemVGaWxlUGF0aCkpCisgICAgICAgIHJldHVybiAqcmVjb3JkZWRTaXpl
OworCisgICAgcmV0dXJuIGdldERpcmVjdG9yeVNpemUoZGlyZWN0b3J5UGF0aCk7Cit9CisKK3Zv
aWQgRW5naW5lOjpyZXF1ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2
NF90IHNwYWNlUmVxdWVzdGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJiBjYWxsYmFjaykKK3sKKyAgICBpZiAoIW1fbmV0
d29ya1Byb2Nlc3MpCisgICAgICAgIGNhbGxiYWNrKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OkRlY2lzaW9uOjpEZW55KTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyPiBzdG9yYWdlUXVvdGFNYW5hZ2VyID0gbV9uZXR3b3JrUHJvY2Vzcy0+c3RvcmFnZVF1
b3RhTWFuYWdlcihtX3Nlc3Npb25JRCwgb3JpZ2luKTsKKyAgICBpZiAoIXN0b3JhZ2VRdW90YU1h
bmFnZXIpCisgICAgICAgIGNhbGxiYWNrKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRl
Y2lzaW9uOjpEZW55KTsKKworICAgIHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZShz
cGFjZVJlcXVlc3RlZCwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCiBFbmdpbmU6OkVuZ2luZShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE5ldHdvcmtQcm9jZXNzJiBwcm9jZXNzLCBTdHJpbmcm
JiByb290UGF0aCkKQEAgLTM0MSw3ICszOTEsNyBAQCB2b2lkIEVuZ2luZTo6cmVhZENhY2hlc0Zy
b21EaXNrKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luLCBDYWNoZXNDYWxsYgog
CiAgICAgICAgIGF1dG8mIGNhY2hlcyA9IG1fY2FjaGVzLmVuc3VyZShvcmlnaW4sIFsmb3JpZ2lu
LCB0aGlzXSB7CiAgICAgICAgICAgICBhdXRvIHBhdGggPSBjYWNoZXNSb290UGF0aChvcmlnaW4p
OwotICAgICAgICAgICAgcmV0dXJuIENhY2hlczo6Y3JlYXRlKCp0aGlzLCBXZWJDb3JlOjpDbGll
bnRPcmlnaW4geyBvcmlnaW4gfSwgV1RGTW92ZShwYXRoKSwgbV9uZXR3b3JrUHJvY2Vzcy0+c3Rv
cmFnZVF1b3RhTWFuYWdlcihtX3Nlc3Npb25JRCwgb3JpZ2luKSk7CisgICAgICAgICAgICByZXR1
cm4gQ2FjaGVzOjpjcmVhdGUoKnRoaXMsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IG9yaWdpbiB9
LCBXVEZNb3ZlKHBhdGgpKTsKICAgICAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgICAg
IGlmIChjYWNoZXMtPmlzSW5pdGlhbGl6ZWQoKSkgewpAQCAtNDczLDEyICs1MjMsMTMgQEAgdm9p
ZCBFbmdpbmU6OnJlbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKICAgICB9KTsKIH0K
IAotdm9pZCBFbmdpbmU6OndyaXRlU2l6ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRf
dCBzaXplKQordm9pZCBFbmdpbmU6OndyaXRlU2l6ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCB1
aW50NjRfdCBzaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CisgICAgQ29tcGxldGlvbkhhbmRsZXJDYWxsaW5nU2NvcGUgY29tcGxldGlvbkhhbmRs
ZXJDYWxsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIGlmICghc2hvdWxkUGVy
c2lzdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2lvUXVldWUtPmRpc3BhdGNoKFtwYXRo
ID0gcGF0aC5pc29sYXRlZENvcHkoKSwgc2l6ZV0oKSB7CisgICAgbV9pb1F1ZXVlLT5kaXNwYXRj
aChbcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCksIHNpemUsIGNvbXBsZXRpb25IYW5kbGVyQ2Fs
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlckNhbGxlcildKCkgbXV0YWJsZSB7CiAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKGdsb2JhbFNpemVGaWxlTG9jayk7CiAgICAgICAgIGF1dG8g
ZmlsZUhhbmRsZSA9IEZpbGVTeXN0ZW06Om9wZW5GaWxlKHBhdGgsIEZpbGVTeXN0ZW06OkZpbGVP
cGVuTW9kZTo6V3JpdGUpOwogICAgICAgICBhdXRvIGNsb3NlRmlsZUhhbmRsZXIgPSBtYWtlU2Nv
cGVFeGl0KFsmXSB7CkBAIC00ODksNiArNTQwLDggQEAgdm9pZCBFbmdpbmU6OndyaXRlU2l6ZUZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoLCB1aW50NjRfdCBzaXplKQogCiAgICAgICAgIEZpbGVTeXN0
ZW06OnRydW5jYXRlRmlsZShmaWxlSGFuZGxlLCAwKTsKICAgICAgICAgRmlsZVN5c3RlbTo6d3Jp
dGVUb0ZpbGUoZmlsZUhhbmRsZSwgU3RyaW5nOjpudW1iZXIoc2l6ZSkudXRmOCgpLmRhdGEoKSwg
U3RyaW5nOjpudW1iZXIoc2l6ZSkudXRmOCgpLmxlbmd0aCgpKTsKKworICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyQ2FsbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlckNhbGxlcildKCkgbXV0YWJsZSB7IH0pOwogICAgIH0pOwogfQogCkBAIC01
MTMsOCArNTY2LDggQEAgT3B0aW9uYWw8dWludDY0X3Q+IEVuZ2luZTo6cmVhZFNpemVGaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCkKICAgICBpZiAoIVdURjo6Y29udmVydFNhZmVseShmaWxlU2l6ZSwg
Ynl0ZXNUb1JlYWQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgVmVjdG9y
PGNoYXI+IGJ1ZmZlcihieXRlc1RvUmVhZCk7Ci0gICAgc2l6ZV90IHRvdGFsQnl0ZXNSZWFkID0g
RmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGVIYW5kbGUsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZl
ci5zaXplKCkpOworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBidWZmZXIoYnl0ZXNUb1JlYWQp
OworICAgIHNpemVfdCB0b3RhbEJ5dGVzUmVhZCA9IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShm
aWxlSGFuZGxlLCByZWludGVycHJldF9jYXN0PGNoYXIqPihidWZmZXIuZGF0YSgpKSwgYnVmZmVy
LnNpemUoKSk7CiAgICAgaWYgKHRvdGFsQnl0ZXNSZWFkICE9IGJ5dGVzVG9SZWFkKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaAppbmRleCBhM2FhYWYwOTAxYzk1
ZTYxNTA1MjE5ZGQyYzFlYjdmNjU3MjBmMDU2Li4yMmVlNjZiY2E0NzZiY2UyYmNhNGIyZDUxZGFj
ZTk1NDdhZDcxN2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJOZXR3b3JrQ2FjaGVEYXRhLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGEuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZVF1b3Rh
TWFuYWdlci5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC03OSwxMiArODAsMTUgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVF1b3RhVXNlcihOZXR3b3JrUHJv
Y2VzcyYsIFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgc3RhdGljIHVpbnQ2NF90IGRpc2tVc2Fn
ZShjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsK
KyAgICB2b2lkIHJlcXVlc3RTcGFjZShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mLCB1aW50
NjRfdCBzcGFjZVJlcXVlc3RlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYpOworCiAgICAgYm9vbCBzaG91bGRQZXJzaXN0
KCkgY29uc3QgeyByZXR1cm4gISFtX2lvUXVldWU7fQogCiAgICAgdm9pZCB3cml0ZUZpbGUoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgTmV0d29ya0NhY2hlOjpEYXRhJiYsIFdlYkNvcmU6OkRPTUNh
Y2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAgICAgdm9pZCByZWFkRmlsZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtD
YWNoZTo6RGF0YSYsIGludCBlcnJvcik+JiYpOwogICAgIHZvaWQgcmVtb3ZlRmlsZShjb25zdCBT
dHJpbmcmIGZpbGVuYW1lKTsKLSAgICB2b2lkIHdyaXRlU2l6ZUZpbGUoY29uc3QgU3RyaW5nJiwg
dWludDY0X3Qgc2l6ZSk7CisgICAgdm9pZCB3cml0ZVNpemVGaWxlKGNvbnN0IFN0cmluZyYsIHVp
bnQ2NF90IHNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgc3RhdGljIE9w
dGlvbmFsPHVpbnQ2NF90PiByZWFkU2l6ZUZpbGUoY29uc3QgU3RyaW5nJik7CiAKICAgICBjb25z
dCBTdHJpbmcmIHJvb3RQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9yb290UGF0aDsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlLmNwcAppbmRleCA2ZmM1M2UwM2M0ZDY3YTAwZmE5MWYyYjNmY2ZiZGQ3
ZTExOTY4Y2UzLi4yYzAzM2M0ZjBhMTEyMDY2ZWFmMmI3N2UyMmIzMTBhYTJkMTRlN2MzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcApAQCAtNDA1LDcgKzQwNSw3IEBAIHZvaWQgQ2FjaGU6
OnB1dChWZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2sm
JiBjYWxsYmFjaykKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6T3Blbik7CiAKICAgICBX
ZWJDb3JlOjpDYWNoZVF1ZXJ5T3B0aW9ucyBvcHRpb25zOwotICAgIHVpbnQ2NF90IHNwYWNlUmVx
dWlyZWQgPSAwOworICAgIGludDY0X3Qgc3BhY2VSZXF1aXJlZCA9IDA7CiAKICAgICBmb3IgKGF1
dG8mIHJlY29yZCA6IHJlY29yZHMpIHsKICAgICAgICAgYXV0byogc2FtZVVSTFJlY29yZHMgPSBy
ZWNvcmRzRnJvbVVSTChyZWNvcmQucmVxdWVzdC51cmwoKSk7CkBAIC00MTcsNiArNDE3LDcgQEAg
dm9pZCBDYWNoZTo6cHV0KFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmll
cnNDYWxsYmFjayYmIGNhbGxiYWNrKQogICAgICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQp
CiAgICAgICAgICAgICBzcGFjZVJlcXVpcmVkIC09IHNhbWVVUkxSZWNvcmRzLT5hdChwb3NpdGlv
bikuc2l6ZTsKICAgICB9CisgICAgc3BhY2VSZXF1aXJlZCA9IHNwYWNlUmVxdWlyZWQgPCAwPyAw
IDogc3BhY2VSZXF1aXJlZDsKIAogICAgIG1fY2FjaGVzLnJlcXVlc3RTcGFjZShzcGFjZVJlcXVp
cmVkLCBbY2FjaGVzID0gbWFrZVJlZihtX2NhY2hlcyksIGlkZW50aWZpZXIgPSBtX2lkZW50aWZp
ZXIsIHJlY29yZHMgPSBXVEZNb3ZlKHJlY29yZHMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spXShPcHRpb25hbDxET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewog
ICAgICAgICBpZiAoZXJyb3IpIHsKQEAgLTQ1MCw3ICs0NTEsMTAgQEAgdm9pZCBDYWNoZTo6cmVt
b3ZlKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFdlYkNvcmU6OkNhY2hlUXVl
cnlPcHRpb24KICAgICAgICAgcmV0dXJuIHNob3VsZFJlbW92ZTsKICAgICB9KTsKIAotICAgIGNh
bGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpKTsKKyAgICAvLyBUaGlzIG9wZXJhdGlv
biB3b3VsZCBjaGFuZ2UgY2FjaGVzIHNpemUsIHNvIG1ha2Ugc3VyZSBjYWxsYmFjayBmaW5pc2hl
cyBhZnRlciBzaXplIGZpbGUgaXMgdXBkYXRlZC4KKyAgICBtX2NhY2hlcy51cGRhdGVTaXplRmls
ZShbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVjb3JkSWRlbnRpZmllcnMgPSBXVEZN
b3ZlKHJlY29yZElkZW50aWZpZXJzKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgY2FsbGJhY2soV1RG
TW92ZShyZWNvcmRJZGVudGlmaWVycykpOworICAgIH0pOwogfQogCiB2b2lkIENhY2hlOjpyZW1v
dmVGcm9tUmVjb3JkTGlzdChjb25zdCBWZWN0b3I8dWludDY0X3Q+JiByZWNvcmRJZGVudGlmaWVy
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAppbmRleCAwM2EwNjBjZWYyYmM2NzIwMTRi
NzU5NmJjNWRhNGVlOTQzODYxYTdjLi5lYmFjYjNjMWJmYzM2MzlkYjExZmRhZWJkZmI2MjY5ZmVl
MDVjZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCkBAIC01NiwzNiArNTYsMjEg
QEAgU3RyaW5nIENhY2hlczo6Y2FjaGVzU2l6ZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgY2FjaGVz
Um9vdHNQYXRoKQogICAgIHJldHVybiBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQoY2FjaGVzUm9vdHNQYXRoLCAiZXN0aW1hdGVkc2l6ZSJfcyk7CiB9CiAKLVJlZjxDYWNoZXM+
IENhY2hlczo6Y3JlYXRlKEVuZ2luZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBv
cmlnaW4sIFN0cmluZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJiBx
dW90YU1hbmFnZXIpCitSZWY8Q2FjaGVzPiBDYWNoZXM6OmNyZWF0ZShFbmdpbmUmIGVuZ2luZSwg
V2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCkKIHsKLSAg
ICBhdXRvIGNhY2hlcyA9IGFkb3B0UmVmKCpuZXcgQ2FjaGVzIHsgZW5naW5lLCBXVEZNb3ZlKG9y
aWdpbiksIFdURk1vdmUocm9vdFBhdGgpLCBxdW90YU1hbmFnZXIgfSk7Ci0gICAgcXVvdGFNYW5h
Z2VyLmFkZFVzZXIoY2FjaGVzLmdldCgpKTsKLSAgICByZXR1cm4gY2FjaGVzOworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENhY2hlcyB7IGVuZ2luZSwgV1RGTW92ZShvcmlnaW4pLCBXVEZNb3Zl
KHJvb3RQYXRoKSB9KTsKIH0KIAotQ2FjaGVzOjpDYWNoZXMoRW5naW5lJiBlbmdpbmUsIFdlYkNv
cmU6OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXImIHF1b3RhTWFuYWdlcikKK0NhY2hlczo6Q2FjaGVzKEVuZ2luZSYg
ZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQYXRo
KQogICAgIDogbV9lbmdpbmUoJmVuZ2luZSkKICAgICAsIG1fb3JpZ2luKFdURk1vdmUob3JpZ2lu
KSkKICAgICAsIG1fcm9vdFBhdGgoV1RGTW92ZShyb290UGF0aCkpCi0gICAgLCBtX3F1b3RhTWFu
YWdlcihtYWtlV2Vha1B0cihxdW90YU1hbmFnZXIpKQogewogfQogCiBDYWNoZXM6On5DYWNoZXMo
KQogewogICAgIEFTU0VSVChtX3BlbmRpbmdXcml0aW5nQ2FjaGVzVG9EaXNrQ2FsbGJhY2tzLmlz
RW1wdHkoKSk7Ci0KLSAgICBpZiAobV9xdW90YU1hbmFnZXIpCi0gICAgICAgIG1fcXVvdGFNYW5h
Z2VyLT5yZW1vdmVVc2VyKCp0aGlzKTsKLX0KLQotdm9pZCBDYWNoZXM6OndoZW5Jbml0aWFsaXpl
ZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCi17Ci0gICAgaW5pdGlhbGl6
ZShbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoQ2FjaGVT
dG9yYWdlLCAiQ2FjaGVzOjppbml0aWFsaXplIGZhaWxlZCwgcmVwb3J0ZWQgc3BhY2UgdXNlZCB3
aWxsIGJlIHplcm8iKTsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICB9KTsKIH0KIAogdm9pZCBD
YWNoZXM6OnJldHJpZXZlT3JpZ2luRnJvbURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGZvbGRlclBh
dGgsIFdvcmtRdWV1ZSYgcXVldWUsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25h
bDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjA4
LDEwICsxOTMsMTQgQEAgdm9pZCBDYWNoZXM6OmluaXRpYWxpemUoV2ViQ29yZTo6RE9NQ2FjaGVF
bmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogICAgIH0pOwogfQogCi12b2lk
IENhY2hlczo6dXBkYXRlU2l6ZUZpbGUoKQordm9pZCBDYWNoZXM6OnVwZGF0ZVNpemVGaWxlKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAo
bV9lbmdpbmUpCi0gICAgICAgIG1fZW5naW5lLT53cml0ZVNpemVGaWxlKGNhY2hlc1NpemVGaWxl
bmFtZShtX3Jvb3RQYXRoKSwgbV9zaXplKTsKKyAgICBpZiAoIW1fZW5naW5lKSB7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2Vu
Z2luZS0+d3JpdGVTaXplRmlsZShjYWNoZXNTaXplRmlsZW5hbWUobV9yb290UGF0aCksIG1fc2l6
ZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIENhY2hlczo6aW5pdGlh
bGl6ZVNpemUoKQpAQCAtMjMyLDEzICsyMjEsMTIgQEAgdm9pZCBDYWNoZXM6OmluaXRpYWxpemVT
aXplKCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBtX3NpemUgPSBzaXplOwotICAgICAgICAgICAgdXBkYXRlU2l6ZUZpbGUoKTsKLQotICAgICAg
ICAgICAgbV9pc0luaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8gcGVuZGluZ0Nh
bGxiYWNrcyA9IFdURk1vdmUobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25DYWxsYmFja3MpOwotICAg
ICAgICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IHBlbmRpbmdDYWxsYmFja3MpCi0gICAgICAg
ICAgICAgICAgY2FsbGJhY2soV1RGOjpudWxsb3B0KTsKLQorICAgICAgICAgICAgdXBkYXRlU2l6
ZUZpbGUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgICAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IGF1dG8gcGVuZGluZ0NhbGxiYWNrcyA9IFdURk1vdmUobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25D
YWxsYmFja3MpOworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBwZW5kaW5n
Q2FsbGJhY2tzKQorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQpOwor
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
YXV0byBkZWNvZGVkID0gQ2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcigqc3RvcmFnZSk7CkBAIC0y
NzMsMTMgKzI2MSwxMSBAQCB2b2lkIENhY2hlczo6Y2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICBtX3N0b3JhZ2UtPmNsZWFyKFN0cmlu
ZyB7IH0sIC1XYWxsVGltZTo6aW5maW5pdHkoKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBt
dXRhYmxlIHsKICAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgICAg
ICAgICBwcm90ZWN0ZWRUaGlzLT5jbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgICAg
ICAgICBwcm90ZWN0ZWRUaGlzLT5yZXNldFNwYWNlVXNlZCgpOwogICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Y2xlYXJNZW1vcnlSZXByZXNlbnRhdGlvbigpOwotICAgIHJlc2V0U3BhY2VVc2VkKCk7CiAgICAg
Y2xlYXJQZW5kaW5nV3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrcygpOwogICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CiB9CkBAIC01MjUsMTIgKzUxMSwxMiBAQCB2b2lkIENhY2hlczo6cmVhZFJl
Y29yZHNMaXN0KENhY2hlJiBjYWNoZSwgTmV0d29ya0NhY2hlOjpTdG9yYWdlOjpUcmF2ZXJzZUhh
bmRsZQogCiB2b2lkIENhY2hlczo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlUmVxdWlyZWQs
IFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykK
IHsKLSAgICBpZiAoIW1fcXVvdGFNYW5hZ2VyKSB7CisgICAgaWYgKCFtX2VuZ2luZSkgewogICAg
ICAgICBjYWxsYmFjayhFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX3F1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHNwYWNlUmVxdWlyZWQsIFtj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKKyAg
ICBtX2VuZ2luZS0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCBzcGFjZVJlcXVpcmVkLCBbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CiAgICAgICAg
IHN3aXRjaCAoZGVjaXNpb24pIHsKICAgICAgICAgY2FzZSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpEZWNpc2lvbjo6RGVueToKICAgICAgICAgICAgIGNhbGxiYWNrKEVycm9yOjpRdW90
YUV4Y2VlZGVkKTsKQEAgLTU0OCw3ICs1MzQsNiBAQCB2b2lkIENhY2hlczo6d3JpdGVSZWNvcmQo
Y29uc3QgQ2FjaGUmIGNhY2hlLCBjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mbwog
ICAgIEFTU0VSVChtX3NpemUgPj0gcHJldmlvdXNSZWNvcmRTaXplKTsKICAgICBtX3NpemUgKz0g
cmVjb3JkSW5mb3JtYXRpb24uc2l6ZTsKICAgICBtX3NpemUgLT0gcHJldmlvdXNSZWNvcmRTaXpl
OwotICAgIHVwZGF0ZVNpemVGaWxlKCk7CiAKICAgICBpZiAoIXNob3VsZFBlcnNpc3QoKSkgewog
ICAgICAgICBtX3ZvbGF0aWxlU3RvcmFnZS5zZXQocmVjb3JkSW5mb3JtYXRpb24ua2V5LCBXVEZN
b3ZlKHJlY29yZCkpOwpAQCAtNTU2LDEzICs1NDEsMTUgQEAgdm9pZCBDYWNoZXM6OndyaXRlUmVj
b3JkKGNvbnN0IENhY2hlJiBjYWNoZSwgY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZElu
Zm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc3RvcmFnZS0+c3RvcmUoQ2FjaGU6
OmVuY29kZShyZWNvcmRJbmZvcm1hdGlvbiwgcmVjb3JkKSwgeyB9LCBbcHJvdGVjdGVkU3RvcmFn
ZSA9IG1ha2VSZWYoKm1fc3RvcmFnZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGlu
dCBlcnJvcikgbXV0YWJsZSB7CisgICAgbV9zdG9yYWdlLT5zdG9yZShDYWNoZTo6ZW5jb2RlKHJl
Y29yZEluZm9ybWF0aW9uLCByZWNvcmQpLCB7IH0sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIHByb3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShpbnQgZXJyb3IpIG11dGFibGUgewogICAgICAgICBp
ZiAoZXJyb3IpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKENhY2hlU3RvcmFnZSwg
IkNhY2hlczo6d3JpdGVSZWNvcmQgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBlcnJvcik7CiAgICAg
ICAgICAgICBjYWxsYmFjayhFcnJvcjo6V3JpdGVEaXNrKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQpOworICAgICAgICB1cGRh
dGVTaXplRmlsZShbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9wdCk7CisgICAgICAgIH0pOwogICAgIH0pOwog
fQogCkBAIC02MDUsNyArNTkyLDcgQEAgdm9pZCBDYWNoZXM6OnJlbW92ZVJlY29yZChjb25zdCBS
ZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkKQogCiAgICAgQVNTRVJUKG1fc2l6ZSA+PSByZWNvcmQu
c2l6ZSk7CiAgICAgbV9zaXplIC09IHJlY29yZC5zaXplOwotICAgIHVwZGF0ZVNpemVGaWxlKCk7
CisgICAgdXBkYXRlU2l6ZUZpbGUoW10geyB9KTsKIAogICAgIHJlbW92ZUNhY2hlRW50cnkocmVj
b3JkLmtleSk7CiB9CkBAIC02MjEsMTcgKzYwOCw2IEBAIHZvaWQgQ2FjaGVzOjpyZW1vdmVDYWNo
ZUVudHJ5KGNvbnN0IE5ldHdvcmtDYWNoZTo6S2V5JiBrZXkpCiAgICAgbV9zdG9yYWdlLT5yZW1v
dmUoa2V5KTsKIH0KIAotdm9pZCBDYWNoZXM6OnJlc2V0U3BhY2VVc2VkKCkKLXsKLSAgICBtX3Np
emUgPSAwOwotICAgIHVwZGF0ZVNpemVGaWxlKCk7Ci0KLSAgICBpZiAobV9xdW90YU1hbmFnZXIp
IHsKLSAgICAgICAgbV9xdW90YU1hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgICAgICBt
X3F1b3RhTWFuYWdlci0+YWRkVXNlcigqdGhpcyk7Ci0gICAgfQotfQotCiB2b2lkIENhY2hlczo6
Y2xlYXJNZW1vcnlSZXByZXNlbnRhdGlvbigpCiB7CiAgICAgbWFrZURpcnR5KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZXMuaAppbmRleCAwMzIzMWYzYTliMDU3NjcyZDYzMWJiOTZlNjdhNmViOTll
MWQ3Y2JiLi41ZDM5NGEwZTQ4ODU3YjAyNWNhYTQ4MzRhZDI2YmU4NDdkZDlmNTU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGVzLmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJDYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFn
ZVF1b3RhVXNlci5oPgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgogCkBAIC00MiwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIENhY2hlU3Rv
cmFnZSB7CiAKIGNsYXNzIEVuZ2luZTsKIAotY2xhc3MgQ2FjaGVzIGZpbmFsIDogcHVibGljIFJl
ZkNvdW50ZWQ8Q2FjaGVzPiwgcHJpdmF0ZSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyIHsKK2Ns
YXNzIENhY2hlcyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENhY2hlcz4gewogcHVibGljOgot
ICAgIHN0YXRpYyBTdHJpbmcgY2FjaGVzU2l6ZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYpOwotICAg
IHN0YXRpYyBSZWY8Q2FjaGVzPiBjcmVhdGUoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiYsIFN0cmluZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJik7Cisg
ICAgc3RhdGljIFN0cmluZyBjYWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBjYWNoZXNS
b290c1BhdGgpOworICAgIHN0YXRpYyBSZWY8Q2FjaGVzPiBjcmVhdGUoRW5naW5lJiwgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luJiYsIFN0cmluZyYmIHJvb3RQYXRoKTsKICAgICB+Q2FjaGVzKCk7CiAK
ICAgICBzdGF0aWMgdm9pZCByZXRyaWV2ZU9yaWdpbkZyb21EaXJlY3RvcnkoY29uc3QgU3RyaW5n
JiBmb2xkZXJQYXRoLCBXb3JrUXVldWUmLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0
aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiYmKT4mJik7CkBAIC03OSwyMiArNzgsMTcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBjbGVhcihXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CiAgICAgdm9pZCBjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgdm9pZCByZXNl
dFNwYWNlVXNlZCgpOwogCiAgICAgdWludDY0X3Qgc3RvcmFnZVNpemUoKSBjb25zdDsKKyAgICB2
b2lkIHVwZGF0ZVNpemVGaWxlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKIHByaXZh
dGU6Ci0gICAgQ2FjaGVzKEVuZ2luZSYsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmLCBTdHJpbmcm
JiByb290UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYpOwotCi0gICAgLy8gU3Rv
cmFnZVF1b3RhVXNlciBBUEkuCi0gICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9zaXplOyB9CisgICAgQ2FjaGVzKEVuZ2luZSYsIFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYmLCBTdHJpbmcmJiByb290UGF0aCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVTaXplKCk7
CiAgICAgdm9pZCByZWFkQ2FjaGVzRnJvbURpc2soV1RGOjpGdW5jdGlvbjx2b2lkKEV4cGVjdGVk
PFZlY3RvcjxDYWNoZT4sIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpFcnJvcj4mJik+JiYpOwog
ICAgIHZvaWQgd3JpdGVDYWNoZXNUb0Rpc2soV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBs
ZXRpb25DYWxsYmFjayYmKTsKIAotICAgIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJikgZmluYWw7Ci0KICAgICB2b2lkIHN0b3JlT3JpZ2luKFdlYkNvcmU6
OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAgICAgc3RhdGljIE9wdGlv
bmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4gcmVhZE9yaWdpbihjb25zdCBOZXR3b3JrQ2FjaGU6
OkRhdGEmKTsKIApAQCAtMTA2LDggKzEwMCw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc0Fj
dGl2ZUNhY2hlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHVwZGF0ZVNpemVGaWxlKCk7Ci0KICAgICBi
b29sIG1faXNJbml0aWFsaXplZCB7IGZhbHNlIH07CiAgICAgRW5naW5lKiBtX2VuZ2luZSB7IG51
bGxwdHIgfTsKICAgICB1aW50NjRfdCBtX3VwZGF0ZUNvdW50ZXIgeyAwIH07CkBAIC0xMjIsNyAr
MTE0LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNv
bXBsZXRpb25DYWxsYmFjaz4gbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25DYWxsYmFja3M7CiAgICAg
Ym9vbCBtX2lzV3JpdGluZ0NhY2hlc1RvRGlzayB7IGZhbHNlIH07CiAgICAgRGVxdWU8Q29tcGxl
dGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+
KT4+IG1fcGVuZGluZ1dyaXRpbmdDYWNoZXNUb0Rpc2tDYWxsYmFja3M7Ci0gICAgV2Vha1B0cjxX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBtX3F1b3RhTWFuYWdlcjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIENhY2hlU3RvcmFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCmluZGV4IGMwZmNmOWM1ZjYwMGFhNWFjMTE2M2U0
N2E0YjI2ZGFjNDIwNjVhYTkuLjZkMGMxMjlhNzQwNTEwZDM4Njk3MzcwNWFkMDkyZWYxMzJjYzA3
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFy
YW1ldGVycy5jcHAKQEAgLTU1LDYgKzU1LDggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIAogICAgIGVuY29kZXIg
PDwgbG9jYWxTdG9yYWdlRGlyZWN0b3J5IDw8IGxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZTsKIAorICAgIGVuY29kZXIgPDwgY2FjaGVTdG9yYWdlRGlyZWN0b3J5IDw8IGNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKwogICAgIGVuY29kZXIgPDwgcGVyT3Jp
Z2luU3RvcmFnZVF1b3RhOwogICAgIGVuY29kZXIgPDwgcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3Jh
Z2VRdW90YTsKIH0KQEAgLTE0MSw2ICsxNDMsMTggQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnM+IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmxvY2FsU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CiAKKyAgICBPcHRpb25hbDxTdHJpbmc+IGNhY2hlU3RvcmFnZURp
cmVjdG9yeTsKKyAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICBpZiAo
IWNhY2hlU3RvcmFnZURpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoKmNhY2hlU3RvcmFn
ZURpcmVjdG9yeSk7CisKKyAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGNh
Y2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBkZWNvZGVyID4+IGNhY2hl
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBpZiAoIWNhY2hlU3RvcmFnZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1v
dmUoKmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKICAgICBPcHRpb25h
bDx1aW50NjRfdD4gcGVyT3JpZ2luU3RvcmFnZVF1b3RhOwogICAgIGRlY29kZXIgPj4gcGVyT3Jp
Z2luU3RvcmFnZVF1b3RhOwogICAgIGlmICghcGVyT3JpZ2luU3RvcmFnZVF1b3RhKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKaW5kZXgg
MDk1ZjA5ZDZhZjkzZjkxM2ViYjI5ZjcwMjY3YWU5YzFiNzRiZTg4ZS4uZjI3ZGY0ODk4MDlmMzE5
NjA4YjY4MGNiMmE4YTFjMTRiNzAxODQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCkBAIC03MSw2ICs3MSw5IEBAIHN0cnVjdCBX
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB7CiAgICAgU3RyaW5nIGxvY2FsU3RvcmFnZURpcmVj
dG9yeTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgbG9jYWxTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlOwogCisgICAgU3RyaW5nIGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlOworCiAgICAgdWludDY0X3QgcGVyT3JpZ2luU3RvcmFnZVF1b3RhIHsgV2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCkgfTsKICAgICB1aW50NjRfdCBwZXJU
aGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
cjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgpIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAKaW5kZXggN2Vi
NzU3NzY0ZTk0OGY1YTRkZDU3N2VhYmJjNjIzMWEyNzM4Y2FhNi4uOTlhNDA4NmUyM2ZkNjAxNjFk
YzA0MWIwODhmNzFkMGMwNzVmNWM3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCkBAIC02ODYsMyArNjg2LDEx
IEBAIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JU
ZXN0aW5nKFdLV2Vic2l0ZURhdGFTdG9yZVJlCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0
b3JlUmVmKS0+c2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKFdlYktpdDo6dG9D
YWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIH0KKwordm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVSZXNl
dFF1b3RhKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIHZvaWQqIGNvbnRleHQs
IFdLV2Vic2l0ZURhdGFTdG9yZVJlc2V0UXVvdGFDYWxsYmFjayBjYWxsYmFjaykKK3sKKyAgICBX
ZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmVSZWYpLT5yZXNldFF1b3RhKFtjb250ZXh0LCBjYWxsYmFj
a10geworICAgICAgICBpZiAoY2FsbGJhY2spCisgICAgICAgICAgICBjYWxsYmFjayhjb250ZXh0
KTsKKyAgICB9KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKaW5kZXggOTUyMzlhM2IwYjNhZDYwYzJmNzgzN2ZlNmY1
YTEwNzczNjFhZmRlMC4uMjNmYzJlNzI2ZjkyMGYxYWIzZGY5ZWQwZDI3ZmQwNjFhYzI5NzE0YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0
b3JlUmVmLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0
YVN0b3JlUmVmLmgKQEAgLTE1NSw2ICsxNTUsOSBAQCBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVE
YXRhU3RvcmVDbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbnNUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdgog
CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRDYWNoZU1vZGVsU3luY2hyb25v
dXNseUZvclRlc3RpbmcoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tDYWNo
ZU1vZGVsIGNhY2hlTW9kZWwpOwogCit0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVEYXRhU3RvcmVS
ZXNldFF1b3RhQ2FsbGJhY2spKHZvaWQqIGZ1bmN0aW9uQ29udGV4dCk7CitXS19FWFBPUlQgdm9p
ZCBXS1dlYnNpdGVEYXRhU3RvcmVSZXNldFF1b3RhKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRh
U3RvcmVSZWYsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVJlc2V0UXVvdGFDYWxs
YmFjayBjYWxsYmFjayk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcAppbmRleCBhZDU3OTkxZTNjYWM3YzVhZmJlZmM4YTY1ZjlhZmY5YjQwOWNhOTI0Li44MmM1
NmZiYTlhZGNlMjJmOTdjNjEwYTQ3ODE2YzcyYmI2NGYzNDE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAg
LTEzNjcsNiArMTM2NywxNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nl
c3NBc3NlcnRpb24oKQogICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gbnVsbHB0cjsK
IH0KIAordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIGlmICghY2FuU2VuZE1lc3NhZ2UoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRRdW90YShzZXNzaW9uSUQpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjdW5k
ZWYgTUVTU0FHRV9DSEVDSwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAppbmRleCA3MmNlNDI1NmJhYWUwN2M5MmVmY2Q0OThl
MTMyMDZiYTI5OTQzYjVhLi5iNzdjZTdkM2U2YWZlZTExYWU2MjAwOWNmNjllY2Y0YjcwMGNkNTdh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuaApAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NQ
cm9tcHRXYXNTaG93biA6IGJvb2w7CiBlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVk
IDogYm9vbDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0
YTsKK3N0cnVjdCBDbGllbnRPcmlnaW47CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTk2
LDYgKzE5Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3Vz
dG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9y
TGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIHJlc2V0UXVv
dGEoUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisKIHByaXZh
dGU6CiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5CiAgICAgdm9pZCBnZXRMYXVuY2hPcHRp
b25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IDQwNjhlZTQxZmZjZDZkZjk1
YTNkM2I1MTZiYmMyNTMwZTJjOTk4OTEuLjdlZWNhM2QzY2I0M2IzYjI2NzA2MjlkMGZhY2RmNTEx
OTg4MGFiMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAK
QEAgLTU1MSw2ICs1NTEsMTIgQEAgTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6
OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGgKICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxv
Y2FsU3RvcmFnZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CiAKKyAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFT
dG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxs
U3RyaW5nKCk7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShjYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFt
ZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3Rvcnkg
PSBXVEZNb3ZlKGNhY2hlU3RvcmFnZURpcmVjdG9yeSk7CisgICAgfQorCiAgICAgaWYgKG1fd2Vi
c2l0ZURhdGFTdG9yZSkKICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5KCk7CiAgICAgaWYgKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IDBm
ZjNlYTA5NjMxYjU3N2QxZWE3OTA4MjVlMzA1ZWU5MzIzZmJkYzcuLjA3MTk5ZWNhY2RjYjQ3NjQ5
MDc0MzMyOGU5ODljYmFjNWJhYjRjYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29j
b2EubW0KQEAgLTE5MSw2ICsxOTEsMTAgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vi
c2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgaWYgKCFwYXJhbWV0ZXJzLmxvY2FsU3Rv
cmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwog
CisgICAgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBjYWNoZVN0b3JhZ2VEaXJl
Y3RvcnkoKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1w
dHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRl
RGlyZWN0b3J5KHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNh
Y2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKICAgICBwYXJhbWV0ZXJzLnBl
ck9yaWdpblN0b3JhZ2VRdW90YSA9IHBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwogICAgIHBhcmFt
ZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHBlclRoaXJkUGFydHlPcmln
aW5TdG9yYWdlUXVvdGEoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCBiYjk4NDE2NjQ1NGI1NmFl
YTRjOGRiZDQ4NWI3MjE0MDBiYjE4NmNhLi5hYzJmMzhkN2VkYjU0ZjdhMjRhYmFkM2RhNDRlNTZk
OGVkMzYxNzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMjA4Myw2ICsyMDgzLDEyIEBAIFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rvcnko
bG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CiAgICAgfQogCisgICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnkg
PSB0aGlzLT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBpZiAoIWNhY2hlU3RvcmFnZURp
cmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBwYXJhbWV0
ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICB9
CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSA9IHJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7CiAg
ICAgaWYgKCFwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpCkBA
IC0yMTY5LDYgKzIxNzUsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3Jh
Z2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZUQKICAgICBBU1NFUlQo
IWNvbXBsZXRpb25IYW5kbGVyKTsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1
b3RhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDog
cHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9v
bC0+bmV0d29ya1Byb2Nlc3MoKSkKKyAgICAgICAgICAgIHByb2Nlc3MtPnJlc2V0UXVvdGEobV9z
ZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJl
ZigpXSB7IH0pOworICAgIH0KK30KKwogI2lmICFQTEFURk9STShDT0NPQSkKIFdURjo6U3RyaW5n
IFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRNZWRpYUNhY2hlRGlyZWN0b3J5KCkKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuaAppbmRleCAyNzg0ZmUzN2UzZWE0YThhMThlNTU1MWQzOWIyY2EzOTkyMDdmYWFhLi5mNWVl
NDIyMDdkYTIwZjkyNzYxYWRiMTAyNTM5NmNkMWNhODFlZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC0y
OTEsNyArMjkxLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBXVEY6OlN0cmluZyBkZWZhdWx0TWVk
aWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpOwogICAgIHN0YXRpYyBXVEY6OlN0cmluZyBkZWZhdWx0
RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCk7CiAgICAgc3RhdGljIFdURjo6U3Ry
aW5nIGRlZmF1bHRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRpcmVjdG9yeSgpOwotICAgIAorCisg
ICAgdm9pZCByZXNldFF1b3RhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisKIHByaXZh
dGU6CiAgICAgdm9pZCBmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBSZWZQdHI8V29ya1F1ZXVlPiYm
LCBGdW5jdGlvbjx2b2lkKFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4pPiYmIGFwcGx5KTsKIApk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDdjYWNj
N2MxZjRhNTk0NTljYTYyNWI5ZGViYmIwYTFhMWU0MmNjODUuLjk2NzlkYjI1ZDM4MGEyNjhhNzY1
NDQ2MDY5ZjBmNDNlYTE0OWM1MzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxOS0xMS0yMCAgU2lodWkgTGl1ICA8
c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVyc2lvbiBTdG9y
YWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDM5NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3MjkwMzQ5PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOiBSZW1vdmVk
IGFzIHdlIGhhdmUgYSBkaWZmZXJlbnQgU3RvcmFnZVF1b3RhTWFuYWdlciAKKyAgICAgICAgaW1w
bGVtZW50YXRpb24gbm93LgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwOiByZXNldCBTdG9yYWdlUXVvdGFNYW5hZ2VyJ3MgcXVvdGEgYmV0d2VlbiB0ZXN0cy4K
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1
ZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRRdW90YSk6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorCiAyMDE5LTExLTE5ICBTYWFt
IEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBydW5OdWxsaXNo
QXdhcmVPcGVyYXRvcnNFbmFibGVkCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDczMTlkMmZj
NDk3MGVjNGVlYmNkMDExNGEzNDA3MGY1YWRkZDFhMDQuLmIzYmE5YTJjYWRlZmExYjVhNTk4YTZl
NDIwNjQyMTY3ZjY2MTRlMGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MzcsNyArNzM3
LDYgQEAKIAkJOTM5OUJBMDYyMzcxMTE0RjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdEluUGFnZUNh
Y2hlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTM5OUJBMDMyMzcxMTBCRjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdEluUGFnZUNhY2hl
Lmh0bWwgKi87IH07CiAJCTkzQUY0RUNFMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNEMTUwNkYwNjQwMDdGRDU3RSAvKiBO
ZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCAqLzsgfTsK
IAkJOTNBRjRFRDExNTA2RjEzMDAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBRjRFQ0Yx
NTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi87IH07Ci0JCTkzQjYyMDU0
MjM0RUE2MkMwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjYyMDUzMjM0RUEzMkIwMEQ0OUI5
NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJOTNDRkE4NjcxQ0VCOUUzODAw
MDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0NGQTg2NjFDRUI5REUxMDAwNTY1
QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sICovOyB9OwogCQk5M0QxMTlGQzIyQzY4
MEY3MDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0QxMTlG
QjIyQzU3MTEyMDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRt
bCAqLzsgfTsKIAkJOTNFMkM1NTUxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMkM1NTQxRkQz
MjA0MTAwRTFERjZBIC8qIExpbmVFbmRpbmcuY3BwICovOyB9OwpAQCAtMTE0Miw3ICsxMTQxLDYg
QEAKIAkJCWRzdFBhdGggPSBUZXN0V2ViS2l0QVBJLnJlc291cmNlczsKIAkJCWRzdFN1YmZvbGRl
clNwZWMgPSA3OwogCQkJZmlsZXMgPSAoCi0JCQkJQ0Q4Mzk0REYyMzJBRjdDMDAwMTQ5NDk1IC8q
IG1lZGlhLWxvYWRpbmcuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NUE4MTdGRjIx
ODEwMjFBMDAwNEEzOUEgLyogMTAweDEwMC1yZWQudGdhIGluIENvcHkgUmVzb3VyY2VzICovLAog
CQkJCTFBOUU1MkM5MTNFNjVFRjQwMDY5MTdGNSAvKiAxOC1jaGFyYWN0ZXJzLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8sCiAJCQkJNTVBODE4MDAyMTgxMDIyMTAwMDRBMzlBIC8qIDQwMHg0MDAt
Z3JlZW4ucG5nIGluIENvcHkgUmVzb3VyY2VzICovLApAQCAtMTM3NSw2ICsxMzczLDcgQEAKIAkJ
CQk5MzBBRDQwMjE1MDY5OEQwMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8sCiAJCQkJQUQ1N0FDMjIxREE3NDY2RTAwRkYxQkRFIC8qIG1hbnktaWZyYW1l
cy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTc3NzJFQ0UxMjJGRTA2QzYwMDA5QTc5
OSAvKiBtYW55LXNhbWUtb3JpZ2luLWlmcmFtZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywK
KwkJCQlDRDgzOTRERjIzMkFGN0MwMDAxNDk0OTUgLyogbWVkaWEtbG9hZGluZy5odG1sIGluIENv
cHkgUmVzb3VyY2VzICovLAogCQkJCUNEQTMxNTlBMUVENTQ4RjEwMDlGNjBEMyAvKiBNZWRpYVBs
YXliYWNrU2xlZXBBc3NlcnRpb24uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlDREM5
NDQyRjFFRjIwNUQ2MDA1OUMzQzQgLyogbWVkaWFzdHJlYW10cmFjay1kZXRhY2hlZC5odG1sIGlu
IENvcHkgUmVzb3VyY2VzICovLAogCQkJCUUxMjIwRENBMTU1QjI4QUEwMDEzRTJGQyAvKiBNZW1v
cnlDYWNoZURpc2FibGVXaXRoaW5SZXNvdXJjZUxvYWREZWxlZ2F0ZS5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovLApAQCAtMjE0Nyw3ICsyMTQ2LDYgQEAKIAkJOTNBRjRFQ0ExNTA2RjAzNTAwN0ZE
NTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXRGb3JJbWFnZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FGNEVD
RDE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1h
Z2VzX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXdG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBRjRFQ0YxNTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2Yt
aW1hZ2VzLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibG90cy1vZi1pbWFnZXMu
aHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzQjYyMDUzMjM0RUEzMkIwMEQ0
OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5M0NGQTg2NjFDRUI5REUxMDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1p
bnB1dC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImF1dG9mb2N1c2VkLXRleHQt
aW5wdXQuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0ZBODY4MUNFQkNG
RUQwMDA1NjVBOCAvKiBDYW5kaWRhdGVUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IENhbmRpZGF0ZVRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0QxMTlGQjIyQzU3MTEyMDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2lu
ZG93LXByaXZhdGUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb2NhbHN0b3Jh
Z2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTMxMjQsNyArMzEyMiw2IEBACiAJCQkJNDE5NzNCNUMxQUYyMjg3NTAwNkM3QjM2IC8qIFNo
YXJlZEJ1ZmZlci5jcHAgKi8sCiAJCQkJQTE3OTkxODkxRTFDQTI0MTAwQTUwNUVEIC8qIFNoYXJl
ZEJ1ZmZlclRlc3QuY3BwICovLAogCQkJCUExNzk5MThBMUUxQ0EyNDEwMEE1MDVFRCAvKiBTaGFy
ZWRCdWZmZXJUZXN0LmggKi8sCi0JCQkJOTNCNjIwNTMyMzRFQTMyQjAwRDQ5Qjk3IC8qIFN0b3Jh
Z2VRdW90YU1hbmFnZXIuY3BwICovLAogCQkJCUVDQTY4MENEMUU2OENDMDkwMDczMUQyMCAvKiBT
dHJpbmdVdGlsaXRpZXMubW0gKi8sCiAJCQkJQ0U0RDVERTUxRjY3NDNCQTAwNzJDRkM2IC8qIFN0
cmluZ1dpdGhEaXJlY3Rpb24uY3BwICovLAogCQkJCTkzQTI1ODk4MUY5MkZGMTUwMDNFNTEwQyAv
KiBUZXh0Q29kZWMuY3BwICovLApAQCAtMzg1Miw2ICszODQ5LDcgQEAKIAkJCQk5MzBBRDQwMTE1
MDY5OEIzMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgKi8sCiAJCQkJQUQ1N0FDMUQxREE3
NDYzODAwRkYxQkRFIC8qIG1hbnktaWZyYW1lcy5odG1sICovLAogCQkJCTc3NzJFQ0UwMjJGRTA1
RTEwMDA5QTc5OSAvKiBtYW55LXNhbWUtb3JpZ2luLWlmcmFtZXMuaHRtbCAqLywKKwkJCQlDRDgz
OTRERTIzMkFGMTVFMDAxNDk0OTUgLyogbWVkaWEtbG9hZGluZy5odG1sICovLAogCQkJCUNEQzk0
NDJCMUVGMUZCRDIwMDU5QzNDNCAvKiBtZWRpYXN0cmVhbXRyYWNrLWRldGFjaGVkLmh0bWwgKi8s
CiAJCQkJNTFDRDFDNzExQjM4RDQ4NDAwMTQyQ0E1IC8qIG1vZGFsLWFsZXJ0cy1pbi1uZXctYWJv
dXQtYmxhbmstd2luZG93Lmh0bWwgKi8sCiAJCQkJN0ExNDU4RkIxQUQ1QzAzNTAwRTA2NzcyIC8q
IG1vdXNlLWJ1dHRvbi1saXN0ZW5lci5odG1sICovLApAQCAtMzg4Myw3ICszODgxLDYgQEAKIAkJ
CQkwN0NEMzJGNzIwNjVCNzJBMDA2NEE0QkUgLyogdmlkZW8uaHRtbCAqLywKIAkJCQkxQzJCODE4
NDFDODkyNEEyMDBBNTUyOUYgLyogd2ViZm9udC5odG1sICovLAogCQkJCTQ2OEYyRjkzMjM2OERB
QTcwMEY0Qjg2NCAvKiB3aW5kb3ctb3Blbi10aGVuLWRvY3VtZW50LW9wZW4uaHRtbCAqLywKLQkJ
CQlDRDgzOTRERTIzMkFGMTVFMDAxNDk0OTUgLyogbWVkaWEtbG9hZGluZy5odG1sICovLAogCQkJ
KTsKIAkJCW5hbWUgPSBSZXNvdXJjZXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
NDg2NCw3ICs0ODYxLDYgQEAKIAkJCQk3Q0NFN0VDRjFBNDExQTdFMDA0NDdDNEMgLyogU3RvcExv
YWRpbmdGcm9tRGlkUmVjZWl2ZVJlc3BvbnNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDMDkz
MkUyMUM5OTM0NDAwMzBDNEIwIC8qIFN0b3BTdXNwZW5kUmVzdW1lQWxsTWVkaWEubW0gaW4gU291
cmNlcyAqLywKIAkJCQk0MTRBRDY4NjIyODVEMUMwMDA3NzdGMkQgLyogU3RvcmFnZVF1b3RhLm1t
IGluIFNvdXJjZXMgKi8sCi0JCQkJOTNCNjIwNTQyMzRFQTYyQzAwRDQ5Qjk3IC8qIFN0b3JhZ2VR
dW90YU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1QkUxNzExRDQyOEU0QjAwREQ3
QzY4IC8qIFN0b3JlQmxvYlRoZW5EZWxldGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VE
MDFBNDExQTdFMDA0NDdDNEMgLyogU3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJp
bmcubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VEMTFBNDExQTdFMDA0NDdDNEMgLyogU3Ry
aW5nVHJ1bmNhdG9yLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMWM2N2JmMDUyZjdiMGEzNDUzZDA1NGYyNTI5MTkxZWVm
M2YxNzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2Vy
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFVc2VyLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KLXN0YXRpYyBjb25z
dCBpbnQgZGVmYXVsdFF1b3RhID0gMSAqIEtCOwotCi1jbGFzcyBNb2NrUXVvdGFVc2VyIGZpbmFs
IDogcHVibGljIFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVzZXIgewotcHVibGljOgotICAgIGV4cGxp
Y2l0IE1vY2tRdW90YVVzZXIoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlcikKLSAgICAgICAg
OiBtX21hbmFnZXIoJm1hbmFnZXIpCi0gICAgewotICAgICAgICBtYW5hZ2VyLmFkZFVzZXIoKnRo
aXMpOwotICAgIH0KLQotICAgIHZvaWQgc2V0U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCkg
eyBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsgfQotCi1wcml2YXRlOgotICAgIHVpbnQ2NF90IHNw
YWNlVXNlZCgpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICByZXR1cm4gbV9zcGFjZVVzZWQ7
Ci0gICAgfQotCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNhbGxiYWNrKSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKCFtX3NwYWNlVXNlZCkK
LSAgICAgICAgICAgIEFTU0VSVF9FUShtX21hbmFnZXItPnN0YXRlKCksIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OlN0YXRlOjpVbmluaXRpYWxpemVkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
QVNTRVJUX0VRKG1fbWFuYWdlci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6
OkNvbXB1dGluZ1NwYWNlVXNlZCk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdXNhZ2UgdG8gbW9jayBk
ZWxldGlvbi4KLSAgICAgICAgbV9zcGFjZVVzZWQgPSAwOwotICAgICAgICBjYWxsYmFjaygpOwot
ICAgIH0KLQotICAgIHVpbnQ2NF90IG1fc3BhY2VVc2VkIHsgMCB9OwotICAgIFN0b3JhZ2VRdW90
YU1hbmFnZXIqIG1fbWFuYWdlcjsKLX07Ci0gICAgCi1URVNUKFN0b3JhZ2VRdW90YU1hbmFnZXJU
ZXN0LCBCYXNpYykKLXsKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBzdG9yYWdlUXVvdGFNYW5h
Z2VyUHRyID0gbnVsbHB0cjsKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyIHN0b3JhZ2VRdW90YU1h
bmFnZXIoZGVmYXVsdFF1b3RhLCBbJnN0b3JhZ2VRdW90YU1hbmFnZXJQdHJdKHVpbnQ2NF90IHF1
b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8dWludDY0X3Q+KT4mJiBjb21wbGV0aW9uSGFubGRl
cikgewotICAgICAgICBBU1NFUlRfVFJVRShzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyKTsKLSAgICAg
ICAgQVNTRVJUX0VRKHN0b3JhZ2VRdW90YU1hbmFnZXJQdHItPnN0YXRlKCksIFN0b3JhZ2VRdW90
YU1hbmFnZXI6OlN0YXRlOjpXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlKTsKLQotICAg
ICAgICAvLyBBbGxvdyBhbGwgc3BhY2UgaW5jcmVhc2UgcmVxdWVzdHMuCi0gICAgICAgIGNvbXBs
ZXRpb25IYW5sZGVyKHNwYWNlSW5jcmVhc2UgKyBjdXJyZW50U3BhY2UpOwotICAgIH0pOwotICAg
IHN0b3JhZ2VRdW90YU1hbmFnZXJQdHIgPSAmc3RvcmFnZVF1b3RhTWFuYWdlcjsKLQotCi0gICAg
TW9ja1F1b3RhVXNlciBtb2NrVXNlcihzdG9yYWdlUXVvdGFNYW5hZ2VyKTsKLQotICAgIC8vIEdy
YW50IGRpcmVjdGx5LgotICAgIHN0b3JhZ2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDAuMSAq
IEtCLCBbJl0oV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNpb24p
IHsKLSAgICAgICAgQVNTRVJUX0VRKGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpEZWNpc2lvbjo6R3JhbnQpOwotICAgICAgICBtb2NrVXNlci5zZXRTcGFjZVVzZWQoMC4x
ICogS0IpOwotICAgIH0pOwotCi0gICAgLy8gR3JhbnQgYWZ0ZXIgY29tcHV0aW5nIGFjY3VyYXRl
IHVzYWdlLgotICAgIHN0b3JhZ2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDEuMCAqIEtCLCBb
Jl0oV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNpb24pIHsKLSAg
ICAgICAgQVNTRVJUX0VRKGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6R3JhbnQpOwotICAgICAgICBtb2NrVXNlci5zZXRTcGFjZVVzZWQoMS4wICogS0Ip
OwotICAgIH0pOwotCi0gICAgLy8gR3JhbnQgYWZ0ZXIgY29tcHV0aW5nIGFjY3VyYXRlIHVzYWdl
IGFuZCByZXF1ZXN0aW5nIHNwYWNlIGluY3JlYXNlLgotICAgIHN0b3JhZ2VRdW90YU1hbmFnZXIu
cmVxdWVzdFNwYWNlKDEwICogS0IsIFsmXShXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbiBkZWNpc2lvbikgewotICAgICAgICBBU1NFUlRfRVEoc3RvcmFnZVF1b3RhTWFuYWdl
clB0ci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6Ok1ha2luZ0RlY2lzaW9u
Rm9yUmVxdWVzdCk7Ci0gICAgICAgIEFTU0VSVF9FUShkZWNpc2lvbiwgV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50KTsKLSAgICB9KTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcAppbmRleCAzYTA3YzEzOTgxZGRjMzA1NTlmZWE4NGJkMjhmYTJmYmFkZGU1NmRjLi4yOTIx
NGJmZTNmYWFiZDY4NDVlM2E5MTI5NGVhMGJkY2FkNzJhNTQyIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtOTgxLDYgKzk4MSw4IEBAIGJvb2wgVGVzdENv
bnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMm
IG9wdGlvbnMsIFJlCiAgICAgY2xlYXJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucygpOwogICAg
IGNsZWFyRE9NQ2FjaGVzKCk7CiAKKyAgICByZXNldFF1b3RhKCk7CisKICAgICBXS0NvbnRleHRT
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKHBsYXRmb3Jt
Q29udGV4dCgpLCB0cnVlKTsKIAogICAgIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3Rh
dGVGb3JUZXN0aW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwpAQCAt
MzE0Miw2ICszMTQ0LDEzIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2Uo
KQogICAgIHJ1blVudGlsKGNvbnRleHQuZG9uZSwgbm9UaW1lb3V0KTsKIH0KIAordm9pZCBUZXN0
Q29udHJvbGxlcjo6cmVzZXRRdW90YSgpCit7CisgICAgU3RvcmFnZVZvaWRDYWxsYmFja0NvbnRl
eHQgY29udGV4dCgqdGhpcyk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlUmVzZXRRdW90YShUZXN0
Q29udHJvbGxlcjo6d2Vic2l0ZURhdGFTdG9yZSgpLCAmY29udGV4dCwgU3RvcmFnZVZvaWRDYWxs
YmFjayk7CisgICAgcnVuVW50aWwoY29udGV4dC5kb25lLCBub1RpbWVvdXQpOworfQorCiBzdHJ1
Y3QgRmV0Y2hDYWNoZU9yaWdpbnNDYWxsYmFja0NvbnRleHQgewogICAgIEZldGNoQ2FjaGVPcmln
aW5zQ2FsbGJhY2tDb250ZXh0KFRlc3RDb250cm9sbGVyJiBjb250cm9sbGVyLCBXS1N0cmluZ1Jl
ZiBvcmlnaW4pCiAgICAgICAgIDogdGVzdENvbnRyb2xsZXIoY29udHJvbGxlcikKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRleCAxYjI2MWJjZGExYmEwZjIxZjE3ODQ5
MDkyYTAyNmM2MGVhYmE5ODQ0Li5hZDcxYzg2OGMwMmZlNThiYjlhODM5Mjc4ZjBmZGIzZjFhZGVi
ZTNmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCkBAIC0yNjksNiAr
MjY5LDggQEAgcHVibGljOgogICAgIHZvaWQgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKICAg
ICB2b2lkIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCk7CiAKKyAgICB2b2lkIHJlc2V0
UXVvdGEoKTsKKwogICAgIHZvaWQgcmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzKCk7CiAKICAg
ICB2b2lkIGNsZWFySW5kZXhlZERhdGFiYXNlcygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383990</attachid>
            <date>2019-11-20 15:22:12 -0800</date>
            <delta_ts>2019-11-21 09:36:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203971-20191120152211.patch</filename>
            <type>text/plain</type>
            <size>169348</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjFlODk3ODhlZWQwMzEz
YTY4MzMzNzAyMzBiNTk2MjZmOGE3ZWY2NC4uNDYwMTlmNGQ2ZjQ5MDNkYzJlMDQxNGQ0ZjhmZmRi
MjI3MjU3MDU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NSBAQAorMjAxOS0xMS0yMCAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVy
c2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3MjkwMzQ5
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCBhIGxvY2stYmFzZWQgU3RvcmFnZVF1b3RhTWFuYWdlciBzbyB0aGF0IHF1b3RhIGNoZWNr
IGNhbiBiZSBkb25lIG9uIGRpZmZlcmVudCB0aHJlYWRzLgorICAgICAgICBJZiBzcGFjZSByZXF1
ZXN0IGlzIG1hZGUgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCwgaXQgbmVlZHMgdG8gaG9sZCBhIGxv
Y2sgdW50aWwgaXQgaXMgZmluaXNoZWQsIHNvIG5vIHJlcXVlc3QKKyAgICAgICAgZnJvbSBkaWZm
ZXJlbnQgdGhyZWFkcyBjYW4gYmUgcGVyZm9ybWVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAg
IElmIHNwYWNlIHJlcXVlc3QgaXMgbWFkZSBvbiB0aGUgbWFpbiB0aHJlYWQsIHdlIHdpbGwgZGlz
cGF0Y2ggaXQgdG8gYSBiYWNrZ3JvdW5kIHRocmVhZCBhbmQgc2NoZWR1bGUgYSBjYWxsbGJhY2sK
KyAgICAgICAgdG8gdGhlIG1haW4gdGhyZWFkIHdoZW4gcmVzdWx0IGlzIGF2YWlsYWJsZSwgc28g
dGhlIG1haW4gdGhyZWFkIHdpbGwgbm90IGJlIGJsb2NrZWQuCisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyBxdW90YSByZWxhdGVkIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJh
c2VzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpyZXF1ZXN0U3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRpc2tVc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90
YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OlF1b3RhVXNlcjo6flF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRl
U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2Vy
dmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3BhY2VVc2Vk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90
YVVzZXI6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjplbnN1cmVRdW90YVVz
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnN0
YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5pc2hDb21w
dXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpJREJTZXJ2ZXI6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGVjcmVhc2VTcGFjZVVz
ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6Omlu
Y3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCk6IERlbGV0ZWQu
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluaXRpYWxpemVRdW90YVVzZXIpOiBE
ZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5n
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkT3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNy
ZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bUNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OnJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJl
Y29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtR2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0
VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVxdWVzdFNwYWNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OndhaXRG
b3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2spOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Zmlu
aXNoU3BhY2VJbmNyZWFzZVRhc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6ZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVB
ZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0
ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJl
bmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Omdl
dFJlY29yZEFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OmdldENvdW50QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpvcGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hl
Y2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb246OmFib3J0VHJhbnNhY3Rpb25XaXRob3V0Q2FsbGJhY2spOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uOjpwdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
OjpnZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9wZW5DdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjppdGVyYXRl
Q3Vyc29yKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURC
U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6cXVvdGFN
YW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6SW5Qcm9jZXNz
SURCU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIp
OiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJ
REJTZXJ2ZXIuaDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbkJhY2tncm91
bmRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dHJ5R3Jh
bnRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVwZGF0
ZVF1b3RhQmFzZWRPblVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXNldFF1b3RhRm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp+U3RvcmFnZVF1b3RhTWFuYWdlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzcGFjZVVz
YWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5p
dGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjphZGRVc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1Bl
bmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3RhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90YSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzdGF0ZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmg6IFJlbW92ZWQuCisKIDIw
MTktMTEtMjAgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgUkVHUkVTU0lPTiAocjI1MjE2MSk6IGJveC1zaGFkb3cgd2l0aCBpbnNldCBhbmQgcm91bmRl
ZCBib3JkZXJzIGlzIGNsaXBwZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOWY2ZWZkZTU2Y2NiY2U0N2EzOGE5NWZk
NThlODQ2ZTFhYmFkNzhkOS4uOGUwYWE1ZDY1Y2MzOTg5NDA5MThhODc1YzgwOTUwZjU0NTRhMWQy
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4OCBAQAorMjAxOS0xMS0yMCAgU2lodWkgTGl1ICA8c2lo
dWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVyc2lvbiBTdG9yYWdl
UXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDM5NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3MjkwMzQ5PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwOiBJbnRyb2R1Y2UgY2xhc3MgU2Vzc2lvblN0b3JhZ2VRdW90YU1h
bmFnZXIgdG8gbWFuYWdlIGFsbCAKKyAgICAgICAgU3RvcmFnZVF1b3RhTWFuYWdlcnMgb2YgdGhl
IHNhbWUgc2Vzc2lvbi4gCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFs
aXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWRk
V2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpyZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6Y3JlYXRlSURCU2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzczo6c2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJJREJSb290UGF0aCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjp1cGRhdGVRdW90YUJhc2VkT25TcGFj
ZVVzYWdlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZXNl
dFF1b3RhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VRdW90YU1h
bmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVN0b3Jh
Z2VRdW90YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVh
clN0b3JhZ2VRdW90YSk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVF1b3RhVXNlcnMpOiBEZWxldGVkLgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6U2Vzc2lvblN0
b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZW5zdXJl
T3JpZ2luU3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5h
Z2Vycyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlcjo6Y2FjaGVSb290UGF0aCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6c2V0SURCUm9vdFBhdGgpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXI6OmlkYlJvb3RQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OlN0b3JhZ2VRdW90YU1hbmFnZXJzOjpkZWZhdWx0UXVvdGEgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U3RvcmFnZVF1b3RhTWFuYWdlcnM6OnNldERl
ZmF1bHRRdW90YXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
U3RvcmFnZVF1b3RhTWFuYWdlcnM6Om1hbmFnZXJzUGVyT3JpZ2luKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OmdldERpcmVjdG9yeVNpemUpOgorICAgICAgICAoV2ViS2l0
OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6ZGlza1VzYWdlKTogc3RhdGljIGZ1bmN0aW9uIHRvIGdl
dCB0aGUgZGlzayB1c2FnZSBvZiBDYWNoZVN0b3JhZ2UuCisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6RW5naW5lOjpyZXF1ZXN0U3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkVuZ2luZTo6cmVhZENhY2hlc0Zyb21EaXNrKToKKyAgICAgICAgKFdlYktpdDo6Q2Fj
aGVTdG9yYWdlOjpFbmdpbmU6OndyaXRlU2l6ZUZpbGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkVuZ2luZTo6cmVhZFNpemVGaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVT
dG9yYWdlOjpFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cHV0KToKKyAgICAgICAgKFdlYktpdDo6Q2Fj
aGVTdG9yYWdlOjpDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkNhY2hlczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpD
YWNoZXM6OkNhY2hlcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjp+
Q2FjaGVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnVwZGF0ZVNp
emVGaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmluaXRpYWxp
emVTaXplKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmNsZWFyKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlcXVlc3RTcGFjZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjp3cml0ZVJlY29yZCk6CisgICAg
ICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZW1vdmVSZWNvcmQpOgorICAgICAg
ICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6d2hlbkluaXRpYWxpemVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlc2V0U3BhY2VVc2Vk
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VF
bmdpbmVDYWNoZXMuaDoKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5j
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6
OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmg6
IEFkZCBhIGNhY2hlU3RvcmFnZURpcmVjdG9yeSBwYXJhbWV0ZXIgc28gd2Uga25vdyB0aGUgZGly
ZWNvdHJ5IG9mIAorICAgICAgICBDYWNoZVN0b3JhZ2Ugd2hlbiB3ZSBzdGFydCB1c2luZyBXZWJz
aXRlRGF0YVN0b3JlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5jcHA6CisgICAgICAgIChXS1dlYnNpdGVEYXRhU3RvcmVSZXNldFF1b3RhKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg6IEFkZCBhIEMg
QVBJIGZvciByZXNldGluZyBxdW90YSBpbiBUZXN0UnVubmVyLgorICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpyZXNldFF1b3RhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQ
cm9jZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURh
dGFTdG9yZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwYXJh
bWV0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorCiAyMDE5LTExLTE5
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
Zml4IHdlYmtpdHB5IGZhaWx1cmVzIGFmdGVyIHIyNTI2NTUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRl
eCA0MDI2MjNmMDllNzc5MGEzNjcwYTYzOTNlMGYyMzBkNjdmYzcwYjg5Li4wMTBiMjgxYmNiYTI2
Yzc4Mjg4NTI0MmY3OTAwZThmOTQ2OTgxMWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEzNzks
NyArMTM3OSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBz
dG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuaAogICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmgKICAgICBzdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAotICAgIHN0b3JhZ2Uv
U3RvcmFnZVF1b3RhVXNlci5oCiAgICAgc3RvcmFnZS9TdG9yYWdlVHlwZS5oCiAKICAgICBzdHls
ZS9TdHlsZUNoYW5nZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4IGU2MWRiOGM5NDI4ZDk4NGRhNjQ2OTZlN2M4
NDI3ODc0MjY5YzI3ZTYuLmVlYjQzYjA2NzE1ZDZjZjcwYzNjMGU3ZjkzODM5NmJjMGQ1MDUxNjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuY3BwCkBAIC00NiwyOCArNDYsMjggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBJREJTZXJ2ZXIgewogCi1SZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFF1b3RhTWFuYWdlckdldHRlciYmIHF1b3RhTWFuYWdl
ckdldHRlcikKK1JlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYgcXVvdGFNYW5h
Z2VyR2V0dGVyKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlNlcnZlcihzZXNzaW9u
SUQsIFdURk1vdmUocXVvdGFNYW5hZ2VyR2V0dGVyKSkpOwogfQogCi1SZWY8SURCU2VydmVyPiBJ
REJTZXJ2ZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJH
ZXR0ZXIpCitSZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVv
dGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSURCU2VydmVyKHNlc3Npb25JRCwgZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoLCBXVEZNb3ZlKHF1b3RhTWFuYWdlckdldHRlcikpKTsKIH0KIAotSURCU2VydmVyOjpJREJT
ZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJiBxdW90
YU1hbmFnZXJHZXR0ZXIpCitJREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciYmIHNwYWNlUmVxdWVzdGVy
KQogICAgIDogQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlcigiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIs
IEF1dG9kcmFpbmVkUG9vbEZvclJ1bkxvb3A6OlVzZSkKICAgICAsIG1fc2Vzc2lvbklEKHNlc3Np
b25JRCkKLSAgICAsIG1fcXVvdGFNYW5hZ2VyR2V0dGVyKFdURk1vdmUocXVvdGFNYW5hZ2VyR2V0
dGVyKSkKKyAgICAsIG1fc3BhY2VSZXF1ZXN0ZXIoV1RGTW92ZShzcGFjZVJlcXVlc3RlcikpCiB7
CiB9CiAKLUlEQlNlcnZlcjo6SURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmIHF1
b3RhTWFuYWdlckdldHRlcikKK0lEQlNlcnZlcjo6SURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VRdW90
YU1hbmFnZXJTcGFjZVJlcXVlc3RlciYmIHNwYWNlUmVxdWVzdGVyKQogICAgIDogQ3Jvc3NUaHJl
YWRUYXNrSGFuZGxlcigiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIsIEF1dG9kcmFpbmVkUG9vbEZv
clJ1bkxvb3A6OlVzZSkKICAgICAsIG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKICAgICAsIG1fZGF0
YWJhc2VEaXJlY3RvcnlQYXRoKGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKLSAgICAsIG1fcXVvdGFN
YW5hZ2VyR2V0dGVyKFdURk1vdmUocXVvdGFNYW5hZ2VyR2V0dGVyKSkKKyAgICAsIG1fc3BhY2VS
ZXF1ZXN0ZXIoV1RGTW92ZShzcGFjZVJlcXVlc3RlcikpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwg
IklEQlNlcnZlciBjcmVhdGVkIGF0IHBhdGggJXMiLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgudXRm
OCgpLmRhdGEoKSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZJREJTZXJ2ZXI6OnVwZ3JhZGVGaWxlc0lmTmVjZXNzYXJ5KSk7CkBAIC02ODMsMTU3
ICs2ODMsMjQgQEAgdm9pZCBJREJTZXJ2ZXI6OnBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFiYXNl
c0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3IKIAogdm9pZCBJREJTZXJ2ZXI6OmRp
ZFBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFiYXNlcyh1aW50NjRfdCBjYWxsYmFja0lEKQogewot
ICAgIGZvciAoYXV0byYgdXNlciA6IG1fcXVvdGFVc2Vycy52YWx1ZXMoKSkKLSAgICAgICAgdXNl
ci0+cmVzZXRTcGFjZVVzZWQoKTsKLQogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2RlbGV0ZURhdGFi
YXNlQ29tcGxldGlvbkhhbmRsZXJzLnRha2UoY2FsbGJhY2tJRCk7CiAgICAgQVNTRVJUKGNhbGxi
YWNrKTsKICAgICBjYWxsYmFjaygpOwogfQogCi1JREJTZXJ2ZXI6OlF1b3RhVXNlcjo6UXVvdGFV
c2VyKElEQlNlcnZlciYgc2VydmVyLCBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBtYW5hZ2VyLCBDbGll
bnRPcmlnaW4mJiBvcmlnaW4pCi0gICAgOiBtX3NlcnZlcihzZXJ2ZXIpCi0gICAgLCBtX21hbmFn
ZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCi0gICAgLCBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
Ci0gICAgLCBtX2lzSW5pdGlhbGl6ZWQobV9zZXJ2ZXIubV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KSkKLXsKLSAgICBpZiAobWFuYWdlcikKLSAgICAgICAgbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7
Ci19Ci0KLUlEQlNlcnZlcjo6UXVvdGFVc2VyOjp+UXVvdGFVc2VyKCkKLXsKLSAgICBpZiAobV9t
YW5hZ2VyKQotICAgICAgICBtX21hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotfQotCi12b2lk
IElEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCgpCi17Ci0gICAgbV9zcGFjZVVz
ZWQgPSAwOwotCi0gICAgaWYgKCFtX21hbmFnZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX3NlcnZlci5tX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIW1faXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KCFtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2spOwotCi0gICAgbV9pc0luaXRpYWxpemVkID0gZmFs
c2U7Ci0KLSAgICAvLyBEbyBhZGQvcmVtb3ZlIHRvIHRyaWdnZXIgY2FsbCB0byB3aGVuSW5pdGlh
bGl6ZWQuCi0gICAgbV9tYW5hZ2VyLT5yZW1vdmVVc2VyKCp0aGlzKTsKLSAgICBtX21hbmFnZXIt
PmFkZFVzZXIoKnRoaXMpOwotfQotCi12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRl
U3BhY2VVc2VkKCkKLXsKLSAgICByZXNldFNwYWNlVXNlZCgpOwotfQotCi12b2lkIElEQlNlcnZl
cjo6UXVvdGFVc2VyOjppbmNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKQotewotICAgIGlm
ICghbV9pc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fc3BhY2VV
c2VkICsgc2l6ZSA+IG1fc3BhY2VVc2VkKTsKLSAgICBtX3NwYWNlVXNlZCArPSBzaXplOwotfQot
dm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6ZGVjcmVhc2VTcGFjZVVzZWQodWludDY0X3Qgc2l6
ZSkKLXsKLSAgICBpZiAoIW1faXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFT
U0VSVChtX3NwYWNlVXNlZCA+PSBzaXplKTsKLSAgICBtX3NwYWNlVXNlZCAtPSBzaXplOwotfQot
Ci12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjp3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAgIGlmIChtX2lzSW5pdGlhbGl6ZWQpIHsK
LSAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2luaXRp
YWxpemF0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKLSAgICBtX3NlcnZlci5zdGFy
dENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihtX29yaWdpbik7Ci19Ci0KLXZvaWQgSURCU2Vy
dmVyOjpRdW90YVVzZXI6OmluaXRpYWxpemVTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKQot
ewotICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQgfHwgIW1fZXN0aW1hdGVkU3BhY2VJbmNyZWFz
ZSk7Ci0gICAgbV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7Ci0gICAgbV9pc0luaXRpYWxpemVkID0g
dHJ1ZTsKLQotICAgIGlmIChhdXRvIGNhbGxiYWNrID0gV1RGTW92ZShtX2luaXRpYWxpemF0aW9u
Q2FsbGJhY2spKQotICAgICAgICBjYWxsYmFjaygpOwotfQotCi1JREJTZXJ2ZXI6OlF1b3RhVXNl
ciYgSURCU2VydmVyOjplbnN1cmVRdW90YVVzZXIoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4p
Ci17Ci0gICAgcmV0dXJuICptX3F1b3RhVXNlcnMuZW5zdXJlKG9yaWdpbiwgW3RoaXMsICZvcmln
aW5dIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UXVvdGFVc2VyPigqdGhpcywgbV9xdW90
YU1hbmFnZXJHZXR0ZXIobV9zZXNzaW9uSUQsIG9yaWdpbiksIENsaWVudE9yaWdpbiB7IG9yaWdp
biB9KTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpzdGFy
dENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikK
LXsKLSAgICBBU1NFUlQoIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpOwotICAgIHBvc3REYXRh
YmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpjb21wdXRl
U3BhY2VVc2VkRm9yT3JpZ2luLCBvcmlnaW4pKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OmNvbXB1
dGVTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCitTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBJREJTZXJ2ZXI6OnJlcXVlc3RTcGFjZShjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgdGFza1NpemUpCiB7CiAgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7Ci0KLSAgICBhdXRvIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCA9IHRoaXMtPmRh
dGFiYXNlRGlyZWN0b3J5UGF0aElzb2xhdGVkQ29weSgpOwotICAgIGF1dG8gb2xkVmVyc2lvbk9y
aWdpbkRpcmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlS
ZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCBkYXRh
YmFzZURpcmVjdG9yeVBhdGgsICJ2MCIpOwotICAgIGF1dG8gbmV3VmVyc2lvbk9yaWdpbkRpcmVj
dG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRv
Um9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCBkYXRhYmFzZURpcmVj
dG9yeVBhdGgsICJ2MSIpOwotICAgIGF1dG8gc2l6ZSA9IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KSArIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9u
T3JpZ2luRGlyZWN0b3J5KTsKLQotICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZv
ck9yaWdpbiwgb3JpZ2luLCBzaXplKSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpmaW5pc2hDb21w
dXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2
NF90IHNwYWNlVXNlZCkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbml0aWFsaXpl
U3BhY2VVc2VkKHNwYWNlVXNlZCk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpyZXF1ZXN0U3BhY2Uo
Y29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJiBjYWxsYmFjaykK
LXsKLSAgICBhdXRvKiBxdW90YU1hbmFnZXIgPSBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5tYW5h
Z2VyKCk7Ci0gICAgaWYgKCFxdW90YU1hbmFnZXIpIHsKLSAgICAgICAgY2FsbGJhY2soU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgcXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2UodGFza1NpemUsIFdURk1vdmUoY2FsbGJh
Y2spKTsKKyAgICByZXR1cm4gbV9zcGFjZVJlcXVlc3RlcihvcmlnaW4sIHRhc2tTaXplKTsKIH0K
IAotdm9pZCBJREJTZXJ2ZXI6OnJlc2V0U3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3Jp
Z2luKQordWludDY0X3QgSURCU2VydmVyOjpkaXNrVXNhZ2UoY29uc3QgU3RyaW5nJiByb290RGly
ZWN0b3J5LCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAgICBpZiAoYXV0byogdXNl
ciA9IG1fcXVvdGFVc2Vycy5nZXQob3JpZ2luKSkKLSAgICAgICAgdXNlci0+cmVzZXRTcGFjZVVz
ZWQoKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OmluY3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVu
dE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzaXplKQotewotICAgIGVuc3VyZVF1b3RhVXNlcihv
cmlnaW4pLmluY3JlYXNlU3BhY2VVc2VkKHNpemUpOwotfQotCi12b2lkIElEQlNlcnZlcjo6ZGVj
cmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNpemUp
Ci17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuZGVjcmVhc2VTcGFjZVVzZWQoc2l6ZSk7
Ci19Ci0KLXZvaWQgSURCU2VydmVyOjppbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgdGFza1NpemUpCi17Ci0gICAgZW5zdXJlUXVv
dGFVc2VyKG9yaWdpbikuaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodGFza1NpemUpOwotfQor
ICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi12b2lkIElEQlNlcnZlcjo6ZGVjcmVhc2VQ
b3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNw
YWNlVXNlZCkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5kZWNyZWFzZVBvdGVudGlh
bFNwYWNlVXNlZChzcGFjZVVzZWQpOworICAgIGF1dG8gb2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9y
eSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9v
dChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCByb290RGlyZWN0b3J5LCAi
djAiKTsKKyAgICBhdXRvIG5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlk
ZW50aWZpZXI6OmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdp
biwgb3JpZ2luLmNsaWVudE9yaWdpbiwgcm9vdERpcmVjdG9yeSwgInYxIik7CisgICAgcmV0dXJu
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShvbGRWZXJz
aW9uT3JpZ2luRGlyZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6
ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKIH0KIAogdm9pZCBJREJT
ZXJ2ZXI6OnVwZ3JhZGVGaWxlc0lmTmVjZXNzYXJ5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCBkM2EyMjNkOTMyZDkx
NTlkNTQ2NjYyOWY3MTdlZmZiNTc3NDEzY2FmLi4wNmYzMTMyMTJjOWY5NGIyZmRmMzhiMmNmNGEx
MjAwNTUxMzZhMzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiSURCQ29u
bmVjdGlvblRvQ2xpZW50LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCiAj
aW5jbHVkZSAiU3RvcmFnZVF1b3RhTWFuYWdlci5oIgotI2luY2x1ZGUgIlN0b3JhZ2VRdW90YVVz
ZXIuaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlVuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0aXZpdHku
aD4KQEAgLTU4LDkgKzU3LDkgQEAgZW51bSBjbGFzcyBTaG91bGRGb3JjZVN0b3AgOiBib29sIHsg
Tm8sIFllcyB9OwogCiBjbGFzcyBJREJTZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2
ZXI+LCBwdWJsaWMgQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlciwgcHVibGljIENhbk1ha2VXZWFrUHRy
PElEQlNlcnZlcj4gewogcHVibGljOgotICAgIHVzaW5nIFF1b3RhTWFuYWdlckdldHRlciA9IFdU
Rjo6RnVuY3Rpb248U3RvcmFnZVF1b3RhTWFuYWdlciooUEFMOjpTZXNzaW9uSUQsIGNvbnN0IENs
aWVudE9yaWdpbiYpPjsKLSAgICBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKFBBTDo6U2Vz
c2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKKyAgICB1c2luZyBTdG9y
YWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXIgPSBGdW5jdGlvbjxTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpEZWNpc2lvbihjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzcGFjZVJlcXVlc3Rl
ZCk+OworICAgIHN0YXRpYyBSZWY8SURCU2VydmVyPiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIFN0
b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVy
JiYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZWdpc3RlckNvbm5lY3Rpb24oSURCQ29u
bmVjdGlvblRvQ2xpZW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1bnJlZ2lzdGVyQ29u
bmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmKTsKQEAgLTExMSwyMSArMTEwLDE1IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9k
aWZpZWRTaW5jZShXYWxsVGltZSwgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9y
aWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mLCBGdW5jdGlvbjx2b2lkICgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIHZvaWQgcmVxdWVzdFNwYWNlKGNvbnN0IENs
aWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0
b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJik7Ci0gICAgdm9pZCBpbmNyZWFzZVBvdGVu
dGlhbFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7Ci0g
ICAgdm9pZCBkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1
aW50NjRfdCB0YXNrU2l6ZSk7Ci0gICAgdm9pZCBpbmNyZWFzZVNwYWNlVXNlZChjb25zdCBDbGll
bnRPcmlnaW4mLCB1aW50NjRfdCBzaXplKTsKLSAgICB2b2lkIGRlY3JlYXNlU3BhY2VVc2VkKGNv
bnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNpemUpOwotICAgIHZvaWQgcmVzZXRTcGFjZVVz
ZWQoY29uc3QgQ2xpZW50T3JpZ2luJik7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVRdW90YVVzZXIo
Y29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pIHsgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbik7IH0K
KyAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiByZXF1ZXN0U3BhY2UoY29uc3QgQ2xp
ZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB1aW50NjRfdCBkaXNrVXNhZ2UoY29uc3QgU3RyaW5nJiwgY29uc3QgQ2xpZW50T3JpZ2luJik7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyeVN0b3AoU2hvdWxkRm9yY2VTdG9wKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3VtZSgpOwogCiBwcml2YXRlOgotICAgIElEQlNlcnZl
cihQQUw6OlNlc3Npb25JRCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOwotICAgIElEQlNlcnZlcihQ
QUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3Rh
TWFuYWdlckdldHRlciYmKTsKKyAgICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQsIFN0b3JhZ2VR
dW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciYmKTsKKyAgICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9u
SUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5h
Z2VyU3BhY2VSZXF1ZXN0ZXImJik7CiAKICAgICBVbmlxdWVJREJEYXRhYmFzZSYgZ2V0T3JDcmVh
dGVVbmlxdWVJREJEYXRhYmFzZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKICAgICAK
QEAgLTE0Miw1MSArMTM1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZURhdGFiYXNlc01v
ZGlmaWVkU2luY2VGb3JWZXJzaW9uKFdhbGxUaW1lLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lk
IHJlbW92ZURhdGFiYXNlc1dpdGhPcmlnaW5zRm9yVmVyc2lvbihjb25zdCBWZWN0b3I8U2VjdXJp
dHlPcmlnaW5EYXRhPiYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgY2xhc3MgUXVvdGFVc2VyIGZp
bmFsIDogcHVibGljIFN0b3JhZ2VRdW90YVVzZXIgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFF1b3RhVXNlcihJREJTZXJ2ZXImLCBTdG9y
YWdlUXVvdGFNYW5hZ2VyKiwgQ2xpZW50T3JpZ2luJiYpOwotICAgICAgICB+UXVvdGFVc2VyKCk7
Ci0KLSAgICAgICAgU3RvcmFnZVF1b3RhTWFuYWdlciogbWFuYWdlcigpIHsgcmV0dXJuIG1fbWFu
YWdlci5nZXQoKTsgfQotCi0gICAgICAgIHZvaWQgc2V0U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNl
VXNlZCkgeyBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsgfQotICAgICAgICB2b2lkIHJlc2V0U3Bh
Y2VVc2VkKCk7Ci0KLSAgICAgICAgdm9pZCBpbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50
NjRfdCBpbmNyZWFzZSkgeyBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgKz0gaW5jcmVhc2U7IH0K
LSAgICAgICAgdm9pZCBkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRfdCBkZWNyZWFz
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFz
ZSA+PSBkZWNyZWFzZSk7Ci0gICAgICAgICAgICBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgLT0g
ZGVjcmVhc2U7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBpbmNyZWFzZVNwYWNlVXNlZCh1aW50
NjRfdCBzaXplKTsKLSAgICAgICAgdm9pZCBkZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXpl
KTsKLQotICAgICAgICB2b2lkIGluaXRpYWxpemVTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2Vk
KTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZp
bmFsCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOwotICAg
ICAgICAgICAgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlOwot
ICAgICAgICB9Ci0gICAgICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgpIGZpbmFsOwotICAgICAg
ICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFs
OwotCi0gICAgICAgIElEQlNlcnZlciYgbV9zZXJ2ZXI7Ci0gICAgICAgIFdlYWtQdHI8U3RvcmFn
ZVF1b3RhTWFuYWdlcj4gbV9tYW5hZ2VyOwotICAgICAgICBDbGllbnRPcmlnaW4gbV9vcmlnaW47
Ci0gICAgICAgIGJvb2wgbV9pc0luaXRpYWxpemVkIHsgZmFsc2UgfTsKLSAgICAgICAgdWludDY0
X3QgbV9zcGFjZVVzZWQgeyAwIH07Ci0gICAgICAgIHVpbnQ2NF90IG1fZXN0aW1hdGVkU3BhY2VJ
bmNyZWFzZSB7IDAgfTsKLSAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2luaXRp
YWxpemF0aW9uQ2FsbGJhY2s7Ci0gICAgfTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIFF1b3RhVXNl
ciYgZW5zdXJlUXVvdGFVc2VyKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZvaWQgc3RhcnRD
b21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJik7Ci0gICAgdm9p
ZCBjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZv
aWQgZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYs
IHVpbnQ2NF90IHNwYWNlVXNlZCk7Ci0KICAgICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsK
ICAgICBIYXNoTWFwPElEQkNvbm5lY3Rpb25JZGVudGlmaWVyLCBSZWZQdHI8SURCQ29ubmVjdGlv
blRvQ2xpZW50Pj4gbV9jb25uZWN0aW9uTWFwOwogICAgIEhhc2hNYXA8SURCRGF0YWJhc2VJZGVu
dGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8VW5pcXVlSURCRGF0YWJhc2U+PiBtX3VuaXF1ZUlEQkRh
dGFiYXNlTWFwOwpAQCAtMTk4LDggKzE0Niw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgbV9k
YXRhYmFzZURpcmVjdG9yeVBhdGg7CiAKLSAgICBIYXNoTWFwPENsaWVudE9yaWdpbiwgc3RkOjp1
bmlxdWVfcHRyPFF1b3RhVXNlcj4+IG1fcXVvdGFVc2VyczsKLSAgICBRdW90YU1hbmFnZXJHZXR0
ZXIgbV9xdW90YU1hbmFnZXJHZXR0ZXI7CisgICAgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVx
dWVzdGVyIG1fc3BhY2VSZXF1ZXN0ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9Vbmlx
dWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IGZmMDkwZjc2YmI1ZDQyODM5MjY1NjE4OGVm
YTdmZjFjOTQ1YjFjOWMuLjVmZjI5YzcwMjYxMDVhOGVmNmNkMWQ1MjlkNWE3ODQ3NDcwMWM5MTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9Vbmlx
dWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMTg2LDU2ICsxODYsNiBAQCBzdGF0aWMg
aW5saW5lIFN0cmluZyBxdW90YUVycm9yTWVzc2FnZU5hbWUoY29uc3QgY2hhciogdGFza05hbWUp
CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkZhaWxlZCB0byAiLCB0YXNrTmFtZSwgIiBpbiBkYXRh
YmFzZSBiZWNhdXNlIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiIpOwogfQogCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpyZXF1ZXN0U3BhY2UoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBjaGFyKiB0YXNrTmFtZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJiBjYWxsYmFjaykKLXsKLSAgICBt
X3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUsIFt3
ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCB0aGlzLCB3ZWFrVHJhbnNhY3Rpb24gPSBtYWtl
V2Vha1B0cih0cmFuc2FjdGlvbiksIHRhc2tOYW1lLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykgewot
ICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3duRXJyb3IgfSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXdlYWtUcmFuc2FjdGlvbikg
ewotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3duRXJyb3IgfSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fb3duaW5nUG9pbnRlckZv
ckNsb3NlKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgY2xvc2luZyB0aGUgZGF0YWJhc2UsIHRo
ZXJlIGlzIG5vIHBvaW50IGluIHRyeWluZyB0byBtb2RpZnkgdGhlIGRhdGFiYXNlIGF0IHRoYXQg
cG9pbnQuCi0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJvciB9KTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZGVjaXNp
b24pIHsKLSAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueToK
LSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90
YUVycm9yTWVzc2FnZU5hbWUodGFza05hbWUpIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudDoKLSAgICAgICAg
ICAgIGNhbGxiYWNrKElEQkVycm9yIHsgfSk7Ci0gICAgICAgIH07Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OndhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKElEQkVycm9yJiYpPiYmIGNhbGxiYWNrKQotewotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2Fj
dGlvbiwgMCwgIiIsIFdURk1vdmUoY2FsbGJhY2spKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCB1aW50NjRf
dCB0YXNrU2l6ZSkKLXsKLSAgICBtX3NlcnZlci0+aW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQo
bV9pZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6ZSk7Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdT
cGFjZUluY3JlYXNlVGFza3MuY29udGFpbnMoaWRlbnRpZmllcikpOwotICAgIG1fcGVuZGluZ1Nw
YWNlSW5jcmVhc2VUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOwotfQotCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlm
aWVyLCBib29sIGlzVGFza1N1Y2Nlc3NmdWwpCi17Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fcGVu
ZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5maW5kKGlkZW50aWZpZXIpOwotICAgIEFTU0VSVChpdGVy
YXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZW5kKCkpOwotICAgIG1fc2VydmVy
LT5kZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGl0ZXJh
dG9yLT52YWx1ZSk7Ci0gICAgaWYgKGlzVGFza1N1Y2Nlc3NmdWwpCi0gICAgICAgIG1fc2VydmVy
LT5pbmNyZWFzZVNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGl0ZXJhdG9yLT52YWx1
ZSk7Ci0gICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLnJlbW92ZShpdGVyYXRvcik7Ci19
Ci0KIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigp
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUN1cnJlbnRPcGVuT3BlcmF0aW9uICglcCkiLCB0aGlzKTsKQEAgLTI0NiwyOSArMTk2LDcgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkKICAg
ICBpZiAoIW1fZGF0YWJhc2VJbmZvKSB7CiAgICAgICAgIGlmICghbV9pc09wZW5pbmdCYWNraW5n
U3RvcmUpIHsKICAgICAgICAgICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gdHJ1ZTsKLSAg
ICAgICAgICAgIC8vIFdlIGRvIG5vdCBrbm93IHdoZXRoZXIgdGhpcyBpcyBhbiBleGlzdGluZyBv
ciBhIG5ldyBkYXRhYmFzZS4KLSAgICAgICAgICAgIC8vIFdlIHNldCBhIHNtYWxsIGNvc3Qgc28g
dGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gb3BlbiBhbiBpbmZpbml0ZSBudW1iZXIgb2YgZGF0
YWJhc2UuCi0gICAgICAgICAgICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5v
cmlnaW4oKSwgZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCwgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIodGhpcyldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgewotICAgICAgICAgICAgICAg
IGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg
ICAgICAgIGlmIChtX293bmluZ1BvaW50ZXJGb3JDbG9zZSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgICAgICAgICAgc3dpdGNoIChkZWNpc2lvbikgewotICAgICAgICAg
ICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk6IHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBJREJSZXN1bHREYXRhOjplcnJvcihtX2N1cnJl
bnRPcGVuREJSZXF1ZXN0LT5yZXF1ZXN0RGF0YSgpLnJlcXVlc3RJZGVudGlmaWVyKCksIElEQkVy
cm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIm9wZW5EYXRh
YmFzZSIpIH0pOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0LT5j
b25uZWN0aW9uKCkuZGlkT3BlbkRhdGFiYXNlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudE9wZW5EQlJlcXVlc3QgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBt
X2lzT3BlbmluZ0JhY2tpbmdTdG9yZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQ6Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY2FsbGJh
Y2tJRCA9IHRoaXMtPmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgZGVmYXVsdFdy
aXRlT3BlcmF0aW9uQ29zdCk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMtPnBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6Om9w
ZW5CYWNraW5nU3RvcmUsIG1faWRlbnRpZmllciwgY2FsbGJhY2tJRCkpOwotICAgICAgICAgICAg
ICAgIH07Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5n
U3RvcmUsIG1faWRlbnRpZmllcikpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC04MjEsMjMgKzc0OSwzMCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphZGRPcGVuRGF0
YWJhc2VDb25uZWN0aW9uKFJlZjxVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3RpbwogICAgIG1fb3Bl
bkRhdGFiYXNlQ29ubmVjdGlvbnMuYWRkKGFkb3B0UmVmKGNvbm5lY3Rpb24ubGVha1JlZigpKSk7
CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURC
RGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikK
K3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJh
c2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2lu
Z1N0b3JlICglcCkiLCB0aGlzKTsKIAorICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87
CisgICAgbV9vcmlnaW4gPSBpZGVudGlmaWVyLm9yaWdpbigpOworICAgIC8vIFF1b3RhIGNoZWNr
LgorICAgIGF1dG8gZGVjaXNpb24gPSBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCBk
ZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0KTsKKyAgICBpZiAoZGVjaXNpb24gPT0gU3RvcmFnZVF1
b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJv
ciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJPcGVuQmFja2luZ1N0b3JlIikpKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKICAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlKTsKICAgICBtX2Jh
Y2tpbmdTdG9yZSA9IG1fc2VydmVyLT5jcmVhdGVCYWNraW5nU3RvcmUoaWRlbnRpZmllcik7CiAg
ICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IG1fYmFj
a2luZ1N0b3JlLT5zdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucygpOwogICAgIG1fYmFj
a2luZ1N0b3JlSXNFcGhlbWVyYWwgPSBtX2JhY2tpbmdTdG9yZS0+aXNFcGhlbWVyYWwoKTsKIAot
ICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAgYXV0byBlcnJvciA9IG1fYmFj
a2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOwotCi0g
ICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9y
LCAgdGFza0lkZW50aWZpZXIpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3Rv
cmUsIGRhdGFiYXNlSW5mbywgZXJyb3IpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IElE
QkVycm9yJiBlcnJvciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywg
Y29uc3QgSURCRXJyb3ImIGVycm9yKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tp
bmdTdG9yZSIpOwpAQCAtODQ4LDggKzc4Myw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJCiAg
ICAgQVNTRVJUKG1faXNPcGVuaW5nQmFja2luZ1N0b3JlKTsKICAgICBtX2lzT3BlbmluZ0JhY2tp
bmdTdG9yZSA9IGZhbHNlOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodGFza0lkZW50
aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKLQogICAgIGlmIChtX2hhcmRDbG9zZWRGb3JVc2VyRGVs
ZXRlKQogICAgICAgICByZXR1cm47CiAKQEAgLTg2MSwzNyArNzk0LDI2IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhl
ZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSIpOwogCi0g
ICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNp
emUoaW5mbyk7Ci0gICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNrU2l6ZSwgImNyZWF0
ZU9iamVjdFN0b3JlIiwgW3RoaXMsIHRhc2tTaXplLCAmdHJhbnNhY3Rpb24sIGluZm8sIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBp
ZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9y
KSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1
b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0aW9uLCBpbmZvLCBXVEZNb3ZlKGNhbGxiYWNrKSwg
ZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmpl
Y3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5m
bywgRXJyb3JDYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCi17
CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZN
b3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAK
LSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKLSAgICBw
b3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9u
LmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8sICBxdW90YUVycm9yKSk7CisgICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCku
aWRlbnRpZmllcigpLCBpbmZvKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmpl
Y3RTdG9yZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQordm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbykKIHsKICAgICBBU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwogICAgIExPRyhJbmRl
eGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUi
KTsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwoKSkgewotICAgICAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBxdW90
YUVycm9yLCBpbmZvKSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0YXNrU2l6ZSA9
IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5mbyk7CisgICAgaWYg
KG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4sIHRhc2tTaXplKSA9PSBTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVw
bHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90
YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiQ3JlYXRlT2JqZWN0U3RvcmUi
KSksIGluZm8pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFTU0VSVChtX2JhY2tp
bmdTdG9yZSk7CiAgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2Jq
ZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbmZvKTsKIAogICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
LCBpbmZvKSk7CkBAIC05MDIsNyArODI0LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwogCi0gICAgZmlu
aXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7
CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5mby0+YWRkRXhp
c3RpbmdPYmplY3RTdG9yZShpbmZvKTsKIApAQCAtOTE0LDE3ICs4MzUsNiBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiB0cmFuc2FjdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUiKTsKIAot
ICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRy
YW5zYWN0aW9uLCBvYmplY3RTdG9yZU5hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayld
KGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsK
LSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5kZWxldGVPYmplY3RTdG9yZUFmdGVyUXVvdGFD
aGVjayh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlQWZ0
ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBj
b25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKLXsK
ICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1v
dmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAg
LTk2NSwyOCArODc1LDE1IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0
b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFi
YXNlOjpyZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRX
cml0ZU9wZXJhdGlvbkNvc3QgKyBuZXdOYW1lLnNpemVJbkJ5dGVzKCk7Ci0gICAgcmVxdWVzdFNw
YWNlKHRyYW5zYWN0aW9uLCB0YXNrU2l6ZSwgInJlbmFtZU9iamVjdFN0b3JlIiwgW3RoaXMsIHRh
c2tTaXplLCAmdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAg
IGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVkRXJy
b3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5yZW5hbWVPYmplY3RTdG9yZUFmdGVy
UXVvdGFDaGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
bmV3TmFtZSwgV1RGTW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0
X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJy
b3JDYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCi17CiAgICAg
dWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNh
bGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAKLSAgICBJ
REJFcnJvciBlcnJvciA9IHF1b3RhRXJyb3I7CisgICAgSURCRXJyb3IgZXJyb3I7CiAgICAgYXV0
byogaW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmpl
Y3RTdG9yZUlkZW50aWZpZXIpOwogICAgIGlmICghaW5mbykKICAgICAgICAgZXJyb3IgPSBJREJF
cnJvciB7IFVua25vd25FcnJvciwgIkF0dGVtcHQgdG8gcmVuYW1lIG5vbi1leGlzdGFudCBvYmpl
Y3Qgc3RvcmUiX3MgfTsKIAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwg
dGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJh
Y2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBuZXdOYW1lLCBlcnJvcikpOwogfQogCkBAIC05OTUsOCArODkyLDEwIEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvCiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9y
ZSIpOwogCi0gICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICBwb3N0RGF0YWJhc2VU
YXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisg
ICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBuZXdOYW1lLnNp
emVJbkJ5dGVzKCk7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4sIHRh
c2tTaXplKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAg
ICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJhY2tJZGVu
dGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFt
ZSgiUmVuYW1lT2JqZWN0U3RvcmUiKSksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDExLDcgKzkxMCw2IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5k
ZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0
U3RvcmUiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmll
ciwgZXJyb3IuaXNOdWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkKICAgICAgICAgbV9k
YXRhYmFzZUluZm8tPnJlbmFtZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3
TmFtZSk7CiAKQEAgLTEwMjMsMTcgKzkyMSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNs
ZWFyT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3RpCiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVu
aXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVz
dFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJy
b3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAg
ICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy0+Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNo
ZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWlu
dDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxi
YWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xMDY0LDMz
ICs5NTEsMjEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGMKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNy
ZWF0ZUluZGV4Iik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9u
Q29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24s
IHRhc2tTaXplLCAiY3JlYXRlSW5kZXgiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwg
aW5mbywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7
Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4
Y2VlZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5jcmVhdGVJbmRleEFm
dGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIGluZm8sIFdURk1vdmUoY2FsbGJh
Y2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0
ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBFcnJv
ckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1
aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2Fs
bGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0
YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwotICAgIHBvc3REYXRh
YmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50
aWZpZXIoKSwgaW5mbywgcXVvdGFFcnJvcikpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJ
bmRleCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbykp
OwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJv
ciYgcXVvdGFFcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRl
eCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8pCiB7CiAg
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCIpOwogCi0gICAgaWYgKCFxdW90YUVy
cm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUlu
ZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIHF1b3RhRXJyb3IsIGluZm8pKTsKKyAgICBhdXRvIHRh
c2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsK
KyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29yaWdpbiwgdGFza1NpemUpID09IFN0
b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1
b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJDcmVhdGVJbmRleCIpKSwg
aW5mbykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMTEyLDggKzk4Nyw2IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRl
SW5kZXgiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmll
ciwgZXJyb3IuaXNOdWxsKCkpOwotCiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CiAgICAgICAg
IEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7CiAgICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9
IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvLm9iamVjdFN0
b3JlSWRlbnRpZmllcigpKTsKQEAgLTExMjksMTcgKzEwMDIsNiBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgdQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXgiKTsKIAotICAgIHdhaXRGb3JS
ZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwo
KSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNo
ZWNrKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSwgV1RGTW92
ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxl
dGVJbmRleEFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGlu
ZGV4TmFtZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFj
a0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBp
ZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTExODksMjMgKzEwNTEsMTEgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4Iik7
CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05h
bWUuc2l6ZUluQnl0ZXMoKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXpl
LCAicmVuYW1lSW5kZXgiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlz
TnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgdGhpcy0+cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodGFza1NpemUs
IHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3
TmFtZSwgV1RGTW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1Np
emUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVv
dGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIElEQkVycm9yIGVycm9yID0gcXVvdGFFcnJvcjsKKyAgICBJREJFcnJv
ciBlcnJvcjsKICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5m
b0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICBpZiAo
IW9iamVjdFN0b3JlSW5mbykKICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJv
ciwgIkF0dGVtcHQgdG8gcmVuYW1lIGluZGV4IGluIG5vbi1leGlzdGFudCBvYmplY3Qgc3RvcmUi
X3MgfTsKQEAgLTEyMTQsNyArMTA2NCw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFt
ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJECiAgICAg
aWYgKCFpbmRleEluZm8pCiAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3Is
ICJBdHRlbXB0IHRvIHJlbmFtZSBub24tZXhpc3RhbnQgaW5kZXgiX3MgfTsKIAotICAgIHN0YXJ0
U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBvc3REYXRhYmFz
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZp
ZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGVy
cm9yKSk7CiB9CiAKQEAgLTEyMjMsOCArMTA3MiwxMCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
RAogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIp
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAotICAgIGlmICghZXJy
b3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5k
ZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5k
ZXhJZGVudGlmaWVyLCBuZXdOYW1lKSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0
YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBuZXdOYW1lLnNpemVJbkJ5dGVz
KCk7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4sIHRhc2tTaXplKSA9
PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0
YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJv
cihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiUmVuYW1lSW5kZXgi
KSksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyMzksNyArMTA5MCw2IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhl
ZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgiKTsK
IAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Iu
aXNOdWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAgICAgICBhdXRvKiBvYmpl
Y3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUo
b2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlSW5mbyk7
CkBAIC0xMjUzLDUyICsxMTAzLDM5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgcGVy
Zm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CiB9CiAKLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElE
QktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmpl
Y3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxi
YWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1
ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1v
ZGUsIEtleURhdGFDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9y
QWRkIik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCAr
IGVzdGltYXRlU2l6ZShrZXlEYXRhKSArIGVzdGltYXRlU2l6ZSh2YWx1ZSk7Ci0gICAgQVNTRVJU
KG1fZGF0YWJhc2VJbmZvKTsKLSAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZv
LT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShyZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50
aWZpZXIoKSk7Ci0gICAgaWYgKG9iamVjdFN0b3JlKQotICAgICAgICB0YXNrU2l6ZSArPSBvYmpl
Y3RTdG9yZS0+aW5kZXhOYW1lcygpLnNpemUoKSAqIHRhc2tTaXplOwotCi0gICAgcmVxdWVzdFNw
YWNlKHRyYW5zYWN0aW9uLCB0YXNrU2l6ZSwgInB1dE9yQWRkIiwgW3RoaXMsIHRhc2tTaXplLCBy
ZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IG92ZXJ3cml0ZU1vZGVdKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9y
LmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAg
ICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5wdXRPckFkZEFmdGVyUXVvdGFDaGVjayh0YXNr
U2l6ZSwgcmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBXVEZNb3Zl
KGNhbGxiYWNrKSwgZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwdXRPckFkZEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgSURCUmVx
dWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJ
REJWYWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3
cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3Rh
RXJyb3IpCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXpl
KTsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRh
LnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZp
ZXIoKSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIHF1b3RhRXJyb3IpKTsKKyAgICBw
b3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0
aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwga2V5
RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFs
dWUmIG9yaWdpbmFsUmVjb3JkVmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVN
b2RlIG92ZXJ3cml0ZU1vZGUsIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQordm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwg
Y29uc3QgSURCVmFsdWUmIG9yaWdpbmFsUmVjb3JkVmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3Rv
cmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1QdXRPckFkZCIpOwogCi0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAgICBBU1NFUlQo
b2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKLQogICAgIElEQktleURhdGEgdXNlZEtleTsKICAgICBJ
REJFcnJvciBlcnJvcjsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwoKSkgewotICAgICAg
ICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBx
dW90YUVycm9yLCB1c2VkS2V5KSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0YXNr
U2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoa2V5RGF0YSkg
KyBlc3RpbWF0ZVNpemUob3JpZ2luYWxSZWNvcmRWYWx1ZSk7CisgICAgQVNTRVJUKG1fZGF0YWJh
c2VJbmZvKTsKKyAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9y
RXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIGlmIChvYmpl
Y3RTdG9yZSkKKyAgICAgICAgdGFza1NpemUgKz0gb2JqZWN0U3RvcmUtPmluZGV4TmFtZXMoKS5z
aXplKCkgKiB0YXNrU2l6ZTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29yaWdp
biwgdGFza1NpemUpID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7Cisg
ICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZp
ZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJQ
dXRPckFkZCIpKSwgdXNlZEtleSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgQVNT
RVJUKG1fYmFja2luZ1N0b3JlKTsKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsK
ICAgICBpZiAoIW1fYmFja2luZ1N0b3JlKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKElu
ZGV4ZWREQiwgIiVwIC0gVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZDogbV9iYWNr
aW5nU3RvcmUgaXMgbnVsbCIsIHRoaXMpOwogICAgICAgICBlcnJvciA9IElEQkVycm9yKEludmFs
aWRTdGF0ZUVycm9yLCAiQmFja2luZyBzdG9yZSBpcyBpbnZhbGlkIGZvciBjYWxsIHRvIHB1dCBv
ciBhZGQiX3MpOwpAQCAtMTM3MiwyNiArMTIwOSwxNCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
RAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWlu
KSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkIik7CiAKLSAgICBmaW5pc2hT
cGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKICAg
ICBwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3Vs
dEtleSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZChVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJl
cXVlc3REYXRhLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiBnZXRSZWNvcmREYXRhLCBHZXRSZXN1
bHRDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZChj
b25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldFJlY29yZERhdGEm
IGdldFJlY29yZERhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJE
YXRhYmFzZTo6Z2V0UmVjb3JkIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlv
bih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBnZXRSZWNvcmREYXRhLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBp
ZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9y
KSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5n
ZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGdldFJlY29yZERhdGEsIFdURk1v
dmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0
UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwg
Y29uc3QgSURCR2V0UmVjb3JkRGF0YSYgZ2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sg
Y2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAg
ICByZXR1cm47CkBAIC0xNDAyLDIyICsxMjI3LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERh
CiAgICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSUQsIHJlcXVlc3RE
YXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50
aWZpZXIoKSwgZ2V0UmVjb3JkRGF0YS5rZXlSYW5nZURhdGEsIGdldFJlY29yZERhdGEudHlwZSkp
OwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzKFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVx
dWVzdERhdGEsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSwg
R2V0QWxsUmVzdWx0c0NhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
Z2V0QWxsUmVjb3Jkcyhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElE
QkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSwgR2V0QWxsUmVzdWx0c0NhbGxi
YWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3JkcyIpOwogCi0g
ICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1
ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jkc0RhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayld
KGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsK
LSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmdldEFsbFJlY29yZHNBZnRlclF1b3Rh
Q2hlY2socmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHNBZnRl
clF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJH
ZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIEdldEFsbFJlc3VsdHNDYWxsYmFj
ayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE0MzEsNyArMTI0NSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJS
CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRS
ZWNvcmQiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KICAgICBJREJHZXRSZXN1
bHQgcmVzdWx0OwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldFJlY29y
ZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5UmFuZ2VE
YXRhLCB0eXBlLCByZXN1bHQpOwogCkBAIC0xNDQ0LDcgKzEyNTcsNiBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdAogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtR2V0SW5kZXhSZWNvcmQiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0K
ICAgICBJREJHZXRSZXN1bHQgcmVzdWx0OwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5n
U3RvcmUtPmdldEluZGV4UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIHJlY29yZFR5cGUsIHJhbmdlLCByZXN1bHQpOwog
CkBAIC0xNDYzLDkgKzEyNzUsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0
QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiB7CiAgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRzIik7Ci0KKyAgICAKICAgICBBU1NFUlQobV9i
YWNraW5nU3RvcmUpOwotCiAgICAgSURCR2V0QWxsUmVzdWx0IHJlc3VsdDsKICAgICBJREJFcnJv
ciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRBbGxSZWNvcmRzKHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgZ2V0QWxsUmVjb3Jkc0RhdGEsIHJlc3VsdCk7CiAKQEAgLTE0ODAsMjIgKzEyOTEsMTEg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldEFsbFJlY29yZHModWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb24KICAgICBwZXJmb3JtR2V0QWxsUmVzdWx0c0NhbGxi
YWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCk7CiB9CiAKLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmdldENvdW50KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJh
bmdlRGF0YSYgcmFuZ2UsIENvdW50Q2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIENvdW50Q2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRDb3VudCIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBs
ZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgcmFuZ2UsIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICgh
ZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7
IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmdldENv
dW50QWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCByYW5nZSwgV1RGTW92ZShjYWxsYmFjaykp
OwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudEFmdGVyUXVv
dGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJh
bmdlRGF0YSYgcmFuZ2UsIENvdW50Q2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3Qg
Y2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7
CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xNTI0LDIyICsxMzI0
LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRDb3VudCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElECiAgICAgcGVyZm9ybUNvdW50Q2FsbGJhY2so
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgY291bnQpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkZWxldGVSZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiBrZXlSYW5nZURhdGEsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3RE
YXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgRXJyb3JDYWxsYmFjayBj
YWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZCIpOwogCi0gICAgd2Fp
dEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0
YSwga2V5UmFuZ2VEYXRhLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJy
b3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAg
ICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy0+ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRh
LCBrZXlSYW5nZURhdGEsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJl
cXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURh
dGEsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9
IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFj
YWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xNTUyLDcgKzEzNDEsNiBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSQogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkIik7CiAKICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFj
a2luZ1N0b3JlLT5kZWxldGVSYW5nZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgcmFuZ2UpOwotCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRl
UmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKSk7CiB9CiAKQEAgLTE1NjQsMjIgKzEz
NTIsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnMKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFj
ayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6b3BlbkN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
Y29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJDdXJzb3JJbmZvJiBp
bmZvLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
Om9wZW5DdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJD
dXJzb3JJbmZvJiBpbmZvLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURC
RGF0YWJhc2U6Om9wZW5DdXJzb3IiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0
aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGluZm8sIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJy
b3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0p
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPm9wZW5DdXJz
b3JBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGluZm8sIFdURk1vdmUoY2FsbGJhY2spKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvckFmdGVyUXVv
dGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkN1cnNv
ckluZm8mIGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90
IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykp
OwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTYwNSwyMiArMTM4
MiwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtT3BlbkN1cnNvcih1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgcGVyZm9ybUdldFJlc3VsdENhbGxi
YWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCk7CiB9CiAKLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURC
SXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYg
cmVxdWVzdERhdGEsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhLCBHZXRSZXN1bHRD
YWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IiKTsK
IAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywg
cmVxdWVzdERhdGEsIGRhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBl
cnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAg
ICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIHRoaXMtPml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hlY2socmVx
dWVzdERhdGEsIGRhdGEsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJS
ZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRh
LCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lE
ID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAo
IWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTE2ODQsMTcgKzE0NTAsNiBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdAogCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29u
bmVjdGlvbigpLmRhdGFiYXNlKCkgPT0gdGhpcyk7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNl
Q29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFl
cnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNvbW1pdFRyYW5z
YWN0aW9uQWZ0ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9uLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uQWZ0
ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBF
cnJvckNhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9y
ZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJh
Y2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTcxNSw5ICsxNDcwLDYgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2EKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5z
YWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpCiB7Ci0gICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7Ci0gICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1Db21taXRUcmFuc2FjdGlvbiAtICVzIiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdT
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5n
U3RvcmUtPmNvbW1pdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgcG9z
dERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSWRlbnRpZmll
ciwgZXJyb3IsIHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwogfQpAQCAtMTc0OCwyNCArMTUwMCwx
MyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24o
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLAogICAgIHRyYW5zYWN0aW9uQ29tcGxldGVkKG1f
ZmluaXNoaW5nVHJhbnNhY3Rpb25zLnRha2UodHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiB9CiAK
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdhaXRGb3JQZW5kaW5nVGFza3Mgd2FpdEZvclBl
bmRpbmdUYXNrcywgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9y
dFRyYW5zYWN0aW9uIC0gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dp
bmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5kYXRh
YmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwogCi0gICAgaWYgKHdhaXRGb3JQ
ZW5kaW5nVGFza3MgPT0gV2FpdEZvclBlbmRpbmdUYXNrczo6WWVzKSB7Ci0gICAgICAgIHdhaXRG
b3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9u
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewot
ICAgICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIGNhbGxi
YWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB0aGlzLT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBXYWl0
Rm9yUGVuZGluZ1Rhc2tzOjpObywgV1RGTW92ZShjYWxsYmFjaykpOwotICAgICAgICB9KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNh
bGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJ
RCkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCBlYzNmYzBjNzNl
YTMwZTI0ZTdhMGNlZTU4ODlmMzk2MWYwY2M0YzI3Li44ZTgyYTgxNDAwYzlhNzE2NDQxYTA2OTk3
Y2VkZTNmMDMyOGM1YjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAtNDQsNiArNDQsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBDbGllbnRPcmlnaW47CiBjbGFzcyBJ
REJFcnJvcjsKIGNsYXNzIElEQkdldEFsbFJlc3VsdDsKIHN0cnVjdCBJREJHZXRSZWNvcmREYXRh
OwpAQCAtODksMTcgKzkwLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZUluZGV4KFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJJbmRleEluZm8mLCBFcnJvckNhbGxi
YWNrKTsKICAgICB2b2lkIGRlbGV0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1l
LCBFcnJvckNhbGxiYWNrKTsKICAgICB2b2lkIHJlbmFtZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGlu
ZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrKTsKLSAg
ICB2b2lkIHB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJS
ZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIEluZGV4ZWRE
Qjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2spOwotICAgIHZvaWQg
Z2V0UmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0
RGF0YSYsIGNvbnN0IElEQkdldFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAg
dm9pZCBnZXRBbGxSZWNvcmRzKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJ
REJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgR2V0QWxsUmVzdWx0
c0NhbGxiYWNrKTsKLSAgICB2b2lkIGdldENvdW50KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIENvdW50
Q2FsbGJhY2spOwotICAgIHZvaWQgZGVsZXRlUmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEVy
cm9yQ2FsbGJhY2spOwotICAgIHZvaWQgb3BlbkN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJDdXJzb3JJbmZvJiwgR2V0
UmVzdWx0Q2FsbGJhY2spOwotICAgIHZvaWQgaXRlcmF0ZUN1cnNvcihVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJdGVyYXRlQ3Vy
c29yRGF0YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKKyAgICB2b2lkIHB1dE9yQWRkKGNvbnN0IElE
QlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhl
ZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayk7CisgICAgdm9p
ZCBnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRSZWNvcmREYXRh
JiwgR2V0UmVzdWx0Q2FsbGJhY2spOworICAgIHZvaWQgZ2V0QWxsUmVjb3Jkcyhjb25zdCBJREJS
ZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgR2V0QWxsUmVzdWx0c0Nh
bGxiYWNrKTsKKyAgICB2b2lkIGdldENvdW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3Qg
SURCS2V5UmFuZ2VEYXRhJiwgQ291bnRDYWxsYmFjayk7CisgICAgdm9pZCBkZWxldGVSZWNvcmQo
Y29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFcnJvckNhbGxi
YWNrKTsKKyAgICB2b2lkIG9wZW5DdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJ
REJDdXJzb3JJbmZvJiwgR2V0UmVzdWx0Q2FsbGJhY2spOworICAgIHZvaWQgaXRlcmF0ZUN1cnNv
cihjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwgR2V0
UmVzdWx0Q2FsbGJhY2spOwogICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwotCi0gICAgZW51bSBjbGFzcyBXYWl0
Rm9yUGVuZGluZ1Rhc2tzIHsgTm8sIFllcyB9OwotICAgIHZvaWQgYWJvcnRUcmFuc2FjdGlvbihV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgV2FpdEZvclBlbmRpbmdUYXNrcywgRXJyb3JD
YWxsYmFjayk7CisgICAgdm9pZCBhYm9ydFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mLCBFcnJvckNhbGxiYWNrKTsKIAogICAgIHZvaWQgZGlkRmluaXNoSGFuZGxpbmdW
ZXJzaW9uQ2hhbmdlKFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIHRyYW5zYWN0
aW9uRGVzdHJveWVkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mKTsKQEAgLTEzOSwzNyAr
MTM4LDIwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNjaGVkdWxlU2h1dGRvd25Gb3JDbG9zZSgp
OwogCi0gICAgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0
YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQk9iamVjdFN0
b3JlSW5mbyYsIEVycm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCByZW5h
bWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAg
IHZvaWQgY3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJJbmRleEluZm8mLCBFcnJvckNhbGxi
YWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgcmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hl
Y2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAg
IHZvaWQgcHV0T3JBZGRBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIGNvbnN0IElE
QlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhl
ZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjaywgY29uc3QgSURC
RXJyb3ImKTsKLSAgICB2b2lkIGRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJS
ZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEVycm9yQ2FsbGJhY2spOwotCi0g
ICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIEVycm9yQ2FsbGJh
Y2spOwotICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIEVycm9y
Q2FsbGJhY2spOwotICAgIHZvaWQgZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRSZWNvcmRBZnRlclF1b3Rh
Q2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiwgR2V0
UmVzdWx0Q2FsbGJhY2spOwotICAgIHZvaWQgZ2V0QWxsUmVjb3Jkc0FmdGVyUXVvdGFDaGVjayhj
b25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgR2V0QWxs
UmVzdWx0c0NhbGxiYWNrKTsKLSAgICB2b2lkIGdldENvdW50QWZ0ZXJRdW90YUNoZWNrKGNvbnN0
IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgQ291bnRDYWxsYmFjayk7
Ci0gICAgdm9pZCBvcGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRh
JiwgY29uc3QgSURCQ3Vyc29ySW5mbyYsIEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGl0
ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJ
REJJdGVyYXRlQ3Vyc29yRGF0YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGNvbW1p
dFRyYW5zYWN0aW9uQWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
LCBFcnJvckNhbGxiYWNrKTsKLQogICAgIC8vIERhdGFiYXNlIHRocmVhZCBvcGVyYXRpb25zCiAg
ICAgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7
Ci0gICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYs
IHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKTsKKyAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29u
c3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CiAgICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJhbnNh
Y3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCBwZXJmb3JtQWJvcnRUcmFu
c2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIGJlZ2luVHJhbnNhY3Rp
b25JbkJhY2tpbmdTdG9yZShjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKLSAgICB2b2lkIHBl
cmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJP
YmplY3RTdG9yZUluZm8mLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgcGVyZm9ybUNyZWF0
ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3Jl
SW5mbyYpOwogICAgIHZvaWQgcGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9pZCBwZXJm
b3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElEQkVycm9y
Jik7CiAgICAgdm9pZCBwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwotICAgIHZvaWQgcGVyZm9ybUNy
ZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYsIGNv
bnN0IElEQkVycm9yJik7CisgICAgdm9pZCBwZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJik7CiAgICAgdm9pZCBwZXJmb3JtRGVsZXRl
SW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIpOwogICAgIHZvaWQgcGVyZm9ybVJlbmFtZUlu
ZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0
IElEQkVycm9yJik7Ci0gICAgdm9pZCBwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiwg
Y29uc3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgY29u
c3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIHBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEm
LCBjb25zdCBJREJWYWx1ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKTsK
ICAgICB2b2lkIHBlcmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJREJHZXRS
ZWNvcmREYXRhVHlwZSk7CiAgICAgdm9pZCBwZXJmb3JtR2V0QWxsUmVjb3Jkcyh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYpOwogICAgIHZvaWQgcGVy
Zm9ybUdldEluZGV4UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6Oklu
ZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CkBAIC0xODYsNyArMTY4LDcg
QEAgcHJpdmF0ZToKIAogICAgIC8vIE1haW4gdGhyZWFkIGNhbGxiYWNrcwogICAgIHZvaWQgZGlk
RGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKTsKLSAgICB2b2lkIGRp
ZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3Im
LCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcik7CisgICAgdm9pZCBkaWRPcGVuQmFja2luZ1N0b3Jl
KGNvbnN0IElEQkRhdGFiYXNlSW5mbyYsIGNvbnN0IElEQkVycm9yJik7CiAgICAgdm9pZCBkaWRQ
ZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJFcnJvciYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOwogICAgIHZvaWQgZGlkUGVy
Zm9ybURlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCRXJyb3ImLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZGlk
UGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCRXJyb3ImLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgbmV3TmFtZSk7CkBAIC0yNDUsMTEgKzIyNyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXli
ZUZpbmlzaEhhcmRDbG9zZSgpOwogICAgIGJvb2wgaXNEb25lV2l0aEhhcmRDbG9zZSgpOwogCi0g
ICAgdm9pZCByZXF1ZXN0U3BhY2UoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2
NF90IHRhc2tTaXplLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoSURCRXJyb3ImJik+JiYpOwotICAgIHZvaWQgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBs
ZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoSURCRXJyb3ImJik+JiYpOwotICAgIHZvaWQgc3RhcnRTcGFjZUluY3JlYXNlVGFzayh1aW50
NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrU2l6ZSk7Ci0gICAgdm9pZCBmaW5pc2hTcGFj
ZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCBib29sIGlzVGFza1N1Y2Nlc3NmdWwp
OwotCiAgICAgdm9pZCBjbGVhclRyYW5zYWN0aW9uc09uQ29ubmVjdGlvbihVbmlxdWVJREJEYXRh
YmFzZUNvbm5lY3Rpb24mKTsKIAogICAgIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNh
bGxiYWNrSWRlbnRpZmllcigpOwpAQCAtMzA1LDcgKzI4Miw3IEBAIHByaXZhdGU6CiAKICAgICBI
YXNoU2V0PElEQlJlc291cmNlSWRlbnRpZmllcj4gbV9jdXJzb3JQcmVmZXRjaGVzOwogCi0gICAg
SGFzaE1hcDx1aW50NjRfdCwgdWludDY0X3Q+IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrczsK
KyAgICBDbGllbnRPcmlnaW4gbV9vcmlnaW47CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAKaW5kZXggZmU5
MTBmYWY5ODQ5ZGMyYjA0N2ViYTk3YWU1NjY1NzlmZDEzZDIxMC4uODAwNjA2OTg4MzQ0ZjFiMzli
OGI5ZmJjMTk5OTgyMWQ4MjYyMWI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
Q29ubmVjdGlvbi5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZUNv
bm5lY3Rpb246OmFib3J0VHJhbnNhY3Rpb25XaXRob3V0Q2FsbGJhY2soVW5pcXVlSURCRGF0YWIK
ICAgICBpZiAoIW1fZGF0YWJhc2UpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX2RhdGFi
YXNlLT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBVbmlxdWVJREJEYXRhYmFzZTo6V2Fp
dEZvclBlbmRpbmdUYXNrczo6Tm8sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCB0cmFuc2FjdGlvbklk
ZW50aWZpZXJdKGNvbnN0IElEQkVycm9yJikgeworICAgIG1fZGF0YWJhc2UtPmFib3J0VHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb24sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCB0cmFuc2FjdGlvbklkZW50
aWZpZXJdKGNvbnN0IElEQkVycm9yJikgewogICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbk1h
cC5jb250YWlucyh0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKICAgICAgICAgbV90cmFuc2FjdGlv
bk1hcC5yZW1vdmUodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB9KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAppbmRleCBhOGQyYmRjNzQwYzg5NzFh
NWE3YzA0ZTc2YzAzMjliNDc2YWRjNDI2Li43NmVkZGM0NWIwNzZiZTNlNjk3Mjg0NWQxMWUyMTUw
YjZmMDdkODY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24u
Y3BwCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
YWJvcnQoKQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJh
c2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogCi0gICAgZGF0YWJhc2UtPmFib3J0VHJhbnNh
Y3Rpb24oKnRoaXMsIFVuaXF1ZUlEQkRhdGFiYXNlOjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpZZXMs
IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0oYXV0byYgZXJyb3IpIHsKKyAg
ICBkYXRhYmFzZS0+YWJvcnRUcmFuc2FjdGlvbigqdGhpcywgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpXShhdXRvJiBlcnJvcikgewogICAgICAgICBMT0coSW5kZXhlZERCLCAi
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6YWJvcnQgKGNhbGxiYWNrKSIpOwogICAgICAg
ICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjg2LDcgKzI4Niw3IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6cHV0T3JBZGQoY29uc3QgSURCUmVx
dWVzdERhdGEmIHJlcXVlc3REYXRhLCBjCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VD
b25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAg
ZGF0YWJhc2UtPnB1dE9yQWRkKCp0aGlzLCByZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIG92
ZXJ3cml0ZU1vZGUsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVz
dERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsKKyAgICBkYXRhYmFz
ZS0+cHV0T3JBZGQocmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBl
cnJvciwgY29uc3QgSURCS2V5RGF0YSYga2V5KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRPckFkZCAoY2FsbGJhY2spIik7CiAgICAg
ICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMDcsNyArMzA3LDcg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRSZWNvcmQoY29uc3QgSURC
UmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLAogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNl
Q29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAg
IGRhdGFiYXNlLT5nZXRSZWNvcmQoKnRoaXMsIHJlcXVlc3REYXRhLCBnZXRSZWNvcmREYXRhLCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBl
cnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRhYmFzZS0+Z2V0UmVj
b3JkKHJlcXVlc3REYXRhLCBnZXRSZWNvcmREYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0
JiByZXN1bHQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb246OmdldFJlY29yZCAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMjgsNyArMzI4LDcgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGEKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFi
YXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+Z2V0QWxs
UmVjb3JkcygqdGhpcywgcmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29u
c3QgSURCR2V0QWxsUmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRhYmFzZS0+Z2V0QWxsUmVjb3Jk
cyhyZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jkc0RhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRBbGxS
ZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3JkcyAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICgh
d2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zNDksNyArMzQ5LDcgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0
YSYgcmVxdWVzdERhdGEsIGMKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rp
b24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFz
ZS0+Z2V0Q291bnQoKnRoaXMsIHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCB1aW50
NjRfdCBjb3VudCkgeworICAgIGRhdGFiYXNlLT5nZXRDb3VudChyZXF1ZXN0RGF0YSwga2V5UmFu
Z2VEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRh
XShhdXRvJiBlcnJvciwgdWludDY0X3QgY291bnQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwg
IlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50IChjYWxsYmFjaykiKTsKICAg
ICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM3MCw3ICszNzAs
NyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZChjb25z
dCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdAogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFi
YXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAot
ICAgIGRhdGFiYXNlLT5kZWxldGVSZWNvcmQoKnRoaXMsIHJlcXVlc3REYXRhLCBrZXlSYW5nZURh
dGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1
dG8mIGVycm9yKSB7CisgICAgZGF0YWJhc2UtPmRlbGV0ZVJlY29yZChyZXF1ZXN0RGF0YSwga2V5
UmFuZ2VEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3RE
YXRhXShhdXRvJiBlcnJvcikgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYg
KCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9wZW5DdXJzb3IoY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYXRhLAogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVj
dGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFi
YXNlLT5vcGVuQ3Vyc29yKCp0aGlzLCByZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHdlYWtUaGlz
ID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElE
QkdldFJlc3VsdCYgcmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPm9wZW5DdXJzb3IocmVxdWVzdERh
dGEsIGluZm8sIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERh
dGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvciAo
Y2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC00MTIsNyArNDEyLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpp
dGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGEKICAgICBhdXRvIGRh
dGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRh
dGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+aXRlcmF0ZUN1cnNvcigqdGhpcywgcmVxdWVz
dERhdGEsIGRhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVz
dERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgeworICAgIGRh
dGFiYXNlLT5pdGVyYXRlQ3Vyc29yKHJlcXVlc3REYXRhLCBkYXRhLCBbdGhpcywgd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURC
R2V0UmVzdWx0JiByZXN1bHQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IgKGNhbGxiYWNrKSIpOwogICAgICAgICBp
ZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVy
LmNwcAppbmRleCA5MTExZjU5NzhlM2I4MDYxODU1YzIwZjVhZmFhNWI2NTVkY2NlYTIxLi41ZWMz
Nzk3MTE1Mjk4Y2M5MzExMzM1MDg3MWYxN2UxZjAyODM3NWZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURC
U2VydmVyLmNwcApAQCAtNjEsMzYgKzYxLDM3IEBAIFJlZjxJblByb2Nlc3NJREJTZXJ2ZXI+IElu
UHJvY2Vzc0lEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uCiAK
IEluUHJvY2Vzc0lEQlNlcnZlcjo6fkluUHJvY2Vzc0lEQlNlcnZlcigpID0gZGVmYXVsdDsKIAot
U3RvcmFnZVF1b3RhTWFuYWdlciogSW5Qcm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIoY29u
c3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCitSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gSW5Q
cm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4p
CiB7CiAgICAgcmV0dXJuIG1fcXVvdGFNYW5hZ2Vycy5lbnN1cmUob3JpZ2luLCBbXSB7Ci0gICAg
ICAgIHJldHVybiBtYWtlVW5pcXVlPFN0b3JhZ2VRdW90YU1hbmFnZXI+KFN0b3JhZ2VRdW90YU1h
bmFnZXI6OmRlZmF1bHRRdW90YSgpLCBbXSh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3VycmVu
dFNwYWNlLCB1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBhdXRvIGNhbGxiYWNrKSB7CisgICAgICAg
IHJldHVybiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUoU3RvcmFnZVF1b3RhTWFuYWdlcjo6
ZGVmYXVsdFF1b3RhKCksIFtdIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9LCBb
XSh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3VycmVudFNwYWNlLCB1aW50NjRfdCBzcGFjZUlu
Y3JlYXNlLCBhdXRvIGNhbGxiYWNrKSB7CiAgICAgICAgICAgICBjYWxsYmFjayhxdW90YSArIGN1
cnJlbnRTcGFjZSArIHNwYWNlSW5jcmVhc2UpOwogICAgICAgICB9KTsKLSAgICB9KS5pdGVyYXRv
ci0+dmFsdWUuZ2V0KCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSURCU2VydmVyOjpJREJTZXJ2ZXI6
OlF1b3RhTWFuYWdlckdldHRlciBzdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyKEluUHJvY2Vzc0lE
QlNlcnZlciYgc2VydmVyKQotewotICAgIHJldHVybiBbd2Vha1NlcnZlciA9IG1ha2VXZWFrUHRy
KHNlcnZlcildKFBBTDo6U2Vzc2lvbklELCBjb25zdCBhdXRvJiBvcmlnaW4pIHsKLSAgICAgICAg
cmV0dXJuIHdlYWtTZXJ2ZXIgPyB3ZWFrU2VydmVyLT5xdW90YU1hbmFnZXIob3JpZ2luKSA6IG51
bGxwdHI7Ci0gICAgfTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKIEluUHJvY2Vzc0lE
QlNlcnZlcjo6SW5Qcm9jZXNzSURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKLSAg
ICA6IG1fc2VydmVyKElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklELCBzdG9y
YWdlUXVvdGFNYW5hZ2VyR2V0dGVyKCp0aGlzKSkpCiB7CiAgICAgcmVsYXhBZG9wdGlvblJlcXVp
cmVtZW50KCk7CiAgICAgbV9jb25uZWN0aW9uVG9TZXJ2ZXIgPSBJREJDbGllbnQ6OklEQkNvbm5l
Y3Rpb25Ub1NlcnZlcjo6Y3JlYXRlKCp0aGlzKTsKICAgICBtX2Nvbm5lY3Rpb25Ub0NsaWVudCA9
IElEQlNlcnZlcjo6SURCQ29ubmVjdGlvblRvQ2xpZW50OjpjcmVhdGUoKnRoaXMpOworICAgIG1f
c2VydmVyID0gSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIFt0aGlzLCB3
ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4s
IHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkKSBtdXRhYmxlIHsKKyAgICAgICAgUmVmUHRyPFN0b3Jh
Z2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIgPSB3ZWFrVGhpcyA/IHF1b3RhTWFu
YWdlcihvcmlnaW4pIDogbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VRdW90YU1hbmFn
ZXIgPyBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQo
c3BhY2VSZXF1ZXN0ZWQpIDogU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk7Cisg
ICAgfSk7CiB9CiAKIEluUHJvY2Vzc0lEQlNlcnZlcjo6SW5Qcm9jZXNzSURCU2VydmVyKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgp
Ci0gICAgOiBtX3NlcnZlcihJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwg
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBzdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyKCp0aGlzKSkp
CiB7CiAgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CiAgICAgbV9jb25uZWN0aW9uVG9T
ZXJ2ZXIgPSBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y3JlYXRlKCp0aGlzKTsK
ICAgICBtX2Nvbm5lY3Rpb25Ub0NsaWVudCA9IElEQlNlcnZlcjo6SURCQ29ubmVjdGlvblRvQ2xp
ZW50OjpjcmVhdGUoKnRoaXMpOworICAgIG1fc2VydmVyID0gSURCU2VydmVyOjpJREJTZXJ2ZXI6
OmNyZWF0ZShzZXNzaW9uSUQsIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgW3RoaXMsIHdlYWtUaGlz
ID0gbWFrZVdlYWtQdHIoKnRoaXMpXShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0
X3Qgc3BhY2VSZXF1ZXN0ZWQpIG11dGFibGUgeworICAgICAgICBSZWZQdHI8U3RvcmFnZVF1b3Rh
TWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlciA9IHdlYWtUaGlzID8gcXVvdGFNYW5hZ2VyKG9y
aWdpbikgOiBudWxscHRyOworICAgICAgICByZXR1cm4gc3RvcmFnZVF1b3RhTWFuYWdlciA/IHN0
b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZChzcGFjZVJl
cXVlc3RlZCkgOiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueTsKKyAgICB9KTsK
IH0KIAogSURCQ29ubmVjdGlvbklkZW50aWZpZXIgSW5Qcm9jZXNzSURCU2VydmVyOjppZGVudGlm
aWVyKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAppbmRleCBjN2I1MzIxY2EzNjFjNzQx
ZTUyZDQ1ZWMxOGE4MzE4ZmFkMDgyOWMwLi4wZGQ5NzQ0MjMwOWM4ZTc0YTYwNzY5ODFiZDhlYjkw
ZmE2OTRkNjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCkBAIC02Myw5ICs2Myw4IEBAIHB1
YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2Vy
dmVyJiBjb25uZWN0aW9uVG9TZXJ2ZXIoKSBjb25zdDsKICAgICBJREJTZXJ2ZXI6OklEQkNvbm5l
Y3Rpb25Ub0NsaWVudCYgY29ubmVjdGlvblRvQ2xpZW50KCkgY29uc3Q7Ci0gICAgSURCU2VydmVy
OjpJREJTZXJ2ZXImIHNlcnZlcigpIHsgcmV0dXJuIG1fc2VydmVyLmdldCgpOyB9Ci0KLSAgICBJ
REJTZXJ2ZXI6OklEQlNlcnZlciYgaWRiU2VydmVyKCkgeyByZXR1cm4gbV9zZXJ2ZXIuZ2V0KCk7
IH0KKyAgICBJREJTZXJ2ZXI6OklEQlNlcnZlciYgc2VydmVyKCkgeyByZXR1cm4gKm1fc2VydmVy
OyB9CisgICAgSURCU2VydmVyOjpJREJTZXJ2ZXImIGlkYlNlcnZlcigpIHsgcmV0dXJuICptX3Nl
cnZlcjsgfQogCiAgICAgLy8gSURCQ29ubmVjdGlvblRvU2VydmVyCiAgICAgdm9pZCBkZWxldGVE
YXRhYmFzZShjb25zdCBJREJSZXF1ZXN0RGF0YSYpIGZpbmFsOwpAQCAtMTI1LDE3ICsxMjQsMTcg
QEAgcHVibGljOgogICAgIHZvaWQgcmVmKCkgb3ZlcnJpZGUgeyBSZWZDb3VudGVkPEluUHJvY2Vz
c0lEQlNlcnZlcj46OnJlZigpOyB9CiAgICAgdm9pZCBkZXJlZigpIG92ZXJyaWRlIHsgUmVmQ291
bnRlZDxJblByb2Nlc3NJREJTZXJ2ZXI+OjpkZXJlZigpOyB9CiAKLSAgICBTdG9yYWdlUXVvdGFN
YW5hZ2VyKiBxdW90YU1hbmFnZXIoY29uc3QgQ2xpZW50T3JpZ2luJik7CisgICAgUmVmUHRyPFN0
b3JhZ2VRdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mKTsKIAog
cHJpdmF0ZToKICAgICBleHBsaWNpdCBJblByb2Nlc3NJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQp
OwogICAgIEluUHJvY2Vzc0lEQlNlcnZlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZURpcmVjdG9yeVBhdGgpOwogCi0gICAgUmVmPElEQlNlcnZlcjo6SURCU2VydmVyPiBt
X3NlcnZlcjsKKyAgICBSZWZQdHI8SURCU2VydmVyOjpJREJTZXJ2ZXI+IG1fc2VydmVyOwogICAg
IFJlZlB0cjxJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlcj4gbV9jb25uZWN0aW9uVG9T
ZXJ2ZXI7CiAgICAgUmVmUHRyPElEQlNlcnZlcjo6SURCQ29ubmVjdGlvblRvQ2xpZW50PiBtX2Nv
bm5lY3Rpb25Ub0NsaWVudDsKIAotICAgIEhhc2hNYXA8Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1
ZV9wdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fcXVvdGFNYW5hZ2VyczsKKyAgICBIYXNoTWFw
PENsaWVudE9yaWdpbiwgUmVmUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3F1b3RhTWFuYWdl
cnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGY0OGNmMGY3MzhlNzMwNzMz
YzZjNDMzYjA4OWYwYzk4YjM1NGMwZi4uM2QwMmVkMTRjYzI4ZDQxNDRmZThlYTc3MGRlNmIyODgy
YjA5ZTg4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTEyOSw3ICsxMTI5LDYgQEAKIAkJNDFEMjhEMEQyMTM5RTA1ODAwRjQy
MDZGIC8qIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRDI4RDBCMjEzOUUwMUQwMEY0MjA2RiAvKiBMaWJX
ZWJSVENTdGF0c0NvbGxlY3Rvci5jcHAgKi87IH07CiAJCTQxRDQxQzY3MjI1Njg3NEYwMDY5Nzk0
MiAvKiBTZXJ2aWNlV29ya2VySW50ZXJuYWxzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDFENDFDNjUyMjU2ODU5MjAwNjk3OTQyIC8qIFNlcnZpY2VX
b3JrZXJJbnRlcm5hbHMubW0gKi87IH07CiAJCTQxREU3QzdDMjIyREExNDMwMDUzMkI2NSAvKiBT
dG9yYWdlUXVvdGFNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MURFN0M3QjIyMkRBMTNFMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTQx
REU3QzdEMjIyREExNDgwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MURFN0M3ODIyMkRBMTNDMDA1MzJC
NjUgLyogU3RvcmFnZVF1b3RhVXNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTQxREVGQ0I2MUU1NkMxQkQwMDBEOUU1RiAvKiBKU0RPTU1hcExp
a2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxREVG
Q0I0MUU1NkMxQjkwMDBEOUU1RiAvKiBKU0RPTU1hcExpa2UuaCAqLzsgfTsKIAkJNDFFMUIxRDEw
RkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUUxQjFDQjBGRjU5ODY5MDA1NzZCM0IgLyogQWJz
dHJhY3RXb3JrZXIuaCAqLzsgfTsKIAkJNDFFOURDRTcyMzE5NzRCRjAwRjM1OTQ5IC8qIEJsb2JM
b2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
RTlEQ0U0MjMxOTczRkUwMEYzNTk0OSAvKiBCbG9iTG9hZGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc0NjYsNyArNzQ2NSw2IEBACiAJCTQx
RDI4RDBDMjEzOUUwMUUwMEY0MjA2RiAvKiBMaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5oOyBw
YXRoID0gbGlid2VicnRjL0xpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxRDQxQzY1MjI1Njg1OTIwMDY5Nzk0MiAvKiBTZXJ2aWNlV29ya2Vy
SW50ZXJuYWxzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Vy
dmljZVdvcmtlckludGVybmFscy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFE
NTFCQjIxRTRFMkU4MTAwMTMxQTVCIC8qIExpYldlYlJUQ0F1ZGlvRm9ybWF0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpYldlYlJUQ0F1ZGlvRm9ybWF0Lmg7IHBhdGggPSBs
aWJ3ZWJydGMvTGliV2ViUlRDQXVkaW9Gb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDFERTdDNzgyMjJEQTEzQzAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YVVzZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVF1b3RhVXNlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MURFN0M3QTIyMkRBMTNEMDA1MzJCNjUgLyogU3RvcmFn
ZVF1b3RhTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
dG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFE
RTdDN0IyMjJEQTEzRTAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVF1b3RhTWFuYWdlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MURFRkNCMjFFNTZDMUI5MDAwRDlFNUYgLyogSlNET01CaW5k
aW5nSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0g
SlNET01CaW5kaW5nSW50ZXJuYWxzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTcxMDQsNyArMTcxMDIsNiBAQAogCQkJCTFBMzc2MzZBMUEyRTY4QkIwMDlBN0VFMiAvKiBTdG9y
YWdlTmFtZXNwYWNlUHJvdmlkZXIuaCAqLywKIAkJCQk0MURFN0M3QTIyMkRBMTNEMDA1MzJCNjUg
LyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8sCiAJCQkJNDFERTdDN0IyMjJEQTEzRTAwNTMy
QjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuaCAqLywKLQkJCQk0MURFN0M3ODIyMkRBMTNDMDA1
MzJCNjUgLyogU3RvcmFnZVF1b3RhVXNlci5oICovLAogCQkJCTUxNjZEM0NDMUU4RUQ0MTEwMEFE
NjJFMyAvKiBTdG9yYWdlVHlwZS5oICovLAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKQEAg
LTMyMjI1LDcgKzMyMjIyLDYgQEAKIAkJCQlDNTBEMEU4MzBGRjQyNzI5MDBBQzI2NDQgLyogU3Rv
cmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzNzYzNkMxQTJFNjhCQjAwOUE3
RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFE
RTdDN0MyMjJEQTE0MzAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTQxREU3QzdEMjIyREExNDgwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1QzlFRjJGMzIxRjA2MTkwMDAzQkRDNTYgLyogU3RvcmFnZVNl
c3Npb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2NkQzQ0QxRThFRDQ4RjAwQUQ2
MkUzIC8qIFN0b3JhZ2VUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NjgyRDIwMDFGNzk3ODMw
MDBDODYzREIgLyogU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaCBpbiBIZWFkZXJzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKaW5kZXggODUy
NTc1MmU2MzM0Nzk1MzBlZjE0ZWNiNzRmODViYWY2OGQ5YzU1Yi4uYTcxODViOTM2MDZiZmNmYzJl
N2FlMjQ0YWJiNWVkYTAxZWUwZDU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VRdW90YU1hbmFnZXIuY3BwCkBAIC0yNywyMTMgKzI3LDEyMCBAQAogI2luY2x1ZGUgIlN0
b3JhZ2VRdW90YU1hbmFnZXIuaCIKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJT
dG9yYWdlUXVvdGFVc2VyLmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3RvcmFnZVF1b3RhTWFuYWdlcjo6flN0b3JhZ2VRdW90
YU1hbmFnZXIoKQorUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+IFN0b3JhZ2VRdW90YU1hbmFnZXI6
OmNyZWF0ZSh1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgUXVvdGFJ
bmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpCiB7Ci0gICAgd2hpbGUg
KCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fcGVuZGluZ1JlcXVlc3Rz
LnRha2VGaXJzdCgpLmNhbGxiYWNrKERlY2lzaW9uOjpEZW55KTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTdG9yYWdlUXVvdGFNYW5hZ2VyKHF1b3RhLCBXVEZNb3ZlKHVzYWdlR2V0dGVyKSwg
V1RGTW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKSkpOwogfQogCi11aW50NjRfdCBTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpzcGFjZVVzYWdlKCkgY29uc3QKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OlN0
b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYgdXNhZ2VHZXR0
ZXIsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiBxdW90YUluY3JlYXNlUmVxdWVzdGVyKQorICAg
IDogbV9xdW90YShxdW90YSkKKyAgICAsIG1fdXNhZ2VHZXR0ZXIoV1RGTW92ZSh1c2FnZUdldHRl
cikpCisgICAgLCBtX3F1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIoV1RGTW92ZShxdW90YUluY3JlYXNl
UmVxdWVzdGVyKSkKKyAgICAsIG1fd29ya1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJTdG9yYWdl
UXVvdGFNYW5hZ2VyIEJhY2tncm91bmQgUXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OlNlcmlhbCkp
CisgICAgLCBtX2luaXRpYWxRdW90YShxdW90YSkKIHsKLSAgICB1aW50NjRfdCB1c2FnZSA9IDA7
Ci0gICAgZm9yIChhdXRvJiB1c2VyIDogbV91c2VycykKLSAgICAgICAgdXNhZ2UgKz0gdXNlci0+
c3BhY2VVc2VkKCk7Ci0gICAgcmV0dXJuIHVzYWdlOwogfQogCi12b2lkIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKQordm9pZCBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQodWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQs
IFJlcXVlc3RDYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIGlmICghbV9xdW90YSkKLSAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBhdXRvIGRlZmF1
bHRRdW90YVN0ZXAgPSBtX3F1b3RhIC8gMTA7Ci0gICAgbV9xdW90YSA9IHN0ZDo6bWF4KG1fcXVv
dGEsIGRlZmF1bHRRdW90YVN0ZXAgKiAoKHNwYWNlVXNhZ2UoKSAvIGRlZmF1bHRRdW90YVN0ZXAp
ICsgMSkpOwotfQotCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmluaXRpYWxpemVVc2Vyc0lm
TmVlZGVkKCkKLXsKLSAgICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxTdG9yYWdlUXVvdGFVc2VyKj4gdXNl
cnNUb0luaXRpYWxpemU7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IG1fcGVuZGluZ0luaXRp
YWxpemF0aW9uVXNlcnMpIHsKLSAgICAgICAgaWYgKGtleVZhbHVlLnZhbHVlID09IFdoZW5Jbml0
aWFsaXplZENhbGxlZDo6Tm8pIHsKLSAgICAgICAgICAgIGtleVZhbHVlLnZhbHVlID0gV2hlbklu
aXRpYWxpemVkQ2FsbGVkOjpZZXM7Ci0gICAgICAgICAgICB1c2Vyc1RvSW5pdGlhbGl6ZS5hcHBl
bmQoa2V5VmFsdWUua2V5KTsKKyAgICAvLyBGYXN0IHBhdGguCisgICAgaWYgKG1fcXVvdGFDb3Vu
dERvd25Mb2NrLnRyeUxvY2soKSkgeworICAgICAgICBpZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNl
UmVxdWVzdGVkKSkgeworICAgICAgICAgICAgbV9xdW90YUNvdW50RG93bkxvY2sudW5sb2NrKCk7
CisgICAgICAgICAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOworICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CisgICAgICAgIG1fcXVvdGFDb3VudERvd25Mb2NrLnVubG9jaygpOwog
ICAgIH0KLSAgICBmb3IgKGF1dG8qIHVzZXIgOiB1c2Vyc1RvSW5pdGlhbGl6ZSkgewotICAgICAg
ICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5jb250YWlucyh1c2VyKSkKLSAgICAg
ICAgICAgIGFza1VzZXJUb0luaXRpYWxpemUoKnVzZXIpOwotICAgIH0KKworICAgIG1fd29ya1F1
ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzcGFj
ZVJlcXVlc3RlZCwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgYXV0byBkZWNpc2lvbiA9IHJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZChzcGFj
ZVJlcXVlc3RlZCk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayksIGRlY2lzaW9uXSgpIG11dGFibGUgeworICAgICAgICAgICAgY2FsbGJhY2so
ZGVjaXNpb24pOworICAgICAgICB9KTsKKyAgICB9KTsKIH0KIAotdm9pZCBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjphc2tVc2VyVG9Jbml0aWFsaXplKFN0b3JhZ2VRdW90YVVzZXImIHVzZXIpCitTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3Bh
Y2VPbkJhY2tncm91bmRUaHJlYWQodWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQpCiB7Ci0gICAgdXNl
ci53aGVuSW5pdGlhbGl6ZWQoW3RoaXMsICZ1c2VyLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRo
aXMpXSgpIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgICAgICBpZiAobV9wZW5kaW5nSW5pdGlh
bGl6YXRpb25Vc2Vycy5yZW1vdmUoJnVzZXIpKQotICAgICAgICAgICAgbV91c2Vycy5hZGQoJnVz
ZXIpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcXVvdGFDb3VudERvd25Mb2NrKTsKIAotICAg
ICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgcmV0dXJuOworICAgIGlmICh0cnlHcmFudFJlcXVlc3Qoc3BhY2VSZXF1ZXN0ZWQpKQor
ICAgICAgICByZXR1cm4gRGVjaXNpb246OkdyYW50OwogCi0gICAgICAgIC8vIE1ha2Ugc3VyZSBx
dW90YSBpcyBzZXQgYmVmb3JlIGhhbmRsaW5nIGZpcnN0IHJlcXVlc3QuCi0gICAgICAgIGlmICht
X3N0YXRlID09IFN0YXRlOjpVbmluaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICB1cGRhdGVRdW90
YUJhc2VkT25TcGFjZVVzYWdlKCk7Ci0gICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6Ok1ha2lu
Z0RlY2lzaW9uRm9yUmVxdWVzdDsKLSAgICAgICAgfQorICAgIG1fdXNhZ2UgPSBtX3VzYWdlR2V0
dGVyKCk7CisgICAgdXBkYXRlUXVvdGFCYXNlZE9uVXNhZ2UoKTsKKyAgICBtX3F1b3RhQ291bnRE
b3duID0gbV91c2FnZSA8IG1fcXVvdGEgPyBtX3F1b3RhIC0gbV91c2FnZSA6IDA7CisgICAgaWYg
KHRyeUdyYW50UmVxdWVzdChzcGFjZVJlcXVlc3RlZCkpCisgICAgICAgIHJldHVybiBEZWNpc2lv
bjo6R3JhbnQ7CiAKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyh7IH0pOwotICAgIH0p
OwotfQorICAgIC8vIEJsb2NrIHRoaXMgdGhyZWFkIHVudGlsIGdldHRpbmcgZGVjc2lvbiBmb3Ig
cXVvdGEgaW5jcmVhc2UuCisgICAgQmluYXJ5U2VtYXBob3JlIHNlbWFwaG9yZTsKKyAgICBjYWxs
T25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNwYWNl
UmVxdWVzdGVkLCAmc2VtYXBob3JlXSgpIG11dGFibGUgeworICAgICAgICBSRUxFQVNFX0xPRyhT
dG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyIGFza3MgZm9yIHF1b3RhIGluY3JlYXNl
ICUiIFBSSXU2NCwgdGhpcywgc3BhY2VSZXF1ZXN0ZWQpOworICAgICAgICBtX3F1b3RhSW5jcmVh
c2VSZXF1ZXN0ZXIobV9xdW90YSwgbV91c2FnZSwgc3BhY2VSZXF1ZXN0ZWQsIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksICZzZW1hcGhvcmVdKE9wdGlvbmFsPHVpbnQ2NF90
PiBuZXdRdW90YSkgbXV0YWJsZSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAi
JXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyIHJlY2VpdmVzIHF1b3RhIGluY3JlYXNlIHJlc3BvbnNl
ICUiIFBSSXU2NCwgdGhpcywgbmV3UXVvdGEgPyAqbmV3UXVvdGEgOiAwKTsKKyAgICAgICAgICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YWRk
VXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQotewotICAgIEFTU0VSVCghbV9wZW5kaW5nSW5p
dGlhbGl6YXRpb25Vc2Vycy5jb250YWlucygmdXNlcikpOwotICAgIEFTU0VSVCghbV91c2Vycy5j
b250YWlucygmdXNlcikpOwotICAgIG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuYWRkKCZ1
c2VyLCBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ6Ok5vKTsKKyAgICAgICAgICAgIGlmIChuZXdRdW90
YSkKKyAgICAgICAgICAgICAgICBtX3F1b3RhID0gKm5ld1F1b3RhOwogCi0gICAgaWYgKCFtX3Bl
bmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIGFza1VzZXJUb0luaXRpYWxpemUodXNl
cik7Ci19CisgICAgICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CisgICAgICAgIH0pOworICAg
IH0pOwogCi1ib29sIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSh1
aW50NjRfdCBzcGFjZUluY3JlYXNlKSBjb25zdAotewotICAgIGlmICghc3BhY2VJbmNyZWFzZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNlbWFwaG9yZS53YWl0KCk7CiAKLSAgICByZXR1
cm4gc3BhY2VVc2FnZSgpICsgc3BhY2VJbmNyZWFzZSA+IG1fcXVvdGE7CisgICAgbV91c2FnZSA9
IG1fdXNhZ2VHZXR0ZXIoKTsKKyAgICBtX3F1b3RhQ291bnREb3duID0gbV91c2FnZSA8IG1fcXVv
dGEgPyBtX3F1b3RhIC0gbV91c2FnZSA6IDA7CisgICAgcmV0dXJuIHRyeUdyYW50UmVxdWVzdChz
cGFjZVJlcXVlc3RlZCkgPyBEZWNpc2lvbjo6R3JhbnQgOiBEZWNpc2lvbjo6RGVueTsKIH0KIAot
dm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKFN0b3JhZ2VRdW90YVVzZXImIHVz
ZXIpCitib29sIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnRyeUdyYW50UmVxdWVzdCh1aW50NjRfdCBz
cGFjZVJlcXVlc3RlZCkKIHsKLSAgICBBU1NFUlQobV91c2Vycy5jb250YWlucygmdXNlcikgfHwg
bV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5jb250YWlucygmdXNlcikpOwotICAgIG1fdXNl
cnMucmVtb3ZlKCZ1c2VyKTsKLSAgICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5y
ZW1vdmUoJnVzZXIpICYmIG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIC8vIFdoZW4gYmVpbmcgY2xlYXJlZCwgcXVvdGEgdXNlcnMgbWF5IHJlbW92ZSB0
aGVtc2VsdmVzIGFuZCBhZGQgdGhlbXNlbHZlcyB0byB0cmlnZ2VyIHJlaW5pdGlhbGl6YXRpb24u
Ci0gICAgICAgIC8vIExldCdzIHdhaXQgZm9yIGFkZFVzZXIgdG8gYmUgY2FsbGVkIGJlZm9yZSBw
cm9jZXNzaW5nIHBlbmRpbmcgcmVxdWVzdHMuCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Ro
aXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldIHsKLSAgICAgICAgICAgIGlmICghd2Vh
a1RoaXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAobV9wZW5k
aW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdGhpcy0+
cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyh7IH0pOwotICAgICAgICB9KTsKKyAgICBBU1NFUlQobV9x
dW90YUNvdW50RG93bkxvY2suaXNMb2NrZWQoKSk7CisgICAgaWYgKHNwYWNlUmVxdWVzdGVkIDw9
IG1fcXVvdGFDb3VudERvd24pIHsKKyAgICAgICAgbV9xdW90YUNvdW50RG93biAtPSBzcGFjZVJl
cXVlc3RlZDsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJldHVybiBmYWxzZTsK
IH0KLQotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3Bh
Y2VJbmNyZWFzZSwgUmVxdWVzdENhbGxiYWNrJiYgY2FsbGJhY2spCisgICAgCit2b2lkIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblVzYWdlKCkKIHsKLSAgICBpZiAoIW1f
cGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5h
cHBlbmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghc3BhY2VJbmNyZWFzZSkgewotICAgICAgICBjYWxsYmFj
ayhEZWNpc2lvbjo6R3JhbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW5pdGlh
bGl6ZVVzZXJzSWZOZWVkZWQoKTsKLQotICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25V
c2Vycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3Bh
Y2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpKSB7Ci0gICAg
ICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2Fs
bGJhY2spIH0pOwotCi0gICAgICAgIC8vIFRyeSBwcm9jZXNzaW5nIHJlcXVlc3QgYWdhaW4gYWZ0
ZXIgbWFraW5nIHN1cmUgdXNhZ2UgaXMgYWNjdXJhdGUuCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0
ZTo6Q29tcHV0aW5nU3BhY2VVc2VkOwotICAgICAgICBmb3IgKGF1dG8mIHVzZXIgOiBjb3B5VG9W
ZWN0b3IobV91c2VycykpCi0gICAgICAgICAgICB1c2VyLT5jb21wdXRlU3BhY2VVc2VkKCk7Ci0K
LSAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkFza2luZ0Zvck1v
cmVTcGFjZTsKLSAgICAgICAgYXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwotICAgICAg
ICByZXR1cm47CisgICAgLy8gV2hlbiBTdG9yYWdlUXVvdGFNYW5hZ2VyIGlzIHVzZWQgZm9yIHRo
ZSBmaXJzdCB0aW1lLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBpdHMgaW5pdGlhbCBxdW90YSBpcyBi
aWdnZXIgdGhhbiBjdXJyZW50IGRpc2sgdXNhZ2UsCisgICAgLy8gYmFzZWQgb24gdGhlIGFzc3Vt
cHRpb24gdGhhdCB0aGUgcXVvdGEgd2FzIGluY3JlYXNlZCB0byBhdCBsZWFzdCB0aGUgZGlzayB1
c2FnZSB1bmRlciB1c2VyJ3MgcGVybWlzc2lvbiBiZWZvcmUuCisgICAgQVNTRVJUKG1fcXVvdGFD
b3VudERvd25Mb2NrLmlzTG9ja2VkKCkpOworICAgIGlmICghbV9xdW90YVVwZGF0ZWRCYXNlZE9u
VXNhZ2UpIHsKKyAgICAgICAgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgPSB0cnVlOworICAg
ICAgICBhdXRvIGRlZmF1bHRRdW90YVN0ZXAgPSBtX3F1b3RhIC8gMTA7CisgICAgICAgIG1fcXVv
dGEgPSBzdGQ6Om1heChtX3F1b3RhLCBkZWZhdWx0UXVvdGFTdGVwICogKChtX3VzYWdlIC8gZGVm
YXVsdFF1b3RhU3RlcCkgKyAxKSk7CiAgICAgfQotCi0gICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtp
bmdEZWNpc2lvbkZvclJlcXVlc3Q7Ci0gICAgY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKIH0K
IAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3Bh
Y2VJbmNyZWFzZSkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90YVVwZGF0ZWRC
YXNlZE9uVXNhZ2VGb3JUZXN0aW5nKCkKIHsKLSAgICBBU1NFUlQoc2hvdWxkQXNrRm9yTW9yZVNw
YWNlKHNwYWNlSW5jcmVhc2UpKTsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5n
Rm9yTW9yZVNwYWNlKTsKLQotICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VR
dW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSAlIiBQUkl1NjQsIHRoaXMsIHNwYWNlSW5jcmVh
c2UpOwotICAgIG1fc3RhdGUgPSBTdGF0ZTo6V2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25z
ZTsKLSAgICBtX3NwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIobV9xdW90YSwgc3BhY2VVc2FnZSgpLCBz
cGFjZUluY3JlYXNlLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKE9wdGlv
bmFsPHVpbnQ2NF90PiBuZXdRdW90YSkgewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSByZWNlaXZlZCByZXNwb25zZSAlIiBQUkl1
NjQsIHRoaXMsIG5ld1F1b3RhID8gKm5ld1F1b3RhIDogMCk7Ci0KLSAgICAgICAgbV9zdGF0ZSA9
IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVz
dHMobmV3UXVvdGEpOwotICAgIH0pOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcXVvdGFDb3Vu
dERvd25Mb2NrKTsKKyAgICBtX3F1b3RhID0gbV9pbml0aWFsUXVvdGE7CisgICAgbV9xdW90YUNv
dW50RG93biA9IDA7CisgICAgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgPSBmYWxzZTsKIH0K
IAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlv
bmFsPHVpbnQ2NF90PiBuZXdRdW90YSkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRR
dW90YUZvclRlc3RpbmcoKQogewotICAgIGlmIChtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChuZXdRdW90YSkKLSAgICAgICAgbV9xdW90YSA9
ICpuZXdRdW90YTsKLQotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpXYWl0aW5nRm9yU3BhY2VJ
bmNyZWFzZVJlc3BvbnNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcGVuZGluZ0lu
aXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlKSB7Ci0gICAgICAgIGF1dG8gcmVx
dWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpOwotICAgICAgICBib29sIHNob3Vs
ZEFsbG93UmVxdWVzdCA9ICFzaG91bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3Jl
YXNlKTsKLQotICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzIGZpcnN0IHJlcXVlc3QgZGVjaXNpb24gaXMg
JWQiLCB0aGlzLCBzaG91bGRBbGxvd1JlcXVlc3QpOwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0
ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgICAgICByZXF1ZXN0LmNhbGxiYWNrKHNo
b3VsZEFsbG93UmVxdWVzdCA/IERlY2lzaW9uOjpHcmFudCA6IERlY2lzaW9uOjpEZW55KTsKLSAg
ICB9Ci0KLSAgICB3aGlsZSAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAg
ICBhdXRvJiByZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMuZmlyc3QoKTsKLQotICAgICAgICBp
ZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHJlcXVlc3Quc3BhY2VJbmNyZWFzZSkpIHsKLSAgICAg
ICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3QpIHsK
LSAgICAgICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKLSAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8mIHVzZXIgOiBjb3B5VG9WZWN0b3IobV91c2VycykpCi0g
ICAgICAgICAgICAgICAgICAgIHVzZXItPmNvbXB1dGVTcGFjZVVzZWQoKTsKLQotICAgICAgICAg
ICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9z
dGF0ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgICAgICB1aW50NjRfdCBz
cGFjZUluY3JlYXNlID0gMDsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcGVuZGluZ1JlcXVlc3Qg
OiBtX3BlbmRpbmdSZXF1ZXN0cykKLSAgICAgICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9IHBl
bmRpbmdSZXF1ZXN0LnNwYWNlSW5jcmVhc2U7Ci0gICAgICAgICAgICBhc2tGb3JNb3JlU3BhY2Uo
c3BhY2VJbmNyZWFzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKLSAgICAgICAgbV9w
ZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCkuY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKLSAg
ICB9CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9xdW90YUNvdW50RG93bkxvY2spOworICAgIG1f
cXVvdGEgPSBtX2luaXRpYWxRdW90YTsKKyAgICBtX3F1b3RhQ291bnREb3duID0gMDsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VR
dW90YU1hbmFnZXIuaAppbmRleCAwOTU2NjMwNmY1NTkxYWJiNTlkMGFmZDhlZWE0ODY3OWE1ZjZj
NjNjLi45YmRmZGQ0N2ExOGExNzZjNWJjMzNmNGI4NjI4OTIyMzRhZDI5YWIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaApAQCAtMjUsNzcgKzI1LDU0
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2xpZW50T3JpZ2luLmgiCiAjaW5jbHVk
ZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9XZWFrUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFN0b3JhZ2VRdW90YVVzZXI7Ci0KLWNsYXNzIFN0b3JhZ2VRdW90
YU1hbmFnZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gewor
Y2xhc3MgU3RvcmFnZVF1b3RhTWFuYWdlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxT
dG9yYWdlUXVvdGFNYW5hZ2VyPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPFN0b3JhZ2VRdW90YU1h
bmFnZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB1c2lu
ZyBTcGFjZUluY3JlYXNlUmVxdWVzdGVyID0gV1RGOjpGdW5jdGlvbjx2b2lkKHVpbnQ2NF90IHF1
b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8dWludDY0X3Q+KT4mJik+OwotICAgIFN0b3JhZ2VR
dW90YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXImJiBzcGFj
ZUluY3JlYXNlUmVxdWVzdGVyKQotICAgICAgICA6IG1fcXVvdGEocXVvdGEpCi0gICAgICAgICwg
bV9zcGFjZUluY3JlYXNlUmVxdWVzdGVyKFdURk1vdmUoc3BhY2VJbmNyZWFzZVJlcXVlc3Rlcikp
Ci0gICAgewotICAgIH0KLSAgICBXRUJDT1JFX0VYUE9SVCB+U3RvcmFnZVF1b3RhTWFuYWdlcigp
OworICAgIHVzaW5nIFVzYWdlR2V0dGVyID0gRnVuY3Rpb248dWludDY0X3QoKT47CisgICAgdXNp
bmcgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciA9IEZ1bmN0aW9uPHZvaWQodWludDY0X3QgY3VycmVu
dFF1b3RhLCB1aW50NjRfdCBjdXJyZW50VXNhZ2UsIHVpbnQ2NF90IHJlcXVlc3RlZEluY3JlYXNl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVpbnQ2NF90Pik+JiYpPjsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+IGNyZWF0ZSh1aW50
NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmKTsKIAog
ICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YUZyb21Q
ZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkgeyByZXR1cm4gcXVvdGEgLyAxMDsgfQotCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBkZWZhdWx0UXVvdGEoKSB7IHJldHVybiAxMDAw
ICogTUI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5
UXVvdGEoKSB7IHJldHVybiBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3Rh
KGRlZmF1bHRRdW90YSgpKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyKFN0
b3JhZ2VRdW90YVVzZXImKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXIoU3Rv
cmFnZVF1b3RhVXNlciYpOwotCiAgICAgZW51bSBjbGFzcyBEZWNpc2lvbiB7IERlbnksIEdyYW50
IH07CiAgICAgdXNpbmcgUmVxdWVzdENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChE
ZWNpc2lvbik+OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdFNwYWNlKHVpbnQ2NF90
LCBSZXF1ZXN0Q2FsbGJhY2smJik7Ci0gICAgdm9pZCByZXNldFF1b3RhKHVpbnQ2NF90IG5ld1F1
b3RhKSB7IG1fcXVvdGEgPSBuZXdRdW90YTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVx
dWVzdFNwYWNlT25NYWluVGhyZWFkKHVpbnQ2NF90LCBSZXF1ZXN0Q2FsbGJhY2smJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgRGVjaXNpb24gcmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHVp
bnQ2NF90KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9uU3Bh
Y2VVc2FnZSgpOwotCi0gICAgZW51bSBjbGFzcyBTdGF0ZSB7Ci0gICAgICAgIFVuaW5pdGlhbGl6
ZWQsCi0gICAgICAgIENvbXB1dGluZ1NwYWNlVXNlZCwKLSAgICAgICAgV2FpdGluZ0ZvclNwYWNl
SW5jcmVhc2VSZXNwb25zZSwKLSAgICAgICAgQXNraW5nRm9yTW9yZVNwYWNlLAotICAgICAgICBN
YWtpbmdEZWNpc2lvbkZvclJlcXVlc3QsCi0gICAgfTsKLSAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0UXVvdGFV
cGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cmVzZXRRdW90YUZvclRlc3RpbmcoKTsKIAogcHJpdmF0ZToKLSAgICB1aW50NjRfdCBzcGFjZVVz
YWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3Bh
Y2VJbmNyZWFzZSkgY29uc3Q7Ci0gICAgdm9pZCBhc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3Bh
Y2VJbmNyZWFzZSk7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7Ci0gICAg
dm9pZCBhc2tVc2VyVG9Jbml0aWFsaXplKFN0b3JhZ2VRdW90YVVzZXImKTsKKyAgICBTdG9yYWdl
UXVvdGFNYW5hZ2VyKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmLCBRdW90YUluY3JlYXNl
UmVxdWVzdGVyJiYpOworICAgIGJvb2wgdHJ5R3JhbnRSZXF1ZXN0KHVpbnQ2NF90KTsKIAotICAg
IHZvaWQgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4pOworICAgIHZv
aWQgdXBkYXRlUXVvdGFCYXNlZE9uVXNhZ2UoKTsKIAorICAgIExvY2sgbV9xdW90YUNvdW50RG93
bkxvY2s7CisgICAgdWludDY0X3QgbV9xdW90YUNvdW50RG93biB7IDAgfTsKICAgICB1aW50NjRf
dCBtX3F1b3RhIHsgMCB9OworICAgIHVpbnQ2NF90IG1fdXNhZ2UgeyAwIH07CiAKLSAgICBTcGFj
ZUluY3JlYXNlUmVxdWVzdGVyIG1fc3BhY2VJbmNyZWFzZVJlcXVlc3RlcjsKKyAgICBVc2FnZUdl
dHRlciBtX3VzYWdlR2V0dGVyOworICAgIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgbV9xdW90YUlu
Y3JlYXNlUmVxdWVzdGVyOwogCi0gICAgZW51bSBjbGFzcyBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQg
eyBObywgWWVzIH07Ci0gICAgSGFzaE1hcDxTdG9yYWdlUXVvdGFVc2VyKiwgV2hlbkluaXRpYWxp
emVkQ2FsbGVkPiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzOwotICAgIEhhc2hTZXQ8U3Rv
cmFnZVF1b3RhVXNlcio+IG1fdXNlcnM7CisgICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7
CiAKLSAgICBzdHJ1Y3QgUGVuZGluZ1JlcXVlc3QgewotICAgICAgICB1aW50NjRfdCBzcGFjZUlu
Y3JlYXNlOwotICAgICAgICBSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2s7Ci0gICAgfTsKLSAgICBE
ZXF1ZTxQZW5kaW5nUmVxdWVzdD4gbV9wZW5kaW5nUmVxdWVzdHM7CisgICAgYm9vbCBtX3F1b3Rh
VXBkYXRlZEJhc2VkT25Vc2FnZSB7IGZhbHNlIH07CiAKLSAgICBTdGF0ZSBtX3N0YXRlIHsgU3Rh
dGU6OlVuaW5pdGlhbGl6ZWQgfTsKKyAgICAvLyBUZXN0IG9ubHkuCisgICAgdWludDY0X3QgbV9p
bml0aWFsUXVvdGEgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiNzEwY2VlYzYwYzVkZTUwYzYwOWQyMzFiMGYwZGY5Njc0OTQ5NDIwLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgU3RvcmFnZVF1b3RhVXNlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
U3RvcmFnZVF1b3RhVXNlcigpID0gZGVmYXVsdDsKLQotICAgIHZpcnR1YWwgdWludDY0X3Qgc3Bh
Y2VVc2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlU3BhY2VVc2VkKCkg
eyB9OwotICAgIHZpcnR1YWwgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNhbGxiYWNrKSB7IGNhbGxiYWNrKCk7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKaW5kZXggNWYyM2NjNjZhYTExZjdkMjhlNzYxNWNjYjg1MTM2N2MyMDMxNWJlMy4uYzRm
NjA3YTg5ODA0Mjk5MmYyNjZmNDkzOGI2NTM0MDE3NjEwMmEwMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTY1LDYgKzY1LDcgQEAK
ICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVR5cGUuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9ETlMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RlcHJlY2F0ZWRHbG9i
YWxTZXR0aW5ncy5oPgpAQCAtMzE2LDYgKzMxNyw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6Omlu
aXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYm
CiAgICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CiAgICAgc2V0U2Vzc2lvbihz
ZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUocGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7
CiAKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOworICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgcGFy
YW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEs
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdp
blN0b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNo
ZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKwogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCkBAIC0zMjYsNyArMzMwLDYgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKICAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24o
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc2VydmljZVdvcmtlclByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIH0KICNlbmRpZgotICAgIGluaXRpYWxp
emVTdG9yYWdlUXVvdGEocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7CiAK
ICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOwogCkBAIC00MzQsMjggKzQzNywzOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVh
ckNhY2hlZENyZWRlbnRpYWxzKCkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0ZURh
dGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiB7CisgICAg
YXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNz
aW9uSUQ7CisKKyAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBh
cmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlP
cmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKICNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHBhcmFt
ZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgcGFyYW1ldGVycy5pbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25J
RCwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFNFUlZJQ0VfV09SS0VSKQogICAgIGlmIChwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVu
dGl0bGVtZW50KCkpCi0gICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgcGFyYW1ldGVycy5zZXJ2aWNlV29y
a2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZFNlcnZp
Y2VXb3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1h
bmFnZXJTZXQtPmFkZChwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9u
SUQsIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3Rv
cmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBpbml0aWFsaXplU3RvcmFnZVF1
b3RhKHBhcmFtZXRlcnMpOworICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQs
IHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4
dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUocGFyYW1ldGVy
cykpOwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplU3RvcmFnZVF1b3RhKGNv
bnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQordm9pZCBOZXR3b3Jr
UHJvY2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5
UXVvdGEsIGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlJiBjYWNoZVJvb3RQYXRoSGFuZGxlKQogewotICAgIGF1dG8mIG1hbmFnZXJzID0gIG1fc3Rv
cmFnZVF1b3RhTWFuYWdlcnMuZW5zdXJlKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0
ZXJzLnNlc3Npb25JRCwgW10gewotICAgICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcnMg
eyB9OwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBtYW5hZ2Vycy5zZXREZWZhdWx0UXVv
dGFzKHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBlclRoaXJk
UGFydHlPcmlnaW5TdG9yYWdlUXVvdGEpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jayk7CisgICAgYXV0byBbaXRlciwgaXNOZXdFbnRyeV0g
PSBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbZGVmYXVs
dFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjYWNoZVJvb3RQYXRoXSB7CisgICAgICAg
IHJldHVybiBtYWtlVW5pcXVlPFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyPihjYWNoZVJvb3RQ
YXRoLCBkZWZhdWx0UXVvdGEsIGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEpOworICAgIH0pOworICAg
IGlmIChpc05ld0VudHJ5KQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkoY2FjaGVSb290UGF0aEhhbmRsZSk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OnJl
bW92ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkK
K3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xv
Y2spOworICAgIEFTU0VSVChtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5jb250YWlucyhz
ZXNzaW9uSUQpKTsKKyAgICBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5yZW1vdmUoc2Vz
c2lvbklEKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Zm9yRWFjaE5ldHdvcmtTZXNzaW9u
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoTmV0d29ya1Nlc3Npb24mKT4mIGZ1bmN0b3IpCkBAIC01NzYs
OCArNTkwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24oUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklEKQogI2VuZGlmCiAKICAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5yZW1v
dmUoc2Vzc2lvbklEKTsKLQotICAgIG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Np
b25JRCk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMTQ2
OCw5ICsxNDgwLDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2kKICAgICBpZiAod2Vic2l0ZURh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkgJiYgIXNlc3Npb25J
RC5pc0VwaGVtZXJhbCgpKQogICAgICAgICBjbGVhckRpc2tDYWNoZShtb2RpZmllZFNpbmNlLCBb
Y2xlYXJUYXNrc0hhbmRsZXIgPSBXVEZNb3ZlKGNsZWFyVGFza3NIYW5kbGVyKV0geyB9KTsKIAot
ICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhl
ZERCRGF0YWJhc2VzKSB8fCB3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6RE9NQ2FjaGUpKQotICAgICAgICBjbGVhclN0b3JhZ2VRdW90YShzZXNzaW9uSUQpOwotCiAg
ICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpBZENsaWNr
QXR0cmlidXRpb25zKSkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSB0aGlz
LT5uZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICAgICAgbmV0d29ya1Nlc3Npb24t
PmNsZWFyQWRDbGlja0F0dHJpYnV0aW9uKCk7CkBAIC0xNTYzLDE5ICsxNTcyLDYgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgT3B0aW8KICAgICAgICAgfQogICAgICAgICBXZWJDb3JlOjpDcmVkZW50aWFs
U3RvcmFnZTo6cmVtb3ZlU2Vzc2lvbkNyZWRlbnRpYWxzV2l0aE9yaWdpbnMob3JpZ2luRGF0YXMp
OwogICAgIH0KLQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc3RvcmFnZSBxdW90YSBjbGVhcmlu
ZyBmb3IgdGhlc2Ugb3JpZ2lucy4KLX0KLQotdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJTdG9y
YWdlUXVvdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQotewotICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmZpbmQoc2Vzc2lvbklEKTsKLSAgICBpZiAoaXRlcmF0
b3IgPT0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byYgbWFuYWdlcnMgPSBpdGVyYXRvci0+dmFsdWU7Ci0gICAgZm9yIChhdXRvJiBtYW5h
Z2VyIDogbWFuYWdlcnMubWFuYWdlcnNQZXJPcmlnaW4oKSkKLSAgICAgICAgbWFuYWdlci52YWx1
ZS0+cmVzZXRRdW90YShtYW5hZ2Vycy5kZWZhdWx0UXVvdGEobWFuYWdlci5rZXkpKTsKIH0KIAog
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCkBAIC0yMjE3LDEwICsyMjEzLDkg
QEAgUmVmPElEQlNlcnZlcjo6SURCU2VydmVyPiBOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlSURCU2Vy
dmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb24KICAgICAgICAgcGF0aCA9IG1faWRiRGF0YWJhc2VQ
YXRocy5nZXQoc2Vzc2lvbklEKTsKICAgICB9CiAKLSAgICByZXR1cm4gSURCU2VydmVyOjpJREJT
ZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIHBhdGgsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKHRoaXMpXShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IGF1dG8mIG9yaWdpbikg
LT4gU3RvcmFnZVF1b3RhTWFuYWdlciogewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiAmdGhpcy0+c3RvcmFnZVF1b3Rh
TWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbik7CisgICAgcmV0dXJuIElEQlNlcnZlcjo6SURCU2Vy
dmVyOjpjcmVhdGUoc2Vzc2lvbklELCBwYXRoLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cih0aGlzKSwgc2Vzc2lvbklEXShjb25zdCBhdXRvJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlUmVx
dWVzdGVkKSB7CisgICAgICAgIFJlZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBzdG9yYWdlUXVv
dGFNYW5hZ2VyID0gd2Vha1RoaXMgPyB0aGlzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25J
RCwgb3JpZ2luKSA6IG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdG9yYWdlUXVvdGFNYW5hZ2Vy
ID8gc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHNw
YWNlUmVxdWVzdGVkKSA6IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OwogICAg
IH0pOwogfQogCkBAIC0yMzA3LDggKzIzMDIsMTggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRk
SW5kZXhlZERhdGFiYXNlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYK
ICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGhhbmRsZSk7CiAg
ICAgICAgIGlmICghaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIHBvc3RTdG9yYWdlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZOZXR3b3Jr
UHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0cywgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KSk7Cisg
ICAgICAgIHNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoc2Vzc2lvbklE
LCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpOwogICAgIH0KIH0KKwordm9pZCBOZXR3b3JrUHJv
Y2Vzczo6c2V0U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJJREJSb290UGF0aChQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgaWRiUm9vdFBhdGgpCit7CisgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBhdXRv
KiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXJzLmdldChzZXNzaW9uSUQpOworICAgIEFTU0VSVChzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cik7CisgICAgc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPnNldElEQlJvb3RQYXRoKGlkYlJv
b3RQYXRoKTsKK30KKwogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIzMjUsOSArMjMzMCwxOCBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpjbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3RvcmFnZSgpCiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2VGb3JUZXN0aW5n
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7
Ci0gICAgYXV0byYgbWFuYWdlciA9IHN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBvcmln
aW4pOwotICAgIG1hbmFnZXIucmVzZXRRdW90YShtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmZpbmQo
c2Vzc2lvbklEKS0+dmFsdWUuZGVmYXVsdFF1b3RhKG9yaWdpbikpOwotICAgIG1hbmFnZXIudXBk
YXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOworICAgIGF1dG8gc3RvcmFnZVF1b3RhTWFuYWdl
ciA9IHRoaXMtPnN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBvcmlnaW4pOworICAgIHN0
b3JhZ2VRdW90YU1hbmFnZXItPnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGlu
ZygpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJz
TG9jayk7CisgICAgaWYgKGF1dG8qIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyID0gbV9zZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCkpIHsKKyAgICAgICAgZm9yIChh
dXRvIHN0b3JhZ2VRdW90YU1hbmFnZXIgOiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+ZXhp
c3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2VycygpKQorICAgICAgICAgICAgc3RvcmFnZVF1b3RhTWFu
YWdlci0+cmVzZXRRdW90YUZvclRlc3RpbmcoKTsKKyAgICB9CisgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKIH0KIAogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCkBAIC0yNDA0LDYyICsy
NDE4LDM1IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnJlcXVlc3RTdG9yYWdlU3BhY2UoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPCiAgICAgcGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpSZXF1ZXN0U3RvcmFnZVNwYWNlIHsgc2Vzc2lvbklELCBvcmlnaW4sIHF1b3RhLCBjdXJyZW50
U2l6ZSwgc3BhY2VSZXF1aXJlZCB9LCBXVEZNb3ZlKGNhbGxiYWNrKSwgMCk7CiB9CiAKLWNsYXNz
IFF1b3RhVXNlckluaXRpYWxpemVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OlN0b3JhZ2VRdW90
YVVzZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxp
Y2l0IFF1b3RhVXNlckluaXRpYWxpemVyKFN0b3JhZ2VRdW90YU1hbmFnZXImIG1hbmFnZXIpCi0g
ICAgICAgIDogbV9tYW5hZ2VyKG1ha2VXZWFrUHRyKG1hbmFnZXIpKQotICAgIHsKLSAgICAgICAg
bWFuYWdlci5hZGRVc2VyKCp0aGlzKTsKLSAgICB9Ci0KLSAgICB+UXVvdGFVc2VySW5pdGlhbGl6
ZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgICAgIG1fbWFuYWdl
ci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci0gICAgICAgIGlmIChtX2NhbGxiYWNrKQotICAgICAgICAg
ICAgbV9jYWxsYmFjaygpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICAvLyBTdG9yYWdlUXVvdGFV
c2VyIEFQSS4KLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbAotICAgIHsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KK1Jl
ZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVF1b3RhTWFu
YWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2lu
KQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJz
TG9jayk7CisgICAgYXV0byogc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgPSBtX3Nlc3Npb25T
dG9yYWdlUXVvdGFNYW5hZ2Vycy5nZXQoc2Vzc2lvbklEKTsKKyAgICBpZiAoIXNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHZvaWQgd2hl
bkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykgZmluYWwK
LSAgICB7Ci0gICAgICAgIG1fY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKLSAgICB9Cisg
ICAgU3RyaW5nIGlkYlJvb3RQYXRoOworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAg
IGlkYlJvb3RQYXRoID0gc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPmlkYlJvb3RQYXRoKCk7
CisjZW5kaWYKKyAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpVc2FnZUdldHRlciB1c2FnZUdldHRl
ciA9IFtjYWNoZVJvb3RQYXRoID0gc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPmNhY2hlUm9v
dFBhdGgoKS5pc29sYXRlZENvcHkoKSwgaWRiUm9vdFBhdGggPSBpZGJSb290UGF0aC5pc29sYXRl
ZENvcHkoKSwgb3JpZ2luID0gb3JpZ2luLmlzb2xhdGVkQ29weSgpXSgpIHsKKyAgICAgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7ICAgIAogCi0gICAgV2Vha1B0cjxTdG9yYWdlUXVvdGFNYW5h
Z2VyPiBtX21hbmFnZXI7Ci0gICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2NhbGxiYWNr
OwotfTsKKyAgICAgICAgdWludDY0X3QgdXNhZ2UgPSBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6ZGlz
a1VzYWdlKGNhY2hlUm9vdFBhdGgsIG9yaWdpbik7CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCisgICAgICAgIHVzYWdlICs9IElEQlNlcnZlcjo6SURCU2VydmVyOjpkaXNrVXNhZ2UoaWRi
Um9vdFBhdGgsIG9yaWdpbik7CisjZW5kaWYKIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlh
bGl6ZVF1b3RhVXNlcnMoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlciwgUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNl
c3Npb25JRCwgb3JpZ2luLCB1c2VyID0gbWFrZVVuaXF1ZTxRdW90YVVzZXJJbml0aWFsaXplcj4o
bWFuYWdlcildKCkgbXV0YWJsZSB7CisgICAgICAgIHJldHVybiB1c2FnZTsKKyAgICB9OworICAg
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OlF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgcXVvdGFJbmNyZWFz
ZVJlcXVlc3RlciA9IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc2Vzc2lv
bklELCBvcmlnaW5dICh1aW50NjRfdCBjdXJyZW50UXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFj
ZSwgdWludDY0X3QgcmVxdWVzdGVkSW5jcmVhc2UsIGF1dG8mJiBjYWxsYmFjaykgeworICAgICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLT5pZGJTZXJ2ZXIoc2Vzc2lvbklEKS5pbml0aWFs
aXplUXVvdGFVc2VyKG9yaWdpbik7Ci0gICAgICAgIENhY2hlU3RvcmFnZTo6RW5naW5lOjppbml0
aWFsaXplUXVvdGFVc2VyKCp0aGlzLCBzZXNzaW9uSUQsIG9yaWdpbiwgW3VzZXIgPSBXVEZNb3Zl
KHVzZXIpXSB7IH0pOwotICAgIH0pOwotfQorICAgICAgICAgICAgY2FsbGJhY2soeyB9KTsKKyAg
ICAgICAgcmVxdWVzdFN0b3JhZ2VTcGFjZShzZXNzaW9uSUQsIG9yaWdpbiwgY3VycmVudFF1b3Rh
LCBjdXJyZW50U3BhY2UsIHJlcXVlc3RlZEluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cisg
ICAgfTsKIAotU3RvcmFnZVF1b3RhTWFuYWdlciYgTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VRdW90
YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9y
aWdpbikKLXsKLSAgICBhdXRvJiBzdG9yYWdlUXVvdGFNYW5hZ2VycyA9IG1fc3RvcmFnZVF1b3Rh
TWFuYWdlcnMuZW5zdXJlKHNlc3Npb25JRCwgW10gewotICAgICAgICByZXR1cm4gU3RvcmFnZVF1
b3RhTWFuYWdlcnMgeyB9OwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLSAgICByZXR1cm4gKnN0
b3JhZ2VRdW90YU1hbmFnZXJzLm1hbmFnZXJzUGVyT3JpZ2luKCkuZW5zdXJlKG9yaWdpbiwgW3Ro
aXMsICZzdG9yYWdlUXVvdGFNYW5hZ2Vycywgc2Vzc2lvbklELCAmb3JpZ2luXSB7Ci0gICAgICAg
IGF1dG8gbWFuYWdlciA9IG1ha2VVbmlxdWU8U3RvcmFnZVF1b3RhTWFuYWdlcj4oc3RvcmFnZVF1
b3RhTWFuYWdlcnMuZGVmYXVsdFF1b3RhKG9yaWdpbiksIFt0aGlzLCBzZXNzaW9uSUQsIG9yaWdp
bl0odWludDY0X3QgcXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSwgYXV0byBjYWxsYmFjaykgewotICAgICAgICAgICAgdGhpcy0+cmVxdWVzdFN0b3Jh
Z2VTcGFjZShzZXNzaW9uSUQsIG9yaWdpbiwgcXVvdGEsIGN1cnJlbnRTcGFjZSwgc3BhY2VJbmNy
ZWFzZSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgICAgICB9KTsKLSAgICAgICAgaW5pdGlhbGl6
ZVF1b3RhVXNlcnMoKm1hbmFnZXIsIHNlc3Npb25JRCwgb3JpZ2luKTsKLSAgICAgICAgcmV0dXJu
IG1hbmFnZXI7Ci0gICAgfSkuaXRlcmF0b3ItPnZhbHVlOworICAgIHJldHVybiBzZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlci0+ZW5zdXJlT3JpZ2luU3RvcmFnZVF1b3RhTWFuYWdlcihvcmlnaW4s
IHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5kZWZhdWx0UXVvdGEob3JpZ2luKSwgV1RGTW92
ZSh1c2FnZUdldHRlciksIFdURk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3RlcikpOwogfQogCiAj
aWYgIVBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5oCmluZGV4IGY2MmYwMWQzODBmNDAxMDU1MmFhZDM4ODlhNDk3ZDUxMjZmOGEz
NTMuLjdkNmJkZWM1MTE2NGVlZTA4MGI5ZWUxMmNiZDkxMGZlM2U5OWMxZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTI4NCw2ICsyODQs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xvY2FsU3Rv
cmFnZSgpOwogCiAgICAgdm9pZCB1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGlu
ZyhQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgdm9p
ZCByZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OwogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKICAgICB2b2lkIGdldFNhbmRib3hF
eHRlbnNpb25zRm9yQmxvYkZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmJik+JiYp
OwpAQCAtMzI3LDcgKzMyOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFkQ2xpY2tBdHRyaWJ1
dGlvbkNvbnZlcnNpb25VUkxGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBVUkwmJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIG1hcmtBZENsaWNrQXR0cmlidXRpb25z
QXNFeHBpcmVkRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKIAotICAgIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXImIHN0b3JhZ2VRdW90
YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBzdG9yYWdlUXVvdGFNYW5h
Z2VyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKIAogICAg
IHZvaWQgYWRkS2VwdEFsaXZlTG9hZChSZWY8TmV0d29ya1Jlc291cmNlTG9hZGVyPiYmKTsKICAg
ICB2b2lkIHJlbW92ZUtlcHRBbGl2ZUxvYWQoTmV0d29ya1Jlc291cmNlTG9hZGVyJik7CkBAIC00
NDIsNiArNDQzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbGxlY3RJbmRleGVkRGF0YWJhc2VP
cmlnaW5zRm9yVmVyc2lvbihjb25zdCBTdHJpbmcmLCBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YT4mKTsKICAgICBIYXNoU2V0PFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4g
aW5kZXhlZERhdGFiYXNlT3JpZ2lucyhjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIFJlZjxXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcj4gY3JlYXRlSURCU2VydmVyKFBBTDo6U2Vzc2lvbklE
KTsKKyAgICB2b2lkIHNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgaWRiUm9vdFBhdGgpOwogI2VuZGlmCiAKICNpZiBF
TkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC00NjEsOCArNDYzLDQ0IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBwZXJmb3JtTmV4dFN0b3JhZ2VUYXNrKCk7CiAgICAgdm9pZCBlbnN1cmVQYXRoRXhpc3Rz
KGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKLSAgICB2b2lkIGNsZWFyU3RvcmFnZVF1b3RhKFBBTDo6
U2Vzc2lvbklEKTsKLSAgICB2b2lkIGluaXRpYWxpemVTdG9yYWdlUXVvdGEoY29uc3QgV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMmKTsKKyAgICBjbGFzcyBTZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlciB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAg
ICAgICAgU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoY29uc3QgU3RyaW5nJiBjYWNoZVJvb3RQ
YXRoLCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVv
dGEpCisgICAgICAgICAgICA6IG1fY2FjaGVSb290UGF0aChjYWNoZVJvb3RQYXRoKQorICAgICAg
ICAgICAgLCBtX2RlZmF1bHRRdW90YShkZWZhdWx0UXVvdGEpCisgICAgICAgICAgICAsIG1fZGVm
YXVsdFRoaXJkUGFydHlRdW90YShkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhKGNvbnN0IFdlYkNvcmU6OkNs
aWVudE9yaWdpbiYgb3JpZ2luKSBjb25zdCB7IHJldHVybiBvcmlnaW4udG9wT3JpZ2luID09IG9y
aWdpbi5jbGllbnRPcmlnaW4gPyBtX2RlZmF1bHRRdW90YSA6IG1fZGVmYXVsdFRoaXJkUGFydHlR
dW90YTsgfQorCisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBl
bnN1cmVPcmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2VyKFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmln
aW4sIHVpbnQ2NF90IHF1b3RhLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpVc2FnZUdl
dHRlciYmIHVzYWdlR2V0dGVyLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpRdW90YUlu
Y3JlYXNlUmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3RlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgYXV0byBbaXRlciwgaXNOZXdFbnRyeV0gPSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJz
LmVuc3VyZShvcmlnaW4sIFtxdW90YSwgdXNhZ2VHZXR0ZXIgPSBXVEZNb3ZlKHVzYWdlR2V0dGVy
KSwgcXVvdGFJbmNyZWFzZVJlcXVlc3RlciA9IFdURk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3Rl
cildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OmNyZWF0ZShxdW90YSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdURk1vdmUo
cXVvdGFJbmNyZWFzZVJlcXVlc3RlcikpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVJlZlB0cigqaXRlci0+dmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgYXV0
byBleGlzdGluZ1N0b3JhZ2VRdW90YU1hbmFnZXJzKCkgeyByZXR1cm4gbV9zdG9yYWdlUXVvdGFN
YW5hZ2Vycy52YWx1ZXMoKTsgfQorCisgICAgICAgIGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVSb290UGF0aDsgfQorI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorICAgICAgICB2b2lkIHNldElEQlJvb3RQYXRoKGNvbnN0IFN0cmluZyYgaWRi
Um9vdFBhdGgpIHsgbV9pZGJSb290UGF0aCA9IGlkYlJvb3RQYXRoOyB9CisgICAgICAgIGNvbnN0
IFN0cmluZyYgaWRiUm9vdFBhdGgoKSBjb25zdCB7IHJldHVybiBtX2lkYlJvb3RQYXRoOyB9Cisj
ZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAgIFN0cmluZyBtX2NhY2hlUm9vdFBhdGg7Cisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisgICAgICAgIFN0cmluZyBtX2lkYlJvb3RQYXRo
OworI2VuZGlmCisgICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFF1b3RhIHsgV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCkgfTsKKyAgICAgICAgdWludDY0X3QgbV9k
ZWZhdWx0VGhpcmRQYXJ0eVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVm
YXVsdFRoaXJkUGFydHlRdW90YSgpIH07CisgICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50
T3JpZ2luLCBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fc3RvcmFnZVF1
b3RhTWFuYWdlcnM7CisgICAgfTsKKyAgICB2b2lkIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VyKFBBTDo6U2Vzc2lvbklELCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1
bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0aCwgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJik7CisgICAgdm9pZCByZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlcihQQUw6OlNlc3Npb25JRCk7CiAKICAgICAvLyBDb25uZWN0aW9ucyB0byBXZWJQcm9jZXNz
ZXMuCiAgICAgSGFzaE1hcDxXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgUmVmPE5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzPj4gbV93ZWJQcm9jZXNzQ29ubmVjdGlvbnM7CkBAIC01MzMs
MjMgKzU3MSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzSVRQRGF0YWJhc2VFbmFibGVkIHsg
ZmFsc2UgfTsKICNlbmRpZgogICAgIAotICAgIGNsYXNzIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHVpbnQ2NF90IGRlZmF1bHRRdW90YShjb25zdCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mIG9yaWdpbikgY29uc3QgeyByZXR1cm4gb3JpZ2luLnRvcE9yaWdpbiA9
PSBvcmlnaW4uY2xpZW50T3JpZ2luID8gbV9kZWZhdWx0UXVvdGEgOiBtX2RlZmF1bHRUaGlyZFBh
cnR5UXVvdGE7IH0KLSAgICAgICAgdm9pZCBzZXREZWZhdWx0UXVvdGFzKHVpbnQ2NF90IGRlZmF1
bHRRdW90YSwgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbV9kZWZhdWx0UXVvdGEgPSBkZWZhdWx0UXVvdGE7Ci0gICAgICAgICAgICBtX2Rl
ZmF1bHRUaGlyZFBhcnR5UXVvdGEgPSBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhOwotICAgICAgICB9
Ci0KLSAgICAgICAgSGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPj4mIG1hbmFnZXJzUGVyT3JpZ2luKCkgeyBy
ZXR1cm4gbV9tYW5hZ2Vyc1Blck9yaWdpbjsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdWlu
dDY0X3QgbV9kZWZhdWx0UXVvdGEgeyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZh
dWx0UXVvdGEoKSB9OwotICAgICAgICB1aW50NjRfdCBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGEg
eyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkg
fTsKLSAgICAgICAgSGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9tYW5hZ2Vyc1Blck9yaWdpbjsKLSAg
ICB9OwotICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJzPiBt
X3N0b3JhZ2VRdW90YU1hbmFnZXJzOworICAgIExvY2sgbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlcnNMb2NrOworICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJz
OwogCiAgICAgT3B0aW9uU2V0PE5ldHdvcmtDYWNoZTo6Q2FjaGVPcHRpb24+IG1fY2FjaGVPcHRp
b25zOwogICAgIFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5IG1fbWVzc2FnZVBv
cnRDaGFubmVsUmVnaXN0cnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzNjc3Njc3NDgwYjgyYTQ0MzNm
ODVkMjgyYjNlNWZiODA2YTkxZTYzLi4zNjFlOTA3MDEwOWRlNWNiZjQ1MTgyMTRmZjhhODkwOGRi
ZDk1OGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTE2Myw0ICsxNjMsNiBAQCBtZXNzYWdlcyAtPiBO
ZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAKICAgICBTZXRTZXJ2aWNlV29ya2VyRmV0
Y2hUaW1lb3V0Rm9yVGVzdGluZyhTZWNvbmRzIHNlY29uZHMpIC0+ICgpIFN5bmNocm9ub3VzCiAg
ICAgUmVzZXRTZXJ2aWNlV29ya2VyRmV0Y2hUaW1lb3V0Rm9yVGVzdGluZygpIC0+ICgpIFN5bmNo
cm9ub3VzCisKKyAgICBSZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkgLT4gKCkg
QXN5bmMKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAppbmRleCBlZmU3ZTE1YjA1ZjdkMjU2MTA5ZTg2MzJl
MmYzMDVlMjFjMzY4NGI2Li4zZDY1OTQ3MTFiNTAyOWRjMTczZjc5MDA0ZTU2MDNhM2JlYmNiOTY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9D
YWNoZVN0b3JhZ2VFbmdpbmUuY3BwCkBAIC0xOTYsMTMgKzE5Niw2OCBAQCB2b2lkIEVuZ2luZTo6
Y2xlYXJDYWNoZXNGb3JPcmlnaW4oTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBQQUw6
OlNlc3Npb25JRAogICAgIH0pOwogfQogCi12b2lkIEVuZ2luZTo6aW5pdGlhbGl6ZVF1b3RhVXNl
cihOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBjbGllbnRPcmlnaW4sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3N0YXRpYyB1aW50NjRfdCBnZXRE
aXJlY3RvcnlTaXplKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCkKK3sKKyAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKKworICAgIHVpbnQ2NF90IGRpcmVjdG9yeVNpemUgPSAwOworICAg
IERlcXVlPFN0cmluZz4gcGF0aHM7CisgICAgcGF0aHMuYXBwZW5kKGRpcmVjdG9yeVBhdGgpOwor
ICAgIHdoaWxlICghcGF0aHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8gcGF0aCA9IHBhdGhz
LnRha2VGaXJzdCgpOworICAgICAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHBh
dGgsIEZpbGVTeXN0ZW06OlNob3VsZEZvbGxvd1N5bWJvbGljTGlua3M6Ok5vKSkgeworICAgICAg
ICAgICAgYXV0byBuZXdQYXRocyA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkocGF0aCwgIioi
X3MpOworICAgICAgICAgICAgZm9yIChhdXRvJiBuZXdQYXRoIDogbmV3UGF0aHMpIHsKKyAgICAg
ICAgICAgICAgICAvLyBGaWxlcyBpbiAvQmxvYnMgZGlyZWN0b3J5IGFyZSBoYXJkIGxpbmsuCisg
ICAgICAgICAgICAgICAgYXV0byBmaWxlTmFtZSA9IEZpbGVTeXN0ZW06Omxhc3RDb21wb25lbnRP
ZlBhdGhJZ25vcmluZ1RyYWlsaW5nU2xhc2gobmV3UGF0aCk7CisgICAgICAgICAgICAgICAgaWYg
KGZpbGVOYW1lID09ICJCbG9icyIpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIHBhdGhzLmFwcGVuZChuZXdQYXRoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbG9uZyBsb25nIGZpbGVTaXpl
ID0gMDsKKyAgICAgICAgRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUocGF0aCwgZmlsZVNpemUpOwor
ICAgICAgICBkaXJlY3RvcnlTaXplICs9IGZpbGVTaXplOworICAgIH0KKyAgICByZXR1cm4gZGly
ZWN0b3J5U2l6ZTsKK30KKwordWludDY0X3QgRW5naW5lOjpkaXNrVXNhZ2UoY29uc3QgU3RyaW5n
JiByb290UGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAg
ZnJvbShuZXR3b3JrUHJvY2Vzcywgc2Vzc2lvbklELCBbY2xpZW50T3JpZ2luLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiBlbmdpbmUpIG11dGFi
bGUgewotICAgICAgICBlbmdpbmUucmVhZENhY2hlc0Zyb21EaXNrKGNsaWVudE9yaWdpbiwgW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiBjYWNo
ZXNPckVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgICAgIH0pOwotICAgIH0pOworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAg
aWYgKHJvb3RQYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHJpbmcg
c2FsdFBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocm9vdFBhdGgs
ICJzYWx0Il9zKTsKKyAgICBhdXRvIHNhbHQgPSByZWFkT3JNYWtlU2FsdChzYWx0UGF0aCk7Cisg
ICAgaWYgKCFzYWx0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEtleSBrZXkob3JpZ2luLnRv
cE9yaWdpbi50b1N0cmluZygpLCBvcmlnaW4uY2xpZW50T3JpZ2luLnRvU3RyaW5nKCksIHsgfSwg
eyB9LCAqc2FsdCk7CisgICAgU3RyaW5nIGRpcmVjdG9yeVBhdGggPSBGaWxlU3lzdGVtOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQocm9vdFBhdGgsIGtleS5oYXNoQXNTdHJpbmcoKSk7CisKKyAg
ICBTdHJpbmcgc2l6ZUZpbGVQYXRoID0gQ2FjaGVzOjpjYWNoZXNTaXplRmlsZW5hbWUoZGlyZWN0
b3J5UGF0aCk7CisgICAgaWYgKGF1dG8gcmVjb3JkZWRTaXplID0gcmVhZFNpemVGaWxlKHNpemVG
aWxlUGF0aCkpCisgICAgICAgIHJldHVybiAqcmVjb3JkZWRTaXplOworCisgICAgcmV0dXJuIGdl
dERpcmVjdG9yeVNpemUoZGlyZWN0b3J5UGF0aCk7Cit9CisKK3ZvaWQgRW5naW5lOjpyZXF1ZXN0
U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVk
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRl
Y2lzaW9uKT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisg
ICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBjYWxsYmFjayhXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSk7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fbmV0d29ya1Byb2Nl
c3MtPnN0b3JhZ2VRdW90YU1hbmFnZXIobV9zZXNzaW9uSUQsIG9yaWdpbik7CisgICAgaWYgKCFz
dG9yYWdlUXVvdGFNYW5hZ2VyKQorICAgICAgICBjYWxsYmFjayhXZWJDb3JlOjpTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSk7CisKKyAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5y
ZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQoc3BhY2VSZXF1ZXN0ZWQsIFdURk1vdmUoY2FsbGJhY2sp
KTsKIH0KIAogRW5naW5lOjpFbmdpbmUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBOZXR3b3Jr
UHJvY2VzcyYgcHJvY2VzcywgU3RyaW5nJiYgcm9vdFBhdGgpCkBAIC0zNDEsNyArMzk2LDcgQEAg
dm9pZCBFbmdpbmU6OnJlYWRDYWNoZXNGcm9tRGlzayhjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mIG9yaWdpbiwgQ2FjaGVzQ2FsbGIKIAogICAgICAgICBhdXRvJiBjYWNoZXMgPSBtX2NhY2hl
cy5lbnN1cmUob3JpZ2luLCBbJm9yaWdpbiwgdGhpc10gewogICAgICAgICAgICAgYXV0byBwYXRo
ID0gY2FjaGVzUm9vdFBhdGgob3JpZ2luKTsKLSAgICAgICAgICAgIHJldHVybiBDYWNoZXM6OmNy
ZWF0ZSgqdGhpcywgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgb3JpZ2luIH0sIFdURk1vdmUocGF0
aCksIG1fbmV0d29ya1Byb2Nlc3MtPnN0b3JhZ2VRdW90YU1hbmFnZXIobV9zZXNzaW9uSUQsIG9y
aWdpbikpOworICAgICAgICAgICAgcmV0dXJuIENhY2hlczo6Y3JlYXRlKCp0aGlzLCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4geyBvcmlnaW4gfSwgV1RGTW92ZShwYXRoKSk7CiAgICAgICAgIH0pLml0
ZXJhdG9yLT52YWx1ZTsKIAogICAgICAgICBpZiAoY2FjaGVzLT5pc0luaXRpYWxpemVkKCkpIHsK
QEAgLTQ3MywxMiArNTI4LDEzIEBAIHZvaWQgRW5naW5lOjpyZW1vdmVGaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUpCiAgICAgfSk7CiB9CiAKLXZvaWQgRW5naW5lOjp3cml0ZVNpemVGaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3Qgc2l6ZSkKK3ZvaWQgRW5naW5lOjp3cml0ZVNpemVG
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3Qgc2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIENvbXBsZXRpb25IYW5kbGVyQ2Fs
bGluZ1Njb3BlIGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICBpZiAoIXNob3VsZFBlcnNpc3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9pb1F1ZXVlLT5kaXNwYXRjaChbcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCksIHNpemVdKCkg
eworICAgIG1faW9RdWV1ZS0+ZGlzcGF0Y2goW3BhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpLCBz
aXplLCBjb21wbGV0aW9uSGFuZGxlckNhbGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXJD
YWxsZXIpXSgpIG11dGFibGUgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihnbG9iYWxTaXpl
RmlsZUxvY2spOwogICAgICAgICBhdXRvIGZpbGVIYW5kbGUgPSBGaWxlU3lzdGVtOjpvcGVuRmls
ZShwYXRoLCBGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OldyaXRlKTsKICAgICAgICAgYXV0byBj
bG9zZUZpbGVIYW5kbGVyID0gbWFrZVNjb3BlRXhpdChbJl0gewpAQCAtNDg5LDYgKzU0NSw4IEBA
IHZvaWQgRW5naW5lOjp3cml0ZVNpemVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgdWludDY0X3Qg
c2l6ZSkKIAogICAgICAgICBGaWxlU3lzdGVtOjp0cnVuY2F0ZUZpbGUoZmlsZUhhbmRsZSwgMCk7
CiAgICAgICAgIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGZpbGVIYW5kbGUsIFN0cmluZzo6bnVt
YmVyKHNpemUpLnV0ZjgoKS5kYXRhKCksIFN0cmluZzo6bnVtYmVyKHNpemUpLnV0ZjgoKS5sZW5n
dGgoKSk7CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFu
ZGxlckNhbGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXJDYWxsZXIpXSgpIG11dGFibGUg
eyB9KTsKICAgICB9KTsKIH0KIApAQCAtNTEzLDggKzU3MSw4IEBAIE9wdGlvbmFsPHVpbnQ2NF90
PiBFbmdpbmU6OnJlYWRTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgaWYgKCFXVEY6
OmNvbnZlcnRTYWZlbHkoZmlsZVNpemUsIGJ5dGVzVG9SZWFkKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIFZlY3RvcjxjaGFyPiBidWZmZXIoYnl0ZXNUb1JlYWQpOwotICAg
IHNpemVfdCB0b3RhbEJ5dGVzUmVhZCA9IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShmaWxlSGFu
ZGxlLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKKyAgICBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4gYnVmZmVyKGJ5dGVzVG9SZWFkKTsKKyAgICBzaXplX3QgdG90YWxCeXRlc1JlYWQgPSBG
aWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZUhhbmRsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oYnVmZmVyLmRhdGEoKSksIGJ1ZmZlci5zaXplKCkpOwogICAgIGlmICh0b3RhbEJ5dGVzUmVh
ZCAhPSBieXRlc1RvUmVhZCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lLmgKaW5kZXggYTNhYWFmMDkwMWM5NWU2MTUwNTIxOWRkMmMxZWI3ZjY1NzIwZjA1Ni4uMjJl
ZTY2YmNhNDc2YmNlMmJjYTRiMmQ1MWRhY2U5NTQ3YWQ3MTdjZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlRGF0YS5oIgogI2luY2x1ZGUg
IldlYnNpdGVEYXRhLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lv
bklELmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgpAQCAtNzksMTIgKzgwLDE1IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGluaXRp
YWxpemVRdW90YVVzZXIoTmV0d29ya1Byb2Nlc3MmLCBQQUw6OlNlc3Npb25JRCwgY29uc3QgV2Vi
Q29yZTo6Q2xpZW50T3JpZ2luJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAg
IHN0YXRpYyB1aW50NjRfdCBkaXNrVXNhZ2UoY29uc3QgU3RyaW5nJiByb290UGF0aCwgY29uc3Qg
V2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgdm9pZCByZXF1ZXN0U3BhY2UoY29uc3QgV2Vi
Q29yZTo6Q2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsK
KwogICAgIGJvb2wgc2hvdWxkUGVyc2lzdCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pb1F1ZXVlO30K
IAogICAgIHZvaWQgd3JpdGVGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIE5ldHdvcmtDYWNo
ZTo6RGF0YSYmLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYp
OwogICAgIHZvaWQgcmVhZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBOZXR3b3JrQ2FjaGU6OkRhdGEmLCBpbnQgZXJyb3IpPiYmKTsKICAg
ICB2b2lkIHJlbW92ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7Ci0gICAgdm9pZCB3cml0
ZVNpemVGaWxlKGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90IHNpemUpOworICAgIHZvaWQgd3JpdGVT
aXplRmlsZShjb25zdCBTdHJpbmcmLCB1aW50NjRfdCBzaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogICAgIHN0YXRpYyBPcHRpb25hbDx1aW50NjRfdD4gcmVhZFNpemVGaWxlKGNv
bnN0IFN0cmluZyYpOwogCiAgICAgY29uc3QgU3RyaW5nJiByb290UGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcm9vdFBhdGg7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKaW5kZXggNmZjNTNl
MDNjNGQ2N2EwMGZhOTFmMmIzZmNmYmRkN2UxMTk2OGNlMy4uYmExMzRjZjRjYWIwMDVmMzQyMTM4
OWQ1NTkwMTY5ZWM0N2FkNGU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKQEAgLTQx
NCw4ICs0MTQsMTEgQEAgdm9pZCBDYWNoZTo6cHV0KFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3Jkcywg
UmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmIGNhbGxiYWNrKQogICAgICAgICBhdXRvIHBvc2l0
aW9uID0gKHNhbWVVUkxSZWNvcmRzICYmICFtYXRjaGluZ1JlY29yZHMuaXNFbXB0eSgpKSA/IHNh
bWVVUkxSZWNvcmRzLT5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJu
IGl0ZW0uaWRlbnRpZmllciA9PSBtYXRjaGluZ1JlY29yZHNbMF07IH0pIDogbm90Rm91bmQ7CiAK
ICAgICAgICAgc3BhY2VSZXF1aXJlZCArPSByZWNvcmQucmVzcG9uc2VCb2R5U2l6ZTsKLSAgICAg
ICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKQotICAgICAgICAgICAgc3BhY2VSZXF1aXJlZCAt
PSBzYW1lVVJMUmVjb3Jkcy0+YXQocG9zaXRpb24pLnNpemU7CisgICAgICAgIGlmIChwb3NpdGlv
biAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgdWludDY0X3Qgc3BhY2VEZWNyZWFzZWQgPSBz
YW1lVVJMUmVjb3Jkcy0+YXQocG9zaXRpb24pLnNpemU7CisgICAgICAgICAgICBpZiAoc3BhY2VS
ZXF1aXJlZCA+PSBzcGFjZURlY3JlYXNlZCkKKyAgICAgICAgICAgICAgICBzcGFjZVJlcXVpcmVk
IC09IHNwYWNlRGVjcmVhc2VkOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9jYWNoZXMucmVx
dWVzdFNwYWNlKHNwYWNlUmVxdWlyZWQsIFtjYWNoZXMgPSBtYWtlUmVmKG1fY2FjaGVzKSwgaWRl
bnRpZmllciA9IG1faWRlbnRpZmllciwgcmVjb3JkcyA9IFdURk1vdmUocmVjb3JkcyksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKE9wdGlvbmFsPERPTUNhY2hlRW5naW5lOjpFcnJvcj4m
JiBlcnJvcikgbXV0YWJsZSB7CkBAIC00NTAsNyArNDUzLDEwIEBAIHZvaWQgQ2FjaGU6OnJlbW92
ZShXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBXZWJDb3JlOjpDYWNoZVF1ZXJ5
T3B0aW9uCiAgICAgICAgIHJldHVybiBzaG91bGRSZW1vdmU7CiAgICAgfSk7CiAKLSAgICBjYWxs
YmFjayhXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJzKSk7CisgICAgLy8gVGhpcyBvcGVyYXRpb24g
d291bGQgY2hhbmdlIGNhY2hlcyBzaXplLCBzbyBtYWtlIHN1cmUgY2FsbGJhY2sgZmluaXNoZXMg
YWZ0ZXIgc2l6ZSBmaWxlIGlzIHVwZGF0ZWQuCisgICAgbV9jYWNoZXMudXBkYXRlU2l6ZUZpbGUo
W2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHJlY29yZElkZW50aWZpZXJzID0gV1RGTW92
ZShyZWNvcmRJZGVudGlmaWVycyldKCkgbXV0YWJsZSB7CisgICAgICAgIGNhbGxiYWNrKFdURk1v
dmUocmVjb3JkSWRlbnRpZmllcnMpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBDYWNoZTo6cmVtb3Zl
RnJvbVJlY29yZExpc3QoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgcmVjb3JkSWRlbnRpZmllcnMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKaW5kZXggMDNhMDYwY2VmMmJjNjcyMDE0Yjc1
OTZiYzVkYTRlZTk0Mzg2MWE3Yy4uZWJhY2IzYzFiZmMzNjM5ZGIxMWZkYWViZGZiNjI2OWZlZTA1
Y2Q0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcApAQCAtNTYsMzYgKzU2LDIxIEBA
IFN0cmluZyBDYWNoZXM6OmNhY2hlc1NpemVGaWxlbmFtZShjb25zdCBTdHJpbmcmIGNhY2hlc1Jv
b3RzUGF0aCkKICAgICByZXR1cm4gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KGNhY2hlc1Jvb3RzUGF0aCwgImVzdGltYXRlZHNpemUiX3MpOwogfQogCi1SZWY8Q2FjaGVzPiBD
YWNoZXM6OmNyZWF0ZShFbmdpbmUmIGVuZ2luZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3Jp
Z2luLCBTdHJpbmcmJiByb290UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYgcXVv
dGFNYW5hZ2VyKQorUmVmPENhY2hlcz4gQ2FjaGVzOjpjcmVhdGUoRW5naW5lJiBlbmdpbmUsIFdl
YkNvcmU6OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgpCiB7Ci0gICAg
YXV0byBjYWNoZXMgPSBhZG9wdFJlZigqbmV3IENhY2hlcyB7IGVuZ2luZSwgV1RGTW92ZShvcmln
aW4pLCBXVEZNb3ZlKHJvb3RQYXRoKSwgcXVvdGFNYW5hZ2VyIH0pOwotICAgIHF1b3RhTWFuYWdl
ci5hZGRVc2VyKGNhY2hlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIGNhY2hlczsKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDYWNoZXMgeyBlbmdpbmUsIFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShy
b290UGF0aCkgfSk7CiB9CiAKLUNhY2hlczo6Q2FjaGVzKEVuZ2luZSYgZW5naW5lLCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyJiBxdW90YU1hbmFnZXIpCitDYWNoZXM6OkNhY2hlcyhFbmdpbmUmIGVu
Z2luZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCkK
ICAgICA6IG1fZW5naW5lKCZlbmdpbmUpCiAgICAgLCBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CiAgICAgLCBtX3Jvb3RQYXRoKFdURk1vdmUocm9vdFBhdGgpKQotICAgICwgbV9xdW90YU1hbmFn
ZXIobWFrZVdlYWtQdHIocXVvdGFNYW5hZ2VyKSkKIHsKIH0KIAogQ2FjaGVzOjp+Q2FjaGVzKCkK
IHsKICAgICBBU1NFUlQobV9wZW5kaW5nV3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrcy5pc0Vt
cHR5KCkpOwotCi0gICAgaWYgKG1fcXVvdGFNYW5hZ2VyKQotICAgICAgICBtX3F1b3RhTWFuYWdl
ci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci19Ci0KLXZvaWQgQ2FjaGVzOjp3aGVuSW5pdGlhbGl6ZWQo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAgIGluaXRpYWxpemUo
W2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0g
ICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKENhY2hlU3Rv
cmFnZSwgIkNhY2hlczo6aW5pdGlhbGl6ZSBmYWlsZWQsIHJlcG9ydGVkIHNwYWNlIHVzZWQgd2ls
bCBiZSB6ZXJvIik7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgfSk7CiB9CiAKIHZvaWQgQ2Fj
aGVzOjpyZXRyaWV2ZU9yaWdpbkZyb21EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBmb2xkZXJQYXRo
LCBXb3JrUXVldWUmIHF1ZXVlLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8
V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIwOCwx
MCArMTkzLDE0IEBAIHZvaWQgQ2FjaGVzOjppbml0aWFsaXplKFdlYkNvcmU6OkRPTUNhY2hlRW5n
aW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKICAgICB9KTsKIH0KIAotdm9pZCBD
YWNoZXM6OnVwZGF0ZVNpemVGaWxlKCkKK3ZvaWQgQ2FjaGVzOjp1cGRhdGVTaXplRmlsZShDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1f
ZW5naW5lKQotICAgICAgICBtX2VuZ2luZS0+d3JpdGVTaXplRmlsZShjYWNoZXNTaXplRmlsZW5h
bWUobV9yb290UGF0aCksIG1fc2l6ZSk7CisgICAgaWYgKCFtX2VuZ2luZSkgeworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9lbmdp
bmUtPndyaXRlU2l6ZUZpbGUoY2FjaGVzU2l6ZUZpbGVuYW1lKG1fcm9vdFBhdGgpLCBtX3NpemUs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBDYWNoZXM6OmluaXRpYWxp
emVTaXplKCkKQEAgLTIzMiwxMyArMjIxLDEyIEBAIHZvaWQgQ2FjaGVzOjppbml0aWFsaXplU2l6
ZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
bV9zaXplID0gc2l6ZTsKLSAgICAgICAgICAgIHVwZGF0ZVNpemVGaWxlKCk7Ci0KLSAgICAgICAg
ICAgIG1faXNJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAgICAgICBhdXRvIHBlbmRpbmdDYWxs
YmFja3MgPSBXVEZNb3ZlKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uQ2FsbGJhY2tzKTsKLSAgICAg
ICAgICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBwZW5kaW5nQ2FsbGJhY2tzKQotICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9wdCk7Ci0KKyAgICAgICAgICAgIHVwZGF0ZVNpemVG
aWxlKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICAgICAgbV9pc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBh
dXRvIHBlbmRpbmdDYWxsYmFja3MgPSBXVEZNb3ZlKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uQ2Fs
bGJhY2tzKTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogcGVuZGluZ0Nh
bGxiYWNrcykKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGOjpudWxsb3B0KTsKKyAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGF1
dG8gZGVjb2RlZCA9IENhY2hlOjpkZWNvZGVSZWNvcmRIZWFkZXIoKnN0b3JhZ2UpOwpAQCAtMjcz
LDEzICsyNjEsMTEgQEAgdm9pZCBDYWNoZXM6OmNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgbV9zdG9yYWdlLT5jbGVhcihTdHJpbmcg
eyB9LCAtV2FsbFRpbWU6OmluZmluaXR5KCksIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgICAgICAg
ICAgcHJvdGVjdGVkVGhpcy0+Y2xlYXJNZW1vcnlSZXByZXNlbnRhdGlvbigpOwotICAgICAgICAg
ICAgcHJvdGVjdGVkVGhpcy0+cmVzZXRTcGFjZVVzZWQoKTsKICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNs
ZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKLSAgICByZXNldFNwYWNlVXNlZCgpOwogICAgIGNs
ZWFyUGVuZGluZ1dyaXRpbmdDYWNoZXNUb0Rpc2tDYWxsYmFja3MoKTsKICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOwogfQpAQCAtNTI1LDEyICs1MTEsMTIgQEAgdm9pZCBDYWNoZXM6OnJlYWRSZWNv
cmRzTGlzdChDYWNoZSYgY2FjaGUsIE5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6VHJhdmVyc2VIYW5k
bGUKIAogdm9pZCBDYWNoZXM6OnJlcXVlc3RTcGFjZSh1aW50NjRfdCBzcGFjZVJlcXVpcmVkLCBX
ZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7
Ci0gICAgaWYgKCFtX3F1b3RhTWFuYWdlcikgeworICAgIGlmICghbV9lbmdpbmUpIHsKICAgICAg
ICAgY2FsbGJhY2soRXJyb3I6OlF1b3RhRXhjZWVkZWQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgbV9xdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZShzcGFjZVJlcXVpcmVkLCBbY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CisgICAg
bV9lbmdpbmUtPnJlcXVlc3RTcGFjZShtX29yaWdpbiwgc3BhY2VSZXF1aXJlZCwgW2NhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgewogICAgICAgICBz
d2l0Y2ggKGRlY2lzaW9uKSB7CiAgICAgICAgIGNhc2UgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFu
YWdlcjo6RGVjaXNpb246OkRlbnk6CiAgICAgICAgICAgICBjYWxsYmFjayhFcnJvcjo6UXVvdGFF
eGNlZWRlZCk7CkBAIC01NDgsNyArNTM0LDYgQEAgdm9pZCBDYWNoZXM6OndyaXRlUmVjb3JkKGNv
bnN0IENhY2hlJiBjYWNoZSwgY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZEluZm8KICAg
ICBBU1NFUlQobV9zaXplID49IHByZXZpb3VzUmVjb3JkU2l6ZSk7CiAgICAgbV9zaXplICs9IHJl
Y29yZEluZm9ybWF0aW9uLnNpemU7CiAgICAgbV9zaXplIC09IHByZXZpb3VzUmVjb3JkU2l6ZTsK
LSAgICB1cGRhdGVTaXplRmlsZSgpOwogCiAgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpIHsKICAg
ICAgICAgbV92b2xhdGlsZVN0b3JhZ2Uuc2V0KHJlY29yZEluZm9ybWF0aW9uLmtleSwgV1RGTW92
ZShyZWNvcmQpKTsKQEAgLTU1NiwxMyArNTQxLDE1IEBAIHZvaWQgQ2FjaGVzOjp3cml0ZVJlY29y
ZChjb25zdCBDYWNoZSYgY2FjaGUsIGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmRJbmZv
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3N0b3JhZ2UtPnN0b3JlKENhY2hlOjpl
bmNvZGUocmVjb3JkSW5mb3JtYXRpb24sIHJlY29yZCksIHsgfSwgW3Byb3RlY3RlZFN0b3JhZ2Ug
PSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShpbnQg
ZXJyb3IpIG11dGFibGUgeworICAgIG1fc3RvcmFnZS0+c3RvcmUoQ2FjaGU6OmVuY29kZShyZWNv
cmRJbmZvcm1hdGlvbiwgcmVjb3JkKSwgeyB9LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBwcm90ZWN0ZWRTdG9yYWdlID0gbWFrZVJlZigqbV9zdG9yYWdlKSwgY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oaW50IGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgaWYg
KGVycm9yKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihDYWNoZVN0b3JhZ2UsICJD
YWNoZXM6OndyaXRlUmVjb3JkIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgZXJyb3IpOwogICAgICAg
ICAgICAgY2FsbGJhY2soRXJyb3I6OldyaXRlRGlzayk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgY2FsbGJhY2soV1RGOjpudWxsb3B0KTsKKyAgICAgICAgdXBkYXRl
U2l6ZUZpbGUoW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQpOworICAgICAgICB9KTsKICAgICB9KTsKIH0K
IApAQCAtNjA1LDcgKzU5Miw3IEBAIHZvaWQgQ2FjaGVzOjpyZW1vdmVSZWNvcmQoY29uc3QgUmVj
b3JkSW5mb3JtYXRpb24mIHJlY29yZCkKIAogICAgIEFTU0VSVChtX3NpemUgPj0gcmVjb3JkLnNp
emUpOwogICAgIG1fc2l6ZSAtPSByZWNvcmQuc2l6ZTsKLSAgICB1cGRhdGVTaXplRmlsZSgpOwor
ICAgIHVwZGF0ZVNpemVGaWxlKFtdIHsgfSk7CiAKICAgICByZW1vdmVDYWNoZUVudHJ5KHJlY29y
ZC5rZXkpOwogfQpAQCAtNjIxLDE3ICs2MDgsNiBAQCB2b2lkIENhY2hlczo6cmVtb3ZlQ2FjaGVF
bnRyeShjb25zdCBOZXR3b3JrQ2FjaGU6OktleSYga2V5KQogICAgIG1fc3RvcmFnZS0+cmVtb3Zl
KGtleSk7CiB9CiAKLXZvaWQgQ2FjaGVzOjpyZXNldFNwYWNlVXNlZCgpCi17Ci0gICAgbV9zaXpl
ID0gMDsKLSAgICB1cGRhdGVTaXplRmlsZSgpOwotCi0gICAgaWYgKG1fcXVvdGFNYW5hZ2VyKSB7
Ci0gICAgICAgIG1fcXVvdGFNYW5hZ2VyLT5yZW1vdmVVc2VyKCp0aGlzKTsKLSAgICAgICAgbV9x
dW90YU1hbmFnZXItPmFkZFVzZXIoKnRoaXMpOwotICAgIH0KLX0KLQogdm9pZCBDYWNoZXM6OmNs
ZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKQogewogICAgIG1ha2VEaXJ0eSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZXMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGVzLmgKaW5kZXggMDMyMzFmM2E5YjA1NzY3MmQ2MzFiYjk2ZTY3YTZlYjk5ZTFk
N2NiYi4uNWQzOTRhMGU0ODg1N2IwMjVjYWE0ODM0YWQyNmJlODQ3ZGQ5ZjU1NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlcy5oCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGUuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VR
dW90YVVzZXIuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRl
IDx3dGYvRGVxdWUuaD4KIApAQCAtNDIsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBDYWNoZVN0b3Jh
Z2UgewogCiBjbGFzcyBFbmdpbmU7CiAKLWNsYXNzIENhY2hlcyBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGVkPENhY2hlcz4sIHByaXZhdGUgV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlciB7CitjbGFz
cyBDYWNoZXMgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWNoZXM+IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgU3RyaW5nIGNhY2hlc1NpemVGaWxlbmFtZShjb25zdCBTdHJpbmcmKTsKLSAgICBz
dGF0aWMgUmVmPENhY2hlcz4gY3JlYXRlKEVuZ2luZSYsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYm
LCBTdHJpbmcmJiByb290UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYpOworICAg
IHN0YXRpYyBTdHJpbmcgY2FjaGVzU2l6ZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgY2FjaGVzUm9v
dHNQYXRoKTsKKyAgICBzdGF0aWMgUmVmPENhY2hlcz4gY3JlYXRlKEVuZ2luZSYsIFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYmLCBTdHJpbmcmJiByb290UGF0aCk7CiAgICAgfkNhY2hlcygpOwogCiAg
ICAgc3RhdGljIHZvaWQgcmV0cmlldmVPcmlnaW5Gcm9tRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
Zm9sZGVyUGF0aCwgV29ya1F1ZXVlJiwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlv
bmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4mJik+JiYpOwpAQCAtNzksMjIgKzc4LDE3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OwogICAgIHZvaWQgY2xlYXJNZW1vcnlSZXByZXNlbnRhdGlvbigpOwotICAgIHZvaWQgcmVzZXRT
cGFjZVVzZWQoKTsKIAogICAgIHVpbnQ2NF90IHN0b3JhZ2VTaXplKCkgY29uc3Q7CisgICAgdm9p
ZCB1cGRhdGVTaXplRmlsZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiBwcml2YXRl
OgotICAgIENhY2hlcyhFbmdpbmUmLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYg
cm9vdFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXImKTsKLQotICAgIC8vIFN0b3Jh
Z2VRdW90YVVzZXIgQVBJLgotICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fc2l6ZTsgfQorICAgIENhY2hlcyhFbmdpbmUmLCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplU2l6ZSgpOwog
ICAgIHZvaWQgcmVhZENhY2hlc0Zyb21EaXNrKFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxW
ZWN0b3I8Q2FjaGU+LCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYpPiYmKTsKICAg
ICB2b2lkIHdyaXRlQ2FjaGVzVG9EaXNrKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0
aW9uQ2FsbGJhY2smJik7CiAKLSAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwotCiAgICAgdm9pZCBzdG9yZU9yaWdpbihXZWJDb3JlOjpE
T01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwogICAgIHN0YXRpYyBPcHRpb25h
bDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IHJlYWRPcmlnaW4oY29uc3QgTmV0d29ya0NhY2hlOjpE
YXRhJik7CiAKQEAgLTEwNiw4ICsxMDAsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBoYXNBY3Rp
dmVDYWNoZSgpIGNvbnN0OwogCi0gICAgdm9pZCB1cGRhdGVTaXplRmlsZSgpOwotCiAgICAgYm9v
bCBtX2lzSW5pdGlhbGl6ZWQgeyBmYWxzZSB9OwogICAgIEVuZ2luZSogbV9lbmdpbmUgeyBudWxs
cHRyIH07CiAgICAgdWludDY0X3QgbV91cGRhdGVDb3VudGVyIHsgMCB9OwpAQCAtMTIyLDcgKzEx
NCw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21w
bGV0aW9uQ2FsbGJhY2s+IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uQ2FsbGJhY2tzOwogICAgIGJv
b2wgbV9pc1dyaXRpbmdDYWNoZXNUb0Rpc2sgeyBmYWxzZSB9OwogICAgIERlcXVlPENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPik+
PiBtX3BlbmRpbmdXcml0aW5nQ2FjaGVzVG9EaXNrQ2FsbGJhY2tzOwotICAgIFdlYWtQdHI8V2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gbV9xdW90YU1hbmFnZXI7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBDYWNoZVN0b3JhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAppbmRleCBjMGZjZjljNWY2MDBhYTVhYzExNjNlNDdh
NGIyNmRhYzQyMDY1YWE5Li42ZDBjMTI5YTc0MDUxMGQzODY5NzM3MDVhZDA5MmVmMTMyY2MwNzVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1l
dGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuY3BwCkBAIC01NSw2ICs1NSw4IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAKICAgICBlbmNvZGVyIDw8
IGxvY2FsU3RvcmFnZURpcmVjdG9yeSA8PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7CiAKKyAgICBlbmNvZGVyIDw8IGNhY2hlU3RvcmFnZURpcmVjdG9yeSA8PCBjYWNoZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisKICAgICBlbmNvZGVyIDw8IHBlck9yaWdp
blN0b3JhZ2VRdW90YTsKICAgICBlbmNvZGVyIDw8IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdl
UXVvdGE7CiB9CkBAIC0xNDEsNiArMTQzLDE4IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpsb2NhbFN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwogCisgICAgT3B0aW9uYWw8U3RyaW5nPiBjYWNoZVN0b3JhZ2VEaXJl
Y3Rvcnk7CisgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgaWYgKCFj
YWNoZVN0b3JhZ2VEaXJlY3RvcnkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
cGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZNb3ZlKCpjYWNoZVN0b3JhZ2VE
aXJlY3RvcnkpOworCisgICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBjYWNo
ZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgZGVjb2RlciA+PiBjYWNoZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
cGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3Zl
KCpjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworCiAgICAgT3B0aW9uYWw8
dWludDY0X3Q+IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKICAgICBkZWNvZGVyID4+IHBlck9yaWdp
blN0b3JhZ2VRdW90YTsKICAgICBpZiAoIXBlck9yaWdpblN0b3JhZ2VRdW90YSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IDA5
NWYwOWQ2YWY5M2Y5MTNlYmIyOWY3MDI2N2FlOWMxYjc0YmU4OGUuLmYyN2RmNDg5ODA5ZjMxOTYw
OGI2ODBjYjJhOGExYzE0YjcwMTg0MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNzEsNiArNzEsOSBAQCBzdHJ1Y3QgV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgewogICAgIFN0cmluZyBsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnk7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGxvY2FsU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZTsKIAorICAgIFN0cmluZyBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZTsKKwogICAgIHVpbnQ2NF90IHBlck9yaWdpblN0b3JhZ2VRdW90YSB7IFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpIH07CiAgICAgdWludDY0X3QgcGVyVGhp
cmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6
OmRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCmluZGV4IDdlYjc1
Nzc2NGU5NDhmNWE0ZGQ1NzdlYWJiYzYyMzFhMjczOGNhYTYuLjk5YTQwODZlMjNmZDYwMTYxZGMw
NDFiMDg4ZjcxZDBjMDc1ZjVjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcApAQCAtNjg2LDMgKzY4NiwxMSBA
QCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVz
dGluZyhXS1dlYnNpdGVEYXRhU3RvcmVSZQogewogICAgIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9y
ZVJlZiktPnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhXZWJLaXQ6OnRvQ2Fj
aGVNb2RlbChjYWNoZU1vZGVsKSk7CiB9CisKK3ZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlUmVzZXRR
dW90YShXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCB2b2lkKiBjb250ZXh0LCBX
S1dlYnNpdGVEYXRhU3RvcmVSZXNldFF1b3RhQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgV2Vi
S2l0Ojp0b0ltcGwoZGF0YVN0b3JlUmVmKS0+cmVzZXRRdW90YShbY29udGV4dCwgY2FsbGJhY2td
IHsKKyAgICAgICAgaWYgKGNhbGxiYWNrKQorICAgICAgICAgICAgY2FsbGJhY2soY29udGV4dCk7
CisgICAgfSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
V2Vic2l0ZURhdGFTdG9yZVJlZi5oCmluZGV4IDk1MjM5YTNiMGIzYWQ2MGMyZjc4MzdmZTZmNWEx
MDc3MzYxYWZkZTAuLjIzZmMyZTcyNmY5MjBmMWFiM2RmOWVkMGQyN2ZkMDYxYWMyOTcxNGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9y
ZVJlZi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oCkBAIC0xNTUsNiArMTU1LDkgQEAgV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0
YVN0b3JlQ2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3YKIAog
V0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0Q2FjaGVNb2RlbFN5bmNocm9ub3Vz
bHlGb3JUZXN0aW5nKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIFdLQ2FjaGVN
b2RlbCBjYWNoZU1vZGVsKTsKIAordHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlUmVz
ZXRRdW90YUNhbGxiYWNrKSh2b2lkKiBmdW5jdGlvbkNvbnRleHQpOworV0tfRVhQT1JUIHZvaWQg
V0tXZWJzaXRlRGF0YVN0b3JlUmVzZXRRdW90YShXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0
b3JlUmVmLCB2b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVSZXNldFF1b3RhQ2FsbGJh
Y2sgY2FsbGJhY2spOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHAKaW5kZXggYWQ1Nzk5MWUzY2FjN2M1YWZiZWZjOGE2NWY5YWZmOWI0MDljYTkyNC4uNGM0MWM5
MzhhODY3ZGFjNjAyMjdlZTQwZDY3NWM5NmY0ZDRmMTgzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0x
MzY3LDYgKzEzNjcsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNz
QXNzZXJ0aW9uKCkKICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IG51bGxwdHI7CiB9
CiAKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNl
dFF1b3RhKHNlc3Npb25JRCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CiAKICN1bmRlZiBNRVNTQUdFX0NIRUNLCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4
IDcyY2U0MjU2YmFhZTA3YzkyZWZjZDQ5OGUxMzIwNmJhMjk5NDNiNWEuLmI3N2NlN2QzZTZhZmVl
MTFhZTYyMDA5Y2Y2OWVjZjRiNzAwY2Q1N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Niw2ICs1Niw3IEBA
IGVudW0gY2xhc3MgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIDogYm9vbDsKIGVudW0gY2xh
c3MgU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQgOiBib29sOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47
CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOworc3RydWN0IENsaWVudE9yaWdpbjsKIH0KIAog
bmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xOTYsNiArMTk3LDggQEAgcHVibGljOgogICAgIHZvaWQg
cmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJp
bmcmKTsKIAorICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKKwogcHJpdmF0ZToKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJv
eHkKICAgICB2b2lkIGdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRp
b25zJikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAKaW5kZXggNDA2OGVlNDFmZmNkNmRmOTVhM2QzYjUxNmJiYzI1MzBlMmM5OTg5MS4uN2VlY2Ez
ZDNjYjQzYjNiMjY3MDYyOWQwZmFjZGY1MTE5ODgwYWIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtNTUxLDYgKzU1MSwxMiBAQCBOZXR3b3JrUHJv
Y2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURh
dGFTdG9yZSogd2l0aAogICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
bG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwogICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIAorICAgIGF1dG8gY2FjaGVTdG9yYWdl
RGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNo
ZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKKyAgICBpZiAoIWNhY2hlU3RvcmFn
ZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoY2FjaGVTdG9yYWdlRGlyZWN0b3J5
KTsKKyAgICB9CisKICAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQogICAgICAgICBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNv
bHZlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBpZiAocGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW0KaW5kZXggMGZmM2VhMDk2MzFiNTc3ZDFlYTc5MDgyNWUzMDVlZTkz
MjNmYmRjNy4uMDcxOTllY2FjZGNiNDc2NDkwNzQzMzI4ZTk4OWNiYWM1YmFiNGNhYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURh
dGFTdG9yZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtMTkxLDYgKzE5MSwxMCBAQCBXZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICAg
ICBpZiAoIXBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKICAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBh
cmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKKyAgICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURp
cmVjdG9yeSA9IGNhY2hlU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGlmICghcGFyYW1ldGVycy5j
YWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5jYWNoZVN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKKwogICAgIHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gcGVyT3JpZ2lu
U3RvcmFnZVF1b3RhKCk7CiAgICAgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFn
ZVF1b3RhID0gcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
Y3BwCmluZGV4IGJiOTg0MTY2NDU0YjU2YWVhNGM4ZGJkNDg1YjcyMTQwMGJiMTg2Y2EuLmFjMmYz
OGQ3ZWRiNTRmN2EyNGFiYWQzZGE0NGU1NmQ4ZWQzNjE3OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBA
IC0yMDgzLDYgKzIwODMsMTIgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURh
dGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRl
cnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICB9CiAKKyAgICBh
dXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IHRoaXMtPmNhY2hlU3RvcmFnZURpcmVjdG9yeSgp
OworICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVT
dG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CisgICAgICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5OworICAgIH0KKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQogICAgIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gcmVzb2x2ZWRJbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsKICAgICBpZiAoIXBhcmFtZXRlcnMuaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKQEAgLTIxNjksNiArMjE3NSwxNSBAQCB2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8
TG9jYWxTdG9yYWdlRAogICAgIEFTU0VSVCghY29tcGxldGlvbkhhbmRsZXIpOwogfQogCit2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2Fs
bGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAo
YXV0byogcHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQorICAgICAgICAg
ICAgcHJvY2Vzcy0+cmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvciA9
IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CisgICAgfQorfQorCiAjaWYgIVBM
QVRGT1JNKENPQ09BKQogV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdE1lZGlh
Q2FjaGVEaXJlY3RvcnkoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDI3ODRmZTM3ZTNlYTRhOGExOGU1
NTUxZDM5YjJjYTM5OTIwN2ZhYWEuLmY1ZWU0MjIwN2RhMjBmOTI3NjFhZGIxMDI1Mzk2Y2QxY2E4
MWVmOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTI5MSw3ICsyOTEsOSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFdURjo6U3RyaW5nIGRlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCk7CiAgICAg
c3RhdGljIFdURjo6U3RyaW5nIGRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3Rv
cnkoKTsKICAgICBzdGF0aWMgV1RGOjpTdHJpbmcgZGVmYXVsdEphdmFTY3JpcHRDb25maWd1cmF0
aW9uRGlyZWN0b3J5KCk7Ci0gICAgCisKKyAgICB2b2lkIHJlc2V0UXVvdGEoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIGZldGNoRGF0YUFuZEFwcGx5
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9w
dGlvbj4sIFJlZlB0cjxXb3JrUXVldWU+JiYsIEZ1bmN0aW9uPHZvaWQoVmVjdG9yPFdlYnNpdGVE
YXRhUmVjb3JkPik+JiYgYXBwbHkpOwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggN2NhY2M3YzFmNGE1OTQ1OWNhNjI1YjlkZWJiYjBhMWExZTQy
Y2M4NS4uOTY3OWRiMjVkMzgwYTI2OGE3NjU0NDYwNjlmMGY0M2VhMTQ5YzUzOSAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBA
CisyMDE5LTExLTIwICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAg
IENyb3NzLXRocmVhZCB2ZXJzaW9uIFN0b3JhZ2VRdW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzk3MQorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNTcyOTAzNDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFn
ZVF1b3RhTWFuYWdlci5jcHA6IFJlbW92ZWQgYXMgd2UgaGF2ZSBhIGRpZmZlcmVudCBTdG9yYWdl
UXVvdGFNYW5hZ2VyIAorICAgICAgICBpbXBsZW1lbnRhdGlvbiBub3cuCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6IHJlc2V0IFN0b3JhZ2VRdW90YU1hbmFn
ZXIncyBxdW90YSBiZXR3ZWVuIHRlc3RzLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpyZXNldFF1b3RhKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmg6CisKIDIwMTktMTEtMTkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVtb3ZlIHJ1bk51bGxpc2hBd2FyZU9wZXJhdG9yc0VuYWJsZWQKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggNzMxOWQyZmM0OTcwZWM0ZWViY2QwMTE0YTM0MDcwZjVhZGRkMWEw
NC4uYjNiYTlhMmNhZGVmYTFiNWE1OThhNmU0MjA2NDIxNjdmNjYxNGUwZSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTczNyw3ICs3MzcsNiBAQAogCQk5Mzk5QkEwNjIzNzExMTRGMDA4Mzky
QkYgLyogSW5kZXhlZERCTm90SW5QYWdlQ2FjaGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk5QkEwMzIzNzExMEJGMDA4MzkyQkYg
LyogSW5kZXhlZERCTm90SW5QYWdlQ2FjaGUuaHRtbCAqLzsgfTsKIAkJOTNBRjRFQ0UxNTA2RjA2
NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5k
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNB
RjRFQ0QxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZv
ckltYWdlc19CdW5kbGUuY3BwICovOyB9OwogCQk5M0FGNEVEMTE1MDZGMTMwMDA3RkQ1N0UgLyog
bG90cy1vZi1pbWFnZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0FGNEVDRjE1MDZGMTIzMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFn
ZXMuaHRtbCAqLzsgfTsKLQkJOTNCNjIwNTQyMzRFQTYyQzAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90
YU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNCNjIwNTMyMzRFQTMyQjAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwICov
OyB9OwogCQk5M0NGQTg2NzFDRUI5RTM4MDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1
dC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzQ0ZBODY2MUNFQjlERTEwMDA1NjVBOCAvKiBhdXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0
bWwgKi87IH07CiAJCTkzRDExOUZDMjJDNjgwRjcwMDlCRTNDNyAvKiBsb2NhbHN0b3JhZ2Utb3Bl
bi13aW5kb3ctcHJpdmF0ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzRDExOUZCMjJDNTcxMTIwMDlCRTNDNyAvKiBsb2NhbHN0b3Jh
Z2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sICovOyB9OwogCQk5M0UyQzU1NTFGRDMyMDQxMDBF
MURGNkEgLyogTGluZUVuZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0UyQzU1NDFGRDMyMDQxMDBFMURGNkEgLyogTGluZUVuZGluZy5jcHAg
Ki87IH07CkBAIC0xMTQyLDcgKzExNDEsNiBAQAogCQkJZHN0UGF0aCA9IFRlc3RXZWJLaXRBUEku
cmVzb3VyY2VzOwogCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDc7CiAJCQlmaWxlcyA9ICgKLQkJCQlD
RDgzOTRERjIzMkFGN0MwMDAxNDk0OTUgLyogbWVkaWEtbG9hZGluZy5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovLAogCQkJCTU1QTgxN0ZGMjE4MTAyMUEwMDA0QTM5QSAvKiAxMDB4MTAwLXJlZC50
Z2EgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMUE5RTUyQzkxM0U2NUVGNDAwNjkxN0Y1IC8q
IDE4LWNoYXJhY3RlcnMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NUE4MTgwMDIx
ODEwMjIxMDAwNEEzOUEgLyogNDAweDQwMC1ncmVlbi5wbmcgaW4gQ29weSBSZXNvdXJjZXMgKi8s
CkBAIC0xMzc1LDYgKzEzNzMsNyBAQAogCQkJCTkzMEFENDAyMTUwNjk4RDAwMDY3OTcwRiAvKiBs
b3RzLW9mLXRleHQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlBRDU3QUMyMjFEQTc0
NjZFMDBGRjFCREUgLyogbWFueS1pZnJhbWVzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJ
CQkJNzc3MkVDRTEyMkZFMDZDNjAwMDlBNzk5IC8qIG1hbnktc2FtZS1vcmlnaW4taWZyYW1lcy5o
dG1sIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCUNEODM5NERGMjMyQUY3QzAwMDE0OTQ5NSAv
KiBtZWRpYS1sb2FkaW5nLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJQ0RBMzE1OUEx
RUQ1NDhGMTAwOUY2MEQzIC8qIE1lZGlhUGxheWJhY2tTbGVlcEFzc2VydGlvbi5odG1sIGluIENv
cHkgUmVzb3VyY2VzICovLAogCQkJCUNEQzk0NDJGMUVGMjA1RDYwMDU5QzNDNCAvKiBtZWRpYXN0
cmVhbXRyYWNrLWRldGFjaGVkLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJRTEyMjBE
Q0ExNTVCMjhBQTAwMTNFMkZDIC8qIE1lbW9yeUNhY2hlRGlzYWJsZVdpdGhpblJlc291cmNlTG9h
ZERlbGVnYXRlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCkBAIC0yMTQ3LDcgKzIxNDYsNiBA
QAogCQk5M0FGNEVDQTE1MDZGMDM1MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0Rm9ySW1hZ2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzQUY0RUNEMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvcklt
YWdlc19CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FGNEVDRjE1
MDZGMTIzMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRt
bDsgcGF0aCA9ICJsb3RzLW9mLWltYWdlcy5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJOTNCNjIwNTMyMzRFQTMyQjAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVF1b3RhTWFuYWdl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0ZBODY2MUNFQjlERTEwMDA1
NjVBOCAvKiBhdXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7
IHBhdGggPSAiYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTNDRkE4NjgxQ0VCQ0ZFRDAwMDU2NUE4IC8qIENhbmRpZGF0ZVRlc3RzLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2FuZGlkYXRlVGVzdHMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDExOUZCMjJDNTcxMTIwMDlCRTND
NyAvKiBsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5odG1sOyBwYXRoID0gImxvY2Fsc3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzEyNCw3ICszMTIyLDYgQEAKIAkJCQk0MTk3
M0I1QzFBRjIyODc1MDA2QzdCMzYgLyogU2hhcmVkQnVmZmVyLmNwcCAqLywKIAkJCQlBMTc5OTE4
OTFFMUNBMjQxMDBBNTA1RUQgLyogU2hhcmVkQnVmZmVyVGVzdC5jcHAgKi8sCiAJCQkJQTE3OTkx
OEExRTFDQTI0MTAwQTUwNUVEIC8qIFNoYXJlZEJ1ZmZlclRlc3QuaCAqLywKLQkJCQk5M0I2MjA1
MzIzNEVBMzJCMDBENDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8sCiAJCQkJRUNB
NjgwQ0QxRTY4Q0MwOTAwNzMxRDIwIC8qIFN0cmluZ1V0aWxpdGllcy5tbSAqLywKIAkJCQlDRTRE
NURFNTFGNjc0M0JBMDA3MkNGQzYgLyogU3RyaW5nV2l0aERpcmVjdGlvbi5jcHAgKi8sCiAJCQkJ
OTNBMjU4OTgxRjkyRkYxNTAwM0U1MTBDIC8qIFRleHRDb2RlYy5jcHAgKi8sCkBAIC0zODUyLDYg
KzM4NDksNyBAQAogCQkJCTkzMEFENDAxMTUwNjk4QjMwMDY3OTcwRiAvKiBsb3RzLW9mLXRleHQu
aHRtbCAqLywKIAkJCQlBRDU3QUMxRDFEQTc0NjM4MDBGRjFCREUgLyogbWFueS1pZnJhbWVzLmh0
bWwgKi8sCiAJCQkJNzc3MkVDRTAyMkZFMDVFMTAwMDlBNzk5IC8qIG1hbnktc2FtZS1vcmlnaW4t
aWZyYW1lcy5odG1sICovLAorCQkJCUNEODM5NERFMjMyQUYxNUUwMDE0OTQ5NSAvKiBtZWRpYS1s
b2FkaW5nLmh0bWwgKi8sCiAJCQkJQ0RDOTQ0MkIxRUYxRkJEMjAwNTlDM0M0IC8qIG1lZGlhc3Ry
ZWFtdHJhY2stZGV0YWNoZWQuaHRtbCAqLywKIAkJCQk1MUNEMUM3MTFCMzhENDg0MDAxNDJDQTUg
LyogbW9kYWwtYWxlcnRzLWluLW5ldy1hYm91dC1ibGFuay13aW5kb3cuaHRtbCAqLywKIAkJCQk3
QTE0NThGQjFBRDVDMDM1MDBFMDY3NzIgLyogbW91c2UtYnV0dG9uLWxpc3RlbmVyLmh0bWwgKi8s
CkBAIC0zODgzLDcgKzM4ODEsNiBAQAogCQkJCTA3Q0QzMkY3MjA2NUI3MkEwMDY0QTRCRSAvKiB2
aWRlby5odG1sICovLAogCQkJCTFDMkI4MTg0MUM4OTI0QTIwMEE1NTI5RiAvKiB3ZWJmb250Lmh0
bWwgKi8sCiAJCQkJNDY4RjJGOTMyMzY4REFBNzAwRjRCODY0IC8qIHdpbmRvdy1vcGVuLXRoZW4t
ZG9jdW1lbnQtb3Blbi5odG1sICovLAotCQkJCUNEODM5NERFMjMyQUYxNUUwMDE0OTQ5NSAvKiBt
ZWRpYS1sb2FkaW5nLmh0bWwgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFJlc291cmNlczsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00ODY0LDcgKzQ4NjEsNiBAQAogCQkJCTdDQ0U3RUNG
MUE0MTFBN0UwMDQ0N0M0QyAvKiBTdG9wTG9hZGluZ0Zyb21EaWRSZWNlaXZlUmVzcG9uc2UubW0g
aW4gU291cmNlcyAqLywKIAkJCQlDREMwOTMyRTIxQzk5MzQ0MDAzMEM0QjAgLyogU3RvcFN1c3Bl
bmRSZXN1bWVBbGxNZWRpYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQxNEFENjg2MjI4NUQxQzAw
MDc3N0YyRCAvKiBTdG9yYWdlUXVvdGEubW0gaW4gU291cmNlcyAqLywKLQkJCQk5M0I2MjA1NDIz
NEVBNjJDMDBENDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MTVCRTE3MTFENDI4RTRCMDBERDdDNjggLyogU3RvcmVCbG9iVGhlbkRlbGV0ZS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUQwMUE0MTFBN0UwMDQ0N0M0QyAvKiBTdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3
RUQxMUE0MTFBN0UwMDQ0N0M0QyAvKiBTdHJpbmdUcnVuY2F0b3IubW0gaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TdG9yYWdlUXVv
dGFNYW5hZ2VyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TdG9yYWdl
UXVvdGFNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQxYzY3YmYw
NTJmN2IwYTM0NTNkMDU0ZjI1MjkxOTFlZWYzZjE3Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
U3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAot
LyoKLSogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxX
ZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VR
dW90YVVzZXIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJIHsKLQotc3RhdGljIGNvbnN0IGludCBkZWZhdWx0UXVvdGEgPSAxICogS0I7Ci0K
LWNsYXNzIE1vY2tRdW90YVVzZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
VXNlciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgTW9ja1F1b3RhVXNlcihTdG9yYWdlUXVvdGFN
YW5hZ2VyJiBtYW5hZ2VyKQotICAgICAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKLSAgICB7Ci0g
ICAgICAgIG1hbmFnZXIuYWRkVXNlcigqdGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTcGFj
ZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKSB7IG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOyB9Ci0K
LXByaXZhdGU6Ci0gICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgZmluYWwKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3NwYWNlVXNlZDsKLSAgICB9Ci0KLSAgICB2b2lkIHdoZW5Jbml0aWFs
aXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIGZpbmFsCi0gICAgewot
ICAgICAgICBpZiAoIW1fc3BhY2VVc2VkKQotICAgICAgICAgICAgQVNTRVJUX0VRKG1fbWFuYWdl
ci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6OlVuaW5pdGlhbGl6ZWQpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlRfRVEobV9tYW5hZ2VyLT5zdGF0ZSgpLCBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6Q29tcHV0aW5nU3BhY2VVc2VkKTsKLQotICAgICAg
ICAvLyBSZXNldCB1c2FnZSB0byBtb2NrIGRlbGV0aW9uLgotICAgICAgICBtX3NwYWNlVXNlZCA9
IDA7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgfQotCi0gICAgdWludDY0X3QgbV9zcGFjZVVz
ZWQgeyAwIH07Ci0gICAgU3RvcmFnZVF1b3RhTWFuYWdlciogbV9tYW5hZ2VyOwotfTsKLSAgICAK
LVRFU1QoU3RvcmFnZVF1b3RhTWFuYWdlclRlc3QsIEJhc2ljKQotewotICAgIFN0b3JhZ2VRdW90
YU1hbmFnZXIqIHN0b3JhZ2VRdW90YU1hbmFnZXJQdHIgPSBudWxscHRyOwotICAgIFN0b3JhZ2VR
dW90YU1hbmFnZXIgc3RvcmFnZVF1b3RhTWFuYWdlcihkZWZhdWx0UXVvdGEsIFsmc3RvcmFnZVF1
b3RhTWFuYWdlclB0cl0odWludDY0X3QgcXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWlu
dDY0X3Qgc3BhY2VJbmNyZWFzZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDx1aW50
NjRfdD4pPiYmIGNvbXBsZXRpb25IYW5sZGVyKSB7Ci0gICAgICAgIEFTU0VSVF9UUlVFKHN0b3Jh
Z2VRdW90YU1hbmFnZXJQdHIpOwotICAgICAgICBBU1NFUlRfRVEoc3RvcmFnZVF1b3RhTWFuYWdl
clB0ci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6OldhaXRpbmdGb3JTcGFj
ZUluY3JlYXNlUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIEFsbG93IGFsbCBzcGFjZSBpbmNyZWFz
ZSByZXF1ZXN0cy4KLSAgICAgICAgY29tcGxldGlvbkhhbmxkZXIoc3BhY2VJbmNyZWFzZSArIGN1
cnJlbnRTcGFjZSk7Ci0gICAgfSk7Ci0gICAgc3RvcmFnZVF1b3RhTWFuYWdlclB0ciA9ICZzdG9y
YWdlUXVvdGFNYW5hZ2VyOwotCi0KLSAgICBNb2NrUXVvdGFVc2VyIG1vY2tVc2VyKHN0b3JhZ2VR
dW90YU1hbmFnZXIpOwotCi0gICAgLy8gR3JhbnQgZGlyZWN0bHkuCi0gICAgc3RvcmFnZVF1b3Rh
TWFuYWdlci5yZXF1ZXN0U3BhY2UoMC4xICogS0IsIFsmXShXZWJDb3JlOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpEZWNpc2lvbiBkZWNpc2lvbikgewotICAgICAgICBBU1NFUlRfRVEoZGVjaXNpb24s
IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudCk7Ci0gICAgICAg
IG1vY2tVc2VyLnNldFNwYWNlVXNlZCgwLjEgKiBLQik7Ci0gICAgfSk7Ci0KLSAgICAvLyBHcmFu
dCBhZnRlciBjb21wdXRpbmcgYWNjdXJhdGUgdXNhZ2UuCi0gICAgc3RvcmFnZVF1b3RhTWFuYWdl
ci5yZXF1ZXN0U3BhY2UoMS4wICogS0IsIFsmXShXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpEZWNpc2lvbiBkZWNpc2lvbikgewotICAgICAgICBBU1NFUlRfRVEoZGVjaXNpb24sIFdlYkNv
cmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudCk7Ci0gICAgICAgIG1vY2tV
c2VyLnNldFNwYWNlVXNlZCgxLjAgKiBLQik7Ci0gICAgfSk7Ci0KLSAgICAvLyBHcmFudCBhZnRl
ciBjb21wdXRpbmcgYWNjdXJhdGUgdXNhZ2UgYW5kIHJlcXVlc3Rpbmcgc3BhY2UgaW5jcmVhc2Uu
Ci0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2UoMTAgKiBLQiwgWyZdKFdlYkNv
cmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIGRlY2lzaW9uKSB7Ci0gICAgICAgIEFT
U0VSVF9FUShzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0KTsKLSAgICAgICAgQVNTRVJUX0VR
KGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQp
OwotICAgIH0pOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDNhMDdjMTM5ODFkZGMzMDU1OWZl
YTg0YmQyOGZhMmZiYWRkZTU2ZGMuLjI5MjE0YmZlM2ZhYWJkNjg0NWUzYTkxMjk0ZWEwYmRjYWQ3
MmE1NDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
Y3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC05
ODEsNiArOTgxLDggQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVu
dFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKICAgICBjbGVhclNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25zKCk7CiAgICAgY2xlYXJET01DYWNoZXMoKTsKIAorICAgIHJlc2V0
UXVvdGEoKTsKKwogICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2Vy
dmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwogCiAgICAgV0tDb250
ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLmNvbnRleHQoKSk7CkBAIC0zMTQyLDYgKzMxNDQsMTMgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCiAgICAgcnVuVW50aWwoY29udGV4dC5kb25lLCBu
b1RpbWVvdXQpOwogfQogCit2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFF1b3RhKCkKK3sKKyAg
ICBTdG9yYWdlVm9pZENhbGxiYWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKKyAgICBXS1dlYnNp
dGVEYXRhU3RvcmVSZXNldFF1b3RhKFRlc3RDb250cm9sbGVyOjp3ZWJzaXRlRGF0YVN0b3JlKCks
ICZjb250ZXh0LCBTdG9yYWdlVm9pZENhbGxiYWNrKTsKKyAgICBydW5VbnRpbChjb250ZXh0LmRv
bmUsIG5vVGltZW91dCk7Cit9CisKIHN0cnVjdCBGZXRjaENhY2hlT3JpZ2luc0NhbGxiYWNrQ29u
dGV4dCB7CiAgICAgRmV0Y2hDYWNoZU9yaWdpbnNDYWxsYmFja0NvbnRleHQoVGVzdENvbnRyb2xs
ZXImIGNvbnRyb2xsZXIsIFdLU3RyaW5nUmVmIG9yaWdpbikKICAgICAgICAgOiB0ZXN0Q29udHJv
bGxlcihjb250cm9sbGVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmlu
ZGV4IDFiMjYxYmNkYTFiYTBmMjFmMTc4NDkwOTJhMDI2YzYwZWFiYTk4NDQuLmFkNzFjODY4YzAy
ZmU1OGJiOWE4MzkyNzhmMGZkYjNmMWFkZWJlM2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmgKQEAgLTI2OSw2ICsyNjksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcygpOwogICAgIHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlclBy
b2Nlc3MoKTsKIAorICAgIHZvaWQgcmVzZXRRdW90YSgpOworCiAgICAgdm9pZCByZW1vdmVBbGxT
ZXNzaW9uQ3JlZGVudGlhbHMoKTsKIAogICAgIHZvaWQgY2xlYXJJbmRleGVkRGF0YWJhc2VzKCk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384062</attachid>
            <date>2019-11-21 09:36:56 -0800</date>
            <delta_ts>2019-11-21 10:06:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203971-20191121093652.patch</filename>
            <type>text/plain</type>
            <size>169415</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzQ4OTA0NDNjMTJhY2I1
MWQ2NTBlYjY1MWFmYzNlMjFjYzRlZDUwOS4uMmE2YjcwOGI0Mjc1OTdiNmQyMDkyMTExMzY4NGE3
NWNkN2JiYTRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NSBAQAorMjAxOS0xMS0yMSAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVy
c2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3MjkwMzQ5
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCBhIGxvY2stYmFzZWQgU3RvcmFnZVF1b3RhTWFuYWdlciBzbyB0aGF0IHF1b3RhIGNoZWNr
IGNhbiBiZSBkb25lIG9uIGRpZmZlcmVudCB0aHJlYWRzLgorICAgICAgICBJZiBzcGFjZSByZXF1
ZXN0IGlzIG1hZGUgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCwgaXQgbmVlZHMgdG8gaG9sZCBhIGxv
Y2sgdW50aWwgaXQgaXMgZmluaXNoZWQsIHNvIG5vIHJlcXVlc3QKKyAgICAgICAgZnJvbSBkaWZm
ZXJlbnQgdGhyZWFkcyBjYW4gYmUgcGVyZm9ybWVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAg
IElmIHNwYWNlIHJlcXVlc3QgaXMgbWFkZSBvbiB0aGUgbWFpbiB0aHJlYWQsIHdlIHdpbGwgZGlz
cGF0Y2ggaXQgdG8gYSBiYWNrZ3JvdW5kIHRocmVhZCBhbmQgc2NoZWR1bGUgYSBjYWxsbGJhY2sK
KyAgICAgICAgdG8gdGhlIG1haW4gdGhyZWFkIHdoZW4gcmVzdWx0IGlzIGF2YWlsYWJsZSwgc28g
dGhlIG1haW4gdGhyZWFkIHdpbGwgbm90IGJlIGJsb2NrZWQuCisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyBxdW90YSByZWxhdGVkIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJh
c2VzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpyZXF1ZXN0U3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRpc2tVc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90
YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OlF1b3RhVXNlcjo6flF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRl
U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2Vy
dmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3BhY2VVc2Vk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90
YVVzZXI6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjplbnN1cmVRdW90YVVz
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnN0
YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5pc2hDb21w
dXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpJREJTZXJ2ZXI6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGVjcmVhc2VTcGFjZVVz
ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6Omlu
Y3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCk6IERlbGV0ZWQu
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluaXRpYWxpemVRdW90YVVzZXIpOiBE
ZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5n
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkT3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNy
ZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bUNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OnJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJl
Y29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtR2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0
VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVxdWVzdFNwYWNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OndhaXRG
b3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2spOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Zmlu
aXNoU3BhY2VJbmNyZWFzZVRhc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6ZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVB
ZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0
ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJl
bmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Omdl
dFJlY29yZEFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OmdldENvdW50QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpvcGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hl
Y2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb246OmFib3J0VHJhbnNhY3Rpb25XaXRob3V0Q2FsbGJhY2spOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uOjpwdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
OjpnZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9wZW5DdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjppdGVyYXRl
Q3Vyc29yKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURC
U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6cXVvdGFN
YW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6SW5Qcm9jZXNz
SURCU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIp
OiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJ
REJTZXJ2ZXIuaDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbkJhY2tncm91
bmRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dHJ5R3Jh
bnRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVwZGF0
ZVF1b3RhQmFzZWRPblVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXNldFF1b3RhRm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp+U3RvcmFnZVF1b3RhTWFuYWdlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzcGFjZVVz
YWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5p
dGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjphZGRVc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1Bl
bmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3RhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90YSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzdGF0ZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmg6IFJlbW92ZWQuCisKIDIw
MTktMTEtMjEgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
Z3Jlc3Npb24gKHIyNTI2NjApOiBMYXlvdXQgVGVzdCBwbGF0Zm9ybS9pb3MvbWVkaWFzdHJlYW0v
YXVkaW8tbXV0ZWQtaW4tYmFja2dyb3VuZC10YWIuaHRtbCBpcyBmYWlsaW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IDk5ZmNjMDYyNjNlNzhjYTI3NmFhYzQ2MTA0ZDc2Nzg2ZGMwMGE4NGQuLjA0YTEwYzUwNjI1NTdj
MTQ2NmFhZDFmNTVkMjU1OWMyMjVhZTdiYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODggQEAKKzIw
MTktMTEtMjEgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jv
c3MtdGhyZWFkIHZlcnNpb24gU3RvcmFnZVF1b3RhTWFuYWdlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTcxCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81NzI5MDM0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDogSW50cm9kdWNlIGNs
YXNzIFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyIHRvIG1hbmFnZSBhbGwgCisgICAgICAgIFN0
b3JhZ2VRdW90YU1hbmFnZXJzIG9mIHRoZSBzYW1lIHNlc3Npb24uIAorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1h
bmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24p
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmln
aW5zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZlcik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRJbmRleGVkRGF0YWJhc2VTZXNz
aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNldFNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VySURCUm9vdFBhdGgpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmluaXRpYWxpemVTdG9yYWdlUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2xlYXJTdG9yYWdlUXVvdGEpOiBEZWxldGVkLgorICAgICAg
ICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxp
emVRdW90YVVzZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0
UXVvdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0
b3JhZ2VRdW90YU1hbmFnZXI6OmVuc3VyZU9yaWdpblN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6
OmV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OmNhY2hlUm9vdFBhdGggY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1h
bmFnZXI6OnNldElEQlJvb3RQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjppZGJSb290UGF0aCBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yYWdlUXVvdGFNYW5hZ2Vyczo6ZGVmYXVsdFF1
b3RhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlN0
b3JhZ2VRdW90YU1hbmFnZXJzOjpzZXREZWZhdWx0UXVvdGFzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlN0b3JhZ2VRdW90YU1hbmFnZXJzOjptYW5hZ2Vyc1Bl
ck9yaWdpbik6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpnZXREaXJlY3Rv
cnlTaXplKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OmRpc2tVc2Fn
ZSk6IHN0YXRpYyBmdW5jdGlvbiB0byBnZXQgdGhlIGRpc2sgdXNhZ2Ugb2YgQ2FjaGVTdG9yYWdl
LgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6cmVxdWVzdFNwYWNlKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJlYWRDYWNoZXNGcm9tRGlz
ayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjp3cml0ZVNpemVGaWxl
KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJlYWRTaXplRmlsZSk6
CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjppbml0aWFsaXplUXVvdGFV
c2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmUuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VF
bmdpbmVDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnB1
dCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpDYWNoZXMpOgorICAgICAgICAoV2ViS2l0
OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6fkNhY2hlcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6Q2FjaGVzOjp1cGRhdGVTaXplRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6Q2FjaGVzOjppbml0aWFsaXplU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6Q2FjaGVzOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6
Q2FjaGVzOjpyZXF1ZXN0U3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlczo6d3JpdGVSZWNvcmQpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hl
czo6cmVtb3ZlUmVjb3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6
OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6Q2FjaGVzOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmg6CisgICAgICAgICogU2hhcmVk
L1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oOiBBZGQgYSBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgcGFy
YW1ldGVyIHNvIHdlIGtub3cgdGhlIGRpcmVjb3RyeSBvZiAKKyAgICAgICAgQ2FjaGVTdG9yYWdl
IHdoZW4gd2Ugc3RhcnQgdXNpbmcgV2Vic2l0ZURhdGFTdG9yZS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwOgorICAgICAgICAoV0tXZWJzaXRl
RGF0YVN0b3JlUmVzZXRRdW90YSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0
ZURhdGFTdG9yZVJlZi5oOiBBZGQgYSBDIEFQSSBmb3IgcmVzZXRpbmcgcXVvdGEgaW4gVGVzdFJ1
bm5lci4KKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6cmVzZXRRdW90YSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cmVzZXRRdW90YSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuaDoKKwogMjAxOS0xMS0yMCAgQ2hhbmdTZW9rIE9oICA8Y2hhbmdzZW9rQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgW0dUS10gQWRkIEFOR0xFIGJhY2tlbmQgdG8gR1RLIHBvcnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCmluZGV4IGVmYzI3NWY2ZGE4YzJjMTA1NmJmMDBkNTljZjVhNWY5YjlmNWVm
OTEuLjBlYzgwNTExMzM4YWY0MjdlMGI1ODhjNGExYzNlMjRhMWNmNjU2YzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQpAQCAtMTM4MSw3ICsxMzgxLDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oCiAgICAgc3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaAogICAgIHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdl
ci5oCi0gICAgc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmgKICAgICBzdG9yYWdlL1N0b3JhZ2VU
eXBlLmgKIAogICAgIHN0eWxlL1N0eWxlQ2hhbmdlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXggZTYxZGI4Yzk0
MjhkOTg0ZGE2NDY5NmU3Yzg0Mjc4NzQyNjljMjdlNi4uZWViNDNiMDY3MTVkNmNmNzBjM2MwZTdm
OTM4Mzk2YmMwZDUwNTE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTQ2LDI4ICs0NiwyOCBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKLVJlZjxJREJTZXJ2ZXI+IElE
QlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgUXVvdGFNYW5hZ2VyR2V0
dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVh
dGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1
ZXN0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SURCU2VydmVyKHNlc3Npb25JRCwgV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKSk7CiB9CiAK
LVJlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRl
ciYmIHF1b3RhTWFuYWdlckdldHRlcikKK1JlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRl
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9y
eVBhdGgsIFN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciYmIHF1b3RhTWFuYWdlckdl
dHRlcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJTZXJ2ZXIoc2Vzc2lvbklELCBk
YXRhYmFzZURpcmVjdG9yeVBhdGgsIFdURk1vdmUocXVvdGFNYW5hZ2VyR2V0dGVyKSkpOwogfQog
Ci1JREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFF1b3RhTWFu
YWdlckdldHRlciYmIHF1b3RhTWFuYWdlckdldHRlcikKK0lEQlNlcnZlcjo6SURCU2VydmVyKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVy
JiYgc3BhY2VSZXF1ZXN0ZXIpCiAgICAgOiBDcm9zc1RocmVhZFRhc2tIYW5kbGVyKCJJbmRleGVk
RGF0YWJhc2UgU2VydmVyIiwgQXV0b2RyYWluZWRQb29sRm9yUnVuTG9vcDo6VXNlKQogICAgICwg
bV9zZXNzaW9uSUQoc2Vzc2lvbklEKQotICAgICwgbV9xdW90YU1hbmFnZXJHZXR0ZXIoV1RGTW92
ZShxdW90YU1hbmFnZXJHZXR0ZXIpKQorICAgICwgbV9zcGFjZVJlcXVlc3RlcihXVEZNb3ZlKHNw
YWNlUmVxdWVzdGVyKSkKIHsKIH0KIAotSURCU2VydmVyOjpJREJTZXJ2ZXIoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgUXVvdGFN
YW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorSURCU2VydmVyOjpJREJTZXJ2ZXIo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5
UGF0aCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYgc3BhY2VSZXF1ZXN0ZXIp
CiAgICAgOiBDcm9zc1RocmVhZFRhc2tIYW5kbGVyKCJJbmRleGVkRGF0YWJhc2UgU2VydmVyIiwg
QXV0b2RyYWluZWRQb29sRm9yUnVuTG9vcDo6VXNlKQogICAgICwgbV9zZXNzaW9uSUQoc2Vzc2lv
bklEKQogICAgICwgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgoZGF0YWJhc2VEaXJlY3RvcnlQYXRo
KQotICAgICwgbV9xdW90YU1hbmFnZXJHZXR0ZXIoV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0ZXIp
KQorICAgICwgbV9zcGFjZVJlcXVlc3RlcihXVEZNb3ZlKHNwYWNlUmVxdWVzdGVyKSkKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiSURCU2VydmVyIGNyZWF0ZWQgYXQgcGF0aCAlcyIsIGRhdGFiYXNl
RGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJklEQlNlcnZlcjo6dXBncmFkZUZpbGVzSWZOZWNlc3Nh
cnkpKTsKQEAgLTY4MywxNTcgKzY4MywyNCBAQCB2b2lkIElEQlNlcnZlcjo6cGVyZm9ybUNsb3Nl
QW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcgogCiB2
b2lkIElEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzKHVpbnQ2NF90
IGNhbGxiYWNrSUQpCiB7Ci0gICAgZm9yIChhdXRvJiB1c2VyIDogbV9xdW90YVVzZXJzLnZhbHVl
cygpKQotICAgICAgICB1c2VyLT5yZXNldFNwYWNlVXNlZCgpOwotCiAgICAgYXV0byBjYWxsYmFj
ayA9IG1fZGVsZXRlRGF0YWJhc2VDb21wbGV0aW9uSGFuZGxlcnMudGFrZShjYWxsYmFja0lEKTsK
ICAgICBBU1NFUlQoY2FsbGJhY2spOwogICAgIGNhbGxiYWNrKCk7CiB9CiAKLUlEQlNlcnZlcjo6
UXVvdGFVc2VyOjpRdW90YVVzZXIoSURCU2VydmVyJiBzZXJ2ZXIsIFN0b3JhZ2VRdW90YU1hbmFn
ZXIqIG1hbmFnZXIsIENsaWVudE9yaWdpbiYmIG9yaWdpbikKLSAgICA6IG1fc2VydmVyKHNlcnZl
cikKLSAgICAsIG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKLSAgICAsIG1fb3JpZ2lu
KFdURk1vdmUob3JpZ2luKSkKLSAgICAsIG1faXNJbml0aWFsaXplZChtX3NlcnZlci5tX3Nlc3Np
b25JRC5pc0VwaGVtZXJhbCgpKQotewotICAgIGlmIChtYW5hZ2VyKQotICAgICAgICBtYW5hZ2Vy
LT5hZGRVc2VyKCp0aGlzKTsKLX0KLQotSURCU2VydmVyOjpRdW90YVVzZXI6On5RdW90YVVzZXIo
KQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+cmVtb3ZlVXNlcigq
dGhpcyk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKCkK
LXsKLSAgICBtX3NwYWNlVXNlZCA9IDA7Ci0KLSAgICBpZiAoIW1fbWFuYWdlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1fc2VydmVyLm1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBBU1NFUlQoIW1faW5pdGlhbGl6YXRpb25DYWxsYmFjayk7Ci0KLSAgICBtX2lz
SW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIC8vIERvIGFkZC9yZW1vdmUgdG8gdHJpZ2dlciBj
YWxsIHRvIHdoZW5Jbml0aWFsaXplZC4KLSAgICBtX21hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMp
OwotICAgIG1fbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpR
dW90YVVzZXI6OmNvbXB1dGVTcGFjZVVzZWQoKQotewotICAgIHJlc2V0U3BhY2VVc2VkKCk7Ci19
Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKHVpbnQ2NF90
IHNpemUpCi17Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBBU1NFUlQobV9zcGFjZVVzZWQgKyBzaXplID4gbV9zcGFjZVVzZWQpOwotICAgIG1fc3BhY2VV
c2VkICs9IHNpemU7Ci19Ci12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpkZWNyZWFzZVNwYWNl
VXNlZCh1aW50NjRfdCBzaXplKQotewotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKG1fc3BhY2VVc2VkID49IHNpemUpOwotICAgIG1fc3BhY2VV
c2VkIC09IHNpemU7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OndoZW5Jbml0aWFs
aXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCi17Ci0gICAgaWYgKG1f
aXNJbml0aWFsaXplZCkgewotICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIG1faW5pdGlhbGl6YXRpb25DYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwot
ICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKG1fb3JpZ2luKTsK
LX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5pdGlhbGl6ZVNwYWNlVXNlZCh1aW50
NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCB8fCAhbV9lc3Rp
bWF0ZWRTcGFjZUluY3JlYXNlKTsKLSAgICBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsKLSAgICBt
X2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgaWYgKGF1dG8gY2FsbGJhY2sgPSBXVEZNb3Zl
KG1faW5pdGlhbGl6YXRpb25DYWxsYmFjaykpCi0gICAgICAgIGNhbGxiYWNrKCk7Ci19Ci0KLUlE
QlNlcnZlcjo6UXVvdGFVc2VyJiBJREJTZXJ2ZXI6OmVuc3VyZVF1b3RhVXNlcihjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICByZXR1cm4gKm1fcXVvdGFVc2Vycy5lbnN1cmUob3Jp
Z2luLCBbdGhpcywgJm9yaWdpbl0gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxRdW90YVVz
ZXI+KCp0aGlzLCBtX3F1b3RhTWFuYWdlckdldHRlcihtX3Nlc3Npb25JRCwgb3JpZ2luKSwgQ2xp
ZW50T3JpZ2luIHsgb3JpZ2luIH0pOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotdm9p
ZCBJREJTZXJ2ZXI6OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVu
dE9yaWdpbiYgb3JpZ2luKQotewotICAgIEFTU0VSVCghbV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJ
REJTZXJ2ZXI6OmNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4sIG9yaWdpbikpOwotfQotCi12b2lk
IElEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4m
IG9yaWdpbikKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIElEQlNlcnZlcjo6cmVxdWVz
dFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0YXNrU2l6ZSkKIHsK
ICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGF1dG8gZGF0YWJhc2VEaXJlY3Rv
cnlQYXRoID0gdGhpcy0+ZGF0YWJhc2VEaXJlY3RvcnlQYXRoSXNvbGF0ZWRDb3B5KCk7Ci0gICAg
YXV0byBvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5ID0gSURCRGF0YWJhc2VJZGVudGlmaWVyOjpk
YXRhYmFzZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290KG9yaWdpbi50b3BPcmlnaW4sIG9yaWdpbi5j
bGllbnRPcmlnaW4sIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgInYwIik7Ci0gICAgYXV0byBuZXdW
ZXJzaW9uT3JpZ2luRGlyZWN0b3J5ID0gSURCRGF0YWJhc2VJZGVudGlmaWVyOjpkYXRhYmFzZURp
cmVjdG9yeVJlbGF0aXZlVG9Sb290KG9yaWdpbi50b3BPcmlnaW4sIG9yaWdpbi5jbGllbnRPcmln
aW4sIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgInYxIik7Ci0gICAgYXV0byBzaXplID0gU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZXNTaXplRm9yRGlyZWN0b3J5KG9sZFZlcnNpb25Pcmln
aW5EaXJlY3RvcnkpICsgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZXNTaXplRm9yRGly
ZWN0b3J5KG5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkpOwotCi0gICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJklEQlNlcnZlcjo6ZmluaXNoQ29t
cHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luLCBvcmlnaW4sIHNpemUpKTsKLX0KLQotdm9pZCBJREJT
ZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmln
aW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VVc2VkKQotewotICAgIGVuc3VyZVF1b3RhVXNlcihv
cmlnaW4pLmluaXRpYWxpemVTcGFjZVVzZWQoc3BhY2VVc2VkKTsKLX0KLQotdm9pZCBJREJTZXJ2
ZXI6OnJlcXVlc3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgdGFz
a1NpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b24pPiYmIGNhbGxiYWNrKQotewotICAgIGF1dG8qIHF1b3RhTWFuYWdlciA9IGVuc3VyZVF1b3Rh
VXNlcihvcmlnaW4pLm1hbmFnZXIoKTsKLSAgICBpZiAoIXF1b3RhTWFuYWdlcikgewotICAgICAg
ICBjYWxsYmFjayhTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBxdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZSh0YXNrU2l6
ZSwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIHJldHVybiBtX3NwYWNlUmVxdWVzdGVyKG9yaWdp
biwgdGFza1NpemUpOwogfQogCi12b2lkIElEQlNlcnZlcjo6cmVzZXRTcGFjZVVzZWQoY29uc3Qg
Q2xpZW50T3JpZ2luJiBvcmlnaW4pCit1aW50NjRfdCBJREJTZXJ2ZXI6OmRpc2tVc2FnZShjb25z
dCBTdHJpbmcmIHJvb3REaXJlY3RvcnksIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQogewot
ICAgIGlmIChhdXRvKiB1c2VyID0gbV9xdW90YVVzZXJzLmdldChvcmlnaW4pKQotICAgICAgICB1
c2VyLT5yZXNldFNwYWNlVXNlZCgpOwotfQotCi12b2lkIElEQlNlcnZlcjo6aW5jcmVhc2VTcGFj
ZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNpemUpCi17Ci0gICAg
ZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuaW5jcmVhc2VTcGFjZVVzZWQoc2l6ZSk7Ci19Ci0KLXZv
aWQgSURCU2VydmVyOjpkZWNyZWFzZVNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdp
biwgdWludDY0X3Qgc2l6ZSkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5kZWNyZWFz
ZVNwYWNlVXNlZChzaXplKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OmluY3JlYXNlUG90ZW50aWFs
U3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0YXNrU2l6ZSkK
LXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNl
ZCh0YXNrU2l6ZSk7Ci19CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKLXZvaWQgSURC
U2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9y
aWdpbiwgdWludDY0X3Qgc3BhY2VVc2VkKQotewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4p
LmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKHNwYWNlVXNlZCk7CisgICAgYXV0byBvbGRWZXJz
aW9uT3JpZ2luRGlyZWN0b3J5ID0gSURCRGF0YWJhc2VJZGVudGlmaWVyOjpkYXRhYmFzZURpcmVj
dG9yeVJlbGF0aXZlVG9Sb290KG9yaWdpbi50b3BPcmlnaW4sIG9yaWdpbi5jbGllbnRPcmlnaW4s
IHJvb3REaXJlY3RvcnksICJ2MCIpOworICAgIGF1dG8gbmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9y
eSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9v
dChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCByb290RGlyZWN0b3J5LCAi
djEiKTsKKyAgICByZXR1cm4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZXNTaXplRm9y
RGlyZWN0b3J5KG9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkpICsgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpkYXRhYmFzZXNTaXplRm9yRGlyZWN0b3J5KG5ld1ZlcnNpb25PcmlnaW5EaXJlY3Rvcnkp
OwogfQogCiB2b2lkIElEQlNlcnZlcjo6dXBncmFkZUZpbGVzSWZOZWNlc3NhcnkoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCmlu
ZGV4IGQzYTIyM2Q5MzJkOTE1OWQ1NDY2NjI5ZjcxN2VmZmI1Nzc0MTNjYWYuLjA2ZjMxMzIxMmM5
Zjk0YjJmZGYzOGIyY2Y0YTEyMDA1NTEzNmEzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTMwLDcgKzMwLDYgQEAK
ICNpbmNsdWRlICJJREJDb25uZWN0aW9uVG9DbGllbnQuaCIKICNpbmNsdWRlICJJREJEYXRhYmFz
ZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTdG9yYWdlUXVvdGFNYW5hZ2VyLmgiCi0jaW5jbHVk
ZSAiU3RvcmFnZVF1b3RhVXNlci5oIgogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlLmgiCiAj
aW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSA8cGFsL0h5
c3RlcmVzaXNBY3Rpdml0eS5oPgpAQCAtNTgsOSArNTcsOSBAQCBlbnVtIGNsYXNzIFNob3VsZEZv
cmNlU3RvcCA6IGJvb2wgeyBObywgWWVzIH07CiAKIGNsYXNzIElEQlNlcnZlciA6IHB1YmxpYyBS
ZWZDb3VudGVkPElEQlNlcnZlcj4sIHB1YmxpYyBDcm9zc1RocmVhZFRhc2tIYW5kbGVyLCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8SURCU2VydmVyPiB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgUXVvdGFN
YW5hZ2VyR2V0dGVyID0gV1RGOjpGdW5jdGlvbjxTdG9yYWdlUXVvdGFNYW5hZ2VyKihQQUw6OlNl
c3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJik+OwotICAgIHN0YXRpYyBSZWY8SURCU2VydmVy
PiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYp
OworICAgIHVzaW5nIFN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciA9IEZ1bmN0aW9u
PFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2
NF90IHNwYWNlUmVxdWVzdGVkKT47CisgICAgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQ
QUw6OlNlc3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYpOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SURCU2VydmVyPiBjcmVhdGUoUEFMOjpTZXNzaW9u
SUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5h
Z2VyU3BhY2VSZXF1ZXN0ZXImJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZ2lzdGVy
Q29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHVucmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwpAQCAtMTEx
LDIxICsxMTAsMTUgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmRE
ZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2b2lkICgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVs
ZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYs
IEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgdm9pZCByZXF1
ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKLSAgICB2
b2lkIGluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2
NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0
IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGluY3JlYXNlU3Bh
Y2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNpemUpOwotICAgIHZvaWQgZGVj
cmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6ZSk7Ci0gICAg
dm9pZCByZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mKTsKLQotICAgIHZvaWQgaW5p
dGlhbGl6ZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikgeyBlbnN1cmVRdW90
YVVzZXIob3JpZ2luKTsgfQorICAgIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIHJlcXVl
c3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHVpbnQ2NF90IGRpc2tVc2FnZShjb25zdCBTdHJpbmcmLCBjb25z
dCBDbGllbnRPcmlnaW4mKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJ5U3RvcChTaG91
bGRGb3JjZVN0b3ApOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lKCk7CiAKIHByaXZh
dGU6Ci0gICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJik7
Ci0gICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGly
ZWN0b3J5UGF0aCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOworICAgIElEQlNlcnZlcihQQUw6OlNl
c3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYpOworICAgIElEQlNl
cnZlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgs
IFN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciYmKTsKIAogICAgIFVuaXF1ZUlEQkRh
dGFiYXNlJiBnZXRPckNyZWF0ZVVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IElEQkRhdGFiYXNlSWRl
bnRpZmllciYpOwogICAgIApAQCAtMTQyLDUxICsxMzUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQg
cmVtb3ZlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZUZvclZlcnNpb24oV2FsbFRpbWUsIGNvbnN0IFN0
cmluZyYpOwogICAgIHZvaWQgcmVtb3ZlRGF0YWJhc2VzV2l0aE9yaWdpbnNGb3JWZXJzaW9uKGNv
bnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiwgY29uc3QgU3RyaW5nJik7CiAKLSAgICBj
bGFzcyBRdW90YVVzZXIgZmluYWwgOiBwdWJsaWMgU3RvcmFnZVF1b3RhVXNlciB7Ci0gICAgICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgUXVvdGFVc2Vy
KElEQlNlcnZlciYsIFN0b3JhZ2VRdW90YU1hbmFnZXIqLCBDbGllbnRPcmlnaW4mJik7Ci0gICAg
ICAgIH5RdW90YVVzZXIoKTsKLQotICAgICAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBtYW5hZ2Vy
KCkgeyByZXR1cm4gbV9tYW5hZ2VyLmdldCgpOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRTcGFjZVVz
ZWQodWludDY0X3Qgc3BhY2VVc2VkKSB7IG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOyB9Ci0gICAg
ICAgIHZvaWQgcmVzZXRTcGFjZVVzZWQoKTsKLQotICAgICAgICB2b2lkIGluY3JlYXNlUG90ZW50
aWFsU3BhY2VVc2VkKHVpbnQ2NF90IGluY3JlYXNlKSB7IG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFz
ZSArPSBpbmNyZWFzZTsgfQotICAgICAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2Vk
KHVpbnQ2NF90IGRlY3JlYXNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9lc3Rp
bWF0ZWRTcGFjZUluY3JlYXNlID49IGRlY3JlYXNlKTsKLSAgICAgICAgICAgIG1fZXN0aW1hdGVk
U3BhY2VJbmNyZWFzZSAtPSBkZWNyZWFzZTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGluY3Jl
YXNlU3BhY2VVc2VkKHVpbnQ2NF90IHNpemUpOwotICAgICAgICB2b2lkIGRlY3JlYXNlU3BhY2VV
c2VkKHVpbnQ2NF90IHNpemUpOwotCi0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZVNwYWNlVXNlZCh1
aW50NjRfdCBzcGFjZVVzZWQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdWludDY0X3Qgc3Bh
Y2VVc2VkKCkgY29uc3QgZmluYWwKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1faXNJ
bml0aWFsaXplZCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zcGFjZVVzZWQgKyBtX2VzdGltYXRl
ZFNwYWNlSW5jcmVhc2U7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBjb21wdXRlU3BhY2VVc2Vk
KCkgZmluYWw7Ci0gICAgICAgIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJikgZmluYWw7Ci0KLSAgICAgICAgSURCU2VydmVyJiBtX3NlcnZlcjsKLSAgICAg
ICAgV2Vha1B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBtX21hbmFnZXI7Ci0gICAgICAgIENsaWVu
dE9yaWdpbiBtX29yaWdpbjsKLSAgICAgICAgYm9vbCBtX2lzSW5pdGlhbGl6ZWQgeyBmYWxzZSB9
OwotICAgICAgICB1aW50NjRfdCBtX3NwYWNlVXNlZCB7IDAgfTsKLSAgICAgICAgdWludDY0X3Qg
bV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlIHsgMCB9OwotICAgICAgICBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+IG1faW5pdGlhbGl6YXRpb25DYWxsYmFjazsKLSAgICB9OwotCi0gICAgV0VCQ09S
RV9FWFBPUlQgUXVvdGFVc2VyJiBlbnN1cmVRdW90YVVzZXIoY29uc3QgQ2xpZW50T3JpZ2luJik7
Ci0gICAgdm9pZCBzdGFydENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRP
cmlnaW4mKTsKLSAgICB2b2lkIGNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50
T3JpZ2luJik7Ci0gICAgdm9pZCBmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29u
c3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc3BhY2VVc2VkKTsKLQogICAgIFBBTDo6U2Vzc2lv
bklEIG1fc2Vzc2lvbklEOwogICAgIEhhc2hNYXA8SURCQ29ubmVjdGlvbklkZW50aWZpZXIsIFJl
ZlB0cjxJREJDb25uZWN0aW9uVG9DbGllbnQ+PiBtX2Nvbm5lY3Rpb25NYXA7CiAgICAgSGFzaE1h
cDxJREJEYXRhYmFzZUlkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxVbmlxdWVJREJEYXRhYmFz
ZT4+IG1fdW5pcXVlSURCRGF0YWJhc2VNYXA7CkBAIC0xOTgsOCArMTQ2LDcgQEAgcHJpdmF0ZToK
IAogICAgIFN0cmluZyBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aDsKIAotICAgIEhhc2hNYXA8Q2xp
ZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UXVvdGFVc2VyPj4gbV9xdW90YVVzZXJzOwotICAg
IFF1b3RhTWFuYWdlckdldHRlciBtX3F1b3RhTWFuYWdlckdldHRlcjsKKyAgICBTdG9yYWdlUXVv
dGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXIgbV9zcGFjZVJlcXVlc3RlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggZmYwOTBmNzZi
YjVkNDI4MzkyNjU2MTg4ZWZhN2ZmMWM5NDViMWM5Yy4uNWZmMjljNzAyNjEwNWE4ZWY2Y2QxZDUy
OWQ1YTc4NDc0NzAxYzkxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0xODYsNTYg
KzE4Niw2IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIHF1b3RhRXJyb3JNZXNzYWdlTmFtZShjb25z
dCBjaGFyKiB0YXNrTmFtZSkKICAgICByZXR1cm4gbWFrZVN0cmluZygiRmFpbGVkIHRvICIsIHRh
c2tOYW1lLCAiIGluIGRhdGFiYXNlIGJlY2F1c2Ugbm90IGVub3VnaCBzcGFjZSBmb3IgZG9tYWlu
Iik7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlcXVlc3RTcGFjZShVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0
IGNoYXIqIHRhc2tOYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElEQkVycm9yJiYpPiYmIGNh
bGxiYWNrKQotewotICAgIG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9pZGVudGlmaWVyLm9yaWdp
bigpLCB0YXNrU2l6ZSwgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHRoaXMsIHdlYWtU
cmFuc2FjdGlvbiA9IG1ha2VXZWFrUHRyKHRyYW5zYWN0aW9uKSwgdGFza05hbWUsIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgewotICAgICAgICBp
ZiAoIXdlYWtUaGlzKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25F
cnJvciB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
d2Vha1RyYW5zYWN0aW9uKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25v
d25FcnJvciB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAo
bV9vd25pbmdQb2ludGVyRm9yQ2xvc2UpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBjbG9zaW5n
IHRoZSBkYXRhYmFzZSwgdGhlcmUgaXMgbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIG1vZGlmeSB0aGUg
ZGF0YWJhc2UgYXQgdGhhdCBwb2ludC4KLSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsg
VW5rbm93bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgc3dpdGNoIChkZWNpc2lvbikgewotICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6
OkRlY2lzaW9uOjpEZW55OgotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBRdW90YUV4
Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSh0YXNrTmFtZSkgfSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246
OkdyYW50OgotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyB9KTsKLSAgICAgICAgfTsK
LSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6d2FpdEZvclJlcXVlc3RTcGFj
ZUNvbXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYgY2FsbGJhY2spCi17Ci0gICAgcmVx
dWVzdFNwYWNlKHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92ZShjYWxsYmFjaykpOwotfQotCi12
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlk
ZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKQotewotICAgIG1fc2VydmVyLT5pbmNyZWFzZVBv
dGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplKTsKLSAgICBB
U1NFUlQoIW1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5jb250YWlucyhpZGVudGlmaWVyKSk7
Ci0gICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmFkZChpZGVudGlmaWVyLCB0YXNrU2l6
ZSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZpbmlzaFNwYWNlSW5jcmVhc2VUYXNr
KHVpbnQ2NF90IGlkZW50aWZpZXIsIGJvb2wgaXNUYXNrU3VjY2Vzc2Z1bCkKLXsKLSAgICBhdXRv
IGl0ZXJhdG9yID0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmZpbmQoaWRlbnRpZmllcik7
Ci0gICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5lbmQo
KSk7Ci0gICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmll
ci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBpZiAoaXNUYXNrU3VjY2Vzc2Z1bCkK
LSAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4o
KSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MucmVt
b3ZlKGl0ZXJhdG9yKTsKLX0KLQogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJl
bnRPcGVuT3BlcmF0aW9uKCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24gKCVwKSIsIHRoaXMpOwpAQCAt
MjQ2LDI5ICsxOTYsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9w
ZW5PcGVyYXRpb24oKQogICAgIGlmICghbV9kYXRhYmFzZUluZm8pIHsKICAgICAgICAgaWYgKCFt
X2lzT3BlbmluZ0JhY2tpbmdTdG9yZSkgewogICAgICAgICAgICAgbV9pc09wZW5pbmdCYWNraW5n
U3RvcmUgPSB0cnVlOwotICAgICAgICAgICAgLy8gV2UgZG8gbm90IGtub3cgd2hldGhlciB0aGlz
IGlzIGFuIGV4aXN0aW5nIG9yIGEgbmV3IGRhdGFiYXNlLgotICAgICAgICAgICAgLy8gV2Ugc2V0
IGEgc21hbGwgY29zdCBzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBvcGVuIGFuIGluZmlu
aXRlIG51bWJlciBvZiBkYXRhYmFzZS4KLSAgICAgICAgICAgIG1fc2VydmVyLT5yZXF1ZXN0U3Bh
Y2UobV9pZGVudGlmaWVyLm9yaWdpbigpLCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0LCBbdGhp
cywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgICAgICAgICAgaWYgKG1fb3duaW5nUG9pbnRlckZvckNsb3NlKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGRlY2lz
aW9uKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lv
bjo6RGVueTogewotICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IElEQlJlc3VsdERh
dGE6OmVycm9yKG1fY3VycmVudE9wZW5EQlJlcXVlc3QtPnJlcXVlc3REYXRhKCkucmVxdWVzdElk
ZW50aWZpZXIoKSwgSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNz
YWdlTmFtZSgib3BlbkRhdGFiYXNlIikgfSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVu
dE9wZW5EQlJlcXVlc3QtPmNvbm5lY3Rpb24oKS5kaWRPcGVuRGF0YWJhc2UocmVzdWx0KTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICAgICAgICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBj
YXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudDoKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBjYWxsYmFja0lEID0gdGhpcy0+Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50
aWZpZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxs
YmFja0lELCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0KTsKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy0+cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyLCBjYWxsYmFja0lE
KSk7Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcG9z
dERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyKSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTgyMSwyMyArNzQ5LDMwIEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmFkZE9wZW5EYXRhYmFzZUNvbm5lY3Rpb24oUmVmPFVuaXF1ZUlEQkRhdGFiYXNlQ29u
bmVjdGlvCiAgICAgbV9vcGVuRGF0YWJhc2VDb25uZWN0aW9ucy5hZGQoYWRvcHRSZWYoY29ubmVj
dGlvbi5sZWFrUmVmKCkpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tp
bmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIHVpbnQ2NF90
IHRhc2tJZGVudGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9y
ZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0
YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwogCisgICAgSURCRGF0YWJhc2VJ
bmZvIGRhdGFiYXNlSW5mbzsKKyAgICBtX29yaWdpbiA9IGlkZW50aWZpZXIub3JpZ2luKCk7Cisg
ICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0
U3BhY2UobV9vcmlnaW4sIGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QpOworICAgIGlmIChkZWNp
c2lvbiA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5mbywgSURCRXJyb3Io
UXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIk9wZW5CYWNraW5nU3Rv
cmUiKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVCghbV9iYWNraW5n
U3RvcmUpOwogICAgIG1fYmFja2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9y
ZShpZGVudGlmaWVyKTsKICAgICBtX2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJh
bnNhY3Rpb25zID0gbV9iYWNraW5nU3RvcmUtPnN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rp
b25zKCk7CiAgICAgbV9iYWNraW5nU3RvcmVJc0VwaGVtZXJhbCA9IG1fYmFja2luZ1N0b3JlLT5p
c0VwaGVtZXJhbCgpOwogCi0gICAgSURCRGF0YWJhc2VJbmZvIGRhdGFiYXNlSW5mbzsKICAgICBh
dXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRh
dGFiYXNlSW5mbyk7Ci0KLSAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRh
dGFiYXNlSW5mbywgZXJyb3IsICB0YXNrSWRlbnRpZmllcikpOworICAgIHBvc3REYXRhYmFzZVRh
c2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvcikpOwogfQogCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5m
byYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikK
K3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlIik7CkBAIC04NDgsOCArNzgzLDYgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8m
IGluZm8sIGNvbnN0IEkKICAgICBBU1NFUlQobV9pc09wZW5pbmdCYWNraW5nU3RvcmUpOwogICAg
IG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gZmFsc2U7CiAKLSAgICBmaW5pc2hTcGFjZUluY3Jl
YXNlVGFzayh0YXNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwotCiAgICAgaWYgKG1faGFy
ZENsb3NlZEZvclVzZXJEZWxldGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtODYxLDM3ICs3OTQs
MjYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9i
amVjdFN0b3JlIik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9u
Q29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24s
IHRhc2tTaXplLCAiY3JlYXRlT2JqZWN0U3RvcmUiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2Fj
dGlvbiwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0
YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBR
dW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3Ip
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5jcmVhdGVP
YmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIGluZm8sIFdU
Rk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXpl
LCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJv
ciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFj
a09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwg
dGFza1NpemUpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJh
Y2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbywgIHF1b3RhRXJyb3Ip
KTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRy
YW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIAotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIHF1b3Rh
RXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKQog
ewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9y
ZSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1D
cmVhdGVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKCFxdW90YUVycm9yLmlzTnVsbCgpKSB7Ci0g
ICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFj
a0lkZW50aWZpZXIsIHF1b3RhRXJyb3IsIGluZm8pKTsKKyAgICAvLyBRdW90YSBjaGVjay4KKyAg
ICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6
ZShpbmZvKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29yaWdpbiwgdGFza1Np
emUpID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZp
ZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJD
cmVhdGVPYmplY3RTdG9yZSIpKSwgaW5mbykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2lu
Z1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGluZm8pOwog
CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNr
SWRlbnRpZmllciwgZXJyb3IsIGluZm8pKTsKQEAgLTkwMiw3ICs4MjQsNiBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0
b3JlIik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIs
IGVycm9yLmlzTnVsbCgpKTsKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fZGF0
YWJhc2VJbmZvLT5hZGRFeGlzdGluZ09iamVjdFN0b3JlKGluZm8pOwogCkBAIC05MTQsMTcgKzgz
NSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVP
YmplY3RTdG9yZSIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNh
Y3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTmFtZSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFl
cnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZU9iamVj
dFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU5hbWUsIFdURk1v
dmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVs
ZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtOTY1LDI4ICs4NzUsMTUgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cmVuYW1lT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFp
bikgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlIik7CiAKLSAgICBhdXRvIHRh
c2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMo
KTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicmVuYW1lT2JqZWN0
U3RvcmUiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBuZXdOYW1lLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9
IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJv
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPnJlbmFt
ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwotICAg
IH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVy
UXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVv
dGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIElEQkVycm9yIGVycm9yID0gcXVvdGFFcnJvcjsKKyAgICBJREJFcnJv
ciBlcnJvcjsKICAgICBhdXRvKiBpbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGlu
Z09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgaWYgKCFpbmZvKQogICAg
ICAgICBlcnJvciA9IElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQXR0ZW1wdCB0byByZW5hbWUg
bm9uLWV4aXN0YW50IG9iamVjdCBzdG9yZSJfcyB9OwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNl
VGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9i
amVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIGVycm9yKSk7CiB9CiAKQEAgLTk5NSw4ICs4
OTIsMTAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3Jl
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY28KICAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVJlbmFtZU9iamVjdFN0b3JlIik7CiAKLSAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAg
ICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKKyAgICAv
LyBRdW90YSBjaGVjay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9u
Q29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RT
cGFjZShtX29yaWdpbiwgdGFza1NpemUpID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
OjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0
b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVv
dGFFcnJvck1lc3NhZ2VOYW1lKCJSZW5hbWVPYmplY3RTdG9yZSIpKSwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBuZXdOYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMTEsNyAr
OTEwLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0
b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2so
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlzTnVs
bCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIApAQCAtMTAyMywxNyArOTIxLDYgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiB0cmFuc2FjdGkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUiKTsKIAot
ICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRy
YW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxs
KCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5jbGVhck9iamVjdFN0b3JlQWZldFF1
b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgV1RGTW92ZShjYWxs
YmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVj
dFN0b3JlQWZldFF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgRXJyb3JDYWxsYmFjayBjYWxs
YmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVy
cm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTEwNjQsMzMgKzk1MSwyMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVh
dGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgYwogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlx
dWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZh
dWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGluZm8pOwotICAgIHJlcXVlc3RT
cGFjZSh0cmFuc2FjdGlvbiwgdGFza1NpemUsICJjcmVhdGVJbmRleCIsIFt0aGlzLCB0YXNrU2l6
ZSwgJnRyYW5zYWN0aW9uLCBpbmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRv
IGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3Iu
Y29kZSgpICE9IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RG
TW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRo
aXMtPmNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgaW5m
bywgV1RGTW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUs
IFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJJbmRl
eEluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBxdW90
YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJl
RXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6
ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvLCBxdW90YUVycm9yKSk7CisgICAgcG9zdERh
dGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRl
bnRpZmllcigpLCBpbmZvKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1D
cmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mIGlu
Zm8sIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4
SW5mbyYgaW5mbykKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5k
ZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4Iik7CiAK
LSAgICBpZiAoIXF1b3RhRXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgcXVvdGFFcnJvciwgaW5m
bykpOworICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0
aW1hdGVTaXplKGluZm8pOworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1fb3JpZ2lu
LCB0YXNrU2l6ZSkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAg
ICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRp
ZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUo
IkNyZWF0ZUluZGV4IikpLCBpbmZvKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEx
MTIsOCArOTg3LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUlu
ZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1DcmVhdGVJbmRleCIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2so
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7Ci0KICAgICBpZiAoZXJyb3IuaXNO
dWxsKCkpIHsKICAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKICAgICAgICAgYXV0byog
b2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0
b3JlKGluZm8ub2JqZWN0U3RvcmVJZGVudGlmaWVyKCkpOwpAQCAtMTEyOSwxNyArMTAwMiw2IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleCIp
OwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlz
LCAmdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhOYW1lLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBp
ZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9y
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+ZGVsZXRl
SW5kZXhBZnRlclF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
aW5kZXhOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQotewogICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShj
YWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE4
OSwyMyArMTA1MSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleChVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdQogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6cmVuYW1lSW5kZXgiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVy
YXRpb25Db3N0ICsgbmV3TmFtZS5zaXplSW5CeXRlcygpOwotICAgIHJlcXVlc3RTcGFjZSh0cmFu
c2FjdGlvbiwgdGFza1NpemUsICJyZW5hbWVJbmRleCIsIFt0aGlzLCB0YXNrU2l6ZSwgJnRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0gICAg
ICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVk
RXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5yZW5hbWVJbmRleEFmdGVyUXVv
dGFDaGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5k
ZXhJZGVudGlmaWVyLCBuZXdOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwotICAgIH0p
OwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVj
ayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNv
bnN0IElEQkVycm9yJiBxdW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBz
dG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2Fs
bGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBxdW90YUVy
cm9yOworICAgIElEQkVycm9yIGVycm9yOwogICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1f
ZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50
aWZpZXIpOwogICAgIGlmICghb2JqZWN0U3RvcmVJbmZvKQogICAgICAgICBlcnJvciA9IElEQkVy
cm9yIHsgVW5rbm93bkVycm9yLCAiQXR0ZW1wdCB0byByZW5hbWUgaW5kZXggaW4gbm9uLWV4aXN0
YW50IG9iamVjdCBzdG9yZSJfcyB9OwpAQCAtMTIxNCw3ICsxMDY0LDYgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUs
IFVuaXF1ZUlEQkQKICAgICBpZiAoIWluZGV4SW5mbykKICAgICAgICAgZXJyb3IgPSBJREJFcnJv
ciB7IFVua25vd25FcnJvciwgIkF0dGVtcHQgdG8gcmVuYW1lIG5vbi1leGlzdGFudCBpbmRleCJf
cyB9OwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7
CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlv
bi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRp
ZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKIH0KIApAQCAtMTIyMyw4ICsxMDcyLDEwIEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElECiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9H
KEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCIp
OwogCi0gICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKKyAgICAvLyBRdW90YSBj
aGVjay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5l
d05hbWUuc2l6ZUluQnl0ZXMoKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29y
aWdpbiwgdGFza1NpemUpID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7
CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lk
ZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VO
YW1lKCJSZW5hbWVJbmRleCIpKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZp
ZXIsIG5ld05hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTIzOSw3ICsxMDkw
LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1SZW5hbWVJbmRleCIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJ
ZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CiAg
ICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhp
c3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgICAgICBBU1NFUlQo
b2JqZWN0U3RvcmVJbmZvKTsKQEAgLTEyNTMsNTIgKzExMDMsMzkgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1
ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVl
LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBLZXlE
YXRhQ2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZChj
b25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURh
dGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0
ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cHV0T3JBZGQiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3Jp
dGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGtleURhdGEpICsgZXN0aW1hdGVTaXplKHZh
bHVlKTsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOwotICAgIGF1dG8qIG9iamVjdFN0b3Jl
ID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKHJlcXVlc3REYXRh
Lm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKLSAgICBpZiAob2JqZWN0U3RvcmUpCi0gICAgICAg
IHRhc2tTaXplICs9IG9iamVjdFN0b3JlLT5pbmRleE5hbWVzKCkuc2l6ZSgpICogdGFza1NpemU7
Ci0KLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicHV0T3JBZGQiLCBb
dGhpcywgdGFza1NpemUsIHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgb3ZlcndyaXRlTW9kZV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0g
ICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2Vl
ZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPnB1dE9yQWRkQWZ0
ZXJRdW90YUNoZWNrKHRhc2tTaXplLCByZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3
cml0ZU1vZGUsIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tT
aXplLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEm
IGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrLCBjb25z
dCBJREJFcnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3Rv
cmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxi
YWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2Fs
bGJhY2tJRCwgdGFza1NpemUpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCwgY2FsbGJh
Y2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9i
amVjdFN0b3JlSWRlbnRpZmllcigpLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgcXVv
dGFFcnJvcikpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJRCwgcmVx
dWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3Jl
SWRlbnRpZmllcigpLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSkpOwogfQogCi12b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlE
YXRhLCBjb25zdCBJREJWYWx1ZSYgb3JpZ2luYWxSZWNvcmRWYWx1ZSwgSW5kZXhlZERCOjpPYmpl
Y3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgY29uc3QgSURCRXJyb3ImIHF1b3Rh
RXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJL
ZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgb3JpZ2luYWxSZWNvcmRWYWx1ZSwgSW5k
ZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSkKIHsKICAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkIik7CiAKLSAgICBBU1NFUlQobV9iYWNraW5nU3Rv
cmUpOwotICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOwotCiAgICAgSURCS2V5RGF0
YSB1c2VkS2V5OwogICAgIElEQkVycm9yIGVycm9yOwogCi0gICAgaWYgKCFxdW90YUVycm9yLmlz
TnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxs
YmFja0lkZW50aWZpZXIsIHF1b3RhRXJyb3IsIHVzZWRLZXkpKTsKKyAgICAvLyBRdW90YSBjaGVj
ay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGlt
YXRlU2l6ZShrZXlEYXRhKSArIGVzdGltYXRlU2l6ZShvcmlnaW5hbFJlY29yZFZhbHVlKTsKKyAg
ICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOworICAgIGF1dG8qIG9iamVjdFN0b3JlID0gbV9kYXRh
YmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmll
cik7CisgICAgaWYgKG9iamVjdFN0b3JlKQorICAgICAgICB0YXNrU2l6ZSArPSBvYmplY3RTdG9y
ZS0+aW5kZXhOYW1lcygpLnNpemUoKSAqIHRhc2tTaXplOworICAgIGlmIChtX3NlcnZlci0+cmVx
dWVzdFNwYWNlKG1fb3JpZ2luLCB0YXNrU2l6ZSkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVj
aXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQs
IGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVy
cm9yTWVzc2FnZU5hbWUoIlB1dE9yQWRkIikpLCB1c2VkS2V5KSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOworICAgIEFTU0VSVChvYmplY3RT
dG9yZUlkZW50aWZpZXIpOwogICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoSW5kZXhlZERCLCAiJXAgLSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVB1dE9yQWRkOiBtX2JhY2tpbmdTdG9yZSBpcyBudWxsIiwgdGhpcyk7CiAgICAgICAgIGVycm9y
ID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFsaWQg
Zm9yIGNhbGwgdG8gcHV0IG9yIGFkZCJfcyk7CkBAIC0xMzcyLDI2ICsxMjA5LDE0IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElECiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0co
SW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQi
KTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IuaXNOdWxsKCkpOwogICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlm
aWVyLCBlcnJvciwgcmVzdWx0S2V5KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0
UmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldFJlY29yZERhdGEmIGdldFJl
Y29yZERhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3Qg
SURCR2V0UmVjb3JkRGF0YSYgZ2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJh
Y2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAi
KG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQiKTsKIAotICAgIHdhaXRGb3JSZXF1
ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGdldFJl
Y29yZERhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0
YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxi
YWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIHRoaXMtPmdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgZ2V0
UmVjb3JkRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiBnZXRSZWNvcmREYXRhLCBH
ZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0g
c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNh
bGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MDIsMjIgKzEyMjcsMTEgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVl
c3REYXRhJiByZXF1ZXN0RGEKICAgICAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCwgY2Fs
bGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRh
Lm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBnZXRSZWNvcmREYXRhLmtleVJhbmdlRGF0YSwgZ2V0
UmVjb3JkRGF0YS50eXBlKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJl
Y29yZHMoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElE
QlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdl
dEFsbFJlY29yZHNEYXRhLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1
ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBH
ZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRB
bGxSZWNvcmRzIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2Fj
dGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFl
cnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsg
fSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Z2V0QWxs
UmVjb3Jkc0FmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jkc0RhdGEsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
Z2V0QWxsUmVjb3Jkc0FmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSwgR2V0
QWxsUmVzdWx0c0NhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQg
PSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICgh
Y2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQzMSw3ICsxMjQ1LDYgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0IElEQlIKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUdldFJlY29yZCIpOwogCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsK
LQogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7CiAgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tp
bmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBrZXlSYW5nZURhdGEsIHR5cGUsIHJlc3VsdCk7CiAKQEAgLTE0NDQsNyArMTI1Nyw2
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCIpOwogCiAgICAgQVNTRVJUKG1f
YmFja2luZ1N0b3JlKTsKLQogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7CiAgICAgSURCRXJyb3Ig
ZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0SW5kZXhSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgcmVjb3JkVHlwZSwg
cmFuZ2UsIHJlc3VsdCk7CiAKQEAgLTE0NjMsOSArMTI3NSw4IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJlY29yZHMiKTsKLQorICAg
IAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KICAgICBJREJHZXRBbGxSZXN1bHQgcmVz
dWx0OwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldEFsbFJlY29yZHMo
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBnZXRBbGxSZWNvcmRzRGF0YSwgcmVzdWx0KTsKIApAQCAt
MTQ4MCwyMiArMTI5MSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0
QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbgogICAgIHBlcmZvcm1H
ZXRBbGxSZXN1bHRzQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0
YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgQ291bnRDYWxsYmFjayBjYWxsYmFjaykK
K3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldENvdW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgQ291bnRDYWxsYmFjayBj
YWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmdldENvdW50Iik7CiAKLSAgICB3YWl0Rm9y
UmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBy
YW5nZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2so
V1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgdGhpcy0+Z2V0Q291bnRBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIHJhbmdlLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmdldENvdW50QWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0
YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgQ291bnRDYWxsYmFjayBjYWxsYmFjaykK
LXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdU
Rk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsK
QEAgLTE1MjQsMjIgKzEzMjQsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bUdldENvdW50KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSUQKICAgICBwZXJm
b3JtQ291bnRDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBjb3VudCk7CiB9CiAK
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgRXJyb3JDYWxsYmFjayBjYWxs
YmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZChjb25zdCBJREJSZXF1
ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRh
LCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVj
b3JkIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwg
W3RoaXMsIHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxs
KCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5kZWxldGVSZWNvcmRBZnRlclF1b3Rh
Q2hlY2socmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAg
IH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmRBZnRlclF1b3Rh
Q2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmIGtleVJhbmdlRGF0YSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50
NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJh
Y2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NTIsNyAr
MTM0MSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQodWlu
dDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJCiAgICAgTE9HKEluZGV4ZWREQiwgIihk
YikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQiKTsKIAogICAgIElEQkVy
cm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJhbmdlKHRyYW5zYWN0aW9uSWRlbnRp
Zmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCByYW5nZSk7Ci0KICAgICBwb3N0RGF0YWJhc2VU
YXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1EZWxldGVSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpKTsKIH0K
IApAQCAtMTU2NCwyMiArMTM1MiwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29ucwogICAgIHBl
cmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOwogfQogCi12b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQkN1cnNvckluZm8mIGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxi
YWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvciIpOwogCi0gICAgd2FpdEZvclJl
cXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgaW5m
bywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RG
TW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgdGhpcy0+b3BlbkN1cnNvckFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgaW5mbywgV1RG
TW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpv
cGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0
YSwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2sp
Ci17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihX
VEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47
CkBAIC0xNjA1LDIyICsxMzgyLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1PcGVuQ3Vyc29yKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBwZXJm
b3JtR2V0UmVzdWx0Q2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvcihVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVl
c3REYXRhLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSwgR2V0UmVzdWx0Q2FsbGJh
Y2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yKGNvbnN0
IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEm
IGRhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6
aXRlcmF0ZUN1cnNvciIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJh
bnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgZGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051
bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+aXRlcmF0ZUN1cnNvckFm
dGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgZGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAg
IH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yQWZ0ZXJRdW90
YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSXRlcmF0
ZUN1cnNvckRhdGEmIGRhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxs
YmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4NCwx
NyArMTQ1MCw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uKFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAKICAgICBBU1NFUlQodHJhbnNh
Y3Rpb24uZGF0YWJhc2VDb25uZWN0aW9uKCkuZGF0YWJhc2UoKSA9PSB0aGlzKTsKIAotICAgIHdh
aXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0
aW9uLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUg
ewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhX
VEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
dGhpcy0+Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIFdURk1v
dmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y29t
bWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3Qg
Y2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7
CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xNzE1LDkgKzE0NzAs
NiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbkFmdGVyUXVvdGFD
aGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikKIHsKLSAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uIC0gJXMiLCB0cmFuc2FjdGlvbklk
ZW50aWZpZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCiAgICAgSURCRXJyb3Ig
ZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Y29tbWl0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVu
dGlmaWVyKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiB9CkBA
IC0xNzQ4LDI0ICsxNTAwLDEzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1D
b21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsCiAgICAgdHJhbnNh
Y3Rpb25Db21wbGV0ZWQobV9maW5pc2hpbmdUcmFuc2FjdGlvbnMudGFrZSh0cmFuc2FjdGlvbklk
ZW50aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlv
bihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2FpdEZvclBlbmRp
bmdUYXNrcyB3YWl0Rm9yUGVuZGluZ1Rhc2tzLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQordm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVl
SURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5p
ZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgQVNTRVJU
KHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigpLmRhdGFiYXNlKCkgPT0gdGhpcyk7CiAK
LSAgICBpZiAod2FpdEZvclBlbmRpbmdUYXNrcyA9PSBXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpZZXMp
IHsKLSAgICAgICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0
aGlzLCAmdHJhbnNhY3Rpb24sIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBl
cnJvcikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMtPmFib3J0VHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb24sIFdhaXRGb3JQZW5kaW5nVGFza3M6Ok5vLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgdWludDY0X3QgY2Fs
bGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAg
ICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5o
CmluZGV4IGVjM2ZjMGM3M2VhMzBlMjRlN2EwY2VlNTg4OWYzOTYxZjBjYzRjMjcuLjhlODJhODE0
MDBjOWE3MTY0NDFhMDY5OTdjZWRlM2YwMzI4YzViNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5o
CkBAIC00NCw2ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IENsaWVu
dE9yaWdpbjsKIGNsYXNzIElEQkVycm9yOwogY2xhc3MgSURCR2V0QWxsUmVzdWx0Owogc3RydWN0
IElEQkdldFJlY29yZERhdGE7CkBAIC04OSwxNyArOTAsMTUgQEAgcHVibGljOgogICAgIHZvaWQg
Y3JlYXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQkluZGV4
SW5mbyYsIEVycm9yQ2FsbGJhY2spOwogICAgIHZvaWQgZGVsZXRlSW5kZXgoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBpbmRleE5hbWUsIEVycm9yQ2FsbGJhY2spOwogICAgIHZvaWQgcmVuYW1lSW5kZXgo
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVy
cm9yQ2FsbGJhY2spOwotICAgIHZvaWQgcHV0T3JBZGQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElE
QlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxs
YmFjayk7Ci0gICAgdm9pZCBnZXRSZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYs
IGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYsIEdldFJlc3Vs
dENhbGxiYWNrKTsKLSAgICB2b2lkIGdldEFsbFJlY29yZHMoVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0Rh
dGEmLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0Q291bnQoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiwgQ291bnRDYWxsYmFjayk7Ci0gICAgdm9pZCBkZWxldGVSZWNvcmQoVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBvcGVuQ3Vyc29yKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElE
QkN1cnNvckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBpdGVyYXRlQ3Vyc29y
KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNv
bnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2spOworICAgIHZvaWQg
cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3Qg
SURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNh
bGxiYWNrKTsKKyAgICB2b2lkIGdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0
IElEQkdldFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CisgICAgdm9pZCBnZXRBbGxS
ZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEm
LCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOworICAgIHZvaWQgZ2V0Q291bnQoY29uc3QgSURCUmVx
dWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBDb3VudENhbGxiYWNrKTsKKyAgICB2
b2lkIGRlbGV0ZVJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYsIEVycm9yQ2FsbGJhY2spOworICAgIHZvaWQgb3BlbkN1cnNvcihjb25zdCBJREJSZXF1
ZXN0RGF0YSYsIGNvbnN0IElEQkN1cnNvckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7CisgICAg
dm9pZCBpdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCSXRlcmF0
ZUN1cnNvckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CiAgICAgdm9pZCBjb21taXRUcmFuc2Fj
dGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgRXJyb3JDYWxsYmFjayk7Ci0KLSAg
ICBlbnVtIGNsYXNzIFdhaXRGb3JQZW5kaW5nVGFza3MgeyBObywgWWVzIH07Ci0gICAgdm9pZCBh
Ym9ydFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBXYWl0Rm9yUGVu
ZGluZ1Rhc2tzLCBFcnJvckNhbGxiYWNrKTsKKyAgICB2b2lkIGFib3J0VHJhbnNhY3Rpb24oVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwogCiAgICAgdm9pZCBk
aWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9u
JiwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwog
ICAgIHZvaWQgdHJhbnNhY3Rpb25EZXN0cm95ZWQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYpOwpAQCAtMTM5LDM3ICsxMzgsMjAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2NoZWR1bGVT
aHV0ZG93bkZvckNsb3NlKCk7CiAKLSAgICB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90
YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwg
Y29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgRXJyb3JDYWxsYmFjaywgY29uc3QgSURCRXJyb3Im
KTsKLSAgICB2b2lkIHJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRh
c2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2ssIGNvbnN0
IElEQkVycm9yJik7Ci0gICAgdm9pZCBjcmVhdGVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRf
dCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQkluZGV4
SW5mbyYsIEVycm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCByZW5hbWVJ
bmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5k
ZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2ssIGNvbnN0
IElEQkVycm9yJik7Ci0gICAgdm9pZCBwdXRPckFkZEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0
YXNrU2l6ZSwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3Qg
SURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNh
bGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgZGVsZXRlUmVjb3JkQWZ0ZXJRdW90
YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXJy
b3JDYWxsYmFjayk7Ci0KLSAgICB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNr
KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3Jl
TmFtZSwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBjbGVhck9iamVjdFN0b3JlQWZldFF1b3Rh
Q2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBkZWxldGVJbmRleEFmdGVyUXVv
dGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmLCBFcnJvckNhbGxiYWNrKTsKLSAgICB2b2lkIGdl
dFJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdl
dFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRBbGxSZWNvcmRz
QWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0QWxsUmVj
b3Jkc0RhdGEmLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0Q291bnRBZnRl
clF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
LCBDb3VudENhbGxiYWNrKTsKLSAgICB2b2lkIG9wZW5DdXJzb3JBZnRlclF1b3RhQ2hlY2soY29u
c3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJDdXJzb3JJbmZvJiwgR2V0UmVzdWx0Q2FsbGJh
Y2spOwotICAgIHZvaWQgaXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1
ZXN0RGF0YSYsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2sp
OwotICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwotCiAgICAgLy8gRGF0YWJhc2UgdGhy
ZWFkIG9wZXJhdGlvbnMKICAgICB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRh
YmFzZUlkZW50aWZpZXImKTsKLSAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJiwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpOworICAgIHZvaWQgb3Bl
bkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKICAgICB2b2lkIHBl
cmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lk
IHBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHZv
aWQgYmVnaW5UcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5m
byYpOwotICAgIHZvaWQgcGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIGNvbnN0IElEQkVycm9yJik7CisgICAg
dm9pZCBwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29u
c3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBwZXJmb3JtRGVsZXRlT2JqZWN0U3Rv
cmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
KTsKICAgICB2b2lkIHBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFt
ZSwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIHBlcmZvcm1DbGVhck9iamVjdFN0b3JlKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7Ci0g
ICAgdm9pZCBwZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3Qg
SURCSW5kZXhJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIHBlcmZvcm1DcmVhdGVJ
bmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mKTsKICAgICB2
b2lkIHBlcmZvcm1EZWxldGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllcik7CiAgICAgdm9p
ZCBwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHBlcmZvcm1QdXRPckFkZCh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNv
bnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVP
dmVyd3JpdGVNb2RlLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgcGVyZm9ybVB1dE9yQWRk
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
Y29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9y
ZU92ZXJ3cml0ZU1vZGUpOwogICAgIHZvaWQgcGVyZm9ybUdldFJlY29yZCh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJh
bmdlRGF0YSYsIElEQkdldFJlY29yZERhdGFUeXBlKTsKICAgICB2b2lkIHBlcmZvcm1HZXRBbGxS
ZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRh
Jik7CiAgICAgdm9pZCBwZXJmb3JtR2V0SW5kZXhSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZp
ZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsK
QEAgLTE4Niw3ICsxNjgsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gTWFpbiB0aHJlYWQgY2FsbGJh
Y2tzCiAgICAgdm9pZCBkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNp
b24pOwotICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8m
LCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRp
ZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3Im
KTsKICAgICB2b2lkIGRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7
CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
cik7CiAgICAgdm9pZCBkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsKQEAgLTI0NSwxMSArMjI3LDYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIG1heWJlRmluaXNoSGFyZENsb3NlKCk7CiAgICAgYm9vbCBpc0RvbmVXaXRo
SGFyZENsb3NlKCk7CiAKLSAgICB2b2lkIHJlcXVlc3RTcGFjZShVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJik7Ci0gICAgdm9pZCB3YWl0Rm9y
UmVxdWVzdFNwYWNlQ29tcGxldGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJik7Ci0gICAgdm9pZCBzdGFydFNwYWNl
SW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAg
ICB2b2lkIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIGJvb2wg
aXNUYXNrU3VjY2Vzc2Z1bCk7Ci0KICAgICB2b2lkIGNsZWFyVHJhbnNhY3Rpb25zT25Db25uZWN0
aW9uKFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYpOwogCiAgICAgc3RhdGljIHVpbnQ2NF90
IGdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7CkBAIC0zMDUsNyArMjgyLDcgQEAg
cHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8SURCUmVzb3VyY2VJZGVudGlmaWVyPiBtX2N1cnNvclBy
ZWZldGNoZXM7CiAKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCB1aW50NjRfdD4gbV9wZW5kaW5nU3Bh
Y2VJbmNyZWFzZVRhc2tzOworICAgIENsaWVudE9yaWdpbiBtX29yaWdpbjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0
aW9uLmNwcAppbmRleCBmZTkxMGZhZjk4NDlkYzJiMDQ3ZWJhOTdhZTU2NjU3OWZkMTNkMjEwLi44
MDA2MDY5ODgzNDRmMWIzOWI4YjlmYmMxOTk5ODIxZDgyNjIxYjg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6YWJvcnRUcmFuc2FjdGlvbldpdGhvdXRDYWxsYmFj
ayhVbmlxdWVJREJEYXRhYgogICAgIGlmICghbV9kYXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIG1fZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIFVuaXF1
ZUlEQkRhdGFiYXNlOjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpObywgW3RoaXMsIHByb3RlY3RlZFRo
aXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7CisgICAgbV9kYXRh
YmFzZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHByb3RlY3RlZFRoaXMs
IHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7CiAgICAgICAgIEFTU0VS
VChtX3RyYW5zYWN0aW9uTWFwLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwogICAg
ICAgICBtX3RyYW5zYWN0aW9uTWFwLnJlbW92ZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAg
IH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCmluZGV4
IGE4ZDJiZGM3NDBjODk3MWE1YTdjMDRlNzZjMDMyOWI0NzZhZGM0MjYuLjc2ZWRkYzQ1YjA3NmJl
M2U2OTcyODQ1ZDExZTIxNTBiNmYwN2Q4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbi5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uOjphYm9ydCgpCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VD
b25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAKLSAgICBkYXRh
YmFzZS0+YWJvcnRUcmFuc2FjdGlvbigqdGhpcywgVW5pcXVlSURCRGF0YWJhc2U6OldhaXRGb3JQ
ZW5kaW5nVGFza3M6OlllcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShh
dXRvJiBlcnJvcikgeworICAgIGRhdGFiYXNlLT5hYm9ydFRyYW5zYWN0aW9uKCp0aGlzLCBbdGhp
cywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKGF1dG8mIGVycm9yKSB7CiAgICAgICAg
IExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCAoY2Fs
bGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0yODYsNyArMjg2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRP
ckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGMKICAgICBhdXRvIGRhdGFi
YXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFi
YXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+cHV0T3JBZGQoKnRoaXMsIHJlcXVlc3REYXRhLCBr
ZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIGtl
eSkgeworICAgIGRhdGFiYXNlLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUs
IG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVx
dWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsKICAgICAgICAg
TE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkIChj
YWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTMwNyw3ICszMDcsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Omdl
dFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAgYXV0byBkYXRh
YmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRh
YmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmdldFJlY29yZCgqdGhpcywgcmVxdWVzdERhdGEs
IGdldFJlY29yZERhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVx
dWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgeworICAg
IGRhdGFiYXNlLT5nZXRSZWNvcmQocmVxdWVzdERhdGEsIGdldFJlY29yZERhdGEsIFt0aGlzLCB3
ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBj
b25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkIChjYWxsYmFjaykiKTsKICAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMyOCw3ICszMjgsNyBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMoY29uc3Qg
SURCUmVxdWVzdERhdGEmIHJlcXVlc3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNl
Q29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAg
IGRhdGFiYXNlLT5nZXRBbGxSZWNvcmRzKCp0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jk
c0RhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFd
KGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgeworICAgIGRhdGFi
YXNlLT5nZXRBbGxSZWNvcmRzKHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3Is
IGNvbnN0IElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIs
ICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNvcmRzIChjYWxsYmFjayki
KTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM0OSw3
ICszNDksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50KGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgYwogICAgIGF1dG8gZGF0YWJhc2UgPSBt
X2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwog
ICAgIAotICAgIGRhdGFiYXNlLT5nZXRDb3VudCgqdGhpcywgcmVxdWVzdERhdGEsIGtleVJhbmdl
RGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0o
YXV0byYgZXJyb3IsIHVpbnQ2NF90IGNvdW50KSB7CisgICAgZGF0YWJhc2UtPmdldENvdW50KHJl
cXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCB1aW50NjRfdCBjb3VudCkgewogICAgICAg
ICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQg
KGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMzcwLDcgKzM3MCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
ZGVsZXRlUmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0CiAgICAgYXV0byBk
YXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChk
YXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmRlbGV0ZVJlY29yZCgqdGhpcywgcmVxdWVz
dERhdGEsIGtleVJhbmdlRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMp
LCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+ZGVsZXRlUmVjb3Jk
KHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRleGVk
REIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmQgKGNhbGxiYWNr
KSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzkx
LDcgKzM5MSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNv
cihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAgYXV0byBkYXRhYmFzZSA9
IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7
CiAgICAgCi0gICAgZGF0YWJhc2UtPm9wZW5DdXJzb3IoKnRoaXMsIHJlcXVlc3REYXRhLCBpbmZv
LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRv
JiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRhYmFzZS0+b3Bl
bkN1cnNvcihyZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVz
dWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpvcGVuQ3Vyc29yIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTQxMiw3ICs0MTIsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVl
c3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2Uo
KTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5pdGVyYXRlQ3Vy
c29yKCp0aGlzLCByZXF1ZXN0RGF0YSwgZGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYg
cmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPml0ZXJhdGVDdXJzb3IocmVxdWVzdERhdGEsIGRhdGEs
IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8m
IGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvciAoY2FsbGJh
Y2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNz
SURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
blByb2Nlc3NJREJTZXJ2ZXIuY3BwCmluZGV4IDkxMTFmNTk3OGUzYjgwNjE4NTVjMjBmNWFmYWE1
YjY1NWRjY2VhMjEuLjVlYzM3OTcxMTUyOThjYzkzMTEzMzUwODcxZjE3ZTFmMDI4Mzc1ZmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nl
c3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC02MSwzNiArNjEsMzcgQEAgUmVmPEluUHJv
Y2Vzc0lEQlNlcnZlcj4gSW5Qcm9jZXNzSURCU2VydmVyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb24KIAogSW5Qcm9jZXNzSURCU2VydmVyOjp+SW5Qcm9jZXNzSURCU2VydmVy
KCkgPSBkZWZhdWx0OwogCi1TdG9yYWdlUXVvdGFNYW5hZ2VyKiBJblByb2Nlc3NJREJTZXJ2ZXI6
OnF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK1JlZlB0cjxTdG9yYWdl
UXVvdGFNYW5hZ2VyPiBJblByb2Nlc3NJREJTZXJ2ZXI6OnF1b3RhTWFuYWdlcihjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbikKIHsKICAgICByZXR1cm4gbV9xdW90YU1hbmFnZXJzLmVuc3VyZShv
cmlnaW4sIFtdIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U3RvcmFnZVF1b3RhTWFuYWdl
cj4oU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCksIFtdKHVpbnQ2NF90IHF1b3Rh
LCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2Fs
bGJhY2spIHsKKyAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZShTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSwgW10geworICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIH0sIFtdKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2Us
IHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKICAgICAgICAgICAgIGNh
bGxiYWNrKHF1b3RhICsgY3VycmVudFNwYWNlICsgc3BhY2VJbmNyZWFzZSk7CiAgICAgICAgIH0p
OwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQotc3RhdGljIGlubGluZSBJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFNYW5hZ2VyR2V0dGVyIHN0b3JhZ2VRdW90YU1hbmFnZXJH
ZXR0ZXIoSW5Qcm9jZXNzSURCU2VydmVyJiBzZXJ2ZXIpCi17Ci0gICAgcmV0dXJuIFt3ZWFrU2Vy
dmVyID0gbWFrZVdlYWtQdHIoc2VydmVyKV0oUEFMOjpTZXNzaW9uSUQsIGNvbnN0IGF1dG8mIG9y
aWdpbikgewotICAgICAgICByZXR1cm4gd2Vha1NlcnZlciA/IHdlYWtTZXJ2ZXItPnF1b3RhTWFu
YWdlcihvcmlnaW4pIDogbnVsbHB0cjsKLSAgICB9OworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsK
IH0KIAogSW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQotICAgIDogbV9zZXJ2ZXIoSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0
ZShzZXNzaW9uSUQsIHN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIoKnRoaXMpKSkKIHsKICAgICBy
ZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlciA9IElE
QkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGUoKnRoaXMpOwogICAgIG1fY29u
bmVjdGlvblRvQ2xpZW50ID0gSURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQ6OmNyZWF0
ZSgqdGhpcyk7CisgICAgbV9zZXJ2ZXIgPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNl
c3Npb25JRCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQpIG11dGFibGUgeworICAg
ICAgICBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlciA9IHdl
YWtUaGlzID8gcXVvdGFNYW5hZ2VyKG9yaWdpbikgOiBudWxscHRyOworICAgICAgICByZXR1cm4g
c3RvcmFnZVF1b3RhTWFuYWdlciA/IHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9u
QmFja2dyb3VuZFRocmVhZChzcGFjZVJlcXVlc3RlZCkgOiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6RGVueTsKKyAgICB9KTsKIH0KIAogSW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nl
c3NJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlRGlyZWN0b3J5UGF0aCkKLSAgICA6IG1fc2VydmVyKElEQlNlcnZlcjo6SURCU2VydmVyOjpj
cmVhdGUoc2Vzc2lvbklELCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIHN0b3JhZ2VRdW90YU1hbmFn
ZXJHZXR0ZXIoKnRoaXMpKSkKIHsKICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKICAg
ICBtX2Nvbm5lY3Rpb25Ub1NlcnZlciA9IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVy
OjpjcmVhdGUoKnRoaXMpOwogICAgIG1fY29ubmVjdGlvblRvQ2xpZW50ID0gSURCU2VydmVyOjpJ
REJDb25uZWN0aW9uVG9DbGllbnQ6OmNyZWF0ZSgqdGhpcyk7CisgICAgbV9zZXJ2ZXIgPSBJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgZGF0YWJhc2VEaXJlY3RvcnlQYXRo
LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKGNvbnN0IENsaWVudE9yaWdp
biYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCkgbXV0YWJsZSB7CisgICAgICAgIFJl
ZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBzdG9yYWdlUXVvdGFNYW5hZ2VyID0gd2Vha1RoaXMg
PyBxdW90YU1hbmFnZXIob3JpZ2luKSA6IG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdG9yYWdl
UXVvdGFNYW5hZ2VyID8gc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlT25CYWNrZ3Jv
dW5kVGhyZWFkKHNwYWNlUmVxdWVzdGVkKSA6IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
OjpEZW55OworICAgIH0pOwogfQogCiBJREJDb25uZWN0aW9uSWRlbnRpZmllciBJblByb2Nlc3NJ
REJTZXJ2ZXI6OmlkZW50aWZpZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCmluZGV4
IGM3YjUzMjFjYTM2MWM3NDFlNTJkNDVlYzE4YTgzMThmYWQwODI5YzAuLjBkZDk3NDQyMzA5Yzhl
NzRhNjA3Njk4MWJkOGViOTBmYTY5NGQ2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKQEAg
LTYzLDkgKzYzLDggQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgSURCQ2xpZW50OjpJ
REJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb25Ub1NlcnZlcigpIGNvbnN0OwogICAgIElE
QlNlcnZlcjo6SURCQ29ubmVjdGlvblRvQ2xpZW50JiBjb25uZWN0aW9uVG9DbGllbnQoKSBjb25z
dDsKLSAgICBJREJTZXJ2ZXI6OklEQlNlcnZlciYgc2VydmVyKCkgeyByZXR1cm4gbV9zZXJ2ZXIu
Z2V0KCk7IH0KLQotICAgIElEQlNlcnZlcjo6SURCU2VydmVyJiBpZGJTZXJ2ZXIoKSB7IHJldHVy
biBtX3NlcnZlci5nZXQoKTsgfQorICAgIElEQlNlcnZlcjo6SURCU2VydmVyJiBzZXJ2ZXIoKSB7
IHJldHVybiAqbV9zZXJ2ZXI7IH0KKyAgICBJREJTZXJ2ZXI6OklEQlNlcnZlciYgaWRiU2VydmVy
KCkgeyByZXR1cm4gKm1fc2VydmVyOyB9CiAKICAgICAvLyBJREJDb25uZWN0aW9uVG9TZXJ2ZXIK
ICAgICB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IElEQlJlcXVlc3REYXRhJikgZmluYWw7CkBA
IC0xMjUsMTcgKzEyNCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKSBvdmVycmlkZSB7IFJl
ZkNvdW50ZWQ8SW5Qcm9jZXNzSURCU2VydmVyPjo6cmVmKCk7IH0KICAgICB2b2lkIGRlcmVmKCkg
b3ZlcnJpZGUgeyBSZWZDb3VudGVkPEluUHJvY2Vzc0lEQlNlcnZlcj46OmRlcmVmKCk7IH0KIAot
ICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIHF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4m
KTsKKyAgICBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyKGNvbnN0IENs
aWVudE9yaWdpbiYpOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEluUHJvY2Vzc0lEQlNlcnZl
cihQQUw6OlNlc3Npb25JRCk7CiAgICAgSW5Qcm9jZXNzSURCU2VydmVyKFBBTDo6U2Vzc2lvbklE
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CiAKLSAgICBSZWY8SURCU2Vy
dmVyOjpJREJTZXJ2ZXI+IG1fc2VydmVyOworICAgIFJlZlB0cjxJREJTZXJ2ZXI6OklEQlNlcnZl
cj4gbV9zZXJ2ZXI7CiAgICAgUmVmUHRyPElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVy
PiBtX2Nvbm5lY3Rpb25Ub1NlcnZlcjsKICAgICBSZWZQdHI8SURCU2VydmVyOjpJREJDb25uZWN0
aW9uVG9DbGllbnQ+IG1fY29ubmVjdGlvblRvQ2xpZW50OwogCi0gICAgSGFzaE1hcDxDbGllbnRP
cmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9xdW90YU1hbmFn
ZXJzOworICAgIEhhc2hNYXA8Q2xpZW50T3JpZ2luLCBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdl
cj4+IG1fcXVvdGFNYW5hZ2VyczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAw
ZjQ4Y2YwZjczOGU3MzA3MzNjNmM0MzNiMDg5ZjBjOThiMzU0YzBmLi4zZDAyZWQxNGNjMjhkNDE0
NGZlOGVhNzcwZGU2YjI4ODJiMDllODhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTI5LDcgKzExMjksNiBAQAogCQk0MUQy
OEQwRDIxMzlFMDU4MDBGNDIwNkYgLyogTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFEMjhEMEIyMTM5RTAx
RDAwRjQyMDZGIC8qIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmNwcCAqLzsgfTsKIAkJNDFENDFD
NjcyMjU2ODc0RjAwNjk3OTQyIC8qIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUQ0MUM2NTIyNTY4NTkyMDA2
OTc5NDIgLyogU2VydmljZVdvcmtlckludGVybmFscy5tbSAqLzsgfTsKIAkJNDFERTdDN0MyMjJE
QTE0MzAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxREU3QzdCMjIyREExM0UwMDUzMkI2NSAvKiBT
dG9yYWdlUXVvdGFNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJNDFERTdDN0QyMjJEQTE0ODAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YVVz
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxREU3
Qzc4MjIyREExM0MwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFERUZDQjYxRTU2QzFCRDAwMEQ5
RTVGIC8qIEpTRE9NTWFwTGlrZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDFERUZDQjQxRTU2QzFCOTAwMEQ5RTVGIC8qIEpTRE9NTWFwTGlrZS5oICov
OyB9OwogCQk0MUUxQjFEMTBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRTFCMUNCMEZGNTk4
NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5oICovOyB9OwogCQk0MUU5RENFNzIzMTk3NEJG
MDBGMzU5NDkgLyogQmxvYkxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDFFOURDRTQyMzE5NzNGRTAwRjM1OTQ5IC8qIEJsb2JMb2FkZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzQ2Niw3
ICs3NDY1LDYgQEAKIAkJNDFEMjhEMEMyMTM5RTAxRTAwRjQyMDZGIC8qIExpYldlYlJUQ1N0YXRz
Q29sbGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpYldlYlJUQ1N0
YXRzQ29sbGVjdG9yLmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xsZWN0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFENDFDNjUyMjU2ODU5MjAwNjk3OTQy
IC8qIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBTZXJ2aWNlV29ya2VySW50ZXJuYWxzLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MUQ1MUJCMjFFNEUyRTgxMDAxMzFBNUIgLyogTGliV2ViUlRDQXVkaW9G
b3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGliV2ViUlRDQXVkaW9G
b3JtYXQuaDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENBdWRpb0Zvcm1hdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0MURFN0M3ODIyMkRBMTNDMDA1MzJCNjUgLyogU3RvcmFn
ZVF1b3RhVXNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlUXVv
dGFVc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxREU3QzdBMjIyREExM0Qw
MDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MURFN0M3QjIyMkRBMTNFMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFu
YWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlUXVvdGFNYW5h
Z2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxREVGQ0IyMUU1NkMxQjkwMDBE
OUU1RiAvKiBKU0RPTUJpbmRpbmdJbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmph
dmFzY3JpcHQ7IHBhdGggPSBKU0RPTUJpbmRpbmdJbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNzEwNCw3ICsxNzEwMiw2IEBACiAJCQkJMUEzNzYzNkExQTJFNjhC
QjAwOUE3RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oICovLAogCQkJCTQxREU3QzdB
MjIyREExM0QwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLywKIAkJCQk0MURF
N0M3QjIyMkRBMTNFMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5oICovLAotCQkJCTQx
REU3Qzc4MjIyREExM0MwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggKi8sCiAJCQkJNTE2
NkQzQ0MxRThFRDQxMTAwQUQ2MkUzIC8qIFN0b3JhZ2VUeXBlLmggKi8sCiAJCQkpOwogCQkJaW5k
ZW50V2lkdGggPSA0OwpAQCAtMzIyMjUsNyArMzIyMjIsNiBAQAogCQkJCUM1MEQwRTgzMEZGNDI3
MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTM3
NjM2QzFBMkU2OEJCMDA5QTdFRTIgLyogU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MURFN0M3QzIyMkRBMTQzMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFu
YWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDFERTdDN0QyMjJEQTE0ODAwNTMyQjY1IC8qIFN0
b3JhZ2VRdW90YVVzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDOUVGMkYzMjFGMDYxOTAwMDNC
REM1NiAvKiBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTY2
RDNDRDFFOEVENDhGMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ2ODJEMjAwMUY3OTc4MzAwMEM4NjNEQiAvKiBTdG9yZWRDcmVkZW50aWFsc1BvbGljeS5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VR
dW90YU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5h
Z2VyLmNwcAppbmRleCA4NTI1NzUyZTYzMzQ3OTUzMGVmMTRlY2I3NGY4NWJhZjY4ZDljNTViLi4w
YzYxM2QxYTcyZGZlYTY1OWNiMmU3MWE4MjBhYWFiNjA5YWE5NjE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKQEAgLTI3LDIxMyArMjcsMTIw
IEBACiAjaW5jbHVkZSAiU3RvcmFnZVF1b3RhTWFuYWdlci5oIgogCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VRdW90YVVzZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9CaW5h
cnlTZW1hcGhvcmUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdG9yYWdlUXVvdGFNYW5h
Z2VyOjp+U3RvcmFnZVF1b3RhTWFuYWdlcigpCitSZWY8U3RvcmFnZVF1b3RhTWFuYWdlcj4gU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmIHVz
YWdlR2V0dGVyLCBRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3Rl
cikKIHsKLSAgICB3aGlsZSAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAg
bV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCkuY2FsbGJhY2soRGVjaXNpb246OkRlbnkpOwor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VRdW90YU1hbmFnZXIocXVvdGEsIFdURk1v
dmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKSk7CiB9CiAK
LXVpbnQ2NF90IFN0b3JhZ2VRdW90YU1hbmFnZXI6OnNwYWNlVXNhZ2UoKSBjb25zdAorU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6U3RvcmFnZVF1b3RhTWFuYWdlcih1aW50NjRfdCBxdW90YSwgVXNhZ2VH
ZXR0ZXImJiB1c2FnZUdldHRlciwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVh
c2VSZXF1ZXN0ZXIpCisgICAgOiBtX3F1b3RhKHF1b3RhKQorICAgICwgbV91c2FnZUdldHRlcihX
VEZNb3ZlKHVzYWdlR2V0dGVyKSkKKyAgICAsIG1fcXVvdGFJbmNyZWFzZVJlcXVlc3RlcihXVEZN
b3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKQorICAgICwgbV93b3JrUXVldWUoV29ya1F1ZXVl
OjpjcmVhdGUoIlN0b3JhZ2VRdW90YU1hbmFnZXIgQmFja2dyb3VuZCBRdWV1ZSIsIFdvcmtRdWV1
ZTo6VHlwZTo6U2VyaWFsKSkKKyAgICAsIG1faW5pdGlhbFF1b3RhKHF1b3RhKQogewotICAgIHVp
bnQ2NF90IHVzYWdlID0gMDsKLSAgICBmb3IgKGF1dG8mIHVzZXIgOiBtX3VzZXJzKQotICAgICAg
ICB1c2FnZSArPSB1c2VyLT5zcGFjZVVzZWQoKTsKLSAgICByZXR1cm4gdXNhZ2U7CiB9CiAKLXZv
aWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpCit2
b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCh1aW50NjRf
dCBzcGFjZVJlcXVlc3RlZCwgUmVxdWVzdENhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgaWYg
KCFtX3F1b3RhKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
IAotICAgIGF1dG8gZGVmYXVsdFF1b3RhU3RlcCA9IG1fcXVvdGEgLyAxMDsKLSAgICBtX3F1b3Rh
ID0gc3RkOjptYXgobV9xdW90YSwgZGVmYXVsdFF1b3RhU3RlcCAqICgoc3BhY2VVc2FnZSgpIC8g
ZGVmYXVsdFF1b3RhU3RlcCkgKyAxKSk7Ci19Ci0KLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
aW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQoKQotewotICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXph
dGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPFN0b3Jh
Z2VRdW90YVVzZXIqPiB1c2Vyc1RvSW5pdGlhbGl6ZTsKLSAgICBmb3IgKGF1dG8mIGtleVZhbHVl
IDogbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2VycykgewotICAgICAgICBpZiAoa2V5VmFsdWUu
dmFsdWUgPT0gV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpObykgewotICAgICAgICAgICAga2V5VmFs
dWUudmFsdWUgPSBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ6OlllczsKLSAgICAgICAgICAgIHVzZXJz
VG9Jbml0aWFsaXplLmFwcGVuZChrZXlWYWx1ZS5rZXkpOworICAgIC8vIEZhc3QgcGF0aC4KKyAg
ICBpZiAobV9xdW90YUNvdW50RG93bkxvY2sudHJ5TG9jaygpKSB7CisgICAgICAgIGlmICh0cnlH
cmFudFJlcXVlc3Qoc3BhY2VSZXF1ZXN0ZWQpKSB7CisgICAgICAgICAgICBtX3F1b3RhQ291bnRE
b3duTG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKERlY2lzaW9uOjpHcmFudCk7
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9xdW90YUNvdW50RG93
bkxvY2sudW5sb2NrKCk7CiAgICAgfQotICAgIGZvciAoYXV0byogdXNlciA6IHVzZXJzVG9Jbml0
aWFsaXplKSB7Ci0gICAgICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmNvbnRh
aW5zKHVzZXIpKQotICAgICAgICAgICAgYXNrVXNlclRvSW5pdGlhbGl6ZSgqdXNlcik7Ci0gICAg
fQorCisgICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIHNwYWNlUmVxdWVzdGVkLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XSgpIG11dGFibGUgeworICAgICAgICBhdXRvIGRlY2lzaW9uID0gcmVxdWVzdFNwYWNlT25CYWNr
Z3JvdW5kVGhyZWFkKHNwYWNlUmVxdWVzdGVkKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChb
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZGVjaXNpb25dKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICBjYWxsYmFjayhkZWNpc2lvbik7CisgICAgICAgIH0pOworICAgIH0pOwogfQogCi12
b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUoU3RvcmFnZVF1b3Rh
VXNlciYgdXNlcikKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCh1aW50NjRfdCBzcGFjZVJlcXVl
c3RlZCkKIHsKLSAgICB1c2VyLndoZW5Jbml0aWFsaXplZChbdGhpcywgJnVzZXIsIHdlYWtUaGlz
ID0gbWFrZVdlYWtQdHIodGhpcyldKCkgewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAg
ICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgICAgIGlm
IChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLnJlbW92ZSgmdXNlcikpCi0gICAgICAgICAg
ICBtX3VzZXJzLmFkZCgmdXNlcik7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9xdW90YUNvdW50
RG93bkxvY2spOwogCi0gICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKHRyeUdyYW50UmVxdWVzdChz
cGFjZVJlcXVlc3RlZCkpCisgICAgICAgIHJldHVybiBEZWNpc2lvbjo6R3JhbnQ7CiAKLSAgICAg
ICAgLy8gTWFrZSBzdXJlIHF1b3RhIGlzIHNldCBiZWZvcmUgaGFuZGxpbmcgZmlyc3QgcmVxdWVz
dC4KLSAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlVuaW5pdGlhbGl6ZWQpIHsKLSAgICAg
ICAgICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKLSAgICAgICAgICAgIG1fc3Rh
dGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgICAgICB9CisgICAgbV91
c2FnZSA9IG1fdXNhZ2VHZXR0ZXIoKTsKKyAgICB1cGRhdGVRdW90YUJhc2VkT25Vc2FnZSgpOwor
ICAgIG1fcXVvdGFDb3VudERvd24gPSBtX3VzYWdlIDwgbV9xdW90YSA/IG1fcXVvdGEgLSBtX3Vz
YWdlIDogMDsKKyAgICBpZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkKKyAgICAg
ICAgcmV0dXJuIERlY2lzaW9uOjpHcmFudDsKIAotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVl
c3RzKHsgfSk7Ci0gICAgfSk7Ci19CisgICAgLy8gQmxvY2sgdGhpcyB0aHJlYWQgdW50aWwgZ2V0
dGluZyBkZWNzaW9uIGZvciBxdW90YSBpbmNyZWFzZS4KKyAgICBCaW5hcnlTZW1hcGhvcmUgc2Vt
YXBob3JlOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgc3BhY2VSZXF1ZXN0ZWQsICZzZW1hcGhvcmVdKCkgbXV0YWJsZSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXIgYXNrcyBm
b3IgcXVvdGEgaW5jcmVhc2UgJSIgUFJJdTY0LCB0aGlzLCBzcGFjZVJlcXVlc3RlZCk7CisgICAg
ICAgIG1fcXVvdGFJbmNyZWFzZVJlcXVlc3RlcihtX3F1b3RhLCBtX3VzYWdlLCBzcGFjZVJlcXVl
c3RlZCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCAmc2Vt
YXBob3JlXShPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEpIG11dGFibGUgeworICAgICAgICAg
ICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlciByZWNlaXZl
cyBxdW90YSBpbmNyZWFzZSByZXNwb25zZSAlIiBQUkl1NjQsIHRoaXMsIG5ld1F1b3RhID8gKm5l
d1F1b3RhIDogMCk7CisgICAgICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi12b2lk
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFkZFVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKLXsK
LSAgICBBU1NFUlQoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnMoJnVzZXIp
KTsKLSAgICBBU1NFUlQoIW1fdXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBtX3BlbmRpbmdJ
bml0aWFsaXphdGlvblVzZXJzLmFkZCgmdXNlciwgV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpObyk7
CisgICAgICAgICAgICBpZiAobmV3UXVvdGEpCisgICAgICAgICAgICAgICAgbV9xdW90YSA9ICpu
ZXdRdW90YTsKIAotICAgIGlmICghbV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAg
ICBhc2tVc2VyVG9Jbml0aWFsaXplKHVzZXIpOwotfQorICAgICAgICAgICAgc2VtYXBob3JlLnNp
Z25hbCgpOworICAgICAgICB9KTsKKyAgICB9KTsKIAotYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpzaG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3QKLXsK
LSAgICBpZiAoIXNwYWNlSW5jcmVhc2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzZW1h
cGhvcmUud2FpdCgpOwogCi0gICAgcmV0dXJuIHNwYWNlVXNhZ2UoKSArIHNwYWNlSW5jcmVhc2Ug
PiBtX3F1b3RhOworICAgIG1fdXNhZ2UgPSBtX3VzYWdlR2V0dGVyKCk7CisgICAgbV9xdW90YUNv
dW50RG93biA9IG1fdXNhZ2UgPCBtX3F1b3RhID8gbV9xdW90YSAtIG1fdXNhZ2UgOiAwOworICAg
IHJldHVybiB0cnlHcmFudFJlcXVlc3Qoc3BhY2VSZXF1ZXN0ZWQpID8gRGVjaXNpb246OkdyYW50
IDogRGVjaXNpb246OkRlbnk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3Zl
VXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQorYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp0
cnlHcmFudFJlcXVlc3QodWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQpCiB7Ci0gICAgQVNTRVJUKG1f
dXNlcnMuY29udGFpbnMoJnVzZXIpIHx8IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29u
dGFpbnMoJnVzZXIpKTsKLSAgICBtX3VzZXJzLnJlbW92ZSgmdXNlcik7Ci0gICAgaWYgKG1fcGVu
ZGluZ0luaXRpYWxpemF0aW9uVXNlcnMucmVtb3ZlKCZ1c2VyKSAmJiBtX3BlbmRpbmdJbml0aWFs
aXphdGlvblVzZXJzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBXaGVuIGJlaW5nIGNsZWFyZWQs
IHF1b3RhIHVzZXJzIG1heSByZW1vdmUgdGhlbXNlbHZlcyBhbmQgYWRkIHRoZW1zZWx2ZXMgdG8g
dHJpZ2dlciByZWluaXRpYWxpemF0aW9uLgotICAgICAgICAvLyBMZXQncyB3YWl0IGZvciBhZGRV
c2VyIHRvIGJlIGNhbGxlZCBiZWZvcmUgcHJvY2Vzc2luZyBwZW5kaW5nIHJlcXVlc3RzLgotICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMp
XSB7Ci0gICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKLSAg
ICAgICAgfSk7CisgICAgQVNTRVJUKG1fcXVvdGFDb3VudERvd25Mb2NrLmlzTG9ja2VkKCkpOwor
ICAgIGlmIChzcGFjZVJlcXVlc3RlZCA8PSBtX3F1b3RhQ291bnREb3duKSB7CisgICAgICAgIG1f
cXVvdGFDb3VudERvd24gLT0gc3BhY2VSZXF1ZXN0ZWQ7CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9Ci0KLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIFJlcXVlc3RDYWxsYmFjayYmIGNh
bGxiYWNrKQorICAgIAordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVRdW90YUJhc2Vk
T25Vc2FnZSgpCiB7Ci0gICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShj
YWxsYmFjaykgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXNwYWNlSW5j
cmVhc2UpIHsKLSAgICAgICAgY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAo
IW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcGVu
ZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spIH0p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZEFza0Zvck1vcmVTcGFj
ZShzcGFjZUluY3JlYXNlKSkgewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBz
cGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKLQotICAgICAgICAvLyBUcnkgcHJv
Y2Vzc2luZyByZXF1ZXN0IGFnYWluIGFmdGVyIG1ha2luZyBzdXJlIHVzYWdlIGlzIGFjY3VyYXRl
LgotICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKLSAgICAgICAg
Zm9yIChhdXRvJiB1c2VyIDogY29weVRvVmVjdG9yKG1fdXNlcnMpKQotICAgICAgICAgICAgdXNl
ci0+Y29tcHV0ZVNwYWNlVXNlZCgpOwotCi0gICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6
YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9z
dGF0ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgIGFza0Zvck1vcmVTcGFj
ZShzcGFjZUluY3JlYXNlKTsKLSAgICAgICAgcmV0dXJuOworICAgIC8vIFdoZW4gU3RvcmFnZVF1
b3RhTWFuYWdlciBpcyB1c2VkIGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugd2FudCB0byBtYWtlIHN1
cmUgaXRzIGluaXRpYWwgcXVvdGEgaXMgYmlnZ2VyIHRoYW4gY3VycmVudCBkaXNrIHVzYWdlLAor
ICAgIC8vIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHF1b3RhIHdhcyBpbmNyZWFz
ZWQgdG8gYXQgbGVhc3QgdGhlIGRpc2sgdXNhZ2UgdW5kZXIgdXNlcidzIHBlcm1pc3Npb24gYmVm
b3JlLgorICAgIEFTU0VSVChtX3F1b3RhQ291bnREb3duTG9jay5pc0xvY2tlZCgpKTsKKyAgICBp
ZiAoIW1fcXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlKSB7CisgICAgICAgIG1fcXVvdGFVcGRhdGVk
QmFzZWRPblVzYWdlID0gdHJ1ZTsKKyAgICAgICAgYXV0byBkZWZhdWx0UXVvdGFTdGVwID0gbV9x
dW90YSAvIDEwOworICAgICAgICBtX3F1b3RhID0gc3RkOjptYXgobV9xdW90YSwgZGVmYXVsdFF1
b3RhU3RlcCAqICgobV91c2FnZSAvIGRlZmF1bHRRdW90YVN0ZXApICsgMSkpOwogICAgIH0KLQot
ICAgIG1fc3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgIGNhbGxi
YWNrKERlY2lzaW9uOjpHcmFudCk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNr
Rm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpCit2b2lkIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZygpCiB7Ci0gICAg
QVNTRVJUKHNob3VsZEFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKSk7Ci0gICAgQVNTRVJU
KG1fc3RhdGUgPT0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZSk7Ci0KLSAgICBSRUxFQVNFX0xP
RyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UgJSIg
UFJJdTY0LCB0aGlzLCBzcGFjZUluY3JlYXNlKTsKLSAgICBtX3N0YXRlID0gU3RhdGU6OldhaXRp
bmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2U7Ci0gICAgbV9zcGFjZUluY3JlYXNlUmVxdWVzdGVy
KG1fcXVvdGEsIHNwYWNlVXNhZ2UoKSwgc3BhY2VJbmNyZWFzZSwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpXShPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEpIHsKLSAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSRUxFQVNF
X0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2Ug
cmVjZWl2ZWQgcmVzcG9uc2UgJSIgUFJJdTY0LCB0aGlzLCBuZXdRdW90YSA/ICpuZXdRdW90YSA6
IDApOwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlOwotICAg
ICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKG5ld1F1b3RhKTsKLSAgICB9KTsKKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX3F1b3RhQ291bnREb3duTG9jayk7CisgICAgbV9xdW90YSA9IG1faW5p
dGlhbFF1b3RhOworICAgIG1fcXVvdGFDb3VudERvd24gPSAwOworICAgIG1fcXVvdGFVcGRhdGVk
QmFzZWRPblVzYWdlID0gZmFsc2U7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJv
Y2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEpCit2b2lkIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OnJlc2V0UXVvdGFGb3JUZXN0aW5nKCkKIHsKLSAgICBpZiAobV9w
ZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobmV3
UXVvdGEpCi0gICAgICAgIG1fcXVvdGEgPSAqbmV3UXVvdGE7Ci0KLSAgICBpZiAobV9zdGF0ZSA9
PSBTdGF0ZTo6V2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkFza2luZ0Zvck1vcmVT
cGFjZSkgewotICAgICAgICBhdXRvIHJlcXVlc3QgPSBtX3BlbmRpbmdSZXF1ZXN0cy50YWtlRmly
c3QoKTsKLSAgICAgICAgYm9vbCBzaG91bGRBbGxvd1JlcXVlc3QgPSAhc2hvdWxkQXNrRm9yTW9y
ZVNwYWNlKHJlcXVlc3Quc3BhY2VJbmNyZWFzZSk7Ci0KLSAgICAgICAgUkVMRUFTRV9MT0coU3Rv
cmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyBm
aXJzdCByZXF1ZXN0IGRlY2lzaW9uIGlzICVkIiwgdGhpcywgc2hvdWxkQWxsb3dSZXF1ZXN0KTsK
LQotICAgICAgICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKLSAg
ICAgICAgcmVxdWVzdC5jYWxsYmFjayhzaG91bGRBbGxvd1JlcXVlc3QgPyBEZWNpc2lvbjo6R3Jh
bnQgOiBEZWNpc2lvbjo6RGVueSk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtX3BlbmRpbmdSZXF1
ZXN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byYgcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVl
c3RzLmZpcnN0KCk7Ci0KLSAgICAgICAgaWYgKHNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0
LnNwYWNlSW5jcmVhc2UpKSB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6TWFr
aW5nRGVjaXNpb25Gb3JSZXF1ZXN0KSB7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRl
OjpDb21wdXRpbmdTcGFjZVVzZWQ7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiB1c2VyIDog
Y29weVRvVmVjdG9yKG1fdXNlcnMpKQotICAgICAgICAgICAgICAgICAgICB1c2VyLT5jb21wdXRl
U3BhY2VVc2VkKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0
aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNl
OwotICAgICAgICAgICAgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSA9IDA7Ci0gICAgICAgICAgICBm
b3IgKGF1dG8mIHBlbmRpbmdSZXF1ZXN0IDogbV9wZW5kaW5nUmVxdWVzdHMpCi0gICAgICAgICAg
ICAgICAgc3BhY2VJbmNyZWFzZSArPSBwZW5kaW5nUmVxdWVzdC5zcGFjZUluY3JlYXNlOwotICAg
ICAgICAgICAgYXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lv
bkZvclJlcXVlc3Q7Ci0gICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpLmNhbGxi
YWNrKERlY2lzaW9uOjpHcmFudCk7Ci0gICAgfQorICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcXVv
dGFDb3VudERvd25Mb2NrKTsKKyAgICBtX3F1b3RhID0gbV9pbml0aWFsUXVvdGE7CisgICAgbV9x
dW90YUNvdW50RG93biA9IDA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKaW5kZXggMDk1NjYzMDZmNTU5
MWFiYjU5ZDBhZmQ4ZWVhNDg2NzlhNWY2YzYzYy4uOWJkZmRkNDdhMThhMTc2YzViYzMzZjRiODYy
ODkyMjM0YWQyOWFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
UXVvdGFNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmgKQEAgLTI1LDc3ICsyNSw1NCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkNsaWVudE9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9X
b3JrUXVldWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTdG9yYWdlUXVvdGFV
c2VyOwotCi1jbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VyIDogcHVibGljIENhbk1ha2VXZWFrUHRy
PFN0b3JhZ2VRdW90YU1hbmFnZXI+IHsKK2NsYXNzIFN0b3JhZ2VRdW90YU1hbmFnZXIgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U3RvcmFnZVF1b3RhTWFuYWdlcj4sIHB1YmxpYyBDYW5N
YWtlV2Vha1B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgdXNpbmcgU3BhY2VJbmNyZWFzZVJlcXVlc3RlciA9IFdURjo6
RnVuY3Rpb248dm9pZCh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3VycmVudFNwYWNlLCB1aW50
NjRfdCBzcGFjZUluY3JlYXNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVpbnQ2
NF90Pik+JiYpPjsKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKHVpbnQ2NF90IHF1b3RhLCBTcGFj
ZUluY3JlYXNlUmVxdWVzdGVyJiYgc3BhY2VJbmNyZWFzZVJlcXVlc3RlcikKLSAgICAgICAgOiBt
X3F1b3RhKHF1b3RhKQotICAgICAgICAsIG1fc3BhY2VJbmNyZWFzZVJlcXVlc3RlcihXVEZNb3Zl
KHNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIpKQotICAgIHsKLSAgICB9Ci0gICAgV0VCQ09SRV9FWFBP
UlQgflN0b3JhZ2VRdW90YU1hbmFnZXIoKTsKKyAgICB1c2luZyBVc2FnZUdldHRlciA9IEZ1bmN0
aW9uPHVpbnQ2NF90KCk+OworICAgIHVzaW5nIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBGdW5j
dGlvbjx2b2lkKHVpbnQ2NF90IGN1cnJlbnRRdW90YSwgdWludDY0X3QgY3VycmVudFVzYWdlLCB1
aW50NjRfdCByZXF1ZXN0ZWRJbmNyZWFzZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25h
bDx1aW50NjRfdD4pPiYmKT47CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTdG9yYWdl
UXVvdGFNYW5hZ2VyPiBjcmVhdGUodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYsIFF1b3Rh
SW5jcmVhc2VSZXF1ZXN0ZXImJik7CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGRl
ZmF1bHRUaGlyZFBhcnR5UXVvdGFGcm9tUGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpIHsg
cmV0dXJuIHF1b3RhIC8gMTA7IH0KLQogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVm
YXVsdFF1b3RhKCkgeyByZXR1cm4gMTAwMCAqIE1COyB9CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkgeyByZXR1cm4gZGVmYXVsdFRoaXJkUGFy
dHlRdW90YUZyb21QZXJPcmlnaW5RdW90YShkZWZhdWx0UXVvdGEoKSk7IH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYWRkVXNlcihTdG9yYWdlUXVvdGFVc2VyJik7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZW1vdmVVc2VyKFN0b3JhZ2VRdW90YVVzZXImKTsKLQogICAgIGVudW0gY2xh
c3MgRGVjaXNpb24geyBEZW55LCBHcmFudCB9OwogICAgIHVzaW5nIFJlcXVlc3RDYWxsYmFjayA9
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRGVjaXNpb24pPjsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlcXVlc3RTcGFjZSh1aW50NjRfdCwgUmVxdWVzdENhbGxiYWNrJiYpOwotICAgIHZvaWQg
cmVzZXRRdW90YSh1aW50NjRfdCBuZXdRdW90YSkgeyBtX3F1b3RhID0gbmV3UXVvdGE7IH0KKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCh1aW50NjRfdCwg
UmVxdWVzdENhbGxiYWNrJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIERlY2lzaW9uIHJlcXVlc3RT
cGFjZU9uQmFja2dyb3VuZFRocmVhZCh1aW50NjRfdCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKLQotICAgIGVudW0gY2xhc3MgU3Rh
dGUgewotICAgICAgICBVbmluaXRpYWxpemVkLAotICAgICAgICBDb21wdXRpbmdTcGFjZVVzZWQs
Ci0gICAgICAgIFdhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UsCi0gICAgICAgIEFza2lu
Z0Zvck1vcmVTcGFjZSwKLSAgICAgICAgTWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0LAotICAgIH07
Ci0gICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCByZXNldFF1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZUZvclRlc3RpbmcoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0UXVvdGFGb3JUZXN0aW5nKCk7CiAKIHByaXZh
dGU6Ci0gICAgdWludDY0X3Qgc3BhY2VVc2FnZSgpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkQXNr
Rm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpIGNvbnN0OwotICAgIHZvaWQgYXNr
Rm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpOwotCi0gICAgdm9pZCBpbml0aWFs
aXplVXNlcnNJZk5lZWRlZCgpOwotICAgIHZvaWQgYXNrVXNlclRvSW5pdGlhbGl6ZShTdG9yYWdl
UXVvdGFVc2VyJik7CisgICAgU3RvcmFnZVF1b3RhTWFuYWdlcih1aW50NjRfdCBxdW90YSwgVXNh
Z2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmKTsKKyAgICBib29sIHRyeUdyYW50
UmVxdWVzdCh1aW50NjRfdCk7CiAKLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0
aW9uYWw8dWludDY0X3Q+KTsKKyAgICB2b2lkIHVwZGF0ZVF1b3RhQmFzZWRPblVzYWdlKCk7CiAK
KyAgICBMb2NrIG1fcXVvdGFDb3VudERvd25Mb2NrOworICAgIHVpbnQ2NF90IG1fcXVvdGFDb3Vu
dERvd24geyAwIH07CiAgICAgdWludDY0X3QgbV9xdW90YSB7IDAgfTsKKyAgICB1aW50NjRfdCBt
X3VzYWdlIHsgMCB9OwogCi0gICAgU3BhY2VJbmNyZWFzZVJlcXVlc3RlciBtX3NwYWNlSW5jcmVh
c2VSZXF1ZXN0ZXI7CisgICAgVXNhZ2VHZXR0ZXIgbV91c2FnZUdldHRlcjsKKyAgICBRdW90YUlu
Y3JlYXNlUmVxdWVzdGVyIG1fcXVvdGFJbmNyZWFzZVJlcXVlc3RlcjsKIAotICAgIGVudW0gY2xh
c3MgV2hlbkluaXRpYWxpemVkQ2FsbGVkIHsgTm8sIFllcyB9OwotICAgIEhhc2hNYXA8U3RvcmFn
ZVF1b3RhVXNlciosIFdoZW5Jbml0aWFsaXplZENhbGxlZD4gbV9wZW5kaW5nSW5pdGlhbGl6YXRp
b25Vc2VyczsKLSAgICBIYXNoU2V0PFN0b3JhZ2VRdW90YVVzZXIqPiBtX3VzZXJzOworICAgIFJl
ZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOwogCi0gICAgc3RydWN0IFBlbmRpbmdSZXF1ZXN0IHsK
LSAgICAgICAgdWludDY0X3Qgc3BhY2VJbmNyZWFzZTsKLSAgICAgICAgUmVxdWVzdENhbGxiYWNr
IGNhbGxiYWNrOwotICAgIH07Ci0gICAgRGVxdWU8UGVuZGluZ1JlcXVlc3Q+IG1fcGVuZGluZ1Jl
cXVlc3RzOworICAgIGJvb2wgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgeyBmYWxzZSB9Owog
Ci0gICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpVbmluaXRpYWxpemVkIH07CisgICAgLy8gVGVz
dCBvbmx5LgorICAgIHVpbnQ2NF90IG1faW5pdGlhbFF1b3RhIHsgMCB9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlUXVvdGFVc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcxMGNlZWM2MGM1ZGU1MGM2MDlkMjMx
YjBmMGRmOTY3NDk0OTQyMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFu
ZGxlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFN0b3JhZ2VRdW90YVVzZXIg
ewotcHVibGljOgotICAgIHZpcnR1YWwgflN0b3JhZ2VRdW90YVVzZXIoKSA9IGRlZmF1bHQ7Ci0K
LSAgICB2aXJ0dWFsIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgd2hlbkluaXRp
YWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykgeyBjYWxsYmFjaygp
OyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDVmMjNjYzY2YWExMWY3ZDI4ZTc2
MTVjY2I4NTEzNjdjMjAzMTViZTMuLmM0ZjYwN2E4OTgwNDI5OTJmMjY2ZjQ5MzhiNjUzNDAxNzYx
MDJhMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgog
I2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2Vic2l0
ZURhdGFUeXBlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0Nvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRE5TLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9EZXByZWNhdGVkR2xvYmFsU2V0dGluZ3MuaD4KQEAgLTMxNiw2ICszMTcsOSBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJgogICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vz
c2lvbklEOwogICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRl
KCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwogCisgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3Vt
ZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBhZGRTZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBhZGRJbmRleGVkRGF0
YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNl
bmRpZgpAQCAtMzI2LDcgKzMzMCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVO
ZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAgICAgICAg
IGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAg
ICB9CiAjZW5kaWYKLSAgICBpbml0aWFsaXplU3RvcmFnZVF1b3RhKHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNl
c3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIApAQCAtNDM0LDI4ICs0MzcsMzkgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMmJiBwYXJhbWV0ZXJzKQogeworICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOworCisgICAgYWRkU2Vzc2lvblN0b3JhZ2VR
dW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwg
cGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgYWRkSW5k
ZXhlZERhdGFiYXNlU2Vzc2lvbihwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5z
ZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgYWRkSW5kZXhl
ZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBpZiAocGFyZW50
UHJvY2Vzc0hhc1NlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpKQotICAgICAgICBhZGRTZXJ2aWNl
V29ya2VyU2Vzc2lvbihwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9u
SUQsIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxl
ZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnkp
LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOworICAgICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFt
ZXRlcnMuc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92
ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwog
I2VuZGlmCiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQocGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
Ci0gICAgaW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShwYXJhbWV0ZXJzKTsKKyAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9y
eSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCiAg
ICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9u
KCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6
aW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShjb25zdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYg
cGFyYW1ldGVycykKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1
aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBh
dGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgY2FjaGVSb290UGF0aEhhbmRsZSkKIHsKLSAg
ICBhdXRvJiBtYW5hZ2VycyA9ICBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmVuc3VyZShwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIFtdIHsKLSAgICAgICAgcmV0
dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsgfTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci0g
ICAgbWFuYWdlcnMuc2V0RGVmYXVsdFF1b3RhcyhwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VR
dW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKTsKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAg
IGF1dG8gW2l0ZXIsIGlzTmV3RW50cnldID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMu
ZW5zdXJlKHNlc3Npb25JRCwgW2RlZmF1bHRRdW90YSwgZGVmYXVsdFRoaXJkUGFydHlRdW90YSwg
Y2FjaGVSb290UGF0aF0geworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlcj4oY2FjaGVSb290UGF0aCwgZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQ
YXJ0eVF1b3RhKTsKKyAgICB9KTsKKyAgICBpZiAoaXNOZXdFbnRyeSkKKyAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGNhY2hlUm9vdFBhdGhIYW5kbGUpOworfQor
Cit2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9zZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBBU1NFUlQobV9zZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlcnMuY29udGFpbnMoc2Vzc2lvbklEKSk7CisgICAgbV9zZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKE5ldHdvcmtTZXNz
aW9uJik+JiBmdW5jdG9yKQpAQCAtNTc2LDggKzU5MCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmRlc3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICNlbmRpZgogCiAgICAg
bV9zdG9yYWdlTWFuYWdlclNldC0+cmVtb3ZlKHNlc3Npb25JRCk7Ci0KLSAgICBtX3N0b3JhZ2VR
dW90YU1hbmFnZXJzLnJlbW92ZShzZXNzaW9uSUQpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKQEAgLTE0NjgsOSArMTQ4MCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0
PFdlYnNpCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgY2xlYXJE
aXNrQ2FjaGUobW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5kbGVyID0gV1RGTW92ZShjbGVh
clRhc2tzSGFuZGxlcildIHsgfSk7CiAKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykgfHwgd2Vic2l0ZURhdGFUeXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRPTUNhY2hlKSkKLSAgICAgICAgY2xlYXJTdG9y
YWdlUXVvdGEoc2Vzc2lvbklEKTsKLQogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6QWRDbGlja0F0dHJpYnV0aW9ucykpIHsKICAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKICAg
ICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5jbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbigpOwpAQCAt
MTU2MywxOSArMTU3Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRh
Rm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvCiAgICAgICAgIH0KICAg
ICAgICAgV2ViQ29yZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OnJlbW92ZVNlc3Npb25DcmVkZW50aWFs
c1dpdGhPcmlnaW5zKG9yaWdpbkRhdGFzKTsKICAgICB9Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHN0b3JhZ2UgcXVvdGEgY2xlYXJpbmcgZm9yIHRoZXNlIG9yaWdpbnMuCi19Ci0KLXZvaWQg
TmV0d29ya1Byb2Nlc3M6OmNsZWFyU3RvcmFnZVF1b3RhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCkKLXsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5maW5kKHNl
c3Npb25JRCk7Ci0gICAgaWYgKGl0ZXJhdG9yID09IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuZW5k
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIG1hbmFnZXJzID0gaXRlcmF0b3ItPnZh
bHVlOwotICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1hbmFnZXJzLm1hbmFnZXJzUGVyT3JpZ2lu
KCkpCi0gICAgICAgIG1hbmFnZXIudmFsdWUtPnJlc2V0UXVvdGEobWFuYWdlcnMuZGVmYXVsdFF1
b3RhKG1hbmFnZXIua2V5KSk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQpAQCAtMjIxNywxMCArMjIxMyw5IEBAIFJlZjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gTmV0
d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uCiAgICAg
ICAgIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0aHMuZ2V0KHNlc3Npb25JRCk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklELCBwYXRoLCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBhdXRvJiBvcmlnaW4pIC0+IFN0b3JhZ2VRdW90YU1hbmFnZXIqIHsKLSAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBy
ZXR1cm4gJnRoaXMtPnN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBvcmlnaW4pOworICAg
IHJldHVybiBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgcGF0aCwgW3Ro
aXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRF0oY29uc3QgYXV0byYg
b3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCkgeworICAgICAgICBSZWZQdHI8U3RvcmFn
ZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlciA9IHdlYWtUaGlzID8gdGhpcy0+c3Rv
cmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbikgOiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gc3RvcmFnZVF1b3RhTWFuYWdlciA/IHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RT
cGFjZU9uQmFja2dyb3VuZFRocmVhZChzcGFjZVJlcXVlc3RlZCkgOiBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpEZWNpc2lvbjo6RGVueTsKICAgICB9KTsKIH0KIApAQCAtMjMwNyw4ICsyMzAyLDE4IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseShoYW5kbGUpOwogICAgICAgICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBwb3N0U3RvcmFnZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMsIGluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeSkpOworICAgICAgICBzZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlcklEQlJvb3RQYXRoKHNlc3Npb25JRCwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKICAg
ICB9CiB9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VySURCUm9vdFBhdGgoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGlk
YlJvb3RQYXRoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXJzTG9jayk7CisgICAgYXV0byogc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgPSBt
X3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5nZXQoc2Vzc2lvbklEKTsKKyAgICBBU1NFUlQo
c2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpOworICAgIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VyLT5zZXRJREJSb290UGF0aChpZGJSb290UGF0aCk7Cit9CisKICNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c3luY0xvY2FsU3RvcmFn
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yMzI1
LDkgKzIzMzAsMTggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJMZWdhY3lQcml2YXRlQnJv
d3NpbmdMb2NhbFN0b3JhZ2UoKQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjp1cGRhdGVRdW90YUJh
c2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IENsaWVudE9yaWdpbiYgb3JpZ2luKQogewotICAgIGF1dG8mIG1hbmFnZXIgPSBzdG9yYWdlUXVv
dGFNYW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsKLSAgICBtYW5hZ2VyLnJlc2V0UXVvdGEobV9z
dG9yYWdlUXVvdGFNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCktPnZhbHVlLmRlZmF1bHRRdW90YShv
cmlnaW4pKTsKLSAgICBtYW5hZ2VyLnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKKyAg
ICBhdXRvIHN0b3JhZ2VRdW90YU1hbmFnZXIgPSB0aGlzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKHNl
c3Npb25JRCwgb3JpZ2luKTsKKyAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5yZXNldFF1b3RhVXBk
YXRlZEJhc2VkT25Vc2FnZUZvclRlc3RpbmcoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6
cmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIGlmIChhdXRvKiBzZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlciA9IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzLmdldChzZXNz
aW9uSUQpKSB7CisgICAgICAgIGZvciAoYXV0byBzdG9yYWdlUXVvdGFNYW5hZ2VyIDogc2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXItPmV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMoKSkKKyAg
ICAgICAgICAgIHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlc2V0UXVvdGFGb3JUZXN0aW5nKCk7Cisg
ICAgfQorICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKICNpZiBFTkFCTEUoU0FOREJPWF9F
WFRFTlNJT05TKQpAQCAtMjQwNCw2MiArMjQxOCwzNSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpy
ZXF1ZXN0U3RvcmFnZVNwYWNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50
TwogICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6UmVxdWVzdFN0b3JhZ2VTcGFjZSB7IHNlc3Npb25J
RCwgb3JpZ2luLCBxdW90YSwgY3VycmVudFNpemUsIHNwYWNlUmVxdWlyZWQgfSwgV1RGTW92ZShj
YWxsYmFjayksIDApOwogfQogCi1jbGFzcyBRdW90YVVzZXJJbml0aWFsaXplciBmaW5hbCA6IHB1
YmxpYyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBRdW90YVVzZXJJbml0aWFsaXplcihTdG9yYWdl
UXVvdGFNYW5hZ2VyJiBtYW5hZ2VyKQotICAgICAgICA6IG1fbWFuYWdlcihtYWtlV2Vha1B0ciht
YW5hZ2VyKSkKLSAgICB7Ci0gICAgICAgIG1hbmFnZXIuYWRkVXNlcigqdGhpcyk7Ci0gICAgfQot
Ci0gICAgflF1b3RhVXNlckluaXRpYWxpemVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX21hbmFn
ZXIpCi0gICAgICAgICAgICBtX21hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgICAgICBp
ZiAobV9jYWxsYmFjaykKLSAgICAgICAgICAgIG1fY2FsbGJhY2soKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgLy8gU3RvcmFnZVF1b3RhVXNlciBBUEkuCi0gICAgdWludDY0X3Qgc3BhY2VVc2Vk
KCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9CitSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gTmV0d29y
a1Byb2Nlc3M6OnN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIGF1dG8qIHNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VyID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZ2V0KHNlc3Npb25J
RCk7CisgICAgaWYgKCFzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2spIGZpbmFsCi0gICAgewotICAgICAgICBtX2NhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayk7Ci0gICAgfQorICAgIFN0cmluZyBpZGJSb290UGF0aDsKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICBpZGJSb290UGF0aCA9IHNlc3Npb25TdG9yYWdlUXVv
dGFNYW5hZ2VyLT5pZGJSb290UGF0aCgpOworI2VuZGlmCisgICAgU3RvcmFnZVF1b3RhTWFuYWdl
cjo6VXNhZ2VHZXR0ZXIgdXNhZ2VHZXR0ZXIgPSBbY2FjaGVSb290UGF0aCA9IHNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyLT5jYWNoZVJvb3RQYXRoKCkuaXNvbGF0ZWRDb3B5KCksIGlkYlJvb3RQ
YXRoID0gaWRiUm9vdFBhdGguaXNvbGF0ZWRDb3B5KCksIG9yaWdpbiA9IG9yaWdpbi5pc29sYXRl
ZENvcHkoKV0oKSB7CisgICAgICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOyAgICAKIAotICAg
IFdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gbV9tYW5hZ2VyOwotICAgIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4gbV9jYWxsYmFjazsKLX07CisgICAgICAgIHVpbnQ2NF90IHVzYWdlID0g
Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OmRpc2tVc2FnZShjYWNoZVJvb3RQYXRoLCBvcmlnaW4pOwor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgICAgICB1c2FnZSArPSBJREJTZXJ2ZXI6
OklEQlNlcnZlcjo6ZGlza1VzYWdlKGlkYlJvb3RQYXRoLCBvcmlnaW4pOworI2VuZGlmCiAKLXZv
aWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVRdW90YVVzZXJzKFN0b3JhZ2VRdW90YU1hbmFn
ZXImIG1hbmFnZXIsIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2lu
JiBvcmlnaW4pCi17Ci0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIG9yaWdpbiwgdXNlciA9IG1ha2VVbmlx
dWU8UXVvdGFVc2VySW5pdGlhbGl6ZXI+KG1hbmFnZXIpXSgpIG11dGFibGUgeworICAgICAgICBy
ZXR1cm4gdXNhZ2U7CisgICAgfTsKKyAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpRdW90YUluY3Jl
YXNlUmVxdWVzdGVyIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBbdGhpcywgd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cigqdGhpcyksIHNlc3Npb25JRCwgb3JpZ2luXSAodWludDY0X3QgY3VycmVudFF1
b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHJlcXVlc3RlZEluY3JlYXNlLCBh
dXRvJiYgY2FsbGJhY2spIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy0+aWRi
U2VydmVyKHNlc3Npb25JRCkuaW5pdGlhbGl6ZVF1b3RhVXNlcihvcmlnaW4pOwotICAgICAgICBD
YWNoZVN0b3JhZ2U6OkVuZ2luZTo6aW5pdGlhbGl6ZVF1b3RhVXNlcigqdGhpcywgc2Vzc2lvbklE
LCBvcmlnaW4sIFt1c2VyID0gV1RGTW92ZSh1c2VyKV0geyB9KTsKLSAgICB9KTsKLX0KKyAgICAg
ICAgICAgIGNhbGxiYWNrKHsgfSk7CisgICAgICAgIHJlcXVlc3RTdG9yYWdlU3BhY2Uoc2Vzc2lv
bklELCBvcmlnaW4sIGN1cnJlbnRRdW90YSwgY3VycmVudFNwYWNlLCByZXF1ZXN0ZWRJbmNyZWFz
ZSwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIH07CiAKLVN0b3JhZ2VRdW90YU1hbmFnZXImIE5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAgYXV0byYgc3RvcmFnZVF1b3Rh
TWFuYWdlcnMgPSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmVuc3VyZShzZXNzaW9uSUQsIFtdIHsK
LSAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsgfTsKLSAgICB9KS5pdGVyYXRv
ci0+dmFsdWU7Ci0gICAgcmV0dXJuICpzdG9yYWdlUXVvdGFNYW5hZ2Vycy5tYW5hZ2Vyc1Blck9y
aWdpbigpLmVuc3VyZShvcmlnaW4sIFt0aGlzLCAmc3RvcmFnZVF1b3RhTWFuYWdlcnMsIHNlc3Np
b25JRCwgJm9yaWdpbl0gewotICAgICAgICBhdXRvIG1hbmFnZXIgPSBtYWtlVW5pcXVlPFN0b3Jh
Z2VRdW90YU1hbmFnZXI+KHN0b3JhZ2VRdW90YU1hbmFnZXJzLmRlZmF1bHRRdW90YShvcmlnaW4p
LCBbdGhpcywgc2Vzc2lvbklELCBvcmlnaW5dKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJy
ZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKLSAgICAg
ICAgICAgIHRoaXMtPnJlcXVlc3RTdG9yYWdlU3BhY2Uoc2Vzc2lvbklELCBvcmlnaW4sIHF1b3Rh
LCBjdXJyZW50U3BhY2UsIHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICAg
ICAgfSk7Ci0gICAgICAgIGluaXRpYWxpemVRdW90YVVzZXJzKCptYW5hZ2VyLCBzZXNzaW9uSUQs
IG9yaWdpbik7Ci0gICAgICAgIHJldHVybiBtYW5hZ2VyOwotICAgIH0pLml0ZXJhdG9yLT52YWx1
ZTsKKyAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPmVuc3VyZU9yaWdpblN0
b3JhZ2VRdW90YU1hbmFnZXIob3JpZ2luLCBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+ZGVm
YXVsdFF1b3RhKG9yaWdpbiksIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5j
cmVhc2VSZXF1ZXN0ZXIpKTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBmNjJmMDFkMzgwZjQw
MTA1NTJhYWQzODg5YTQ5N2Q1MTI2ZjhhMzUzLi43ZDZiZGVjNTExNjRlZWUwODBiOWVlMTJjYmQ5
MTBmZTNlOTljMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5oCkBAIC0yODQsNiArMjg0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJMZWdh
Y3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoKTsKIAogICAgIHZvaWQgdXBkYXRlUXVvdGFC
YXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYpOworICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lP
TlMpCiAgICAgdm9pZCBnZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZUFycmF5JiYpPiYmKTsKQEAgLTMyNyw3ICszMjgsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhQQUw6
OlNlc3Npb25JRCwgVVJMJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9p
ZCBtYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoUEFMOjpTZXNzaW9u
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKLSAgICBXZWJDb3JlOjpTdG9yYWdl
UXVvdGFNYW5hZ2VyJiBzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luJik7CiAKICAgICB2b2lkIGFkZEtlcHRBbGl2ZUxvYWQoUmVmPE5ldHdv
cmtSZXNvdXJjZUxvYWRlcj4mJik7CiAgICAgdm9pZCByZW1vdmVLZXB0QWxpdmVMb2FkKE5ldHdv
cmtSZXNvdXJjZUxvYWRlciYpOwpAQCAtNDQyLDYgKzQ0Myw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjb2xsZWN0SW5kZXhlZERhdGFiYXNlT3JpZ2luc0ZvclZlcnNpb24oY29uc3QgU3RyaW5nJiwg
SGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAgICAgSGFzaFNldDxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGluZGV4ZWREYXRhYmFzZU9yaWdpbnMoY29uc3QgU3Ry
aW5nJiBwYXRoKTsKICAgICBSZWY8V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI+IGNyZWF0
ZUlEQlNlcnZlcihQQUw6OlNlc3Npb25JRCk7CisgICAgdm9pZCBzZXRTZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlcklEQlJvb3RQYXRoKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGlkYlJv
b3RQYXRoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtNDYxLDgg
KzQ2Myw0NCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGVyZm9ybU5leHRTdG9yYWdlVGFzaygpOwog
ICAgIHZvaWQgZW5zdXJlUGF0aEV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpOwogCi0gICAgdm9p
ZCBjbGVhclN0b3JhZ2VRdW90YShQQUw6OlNlc3Npb25JRCk7Ci0gICAgdm9pZCBpbml0aWFsaXpl
U3RvcmFnZVF1b3RhKGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJik7CisgICAgY2xh
c3MgU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vy
KGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0aCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50
NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKQorICAgICAgICAgICAgOiBtX2NhY2hlUm9vdFBh
dGgoY2FjaGVSb290UGF0aCkKKyAgICAgICAgICAgICwgbV9kZWZhdWx0UXVvdGEoZGVmYXVsdFF1
b3RhKQorICAgICAgICAgICAgLCBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGEoZGVmYXVsdFRoaXJk
UGFydHlRdW90YSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHVpbnQ2NF90IGRlZmF1
bHRRdW90YShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikgY29uc3QgeyByZXR1
cm4gb3JpZ2luLnRvcE9yaWdpbiA9PSBvcmlnaW4uY2xpZW50T3JpZ2luID8gbV9kZWZhdWx0UXVv
dGEgOiBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGE7IH0KKworICAgICAgICBSZWZQdHI8V2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gZW5zdXJlT3JpZ2luU3RvcmFnZVF1b3RhTWFuYWdlcihX
ZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luLCB1aW50NjRfdCBxdW90YSwgV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcjo6VXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcjo6UXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VS
ZXF1ZXN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gW2l0ZXIsIGlzTmV3RW50cnld
ID0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUob3JpZ2luLCBbcXVvdGEsIHVzYWdlR2V0
dGVyID0gV1RGTW92ZSh1c2FnZUdldHRlciksIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEZN
b3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAg
IHJldHVybiBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUocXVvdGEsIFdURk1v
dmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIoKml0ZXItPnZhbHVlKTsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8gZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2Vycygp
IHsgcmV0dXJuIG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMudmFsdWVzKCk7IH0KKworICAgICAgICBj
b25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlUm9vdFBh
dGg7IH0KKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICAgICAgdm9pZCBzZXRJREJS
b290UGF0aChjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKSB7IG1faWRiUm9vdFBhdGggPSBpZGJS
b290UGF0aDsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZGJSb290UGF0aDsgfQorI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICBT
dHJpbmcgbV9jYWNoZVJvb3RQYXRoOworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAg
ICAgICBTdHJpbmcgbV9pZGJSb290UGF0aDsKKyNlbmRpZgorICAgICAgICB1aW50NjRfdCBtX2Rl
ZmF1bHRRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgp
IH07CisgICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YSB7IFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB9OworICAgICAg
ICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdpbiwgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI+PiBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzOworICAgIH07CisgICAgdm9pZCBh
ZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgdWludDY0X3QgZGVm
YXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcm
IGNhY2hlUm9vdFBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpOworICAgIHZvaWQgcmVt
b3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQpOwogCiAgICAgLy8g
Q29ubmVjdGlvbnMgdG8gV2ViUHJvY2Vzc2VzLgogICAgIEhhc2hNYXA8V2ViQ29yZTo6UHJvY2Vz
c0lkZW50aWZpZXIsIFJlZjxOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4+IG1fd2ViUHJv
Y2Vzc0Nvbm5lY3Rpb25zOwpAQCAtNTMzLDIzICs1NzEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9pc0lUUERhdGFiYXNlRW5hYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKICAgICAKLSAgICBjbGFz
cyBTdG9yYWdlUXVvdGFNYW5hZ2VycyB7Ci0gICAgcHVibGljOgotICAgICAgICB1aW50NjRfdCBk
ZWZhdWx0UXVvdGEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pIGNvbnN0IHsg
cmV0dXJuIG9yaWdpbi50b3BPcmlnaW4gPT0gb3JpZ2luLmNsaWVudE9yaWdpbiA/IG1fZGVmYXVs
dFF1b3RhIDogbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhOyB9Ci0gICAgICAgIHZvaWQgc2V0RGVm
YXVsdFF1b3Rhcyh1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBh
cnR5UXVvdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZGVmYXVsdFF1b3RhID0gZGVmYXVs
dFF1b3RhOwotICAgICAgICAgICAgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhID0gZGVmYXVsdFRo
aXJkUGFydHlRdW90YTsKLSAgICAgICAgfQotCi0gICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xp
ZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+
JiBtYW5hZ2Vyc1Blck9yaWdpbigpIHsgcmV0dXJuIG1fbWFuYWdlcnNQZXJPcmlnaW47IH0KLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFF1b3RhIHsgV2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCkgfTsKLSAgICAgICAgdWludDY0X3Qg
bV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6
ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgpIH07Ci0gICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xp
ZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+
IG1fbWFuYWdlcnNQZXJPcmlnaW47Ci0gICAgfTsKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklE
LCBTdG9yYWdlUXVvdGFNYW5hZ2Vycz4gbV9zdG9yYWdlUXVvdGFNYW5hZ2VyczsKKyAgICBMb2Nr
IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jazsKKyAgICBIYXNoTWFwPFBBTDo6U2Vz
c2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3Nl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyczsKIAogICAgIE9wdGlvblNldDxOZXR3b3JrQ2FjaGU6
OkNhY2hlT3B0aW9uPiBtX2NhY2hlT3B0aW9uczsKICAgICBXZWJDb3JlOjpNZXNzYWdlUG9ydENo
YW5uZWxSZWdpc3RyeSBtX21lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4K
aW5kZXggMzY3NzY3NzQ4MGI4MmE0NDMzZjg1ZDI4MmIzZTVmYjgwNmE5MWU2My4uMzYxZTkwNzAx
MDlkZTVjYmY0NTE4MjE0ZmY4YTg5MDhkYmQ5NThlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0xNjMs
NCArMTYzLDYgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewog
CiAgICAgU2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyBzZWNv
bmRzKSAtPiAoKSBTeW5jaHJvbm91cwogICAgIFJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91
dEZvclRlc3RpbmcoKSAtPiAoKSBTeW5jaHJvbm91cworCisgICAgUmVzZXRRdW90YShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpIC0+ICgpIEFzeW5jCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKaW5kZXgg
ZWZlN2UxNWIwNWY3ZDI1NjEwOWU4NjMyZTJmMzA1ZTIxYzM2ODRiNi4uM2Q2NTk0NzExYjUwMjlk
YzE3M2Y3OTAwNGU1NjAzYTNiZWJjYjk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcApAQCAtMTk2LDEz
ICsxOTYsNjggQEAgdm9pZCBFbmdpbmU6OmNsZWFyQ2FjaGVzRm9yT3JpZ2luKE5ldHdvcmtQcm9j
ZXNzJiBuZXR3b3JrUHJvY2VzcywgUEFMOjpTZXNzaW9uSUQKICAgICB9KTsKIH0KIAotdm9pZCBF
bmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIoTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNz
LCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYg
Y2xpZW50T3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCitzdGF0aWMgdWludDY0X3QgZ2V0RGlyZWN0b3J5U2l6ZShjb25zdCBTdHJpbmcmIGRpcmVj
dG9yeVBhdGgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICB1aW50NjRf
dCBkaXJlY3RvcnlTaXplID0gMDsKKyAgICBEZXF1ZTxTdHJpbmc+IHBhdGhzOworICAgIHBhdGhz
LmFwcGVuZChkaXJlY3RvcnlQYXRoKTsKKyAgICB3aGlsZSAoIXBhdGhzLmlzRW1wdHkoKSkgewor
ICAgICAgICBhdXRvIHBhdGggPSBwYXRocy50YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKEZpbGVT
eXN0ZW06OmZpbGVJc0RpcmVjdG9yeShwYXRoLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1i
b2xpY0xpbmtzOjpObykpIHsKKyAgICAgICAgICAgIGF1dG8gbmV3UGF0aHMgPSBGaWxlU3lzdGVt
OjpsaXN0RGlyZWN0b3J5KHBhdGgsICIqIl9zKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbmV3
UGF0aCA6IG5ld1BhdGhzKSB7CisgICAgICAgICAgICAgICAgLy8gRmlsZXMgaW4gL0Jsb2JzIGRp
cmVjdG9yeSBhcmUgaGFyZCBsaW5rLgorICAgICAgICAgICAgICAgIGF1dG8gZmlsZU5hbWUgPSBG
aWxlU3lzdGVtOjpsYXN0Q29tcG9uZW50T2ZQYXRoSWdub3JpbmdUcmFpbGluZ1NsYXNoKG5ld1Bh
dGgpOworICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZSA9PSAiQmxvYnMiKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBwYXRocy5hcHBlbmQobmV3UGF0
aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgICAgIEZpbGVTeXN0ZW06OmdldEZp
bGVTaXplKHBhdGgsIGZpbGVTaXplKTsKKyAgICAgICAgZGlyZWN0b3J5U2l6ZSArPSBmaWxlU2l6
ZTsKKyAgICB9CisgICAgcmV0dXJuIGRpcmVjdG9yeVNpemU7Cit9CisKK3VpbnQ2NF90IEVuZ2lu
ZTo6ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYgb3JpZ2luKQogewotICAgIGZyb20obmV0d29ya1Byb2Nlc3MsIHNlc3Npb25JRCwg
W2NsaWVudE9yaWdpbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oYXV0byYgZW5naW5lKSBtdXRhYmxlIHsKLSAgICAgICAgZW5naW5lLnJlYWRDYWNoZXNG
cm9tRGlzayhjbGllbnRPcmlnaW4sIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXShhdXRvJiYgY2FjaGVzT3JFcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICB9KTsKKyAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChyb290UGF0aC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgU3RyaW5nIHNhbHRQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KHJvb3RQYXRoLCAic2FsdCJfcyk7CisgICAgYXV0byBzYWx0ID0gcmVh
ZE9yTWFrZVNhbHQoc2FsdFBhdGgpOworICAgIGlmICghc2FsdCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBLZXkga2V5KG9yaWdpbi50b3BPcmlnaW4udG9TdHJpbmcoKSwgb3JpZ2luLmNsaWVu
dE9yaWdpbi50b1N0cmluZygpLCB7IH0sIHsgfSwgKnNhbHQpOworICAgIFN0cmluZyBkaXJlY3Rv
cnlQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJvb3RQYXRoLCBr
ZXkuaGFzaEFzU3RyaW5nKCkpOworCisgICAgU3RyaW5nIHNpemVGaWxlUGF0aCA9IENhY2hlczo6
Y2FjaGVzU2l6ZUZpbGVuYW1lKGRpcmVjdG9yeVBhdGgpOworICAgIGlmIChhdXRvIHJlY29yZGVk
U2l6ZSA9IHJlYWRTaXplRmlsZShzaXplRmlsZVBhdGgpKQorICAgICAgICByZXR1cm4gKnJlY29y
ZGVkU2l6ZTsKKworICAgIHJldHVybiBnZXREaXJlY3RvcnlTaXplKGRpcmVjdG9yeVBhdGgpOwor
fQorCit2b2lkIEVuZ2luZTo6cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2lu
LCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYgY2FsbGJhY2spCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKKyAgICAg
ICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkp
OworCisgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90
YU1hbmFnZXIgPSBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lv
bklELCBvcmlnaW4pOworICAgIGlmICghc3RvcmFnZVF1b3RhTWFuYWdlcikKKyAgICAgICAgY2Fs
bGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpOworCisg
ICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKHNwYWNlUmVx
dWVzdGVkLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIEVuZ2luZTo6RW5naW5lKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgTmV0d29ya1Byb2Nlc3MmIHByb2Nlc3MsIFN0cmluZyYmIHJvb3RQ
YXRoKQpAQCAtMzQxLDcgKzM5Niw3IEBAIHZvaWQgRW5naW5lOjpyZWFkQ2FjaGVzRnJvbURpc2so
Y29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIENhY2hlc0NhbGxiCiAKICAgICAg
ICAgYXV0byYgY2FjaGVzID0gbV9jYWNoZXMuZW5zdXJlKG9yaWdpbiwgWyZvcmlnaW4sIHRoaXNd
IHsKICAgICAgICAgICAgIGF1dG8gcGF0aCA9IGNhY2hlc1Jvb3RQYXRoKG9yaWdpbik7Ci0gICAg
ICAgICAgICByZXR1cm4gQ2FjaGVzOjpjcmVhdGUoKnRoaXMsIFdlYkNvcmU6OkNsaWVudE9yaWdp
biB7IG9yaWdpbiB9LCBXVEZNb3ZlKHBhdGgpLCBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVv
dGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmlnaW4pKTsKKyAgICAgICAgICAgIHJldHVybiBDYWNo
ZXM6OmNyZWF0ZSgqdGhpcywgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgb3JpZ2luIH0sIFdURk1v
dmUocGF0aCkpOwogICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiAKICAgICAgICAgaWYgKGNh
Y2hlcy0+aXNJbml0aWFsaXplZCgpKSB7CkBAIC00NzMsMTIgKzUyOCwxMyBAQCB2b2lkIEVuZ2lu
ZTo6cmVtb3ZlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogICAgIH0pOwogfQogCi12b2lk
IEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90IHNpemUp
Cit2b2lkIEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90
IHNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
KyAgICBDb21wbGV0aW9uSGFuZGxlckNhbGxpbmdTY29wZSBjb21wbGV0aW9uSGFuZGxlckNhbGxl
cihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1faW9RdWV1ZS0+ZGlzcGF0Y2goW3BhdGggPSBwYXRo
Lmlzb2xhdGVkQ29weSgpLCBzaXplXSgpIHsKKyAgICBtX2lvUXVldWUtPmRpc3BhdGNoKFtwYXRo
ID0gcGF0aC5pc29sYXRlZENvcHkoKSwgc2l6ZSwgY29tcGxldGlvbkhhbmRsZXJDYWxsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIoZ2xvYmFsU2l6ZUZpbGVMb2NrKTsKICAgICAgICAgYXV0byBmaWxlSGFu
ZGxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2Rl
OjpXcml0ZSk7CiAgICAgICAgIGF1dG8gY2xvc2VGaWxlSGFuZGxlciA9IG1ha2VTY29wZUV4aXQo
WyZdIHsKQEAgLTQ4OSw2ICs1NDUsOCBAQCB2b2lkIEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90IHNpemUpCiAKICAgICAgICAgRmlsZVN5c3RlbTo6dHJ1
bmNhdGVGaWxlKGZpbGVIYW5kbGUsIDApOwogICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmls
ZShmaWxlSGFuZGxlLCBTdHJpbmc6Om51bWJlcihzaXplKS51dGY4KCkuZGF0YSgpLCBTdHJpbmc6
Om51bWJlcihzaXplKS51dGY4KCkubGVuZ3RoKCkpOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXJDYWxsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyQ2FsbGVyKV0oKSBtdXRhYmxlIHsgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTUxMyw4ICs1
NzEsOCBAQCBPcHRpb25hbDx1aW50NjRfdD4gRW5naW5lOjpyZWFkU2l6ZUZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoKQogICAgIGlmICghV1RGOjpjb252ZXJ0U2FmZWx5KGZpbGVTaXplLCBieXRlc1Rv
UmVhZCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBWZWN0b3I8Y2hhcj4g
YnVmZmVyKGJ5dGVzVG9SZWFkKTsKLSAgICBzaXplX3QgdG90YWxCeXRlc1JlYWQgPSBGaWxlU3lz
dGVtOjpyZWFkRnJvbUZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUo
KSk7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IGJ1ZmZlcihieXRlc1RvUmVhZCk7CisgICAg
c2l6ZV90IHRvdGFsQnl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGVIYW5k
bGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlci5kYXRhKCkpLCBidWZmZXIuc2l6ZSgp
KTsKICAgICBpZiAodG90YWxCeXRlc1JlYWQgIT0gYnl0ZXNUb1JlYWQpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oCmluZGV4IGEzYWFhZjA5MDFjOTVlNjE1MDUy
MTlkZDJjMWViN2Y2NTcyMGYwNTYuLjIyZWU2NmJjYTQ3NmJjZTJiY2E0YjJkNTFkYWNlOTU0N2Fk
NzE3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIk5ldHdv
cmtDYWNoZURhdGEuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvQ2xpZW50T3JpZ2luLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2Vy
Lmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTc5LDEyICs4MCwxNSBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplUXVvdGFVc2VyKE5ldHdvcmtQcm9jZXNzJiwg
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBzdGF0aWMgdWludDY0X3QgZGlza1VzYWdlKGNvbnN0
IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHZv
aWQgcmVxdWVzdFNwYWNlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNw
YWNlUmVxdWVzdGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OkRlY2lzaW9uKT4mJik7CisKICAgICBib29sIHNob3VsZFBlcnNpc3QoKSBjb25z
dCB7IHJldHVybiAhIW1faW9RdWV1ZTt9CiAKICAgICB2b2lkIHdyaXRlRmlsZShjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBOZXR3b3JrQ2FjaGU6OkRhdGEmJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdp
bmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKICAgICB2b2lkIHJlYWRGaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgTmV0d29ya0NhY2hlOjpE
YXRhJiwgaW50IGVycm9yKT4mJik7CiAgICAgdm9pZCByZW1vdmVGaWxlKGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUpOwotICAgIHZvaWQgd3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmLCB1aW50NjRf
dCBzaXplKTsKKyAgICB2b2lkIHdyaXRlU2l6ZUZpbGUoY29uc3QgU3RyaW5nJiwgdWludDY0X3Qg
c2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICBzdGF0aWMgT3B0aW9uYWw8
dWludDY0X3Q+IHJlYWRTaXplRmlsZShjb25zdCBTdHJpbmcmKTsKIAogICAgIGNvbnN0IFN0cmlu
ZyYgcm9vdFBhdGgoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RQYXRoOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGUuY3BwCmluZGV4IDZmYzUzZTAzYzRkNjdhMDBmYTkxZjJiM2ZjZmJkZDdlMTE5Njhj
ZTMuLmJhMTM0Y2Y0Y2FiMDA1ZjM0MjEzODlkNTU5MDE2OWVjNDdhZDRlOWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2Fj
aGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGUuY3BwCkBAIC00MTQsOCArNDE0LDExIEBAIHZvaWQgQ2FjaGU6OnB1dChW
ZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJiBjYWxs
YmFjaykKICAgICAgICAgYXV0byBwb3NpdGlvbiA9IChzYW1lVVJMUmVjb3JkcyAmJiAhbWF0Y2hp
bmdSZWNvcmRzLmlzRW1wdHkoKSkgPyBzYW1lVVJMUmVjb3Jkcy0+ZmluZE1hdGNoaW5nKFsmXShj
b25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIgPT0gbWF0Y2hpbmdSZWNv
cmRzWzBdOyB9KSA6IG5vdEZvdW5kOwogCiAgICAgICAgIHNwYWNlUmVxdWlyZWQgKz0gcmVjb3Jk
LnJlc3BvbnNlQm9keVNpemU7Ci0gICAgICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkKLSAg
ICAgICAgICAgIHNwYWNlUmVxdWlyZWQgLT0gc2FtZVVSTFJlY29yZHMtPmF0KHBvc2l0aW9uKS5z
aXplOworICAgICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgIHVp
bnQ2NF90IHNwYWNlRGVjcmVhc2VkID0gc2FtZVVSTFJlY29yZHMtPmF0KHBvc2l0aW9uKS5zaXpl
OworICAgICAgICAgICAgaWYgKHNwYWNlUmVxdWlyZWQgPj0gc3BhY2VEZWNyZWFzZWQpCisgICAg
ICAgICAgICAgICAgc3BhY2VSZXF1aXJlZCAtPSBzcGFjZURlY3JlYXNlZDsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIG1fY2FjaGVzLnJlcXVlc3RTcGFjZShzcGFjZVJlcXVpcmVkLCBbY2FjaGVz
ID0gbWFrZVJlZihtX2NhY2hlcyksIGlkZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIHJlY29yZHMg
PSBXVEZNb3ZlKHJlY29yZHMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShPcHRpb25h
bDxET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewpAQCAtNDUwLDcgKzQ1
MywxMCBAQCB2b2lkIENhY2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVx
dWVzdCwgV2ViQ29yZTo6Q2FjaGVRdWVyeU9wdGlvbgogICAgICAgICByZXR1cm4gc2hvdWxkUmVt
b3ZlOwogICAgIH0pOwogCi0gICAgY2FsbGJhY2soV1RGTW92ZShyZWNvcmRJZGVudGlmaWVycykp
OworICAgIC8vIFRoaXMgb3BlcmF0aW9uIHdvdWxkIGNoYW5nZSBjYWNoZXMgc2l6ZSwgc28gbWFr
ZSBzdXJlIGNhbGxiYWNrIGZpbmlzaGVzIGFmdGVyIHNpemUgZmlsZSBpcyB1cGRhdGVkLgorICAg
IG1fY2FjaGVzLnVwZGF0ZVNpemVGaWxlKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBy
ZWNvcmRJZGVudGlmaWVycyA9IFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpXSgpIG11dGFibGUg
eworICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJzKSk7CisgICAgfSk7
CiB9CiAKIHZvaWQgQ2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KGNvbnN0IFZlY3Rvcjx1aW50
NjRfdD4mIHJlY29yZElkZW50aWZpZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmlu
ZGV4IDAzYTA2MGNlZjJiYzY3MjAxNGI3NTk2YmM1ZGE0ZWU5NDM4NjFhN2MuLmViYWNiM2MxYmZj
MzYzOWRiMTFmZGFlYmRmYjYyNjlmZWUwNWNkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hl
cy5jcHAKQEAgLTU2LDM2ICs1NiwyMSBAQCBTdHJpbmcgQ2FjaGVzOjpjYWNoZXNTaXplRmlsZW5h
bWUoY29uc3QgU3RyaW5nJiBjYWNoZXNSb290c1BhdGgpCiAgICAgcmV0dXJuIEZpbGVTeXN0ZW06
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZXNSb290c1BhdGgsICJlc3RpbWF0ZWRzaXpl
Il9zKTsKIH0KIAotUmVmPENhY2hlcz4gQ2FjaGVzOjpjcmVhdGUoRW5naW5lJiBlbmdpbmUsIFdl
YkNvcmU6OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXImIHF1b3RhTWFuYWdlcikKK1JlZjxDYWNoZXM+IENhY2hlczo6
Y3JlYXRlKEVuZ2luZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0
cmluZyYmIHJvb3RQYXRoKQogewotICAgIGF1dG8gY2FjaGVzID0gYWRvcHRSZWYoKm5ldyBDYWNo
ZXMgeyBlbmdpbmUsIFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShyb290UGF0aCksIHF1b3RhTWFu
YWdlciB9KTsKLSAgICBxdW90YU1hbmFnZXIuYWRkVXNlcihjYWNoZXMuZ2V0KCkpOwotICAgIHJl
dHVybiBjYWNoZXM7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2FjaGVzIHsgZW5naW5lLCBX
VEZNb3ZlKG9yaWdpbiksIFdURk1vdmUocm9vdFBhdGgpIH0pOwogfQogCi1DYWNoZXM6OkNhY2hl
cyhFbmdpbmUmIGVuZ2luZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcm
JiByb290UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYgcXVvdGFNYW5hZ2VyKQor
Q2FjaGVzOjpDYWNoZXMoRW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmIG9y
aWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgpCiAgICAgOiBtX2VuZ2luZSgmZW5naW5lKQogICAgICwg
bV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICwgbV9yb290UGF0aChXVEZNb3ZlKHJvb3RQ
YXRoKSkKLSAgICAsIG1fcXVvdGFNYW5hZ2VyKG1ha2VXZWFrUHRyKHF1b3RhTWFuYWdlcikpCiB7
CiB9CiAKIENhY2hlczo6fkNhY2hlcygpCiB7CiAgICAgQVNTRVJUKG1fcGVuZGluZ1dyaXRpbmdD
YWNoZXNUb0Rpc2tDYWxsYmFja3MuaXNFbXB0eSgpKTsKLQotICAgIGlmIChtX3F1b3RhTWFuYWdl
cikKLSAgICAgICAgbV9xdW90YU1hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotfQotCi12b2lk
IENhY2hlczo6d2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxs
YmFjaykKLXsKLSAgICBpbml0aWFsaXplKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShh
dXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihDYWNoZVN0b3JhZ2UsICJDYWNoZXM6OmluaXRpYWxpemUgZmFpbGVk
LCByZXBvcnRlZCBzcGFjZSB1c2VkIHdpbGwgYmUgemVybyIpOwotICAgICAgICBjYWxsYmFjaygp
OwotICAgIH0pOwogfQogCiB2b2lkIENhY2hlczo6cmV0cmlldmVPcmlnaW5Gcm9tRGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYgZm9sZGVyUGF0aCwgV29ya1F1ZXVlJiBxdWV1ZSwgV1RGOjpDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4mJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0yMDgsMTAgKzE5MywxNCBAQCB2b2lkIENhY2hlczo6aW5pdGlh
bGl6ZShXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJh
Y2spCiAgICAgfSk7CiB9CiAKLXZvaWQgQ2FjaGVzOjp1cGRhdGVTaXplRmlsZSgpCit2b2lkIENh
Y2hlczo6dXBkYXRlU2l6ZUZpbGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIGlmIChtX2VuZ2luZSkKLSAgICAgICAgbV9lbmdpbmUtPndyaXRl
U2l6ZUZpbGUoY2FjaGVzU2l6ZUZpbGVuYW1lKG1fcm9vdFBhdGgpLCBtX3NpemUpOworICAgIGlm
ICghbV9lbmdpbmUpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1fZW5naW5lLT53cml0ZVNpemVGaWxlKGNhY2hlc1NpemVGaWxl
bmFtZShtX3Jvb3RQYXRoKSwgbV9zaXplLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgQ2FjaGVzOjppbml0aWFsaXplU2l6ZSgpCkBAIC0yMzIsMTMgKzIyMSwxMiBAQCB2
b2lkIENhY2hlczo6aW5pdGlhbGl6ZVNpemUoKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgICAgICAgICB1cGRh
dGVTaXplRmlsZSgpOwotCi0gICAgICAgICAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAg
ICAgICAgICAgYXV0byBwZW5kaW5nQ2FsbGJhY2tzID0gV1RGTW92ZShtX3BlbmRpbmdJbml0aWFs
aXphdGlvbkNhbGxiYWNrcyk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogcGVu
ZGluZ0NhbGxiYWNrcykKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQpOwot
CisgICAgICAgICAgICB1cGRhdGVTaXplRmlsZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIG1faXNJbml0aWFsaXplZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgYXV0byBwZW5kaW5nQ2FsbGJhY2tzID0gV1RGTW92ZSht
X3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNrcyk7CisgICAgICAgICAgICAgICAgZm9yIChh
dXRvJiBjYWxsYmFjayA6IHBlbmRpbmdDYWxsYmFja3MpCisgICAgICAgICAgICAgICAgICAgIGNh
bGxiYWNrKFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBhdXRvIGRlY29kZWQgPSBDYWNoZTo6ZGVjb2RlUmVjb3Jk
SGVhZGVyKCpzdG9yYWdlKTsKQEAgLTI3MywxMyArMjYxLDExIEBAIHZvaWQgQ2FjaGVzOjpjbGVh
cihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAg
IG1fc3RvcmFnZS0+Y2xlYXIoU3RyaW5nIHsgfSwgLVdhbGxUaW1lOjppbmZpbml0eSgpLCBbcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmNsZWFyTWVtb3J5UmVw
cmVzZW50YXRpb24oKTsKLSAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPnJlc2V0U3BhY2VVc2Vk
KCk7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogICAgICAgICB9KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAg
cmVzZXRTcGFjZVVzZWQoKTsKICAgICBjbGVhclBlbmRpbmdXcml0aW5nQ2FjaGVzVG9EaXNrQ2Fs
bGJhY2tzKCk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KQEAgLTUyNSwxMiArNTExLDEy
IEBAIHZvaWQgQ2FjaGVzOjpyZWFkUmVjb3Jkc0xpc3QoQ2FjaGUmIGNhY2hlLCBOZXR3b3JrQ2Fj
aGU6OlN0b3JhZ2U6OlRyYXZlcnNlSGFuZGxlCiAKIHZvaWQgQ2FjaGVzOjpyZXF1ZXN0U3BhY2Uo
dWludDY0X3Qgc3BhY2VSZXF1aXJlZCwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRp
b25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIGlmICghbV9xdW90YU1hbmFnZXIpIHsKKyAg
ICBpZiAoIW1fZW5naW5lKSB7CiAgICAgICAgIGNhbGxiYWNrKEVycm9yOjpRdW90YUV4Y2VlZGVk
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fcXVvdGFNYW5hZ2VyLT5yZXF1ZXN0
U3BhY2Uoc3BhY2VSZXF1aXJlZCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8g
ZGVjaXNpb24pIG11dGFibGUgeworICAgIG1fZW5naW5lLT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4s
IHNwYWNlUmVxdWlyZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGRlY2lz
aW9uKSBtdXRhYmxlIHsKICAgICAgICAgc3dpdGNoIChkZWNpc2lvbikgewogICAgICAgICBjYXNl
IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OgogICAgICAgICAg
ICAgY2FsbGJhY2soRXJyb3I6OlF1b3RhRXhjZWVkZWQpOwpAQCAtNTQ4LDcgKzUzNCw2IEBAIHZv
aWQgQ2FjaGVzOjp3cml0ZVJlY29yZChjb25zdCBDYWNoZSYgY2FjaGUsIGNvbnN0IFJlY29yZElu
Zm9ybWF0aW9uJiByZWNvcmRJbmZvCiAgICAgQVNTRVJUKG1fc2l6ZSA+PSBwcmV2aW91c1JlY29y
ZFNpemUpOwogICAgIG1fc2l6ZSArPSByZWNvcmRJbmZvcm1hdGlvbi5zaXplOwogICAgIG1fc2l6
ZSAtPSBwcmV2aW91c1JlY29yZFNpemU7Ci0gICAgdXBkYXRlU2l6ZUZpbGUoKTsKIAogICAgIGlm
ICghc2hvdWxkUGVyc2lzdCgpKSB7CiAgICAgICAgIG1fdm9sYXRpbGVTdG9yYWdlLnNldChyZWNv
cmRJbmZvcm1hdGlvbi5rZXksIFdURk1vdmUocmVjb3JkKSk7CkBAIC01NTYsMTMgKzU0MSwxNSBA
QCB2b2lkIENhY2hlczo6d3JpdGVSZWNvcmQoY29uc3QgQ2FjaGUmIGNhY2hlLCBjb25zdCBSZWNv
cmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bV9zdG9yYWdlLT5zdG9yZShDYWNoZTo6ZW5jb2RlKHJlY29yZEluZm9ybWF0aW9uLCByZWNvcmQp
LCB7IH0sIFtwcm90ZWN0ZWRTdG9yYWdlID0gbWFrZVJlZigqbV9zdG9yYWdlKSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oaW50IGVycm9yKSBtdXRhYmxlIHsKKyAgICBtX3N0b3JhZ2Ut
PnN0b3JlKENhY2hlOjplbmNvZGUocmVjb3JkSW5mb3JtYXRpb24sIHJlY29yZCksIHsgfSwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcHJvdGVjdGVkU3RvcmFnZSA9IG1h
a2VSZWYoKm1fc3RvcmFnZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGludCBlcnJv
cikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoQ2FjaGVTdG9yYWdlLCAiQ2FjaGVzOjp3cml0ZVJlY29yZCBmYWlsZWQgd2l0aCBl
cnJvciAlZCIsIGVycm9yKTsKICAgICAgICAgICAgIGNhbGxiYWNrKEVycm9yOjpXcml0ZURpc2sp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrKFdURjo6
bnVsbG9wdCk7CisgICAgICAgIHVwZGF0ZVNpemVGaWxlKFtjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXSgpIG11dGFibGUgeworICAgICAgICAgICAgY2FsbGJhY2soV1RGOjpudWxsb3B0KTsK
KyAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTYwNSw3ICs1OTIsNyBAQCB2b2lkIENhY2hl
czo6cmVtb3ZlUmVjb3JkKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmQpCiAKICAgICBB
U1NFUlQobV9zaXplID49IHJlY29yZC5zaXplKTsKICAgICBtX3NpemUgLT0gcmVjb3JkLnNpemU7
Ci0gICAgdXBkYXRlU2l6ZUZpbGUoKTsKKyAgICB1cGRhdGVTaXplRmlsZShbXSB7IH0pOwogCiAg
ICAgcmVtb3ZlQ2FjaGVFbnRyeShyZWNvcmQua2V5KTsKIH0KQEAgLTYyMSwxNyArNjA4LDYgQEAg
dm9pZCBDYWNoZXM6OnJlbW92ZUNhY2hlRW50cnkoY29uc3QgTmV0d29ya0NhY2hlOjpLZXkmIGtl
eSkKICAgICBtX3N0b3JhZ2UtPnJlbW92ZShrZXkpOwogfQogCi12b2lkIENhY2hlczo6cmVzZXRT
cGFjZVVzZWQoKQotewotICAgIG1fc2l6ZSA9IDA7Ci0gICAgdXBkYXRlU2l6ZUZpbGUoKTsKLQot
ICAgIGlmIChtX3F1b3RhTWFuYWdlcikgewotICAgICAgICBtX3F1b3RhTWFuYWdlci0+cmVtb3Zl
VXNlcigqdGhpcyk7Ci0gICAgICAgIG1fcXVvdGFNYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKLSAg
ICB9Ci19Ci0KIHZvaWQgQ2FjaGVzOjpjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCkKIHsKICAg
ICBtYWtlRGlydHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCmluZGV4IDAzMjMxZjNhOWIw
NTc2NzJkNjMxYmI5NmU2N2E2ZWI5OWUxZDdjYmIuLjVkMzk0YTBlNDg4NTdiMDI1Y2FhNDgzNGFk
MjZiZTg0N2RkOWY1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaApAQCAtMjgsNyArMjgs
NiBAQAogI2luY2x1ZGUgIkNhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmgiCiAjaW5jbHVkZSAiTmV0
d29ya0NhY2hlU3RvcmFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFVc2VyLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBs
ZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAKQEAgLTQyLDEwICs0MSwx
MCBAQCBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlIHsKIAogY2xhc3MgRW5naW5lOwogCi1jbGFzcyBD
YWNoZXMgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWNoZXM+LCBwcml2YXRlIFdlYkNvcmU6
OlN0b3JhZ2VRdW90YVVzZXIgeworY2xhc3MgQ2FjaGVzIGZpbmFsIDogcHVibGljIFJlZkNvdW50
ZWQ8Q2FjaGVzPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFN0cmluZyBjYWNoZXNTaXplRmlsZW5h
bWUoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIFJlZjxDYWNoZXM+IGNyZWF0ZShFbmdpbmUm
LCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXImKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNhY2hlc1NpemVGaWxlbmFt
ZShjb25zdCBTdHJpbmcmIGNhY2hlc1Jvb3RzUGF0aCk7CisgICAgc3RhdGljIFJlZjxDYWNoZXM+
IGNyZWF0ZShFbmdpbmUmLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBh
dGgpOwogICAgIH5DYWNoZXMoKTsKIAogICAgIHN0YXRpYyB2b2lkIHJldHJpZXZlT3JpZ2luRnJv
bURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGZvbGRlclBhdGgsIFdvcmtRdWV1ZSYsIFdURjo6Q29t
cGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+JiYpPiYm
KTsKQEAgLTc5LDIyICs3OCwxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKFdURjo6Q29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyTWVtb3J5UmVwcmVzZW50
YXRpb24oKTsKLSAgICB2b2lkIHJlc2V0U3BhY2VVc2VkKCk7CiAKICAgICB1aW50NjRfdCBzdG9y
YWdlU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU2l6ZUZpbGUoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKIAogcHJpdmF0ZToKLSAgICBDYWNoZXMoRW5naW5lJiwgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJiYsIFN0cmluZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyJik7Ci0KLSAgICAvLyBTdG9yYWdlUXVvdGFVc2VyIEFQSS4KLSAgICB1aW50NjRfdCBz
cGFjZVVzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBDYWNoZXMoRW5n
aW5lJiwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYsIFN0cmluZyYmIHJvb3RQYXRoKTsKIAogICAg
IHZvaWQgaW5pdGlhbGl6ZVNpemUoKTsKICAgICB2b2lkIHJlYWRDYWNoZXNGcm9tRGlzayhXVEY6
OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8VmVjdG9yPENhY2hlPiwgV2ViQ29yZTo6RE9NQ2FjaGVF
bmdpbmU6OkVycm9yPiYmKT4mJik7CiAgICAgdm9pZCB3cml0ZUNhY2hlc1RvRGlzayhXZWJDb3Jl
OjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwogCi0gICAgdm9pZCB3aGVu
SW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKLQogICAgIHZv
aWQgc3RvcmVPcmlnaW4oV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFj
ayYmKTsKICAgICBzdGF0aWMgT3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiByZWFkT3Jp
Z2luKGNvbnN0IE5ldHdvcmtDYWNoZTo6RGF0YSYpOwogCkBAIC0xMDYsOCArMTAwLDYgQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgaGFzQWN0aXZlQ2FjaGUoKSBjb25zdDsKIAotICAgIHZvaWQgdXBk
YXRlU2l6ZUZpbGUoKTsKLQogICAgIGJvb2wgbV9pc0luaXRpYWxpemVkIHsgZmFsc2UgfTsKICAg
ICBFbmdpbmUqIG1fZW5naW5lIHsgbnVsbHB0ciB9OwogICAgIHVpbnQ2NF90IG1fdXBkYXRlQ291
bnRlciB7IDAgfTsKQEAgLTEyMiw3ICsxMTQsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJD
b3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrPiBtX3BlbmRpbmdJbml0aWFs
aXphdGlvbkNhbGxiYWNrczsKICAgICBib29sIG1faXNXcml0aW5nQ2FjaGVzVG9EaXNrIHsgZmFs
c2UgfTsKICAgICBEZXF1ZTxDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6
OkRPTUNhY2hlRW5naW5lOjpFcnJvcj4pPj4gbV9wZW5kaW5nV3JpdGluZ0NhY2hlc1RvRGlza0Nh
bGxiYWNrczsKLSAgICBXZWFrUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+IG1fcXVv
dGFNYW5hZ2VyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXgg
YzBmY2Y5YzVmNjAwYWE1YWMxMTYzZTQ3YTRiMjZkYWM0MjA2NWFhOS4uNmQwYzEyOWE3NDA1MTBk
Mzg2OTczNzA1YWQwOTJlZjEzMmNjMDc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcApAQCAtNTUsNiArNTUsOCBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogCiAgICAgZW5jb2RlciA8PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPDwgbG9jYWxT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwogCisgICAgZW5jb2RlciA8PCBjYWNoZVN0
b3JhZ2VEaXJlY3RvcnkgPDwgY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwor
CiAgICAgZW5jb2RlciA8PCBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7CiAgICAgZW5jb2RlciA8PCBw
ZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhOwogfQpAQCAtMTQxLDYgKzE0MywxOCBAQCBP
cHRpb25hbDxXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnM6OmRlY29kZShJUEM6OkRlYwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92
ZSgqbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIAorICAgIE9wdGlvbmFs
PFN0cmluZz4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5OworICAgIGRlY29kZXIgPj4gY2FjaGVTdG9y
YWdlRGlyZWN0b3J5OworICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5KQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
ID0gV1RGTW92ZSgqY2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKKworICAgIE9wdGlvbmFsPFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZT4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
OworICAgIGRlY29kZXIgPj4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOwor
ICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKKwogICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7
CiAgICAgZGVjb2RlciA+PiBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7CiAgICAgaWYgKCFwZXJPcmln
aW5TdG9yYWdlUXVvdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuaAppbmRleCAwOTVmMDlkNmFmOTNmOTEzZWJiMjlmNzAyNjdhZTljMWI3
NGJlODhlLi5mMjdkZjQ4OTgwOWYzMTk2MDhiNjgwY2IyYThhMWMxNGI3MDE4NDM5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKQEAg
LTcxLDYgKzcxLDkgQEAgc3RydWN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKICAgICBT
dHJpbmcgbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSBsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CiAKKyAgICBTdHJpbmcgY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5OworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjYWNoZVN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisKICAgICB1aW50NjRfdCBwZXJPcmlnaW5T
dG9yYWdlUXVvdGEgeyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEo
KSB9OwogICAgIHVpbnQ2NF90IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgeyBXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkgfTsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRh
U3RvcmVSZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0
YVN0b3JlUmVmLmNwcAppbmRleCA3ZWI3NTc3NjRlOTQ4ZjVhNGRkNTc3ZWFiYmM2MjMxYTI3Mzhj
YWE2Li45OWE0MDg2ZTIzZmQ2MDE2MWRjMDQxYjA4OGY3MWQwYzA3NWY1YzcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJl
Zi5jcHAKQEAgLTY4NiwzICs2ODYsMTEgQEAgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRDYWNo
ZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoV0tXZWJzaXRlRGF0YVN0b3JlUmUKIHsKICAg
ICBXZWJLaXQ6OnRvSW1wbChkYXRhU3RvcmVSZWYpLT5zZXRDYWNoZU1vZGVsU3luY2hyb25vdXNs
eUZvclRlc3RpbmcoV2ViS2l0Ojp0b0NhY2hlTW9kZWwoY2FjaGVNb2RlbCkpOwogfQorCit2b2lk
IFdLV2Vic2l0ZURhdGFTdG9yZVJlc2V0UXVvdGEoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFT
dG9yZVJlZiwgdm9pZCogY29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3JlUmVzZXRRdW90YUNhbGxi
YWNrIGNhbGxiYWNrKQoreworICAgIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZVJlZiktPnJlc2V0
UXVvdGEoW2NvbnRleHQsIGNhbGxiYWNrXSB7CisgICAgICAgIGlmIChjYWxsYmFjaykKKyAgICAg
ICAgICAgIGNhbGxiYWNrKGNvbnRleHQpOworICAgIH0pOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCA5NTIz
OWEzYjBiM2FkNjBjMmY3ODM3ZmU2ZjVhMTA3NzM2MWFmZGUwLi4yM2ZjMmU3MjZmOTIwZjFhYjNk
ZjllZDBkMjdmZDA2MWFjMjk3MTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaApAQCAtMTU1LDYgKzE1NSw5IEBAIFdL
X0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Ro
cm91Z2hXZWJzaXRlRGF0YVJlbW92CiAKIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9y
ZVNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYgZGF0YVN0b3JlUmVmLCBXS0NhY2hlTW9kZWwgY2FjaGVNb2RlbCk7CiAKK3R5cGVkZWYgdm9p
ZCAoKldLV2Vic2l0ZURhdGFTdG9yZVJlc2V0UXVvdGFDYWxsYmFjaykodm9pZCogZnVuY3Rpb25D
b250ZXh0KTsKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVJlc2V0UXVvdGEoV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgdm9pZCogY29udGV4dCwgV0tXZWJzaXRl
RGF0YVN0b3JlUmVzZXRRdW90YUNhbGxiYWNrIGNhbGxiYWNrKTsKKwogI2lmZGVmIF9fY3BsdXNw
bHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IGFkNTc5OTFlM2NhYzdjNWFmYmVmYzhh
NjVmOWFmZjliNDA5Y2E5MjQuLjRjNDFjOTM4YTg2N2RhYzYwMjI3ZWU0MGQ2NzVjOTZmNGQ0ZjE4
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMTM2Nyw2ICsxMzY3LDExIEBAIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc0Fzc2VydGlvbigpCiAgICAgbV9hY3Rpdml0eUZyb21X
ZWJQcm9jZXNzZXMgPSBudWxscHRyOwogfQogCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJl
c2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzZXRRdW90YShzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjdW5kZWYgTUVT
U0FHRV9DSEVDSwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzUHJveHkuaAppbmRleCA3MmNlNDI1NmJhYWUwN2M5MmVmY2Q0OThlMTMyMDZi
YTI5OTQzYjVhLi5iNzdjZTdkM2U2YWZlZTExYWU2MjAwOWNmNjllY2Y0YjcwMGNkNTdhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuaApAQCAtNTYsNiArNTYsNyBAQCBlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93biA6IGJvb2w7CiBlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkIDogYm9v
bDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKK3N0
cnVjdCBDbGllbnRPcmlnaW47CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTk2LDYgKzE5
Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJv
dG9jb2woY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5
Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIHJlc2V0UXVvdGEoUEFM
OjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisKIHByaXZhdGU6CiAg
ICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5CiAgICAgdm9pZCBnZXRMYXVuY2hPcHRpb25zKFBy
b2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IDQwNjhlZTQxZmZjZDZkZjk1YTNkM2I1
MTZiYmMyNTMwZTJjOTk4OTEuLjdlZWNhM2QzY2I0M2IzYjI2NzA2MjlkMGZhY2RmNTExOTg4MGFi
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTU1
MSw2ICs1NTEsMTIgQEAgTmV0d29ya1Byb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVEYXRhU3RvcmUqIHdpdGgKICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3Rv
cmFnZURpcmVjdG9yeTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAKKyAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/
IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5n
KCk7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7CisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNo
ZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZN
b3ZlKGNhY2hlU3RvcmFnZURpcmVjdG9yeSk7CisgICAgfQorCiAgICAgaWYgKG1fd2Vic2l0ZURh
dGFTdG9yZSkKICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5u
ZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9
IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0
b3J5KCk7CiAgICAgaWYgKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNF
bXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEv
Q29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IDBmZjNlYTA5
NjMxYjU3N2QxZWE3OTA4MjVlMzA1ZWU5MzIzZmJkYzcuLjA3MTk5ZWNhY2RjYjQ3NjQ5MDc0MzMy
OGU5ODljYmFjNWJhYjRjYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0K
QEAgLTE5MSw2ICsxOTEsMTAgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURh
dGFTdG9yZTo6cGFyYW1ldGVycygpCiAgICAgaWYgKCFwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURp
cmVjdG9yeS5pc0VtcHR5KCkpCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwg
cGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCisgICAg
cGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnko
KTsKKyAgICBpZiAoIXBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkK
KyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNhY2hlU3Rv
cmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKICAgICBwYXJhbWV0ZXJzLnBlck9yaWdp
blN0b3JhZ2VRdW90YSA9IHBlck9yaWdpblN0b3JhZ2VRdW90YSgpOwogICAgIHBhcmFtZXRlcnMu
cGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCBiYjk4NDE2NjQ1NGI1NmFlYTRjOGRi
ZDQ4NWI3MjE0MDBiYjE4NmNhLi5hYzJmMzhkN2VkYjU0ZjdhMjRhYmFkM2RhNDRlNTZkOGVkMzYx
NzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMjA4Myw2ICsyMDgzLDEyIEBAIFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxT
dG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZSk7CiAgICAgfQogCisgICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSB0aGlz
LT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9y
eS5pc0VtcHR5KCkpIHsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jYWNo
ZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBwYXJhbWV0ZXJzLmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSA9IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICB9CisKICNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSA9IHJlc29sdmVkSW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7CiAgICAgaWYg
KCFwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpCkBAIC0yMTY5
LDYgKzIxNzUsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRh
aWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZUQKICAgICBBU1NFUlQoIWNvbXBs
ZXRpb25IYW5kbGVyKTsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRv
IGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vz
c1Bvb2xzKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKKyAgICAgICAgICAgIHByb2Nlc3MtPnJlc2V0UXVvdGEobV9zZXNzaW9u
SUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7
IH0pOworICAgIH0KK30KKwogI2lmICFQTEFURk9STShDT0NPQSkKIFdURjo6U3RyaW5nIFdlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHRNZWRpYUNhY2hlRGlyZWN0b3J5KCkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApp
bmRleCAyNzg0ZmUzN2UzZWE0YThhMThlNTU1MWQzOWIyY2EzOTkyMDdmYWFhLi5mNWVlNDIyMDdk
YTIwZjkyNzYxYWRiMTAyNTM5NmNkMWNhODFlZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC0yOTEsNyAr
MjkxLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBXVEY6OlN0cmluZyBkZWZhdWx0TWVkaWFLZXlz
U3RvcmFnZURpcmVjdG9yeSgpOwogICAgIHN0YXRpYyBXVEY6OlN0cmluZyBkZWZhdWx0RGV2aWNl
SWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KCk7CiAgICAgc3RhdGljIFdURjo6U3RyaW5nIGRl
ZmF1bHRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRpcmVjdG9yeSgpOwotICAgIAorCisgICAgdm9p
ZCByZXNldFF1b3RhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisKIHByaXZhdGU6CiAg
ICAgdm9pZCBmZXRjaERhdGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBSZWZQdHI8V29ya1F1ZXVlPiYmLCBGdW5j
dGlvbjx2b2lkKFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4pPiYmIGFwcGx5KTsKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGRiZjEzM2FhMzgy
MTI5M2IyMWMxMjk2Yzk5Yjk4OWNmNzZmY2Y5ZGQuLmNiNmMzNWJiNTQ1Zjg4YzUwZjhiZTg3NDc2
N2EwMjY0ZDJiM2UwYmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxOS0xMS0yMSAgU2lodWkgTGl1ICA8c2lodWlf
bGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVyc2lvbiBTdG9yYWdlUXVv
dGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDM5NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3MjkwMzQ5PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOiBSZW1vdmVkIGFzIHdl
IGhhdmUgYSBkaWZmZXJlbnQgU3RvcmFnZVF1b3RhTWFuYWdlciAKKyAgICAgICAgaW1wbGVtZW50
YXRpb24gbm93LgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
OiByZXNldCBTdG9yYWdlUXVvdGFNYW5hZ2VyJ3MgcXVvdGEgYmV0d2VlbiB0ZXN0cy4KKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRRdW90YSk6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorCiAyMDE5LTExLTIxICBKb25hdGhhbiBC
ZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBydW4td2Via2l0LXRlc3RzOiBD
bGVhbi11cCBzaW11bGF0b3IgcHJvY2Vzc2VzIGFmdGVyIHRlYXJpbmcgZG93biBzaW11bGF0b3Jz
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDczMTlkMmZjNDk3MGVjNGVlYmNkMDExNGEzNDA3
MGY1YWRkZDFhMDQuLmIzYmE5YTJjYWRlZmExYjVhNTk4YTZlNDIwNjQyMTY3ZjY2MTRlMGUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MzcsNyArNzM3LDYgQEAKIAkJOTM5OUJBMDYyMzcx
MTE0RjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdEluUGFnZUNhY2hlLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5OUJBMDMyMzcxMTBC
RjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdEluUGFnZUNhY2hlLmh0bWwgKi87IH07CiAJCTkzQUY0
RUNFMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJ
bWFnZXNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzQUY0RUNEMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCAqLzsgfTsKIAkJOTNBRjRFRDExNTA2RjEzMDAw
N0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBRjRFQ0YxNTA2RjEyMzAwN0ZENTdFIC8qIGxv
dHMtb2YtaW1hZ2VzLmh0bWwgKi87IH07Ci0JCTkzQjYyMDU0MjM0RUE2MkMwMEQ0OUI5NyAvKiBT
dG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzQjYyMDUzMjM0RUEzMkIwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5h
Z2VyLmNwcCAqLzsgfTsKIAkJOTNDRkE4NjcxQ0VCOUUzODAwMDU2NUE4IC8qIGF1dG9mb2N1c2Vk
LXRleHQtaW5wdXQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0NGQTg2NjFDRUI5REUxMDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4
dC1pbnB1dC5odG1sICovOyB9OwogCQk5M0QxMTlGQzIyQzY4MEY3MDA5QkUzQzcgLyogbG9jYWxz
dG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0QxMTlGQjIyQzU3MTEyMDA5QkUzQzcgLyog
bG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCAqLzsgfTsKIAkJOTNFMkM1NTUx
RkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMkM1NTQxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVF
bmRpbmcuY3BwICovOyB9OwpAQCAtMTE0Miw3ICsxMTQxLDYgQEAKIAkJCWRzdFBhdGggPSBUZXN0
V2ViS2l0QVBJLnJlc291cmNlczsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSA3OwogCQkJZmlsZXMg
PSAoCi0JCQkJQ0Q4Mzk0REYyMzJBRjdDMDAwMTQ5NDk1IC8qIG1lZGlhLWxvYWRpbmcuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NUE4MTdGRjIxODEwMjFBMDAwNEEzOUEgLyogMTAw
eDEwMC1yZWQudGdhIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTFBOUU1MkM5MTNFNjVFRjQw
MDY5MTdGNSAvKiAxOC1jaGFyYWN0ZXJzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJ
NTVBODE4MDAyMTgxMDIyMTAwMDRBMzlBIC8qIDQwMHg0MDAtZ3JlZW4ucG5nIGluIENvcHkgUmVz
b3VyY2VzICovLApAQCAtMTM3NSw2ICsxMzczLDcgQEAKIAkJCQk5MzBBRDQwMjE1MDY5OEQwMDA2
Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJQUQ1
N0FDMjIxREE3NDY2RTAwRkYxQkRFIC8qIG1hbnktaWZyYW1lcy5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovLAogCQkJCTc3NzJFQ0UxMjJGRTA2QzYwMDA5QTc5OSAvKiBtYW55LXNhbWUtb3JpZ2lu
LWlmcmFtZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKKwkJCQlDRDgzOTRERjIzMkFGN0Mw
MDAxNDk0OTUgLyogbWVkaWEtbG9hZGluZy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJ
CUNEQTMxNTlBMUVENTQ4RjEwMDlGNjBEMyAvKiBNZWRpYVBsYXliYWNrU2xlZXBBc3NlcnRpb24u
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlDREM5NDQyRjFFRjIwNUQ2MDA1OUMzQzQg
LyogbWVkaWFzdHJlYW10cmFjay1kZXRhY2hlZC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAog
CQkJCUUxMjIwRENBMTU1QjI4QUEwMDEzRTJGQyAvKiBNZW1vcnlDYWNoZURpc2FibGVXaXRoaW5S
ZXNvdXJjZUxvYWREZWxlZ2F0ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLApAQCAtMjE0Nyw3
ICsyMTQ2LDYgQEAKIAkJOTNBRjRFQ0ExNTA2RjAzNTAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dEZvckltYWdlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FGNEVDRDE1MDZGMDY0MDA3RkQ1N0UgLyog
TmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTNBRjRFQ0YxNTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0Lmh0bWw7IHBhdGggPSAibG90cy1vZi1pbWFnZXMuaHRtbCI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTkzQjYyMDUzMjM0RUEzMkIwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFN
YW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VR
dW90YU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0NGQTg2NjFD
RUI5REUxMDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5odG1sOyBwYXRoID0gImF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0ZBODY4MUNFQkNGRUQwMDA1NjVBOCAvKiBDYW5kaWRh
dGVUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENhbmRp
ZGF0ZVRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0QxMTlGQjIyQzU3
MTEyMDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0
ZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxMjQsNyArMzEyMiw2IEBA
CiAJCQkJNDE5NzNCNUMxQUYyMjg3NTAwNkM3QjM2IC8qIFNoYXJlZEJ1ZmZlci5jcHAgKi8sCiAJ
CQkJQTE3OTkxODkxRTFDQTI0MTAwQTUwNUVEIC8qIFNoYXJlZEJ1ZmZlclRlc3QuY3BwICovLAog
CQkJCUExNzk5MThBMUUxQ0EyNDEwMEE1MDVFRCAvKiBTaGFyZWRCdWZmZXJUZXN0LmggKi8sCi0J
CQkJOTNCNjIwNTMyMzRFQTMyQjAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwICov
LAogCQkJCUVDQTY4MENEMUU2OENDMDkwMDczMUQyMCAvKiBTdHJpbmdVdGlsaXRpZXMubW0gKi8s
CiAJCQkJQ0U0RDVERTUxRjY3NDNCQTAwNzJDRkM2IC8qIFN0cmluZ1dpdGhEaXJlY3Rpb24uY3Bw
ICovLAogCQkJCTkzQTI1ODk4MUY5MkZGMTUwMDNFNTEwQyAvKiBUZXh0Q29kZWMuY3BwICovLApA
QCAtMzg1Miw2ICszODQ5LDcgQEAKIAkJCQk5MzBBRDQwMTE1MDY5OEIzMDA2Nzk3MEYgLyogbG90
cy1vZi10ZXh0Lmh0bWwgKi8sCiAJCQkJQUQ1N0FDMUQxREE3NDYzODAwRkYxQkRFIC8qIG1hbnkt
aWZyYW1lcy5odG1sICovLAogCQkJCTc3NzJFQ0UwMjJGRTA1RTEwMDA5QTc5OSAvKiBtYW55LXNh
bWUtb3JpZ2luLWlmcmFtZXMuaHRtbCAqLywKKwkJCQlDRDgzOTRERTIzMkFGMTVFMDAxNDk0OTUg
LyogbWVkaWEtbG9hZGluZy5odG1sICovLAogCQkJCUNEQzk0NDJCMUVGMUZCRDIwMDU5QzNDNCAv
KiBtZWRpYXN0cmVhbXRyYWNrLWRldGFjaGVkLmh0bWwgKi8sCiAJCQkJNTFDRDFDNzExQjM4RDQ4
NDAwMTQyQ0E1IC8qIG1vZGFsLWFsZXJ0cy1pbi1uZXctYWJvdXQtYmxhbmstd2luZG93Lmh0bWwg
Ki8sCiAJCQkJN0ExNDU4RkIxQUQ1QzAzNTAwRTA2NzcyIC8qIG1vdXNlLWJ1dHRvbi1saXN0ZW5l
ci5odG1sICovLApAQCAtMzg4Myw3ICszODgxLDYgQEAKIAkJCQkwN0NEMzJGNzIwNjVCNzJBMDA2
NEE0QkUgLyogdmlkZW8uaHRtbCAqLywKIAkJCQkxQzJCODE4NDFDODkyNEEyMDBBNTUyOUYgLyog
d2ViZm9udC5odG1sICovLAogCQkJCTQ2OEYyRjkzMjM2OERBQTcwMEY0Qjg2NCAvKiB3aW5kb3ct
b3Blbi10aGVuLWRvY3VtZW50LW9wZW4uaHRtbCAqLywKLQkJCQlDRDgzOTRERTIzMkFGMTVFMDAx
NDk0OTUgLyogbWVkaWEtbG9hZGluZy5odG1sICovLAogCQkJKTsKIAkJCW5hbWUgPSBSZXNvdXJj
ZXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNDg2NCw3ICs0ODYxLDYgQEAKIAkJ
CQk3Q0NFN0VDRjFBNDExQTdFMDA0NDdDNEMgLyogU3RvcExvYWRpbmdGcm9tRGlkUmVjZWl2ZVJl
c3BvbnNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDMDkzMkUyMUM5OTM0NDAwMzBDNEIwIC8q
IFN0b3BTdXNwZW5kUmVzdW1lQWxsTWVkaWEubW0gaW4gU291cmNlcyAqLywKIAkJCQk0MTRBRDY4
NjIyODVEMUMwMDA3NzdGMkQgLyogU3RvcmFnZVF1b3RhLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJ
OTNCNjIwNTQyMzRFQTYyQzAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTE1QkUxNzExRDQyOEU0QjAwREQ3QzY4IC8qIFN0b3JlQmxvYlRoZW5E
ZWxldGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VEMDFBNDExQTdFMDA0NDdDNEMgLyog
U3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmcubW0gaW4gU291cmNlcyAqLywK
IAkJCQk3Q0NFN0VEMTFBNDExQTdFMDA0NDdDNEMgLyogU3RyaW5nVHJ1bmNhdG9yLm1tIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
U3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGFkMWM2N2JmMDUyZjdiMGEzNDUzZDA1NGYyNTI5MTkxZWVmM2YxNzIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTAz
ICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9TdG9yYWdlUXVvdGFVc2VyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KLXN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFF1b3RhID0g
MSAqIEtCOwotCi1jbGFzcyBNb2NrUXVvdGFVc2VyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OlN0
b3JhZ2VRdW90YVVzZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IE1vY2tRdW90YVVzZXIoU3Rv
cmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlcikKLSAgICAgICAgOiBtX21hbmFnZXIoJm1hbmFnZXIp
Ci0gICAgewotICAgICAgICBtYW5hZ2VyLmFkZFVzZXIoKnRoaXMpOwotICAgIH0KLQotICAgIHZv
aWQgc2V0U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCkgeyBtX3NwYWNlVXNlZCA9IHNwYWNl
VXNlZDsgfQotCi1wcml2YXRlOgotICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFs
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zcGFjZVVzZWQ7Ci0gICAgfQotCi0gICAgdm9pZCB3
aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSBmaW5h
bAotICAgIHsKLSAgICAgICAgaWYgKCFtX3NwYWNlVXNlZCkKLSAgICAgICAgICAgIEFTU0VSVF9F
UShtX21hbmFnZXItPnN0YXRlKCksIFN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0YXRlOjpVbmluaXRp
YWxpemVkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUX0VRKG1fbWFuYWdlci0+
c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZCk7
Ci0KLSAgICAgICAgLy8gUmVzZXQgdXNhZ2UgdG8gbW9jayBkZWxldGlvbi4KLSAgICAgICAgbV9z
cGFjZVVzZWQgPSAwOwotICAgICAgICBjYWxsYmFjaygpOwotICAgIH0KLQotICAgIHVpbnQ2NF90
IG1fc3BhY2VVc2VkIHsgMCB9OwotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1fbWFuYWdlcjsK
LX07Ci0gICAgCi1URVNUKFN0b3JhZ2VRdW90YU1hbmFnZXJUZXN0LCBCYXNpYykKLXsKLSAgICBT
dG9yYWdlUXVvdGFNYW5hZ2VyKiBzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyID0gbnVsbHB0cjsKLSAg
ICBTdG9yYWdlUXVvdGFNYW5hZ2VyIHN0b3JhZ2VRdW90YU1hbmFnZXIoZGVmYXVsdFF1b3RhLCBb
JnN0b3JhZ2VRdW90YU1hbmFnZXJQdHJdKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50
U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0
aW9uYWw8dWludDY0X3Q+KT4mJiBjb21wbGV0aW9uSGFubGRlcikgewotICAgICAgICBBU1NFUlRf
VFJVRShzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyKTsKLSAgICAgICAgQVNTRVJUX0VRKHN0b3JhZ2VR
dW90YU1hbmFnZXJQdHItPnN0YXRlKCksIFN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0YXRlOjpXYWl0
aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlKTsKLQotICAgICAgICAvLyBBbGxvdyBhbGwgc3Bh
Y2UgaW5jcmVhc2UgcmVxdWVzdHMuCi0gICAgICAgIGNvbXBsZXRpb25IYW5sZGVyKHNwYWNlSW5j
cmVhc2UgKyBjdXJyZW50U3BhY2UpOwotICAgIH0pOwotICAgIHN0b3JhZ2VRdW90YU1hbmFnZXJQ
dHIgPSAmc3RvcmFnZVF1b3RhTWFuYWdlcjsKLQotCi0gICAgTW9ja1F1b3RhVXNlciBtb2NrVXNl
cihzdG9yYWdlUXVvdGFNYW5hZ2VyKTsKLQotICAgIC8vIEdyYW50IGRpcmVjdGx5LgotICAgIHN0
b3JhZ2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDAuMSAqIEtCLCBbJl0oV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNpb24pIHsKLSAgICAgICAgQVNTRVJUX0VR
KGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQp
OwotICAgICAgICBtb2NrVXNlci5zZXRTcGFjZVVzZWQoMC4xICogS0IpOwotICAgIH0pOwotCi0g
ICAgLy8gR3JhbnQgYWZ0ZXIgY29tcHV0aW5nIGFjY3VyYXRlIHVzYWdlLgotICAgIHN0b3JhZ2VR
dW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDEuMCAqIEtCLCBbJl0oV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNpb24pIHsKLSAgICAgICAgQVNTRVJUX0VRKGRlY2lz
aW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQpOwotICAg
ICAgICBtb2NrVXNlci5zZXRTcGFjZVVzZWQoMS4wICogS0IpOwotICAgIH0pOwotCi0gICAgLy8g
R3JhbnQgYWZ0ZXIgY29tcHV0aW5nIGFjY3VyYXRlIHVzYWdlIGFuZCByZXF1ZXN0aW5nIHNwYWNl
IGluY3JlYXNlLgotICAgIHN0b3JhZ2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDEwICogS0Is
IFsmXShXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNpc2lvbikgewot
ICAgICAgICBBU1NFUlRfRVEoc3RvcmFnZVF1b3RhTWFuYWdlclB0ci0+c3RhdGUoKSwgU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6U3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdCk7Ci0gICAgICAg
IEFTU0VSVF9FUShkZWNpc2lvbiwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b246OkdyYW50KTsKLSAgICB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCAzYTA3YzEzOTgx
ZGRjMzA1NTlmZWE4NGJkMjhmYTJmYmFkZGU1NmRjLi4yOTIxNGJmZTNmYWFiZDY4NDVlM2E5MTI5
NGVhMGJkY2FkNzJhNTQyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcApAQCAtOTgxLDYgKzk4MSw4IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVU
b0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAgICAgY2xl
YXJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucygpOwogICAgIGNsZWFyRE9NQ2FjaGVzKCk7CiAK
KyAgICByZXNldFF1b3RhKCk7CisKICAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKHBsYXRmb3JtQ29udGV4dCgpLCB0cnVlKTsKIAog
ICAgIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwpAQCAtMzE0Miw2ICszMTQ0LDEzIEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQogICAgIHJ1blVudGlsKGNvbnRl
eHQuZG9uZSwgbm9UaW1lb3V0KTsKIH0KIAordm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRRdW90
YSgpCit7CisgICAgU3RvcmFnZVZvaWRDYWxsYmFja0NvbnRleHQgY29udGV4dCgqdGhpcyk7Cisg
ICAgV0tXZWJzaXRlRGF0YVN0b3JlUmVzZXRRdW90YShUZXN0Q29udHJvbGxlcjo6d2Vic2l0ZURh
dGFTdG9yZSgpLCAmY29udGV4dCwgU3RvcmFnZVZvaWRDYWxsYmFjayk7CisgICAgcnVuVW50aWwo
Y29udGV4dC5kb25lLCBub1RpbWVvdXQpOworfQorCiBzdHJ1Y3QgRmV0Y2hDYWNoZU9yaWdpbnND
YWxsYmFja0NvbnRleHQgewogICAgIEZldGNoQ2FjaGVPcmlnaW5zQ2FsbGJhY2tDb250ZXh0KFRl
c3RDb250cm9sbGVyJiBjb250cm9sbGVyLCBXS1N0cmluZ1JlZiBvcmlnaW4pCiAgICAgICAgIDog
dGVzdENvbnRyb2xsZXIoY29udHJvbGxlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuaAppbmRleCAxYjI2MWJjZGExYmEwZjIxZjE3ODQ5MDkyYTAyNmM2MGVhYmE5ODQ0Li5h
ZDcxYzg2OGMwMmZlNThiYjlhODM5Mjc4ZjBmZGIzZjFhZGViZTNmIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCkBAIC0yNjksNiArMjY5LDggQEAgcHVibGljOgogICAg
IHZvaWQgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKICAgICB2b2lkIHRlcm1pbmF0ZVNlcnZp
Y2VXb3JrZXJQcm9jZXNzKCk7CiAKKyAgICB2b2lkIHJlc2V0UXVvdGEoKTsKKwogICAgIHZvaWQg
cmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzKCk7CiAKICAgICB2b2lkIGNsZWFySW5kZXhlZERh
dGFiYXNlcygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384064</attachid>
            <date>2019-11-21 10:06:51 -0800</date>
            <delta_ts>2019-11-22 14:03:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203971-20191121100650.patch</filename>
            <type>text/plain</type>
            <size>169423</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzQ4OTA0NDNjMTJhY2I1
MWQ2NTBlYjY1MWFmYzNlMjFjYzRlZDUwOS4uMmE2YjcwOGI0Mjc1OTdiNmQyMDkyMTExMzY4NGE3
NWNkN2JiYTRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0NSBAQAorMjAxOS0xMS0yMSAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVy
c2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3MjkwMzQ5
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCBhIGxvY2stYmFzZWQgU3RvcmFnZVF1b3RhTWFuYWdlciBzbyB0aGF0IHF1b3RhIGNoZWNr
IGNhbiBiZSBkb25lIG9uIGRpZmZlcmVudCB0aHJlYWRzLgorICAgICAgICBJZiBzcGFjZSByZXF1
ZXN0IGlzIG1hZGUgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCwgaXQgbmVlZHMgdG8gaG9sZCBhIGxv
Y2sgdW50aWwgaXQgaXMgZmluaXNoZWQsIHNvIG5vIHJlcXVlc3QKKyAgICAgICAgZnJvbSBkaWZm
ZXJlbnQgdGhyZWFkcyBjYW4gYmUgcGVyZm9ybWVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAg
IElmIHNwYWNlIHJlcXVlc3QgaXMgbWFkZSBvbiB0aGUgbWFpbiB0aHJlYWQsIHdlIHdpbGwgZGlz
cGF0Y2ggaXQgdG8gYSBiYWNrZ3JvdW5kIHRocmVhZCBhbmQgc2NoZWR1bGUgYSBjYWxsbGJhY2sK
KyAgICAgICAgdG8gdGhlIG1haW4gdGhyZWFkIHdoZW4gcmVzdWx0IGlzIGF2YWlsYWJsZSwgc28g
dGhlIG1haW4gdGhyZWFkIHdpbGwgbm90IGJlIGJsb2NrZWQuCisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyBxdW90YSByZWxhdGVkIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJh
c2VzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpyZXF1ZXN0U3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRpc2tVc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90
YVVzZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OlF1b3RhVXNlcjo6flF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRl
U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2Vy
dmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3BhY2VVc2Vk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90
YVVzZXI6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjplbnN1cmVRdW90YVVz
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnN0
YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5pc2hDb21w
dXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpJREJTZXJ2ZXI6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGVjcmVhc2VTcGFjZVVz
ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6Omlu
Y3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCk6IERlbGV0ZWQu
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluaXRpYWxpemVRdW90YVVzZXIpOiBE
ZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5n
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkT3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNy
ZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bUNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OnJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJl
Y29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtR2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0
VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVxdWVzdFNwYWNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OndhaXRG
b3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2spOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Zmlu
aXNoU3BhY2VJbmNyZWFzZVRhc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6ZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVB
ZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0
ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJl
bmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Omdl
dFJlY29yZEFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OmdldENvdW50QWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpvcGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hl
Y2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb246OmFib3J0VHJhbnNhY3Rpb25XaXRob3V0Q2FsbGJhY2spOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uOjpwdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
OjpnZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9wZW5DdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjppdGVyYXRl
Q3Vyc29yKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURC
U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6cXVvdGFN
YW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6SW5Qcm9jZXNz
SURCU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIp
OiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJ
REJTZXJ2ZXIuaDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbkJhY2tncm91
bmRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dHJ5R3Jh
bnRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVwZGF0
ZVF1b3RhQmFzZWRPblVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXNldFF1b3RhRm9yVGVzdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp+U3RvcmFnZVF1b3RhTWFuYWdlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzcGFjZVVz
YWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5p
dGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjphZGRVc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1Bl
bmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3RhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90YSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzdGF0ZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmg6IFJlbW92ZWQuCisKIDIw
MTktMTEtMjEgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
Z3Jlc3Npb24gKHIyNTI2NjApOiBMYXlvdXQgVGVzdCBwbGF0Zm9ybS9pb3MvbWVkaWFzdHJlYW0v
YXVkaW8tbXV0ZWQtaW4tYmFja2dyb3VuZC10YWIuaHRtbCBpcyBmYWlsaW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IDk5ZmNjMDYyNjNlNzhjYTI3NmFhYzQ2MTA0ZDc2Nzg2ZGMwMGE4NGQuLjA0YTEwYzUwNjI1NTdj
MTQ2NmFhZDFmNTVkMjU1OWMyMjVhZTdiYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODggQEAKKzIw
MTktMTEtMjEgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jv
c3MtdGhyZWFkIHZlcnNpb24gU3RvcmFnZVF1b3RhTWFuYWdlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTcxCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81NzI5MDM0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDogSW50cm9kdWNlIGNs
YXNzIFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyIHRvIG1hbmFnZSBhbGwgCisgICAgICAgIFN0
b3JhZ2VRdW90YU1hbmFnZXJzIG9mIHRoZSBzYW1lIHNlc3Npb24uIAorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1h
bmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVNlc3Npb24p
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmln
aW5zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZlcik6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRJbmRleGVkRGF0YWJhc2VTZXNz
aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNldFNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VySURCUm9vdFBhdGgpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmluaXRpYWxpemVTdG9yYWdlUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2xlYXJTdG9yYWdlUXVvdGEpOiBEZWxldGVkLgorICAgICAg
ICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxp
emVRdW90YVVzZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0
UXVvdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0
b3JhZ2VRdW90YU1hbmFnZXI6OmVuc3VyZU9yaWdpblN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6
OmV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OmNhY2hlUm9vdFBhdGggY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1h
bmFnZXI6OnNldElEQlJvb3RQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjppZGJSb290UGF0aCBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yYWdlUXVvdGFNYW5hZ2Vyczo6ZGVmYXVsdFF1
b3RhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlN0
b3JhZ2VRdW90YU1hbmFnZXJzOjpzZXREZWZhdWx0UXVvdGFzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlN0b3JhZ2VRdW90YU1hbmFnZXJzOjptYW5hZ2Vyc1Bl
ck9yaWdpbik6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MubWVzc2FnZXMuaW46CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpnZXREaXJlY3Rv
cnlTaXplKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OmRpc2tVc2Fn
ZSk6IHN0YXRpYyBmdW5jdGlvbiB0byBnZXQgdGhlIGRpc2sgdXNhZ2Ugb2YgQ2FjaGVTdG9yYWdl
LgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6cmVxdWVzdFNwYWNlKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJlYWRDYWNoZXNGcm9tRGlz
ayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjp3cml0ZVNpemVGaWxl
KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJlYWRTaXplRmlsZSk6
CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjppbml0aWFsaXplUXVvdGFV
c2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmUuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VF
bmdpbmVDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnB1
dCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpDYWNoZXMpOgorICAgICAgICAoV2ViS2l0
OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6fkNhY2hlcyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6Q2FjaGVzOjp1cGRhdGVTaXplRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6Q2FjaGVzOjppbml0aWFsaXplU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6Q2FjaGVzOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6
Q2FjaGVzOjpyZXF1ZXN0U3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlczo6d3JpdGVSZWNvcmQpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hl
czo6cmVtb3ZlUmVjb3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6
OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6Q2FjaGVzOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmg6CisgICAgICAgICogU2hhcmVk
L1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oOiBBZGQgYSBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgcGFy
YW1ldGVyIHNvIHdlIGtub3cgdGhlIGRpcmVjb3RyeSBvZiAKKyAgICAgICAgQ2FjaGVTdG9yYWdl
IHdoZW4gd2Ugc3RhcnQgdXNpbmcgV2Vic2l0ZURhdGFTdG9yZS4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwOgorICAgICAgICAoV0tXZWJzaXRl
RGF0YVN0b3JlUmVzZXRRdW90YSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0
ZURhdGFTdG9yZVJlZi5oOiBBZGQgYSBDIEFQSSBmb3IgcmVzZXRpbmcgcXVvdGEgaW4gVGVzdFJ1
bm5lci4KKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6cmVzZXRRdW90YSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cmVzZXRRdW90YSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuaDoKKwogMjAxOS0xMS0yMCAgQ2hhbmdTZW9rIE9oICA8Y2hhbmdzZW9rQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgW0dUS10gQWRkIEFOR0xFIGJhY2tlbmQgdG8gR1RLIHBvcnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCmluZGV4IGVmYzI3NWY2ZGE4YzJjMTA1NmJmMDBkNTljZjVhNWY5YjlmNWVm
OTEuLjBlYzgwNTExMzM4YWY0MjdlMGI1ODhjNGExYzNlMjRhMWNmNjU2YzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQpAQCAtMTM4MSw3ICsxMzgxLDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oCiAgICAgc3RvcmFnZS9T
dG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaAogICAgIHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdl
ci5oCi0gICAgc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmgKICAgICBzdG9yYWdlL1N0b3JhZ2VU
eXBlLmgKIAogICAgIHN0eWxlL1N0eWxlQ2hhbmdlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXggZTYxZGI4Yzk0
MjhkOTg0ZGE2NDY5NmU3Yzg0Mjc4NzQyNjljMjdlNi4uZWViNDNiMDY3MTVkNmNmNzBjM2MwZTdm
OTM4Mzk2YmMwZDUwNTE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTQ2LDI4ICs0NiwyOCBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKLVJlZjxJREJTZXJ2ZXI+IElE
QlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgUXVvdGFNYW5hZ2VyR2V0
dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVh
dGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1
ZXN0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SURCU2VydmVyKHNlc3Npb25JRCwgV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKSk7CiB9CiAK
LVJlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRl
ciYmIHF1b3RhTWFuYWdlckdldHRlcikKK1JlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRl
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9y
eVBhdGgsIFN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciYmIHF1b3RhTWFuYWdlckdl
dHRlcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJTZXJ2ZXIoc2Vzc2lvbklELCBk
YXRhYmFzZURpcmVjdG9yeVBhdGgsIFdURk1vdmUocXVvdGFNYW5hZ2VyR2V0dGVyKSkpOwogfQog
Ci1JREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFF1b3RhTWFu
YWdlckdldHRlciYmIHF1b3RhTWFuYWdlckdldHRlcikKK0lEQlNlcnZlcjo6SURCU2VydmVyKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVy
JiYgc3BhY2VSZXF1ZXN0ZXIpCiAgICAgOiBDcm9zc1RocmVhZFRhc2tIYW5kbGVyKCJJbmRleGVk
RGF0YWJhc2UgU2VydmVyIiwgQXV0b2RyYWluZWRQb29sRm9yUnVuTG9vcDo6VXNlKQogICAgICwg
bV9zZXNzaW9uSUQoc2Vzc2lvbklEKQotICAgICwgbV9xdW90YU1hbmFnZXJHZXR0ZXIoV1RGTW92
ZShxdW90YU1hbmFnZXJHZXR0ZXIpKQorICAgICwgbV9zcGFjZVJlcXVlc3RlcihXVEZNb3ZlKHNw
YWNlUmVxdWVzdGVyKSkKIHsKIH0KIAotSURCU2VydmVyOjpJREJTZXJ2ZXIoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgUXVvdGFN
YW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorSURCU2VydmVyOjpJREJTZXJ2ZXIo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5
UGF0aCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYgc3BhY2VSZXF1ZXN0ZXIp
CiAgICAgOiBDcm9zc1RocmVhZFRhc2tIYW5kbGVyKCJJbmRleGVkRGF0YWJhc2UgU2VydmVyIiwg
QXV0b2RyYWluZWRQb29sRm9yUnVuTG9vcDo6VXNlKQogICAgICwgbV9zZXNzaW9uSUQoc2Vzc2lv
bklEKQogICAgICwgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgoZGF0YWJhc2VEaXJlY3RvcnlQYXRo
KQotICAgICwgbV9xdW90YU1hbmFnZXJHZXR0ZXIoV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0ZXIp
KQorICAgICwgbV9zcGFjZVJlcXVlc3RlcihXVEZNb3ZlKHNwYWNlUmVxdWVzdGVyKSkKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiSURCU2VydmVyIGNyZWF0ZWQgYXQgcGF0aCAlcyIsIGRhdGFiYXNl
RGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJklEQlNlcnZlcjo6dXBncmFkZUZpbGVzSWZOZWNlc3Nh
cnkpKTsKQEAgLTY4MywxNTcgKzY4MywyNCBAQCB2b2lkIElEQlNlcnZlcjo6cGVyZm9ybUNsb3Nl
QW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcgogCiB2
b2lkIElEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzKHVpbnQ2NF90
IGNhbGxiYWNrSUQpCiB7Ci0gICAgZm9yIChhdXRvJiB1c2VyIDogbV9xdW90YVVzZXJzLnZhbHVl
cygpKQotICAgICAgICB1c2VyLT5yZXNldFNwYWNlVXNlZCgpOwotCiAgICAgYXV0byBjYWxsYmFj
ayA9IG1fZGVsZXRlRGF0YWJhc2VDb21wbGV0aW9uSGFuZGxlcnMudGFrZShjYWxsYmFja0lEKTsK
ICAgICBBU1NFUlQoY2FsbGJhY2spOwogICAgIGNhbGxiYWNrKCk7CiB9CiAKLUlEQlNlcnZlcjo6
UXVvdGFVc2VyOjpRdW90YVVzZXIoSURCU2VydmVyJiBzZXJ2ZXIsIFN0b3JhZ2VRdW90YU1hbmFn
ZXIqIG1hbmFnZXIsIENsaWVudE9yaWdpbiYmIG9yaWdpbikKLSAgICA6IG1fc2VydmVyKHNlcnZl
cikKLSAgICAsIG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKLSAgICAsIG1fb3JpZ2lu
KFdURk1vdmUob3JpZ2luKSkKLSAgICAsIG1faXNJbml0aWFsaXplZChtX3NlcnZlci5tX3Nlc3Np
b25JRC5pc0VwaGVtZXJhbCgpKQotewotICAgIGlmIChtYW5hZ2VyKQotICAgICAgICBtYW5hZ2Vy
LT5hZGRVc2VyKCp0aGlzKTsKLX0KLQotSURCU2VydmVyOjpRdW90YVVzZXI6On5RdW90YVVzZXIo
KQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+cmVtb3ZlVXNlcigq
dGhpcyk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKCkK
LXsKLSAgICBtX3NwYWNlVXNlZCA9IDA7Ci0KLSAgICBpZiAoIW1fbWFuYWdlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1fc2VydmVyLm1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBBU1NFUlQoIW1faW5pdGlhbGl6YXRpb25DYWxsYmFjayk7Ci0KLSAgICBtX2lz
SW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIC8vIERvIGFkZC9yZW1vdmUgdG8gdHJpZ2dlciBj
YWxsIHRvIHdoZW5Jbml0aWFsaXplZC4KLSAgICBtX21hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMp
OwotICAgIG1fbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpR
dW90YVVzZXI6OmNvbXB1dGVTcGFjZVVzZWQoKQotewotICAgIHJlc2V0U3BhY2VVc2VkKCk7Ci19
Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKHVpbnQ2NF90
IHNpemUpCi17Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBBU1NFUlQobV9zcGFjZVVzZWQgKyBzaXplID4gbV9zcGFjZVVzZWQpOwotICAgIG1fc3BhY2VV
c2VkICs9IHNpemU7Ci19Ci12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpkZWNyZWFzZVNwYWNl
VXNlZCh1aW50NjRfdCBzaXplKQotewotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKG1fc3BhY2VVc2VkID49IHNpemUpOwotICAgIG1fc3BhY2VV
c2VkIC09IHNpemU7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OndoZW5Jbml0aWFs
aXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCi17Ci0gICAgaWYgKG1f
aXNJbml0aWFsaXplZCkgewotICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIG1faW5pdGlhbGl6YXRpb25DYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwot
ICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKG1fb3JpZ2luKTsK
LX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5pdGlhbGl6ZVNwYWNlVXNlZCh1aW50
NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCB8fCAhbV9lc3Rp
bWF0ZWRTcGFjZUluY3JlYXNlKTsKLSAgICBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsKLSAgICBt
X2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgaWYgKGF1dG8gY2FsbGJhY2sgPSBXVEZNb3Zl
KG1faW5pdGlhbGl6YXRpb25DYWxsYmFjaykpCi0gICAgICAgIGNhbGxiYWNrKCk7Ci19Ci0KLUlE
QlNlcnZlcjo6UXVvdGFVc2VyJiBJREJTZXJ2ZXI6OmVuc3VyZVF1b3RhVXNlcihjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICByZXR1cm4gKm1fcXVvdGFVc2Vycy5lbnN1cmUob3Jp
Z2luLCBbdGhpcywgJm9yaWdpbl0gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxRdW90YVVz
ZXI+KCp0aGlzLCBtX3F1b3RhTWFuYWdlckdldHRlcihtX3Nlc3Npb25JRCwgb3JpZ2luKSwgQ2xp
ZW50T3JpZ2luIHsgb3JpZ2luIH0pOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotdm9p
ZCBJREJTZXJ2ZXI6OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVu
dE9yaWdpbiYgb3JpZ2luKQotewotICAgIEFTU0VSVCghbV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJ
REJTZXJ2ZXI6OmNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4sIG9yaWdpbikpOwotfQotCi12b2lk
IElEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4m
IG9yaWdpbikKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIElEQlNlcnZlcjo6cmVxdWVz
dFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0YXNrU2l6ZSkKIHsK
ICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGF1dG8gZGF0YWJhc2VEaXJlY3Rv
cnlQYXRoID0gdGhpcy0+ZGF0YWJhc2VEaXJlY3RvcnlQYXRoSXNvbGF0ZWRDb3B5KCk7Ci0gICAg
YXV0byBvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5ID0gSURCRGF0YWJhc2VJZGVudGlmaWVyOjpk
YXRhYmFzZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290KG9yaWdpbi50b3BPcmlnaW4sIG9yaWdpbi5j
bGllbnRPcmlnaW4sIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgInYwIik7Ci0gICAgYXV0byBuZXdW
ZXJzaW9uT3JpZ2luRGlyZWN0b3J5ID0gSURCRGF0YWJhc2VJZGVudGlmaWVyOjpkYXRhYmFzZURp
cmVjdG9yeVJlbGF0aXZlVG9Sb290KG9yaWdpbi50b3BPcmlnaW4sIG9yaWdpbi5jbGllbnRPcmln
aW4sIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgInYxIik7Ci0gICAgYXV0byBzaXplID0gU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZXNTaXplRm9yRGlyZWN0b3J5KG9sZFZlcnNpb25Pcmln
aW5EaXJlY3RvcnkpICsgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZXNTaXplRm9yRGly
ZWN0b3J5KG5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkpOwotCi0gICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJklEQlNlcnZlcjo6ZmluaXNoQ29t
cHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luLCBvcmlnaW4sIHNpemUpKTsKLX0KLQotdm9pZCBJREJT
ZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmln
aW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VVc2VkKQotewotICAgIGVuc3VyZVF1b3RhVXNlcihv
cmlnaW4pLmluaXRpYWxpemVTcGFjZVVzZWQoc3BhY2VVc2VkKTsKLX0KLQotdm9pZCBJREJTZXJ2
ZXI6OnJlcXVlc3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgdGFz
a1NpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b24pPiYmIGNhbGxiYWNrKQotewotICAgIGF1dG8qIHF1b3RhTWFuYWdlciA9IGVuc3VyZVF1b3Rh
VXNlcihvcmlnaW4pLm1hbmFnZXIoKTsKLSAgICBpZiAoIXF1b3RhTWFuYWdlcikgewotICAgICAg
ICBjYWxsYmFjayhTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBxdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZSh0YXNrU2l6
ZSwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIHJldHVybiBtX3NwYWNlUmVxdWVzdGVyKG9yaWdp
biwgdGFza1NpemUpOwogfQogCi12b2lkIElEQlNlcnZlcjo6cmVzZXRTcGFjZVVzZWQoY29uc3Qg
Q2xpZW50T3JpZ2luJiBvcmlnaW4pCit1aW50NjRfdCBJREJTZXJ2ZXI6OmRpc2tVc2FnZShjb25z
dCBTdHJpbmcmIHJvb3REaXJlY3RvcnksIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQogewot
ICAgIGlmIChhdXRvKiB1c2VyID0gbV9xdW90YVVzZXJzLmdldChvcmlnaW4pKQotICAgICAgICB1
c2VyLT5yZXNldFNwYWNlVXNlZCgpOwotfQotCi12b2lkIElEQlNlcnZlcjo6aW5jcmVhc2VTcGFj
ZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNpemUpCi17Ci0gICAg
ZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuaW5jcmVhc2VTcGFjZVVzZWQoc2l6ZSk7Ci19Ci0KLXZv
aWQgSURCU2VydmVyOjpkZWNyZWFzZVNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdp
biwgdWludDY0X3Qgc2l6ZSkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5kZWNyZWFz
ZVNwYWNlVXNlZChzaXplKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OmluY3JlYXNlUG90ZW50aWFs
U3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0YXNrU2l6ZSkK
LXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNl
ZCh0YXNrU2l6ZSk7Ci19CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKLXZvaWQgSURC
U2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9y
aWdpbiwgdWludDY0X3Qgc3BhY2VVc2VkKQotewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4p
LmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKHNwYWNlVXNlZCk7CisgICAgYXV0byBvbGRWZXJz
aW9uT3JpZ2luRGlyZWN0b3J5ID0gSURCRGF0YWJhc2VJZGVudGlmaWVyOjpkYXRhYmFzZURpcmVj
dG9yeVJlbGF0aXZlVG9Sb290KG9yaWdpbi50b3BPcmlnaW4sIG9yaWdpbi5jbGllbnRPcmlnaW4s
IHJvb3REaXJlY3RvcnksICJ2MCIpOworICAgIGF1dG8gbmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9y
eSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9v
dChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCByb290RGlyZWN0b3J5LCAi
djEiKTsKKyAgICByZXR1cm4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZXNTaXplRm9y
RGlyZWN0b3J5KG9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkpICsgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpkYXRhYmFzZXNTaXplRm9yRGlyZWN0b3J5KG5ld1ZlcnNpb25PcmlnaW5EaXJlY3Rvcnkp
OwogfQogCiB2b2lkIElEQlNlcnZlcjo6dXBncmFkZUZpbGVzSWZOZWNlc3NhcnkoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCmlu
ZGV4IGQzYTIyM2Q5MzJkOTE1OWQ1NDY2NjI5ZjcxN2VmZmI1Nzc0MTNjYWYuLjA2ZjMxMzIxMmM5
Zjk0YjJmZGYzOGIyY2Y0YTEyMDA1NTEzNmEzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTMwLDcgKzMwLDYgQEAK
ICNpbmNsdWRlICJJREJDb25uZWN0aW9uVG9DbGllbnQuaCIKICNpbmNsdWRlICJJREJEYXRhYmFz
ZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJTdG9yYWdlUXVvdGFNYW5hZ2VyLmgiCi0jaW5jbHVk
ZSAiU3RvcmFnZVF1b3RhVXNlci5oIgogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlLmgiCiAj
aW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSA8cGFsL0h5
c3RlcmVzaXNBY3Rpdml0eS5oPgpAQCAtNTgsOSArNTcsOSBAQCBlbnVtIGNsYXNzIFNob3VsZEZv
cmNlU3RvcCA6IGJvb2wgeyBObywgWWVzIH07CiAKIGNsYXNzIElEQlNlcnZlciA6IHB1YmxpYyBS
ZWZDb3VudGVkPElEQlNlcnZlcj4sIHB1YmxpYyBDcm9zc1RocmVhZFRhc2tIYW5kbGVyLCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8SURCU2VydmVyPiB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgUXVvdGFN
YW5hZ2VyR2V0dGVyID0gV1RGOjpGdW5jdGlvbjxTdG9yYWdlUXVvdGFNYW5hZ2VyKihQQUw6OlNl
c3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJik+OwotICAgIHN0YXRpYyBSZWY8SURCU2VydmVy
PiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYp
OworICAgIHVzaW5nIFN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciA9IEZ1bmN0aW9u
PFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2
NF90IHNwYWNlUmVxdWVzdGVkKT47CisgICAgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQ
QUw6OlNlc3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYpOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SURCU2VydmVyPiBjcmVhdGUoUEFMOjpTZXNzaW9u
SUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5h
Z2VyU3BhY2VSZXF1ZXN0ZXImJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZ2lzdGVy
Q29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHVucmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwpAQCAtMTEx
LDIxICsxMTAsMTUgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmRE
ZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2b2lkICgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVs
ZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYs
IEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgdm9pZCByZXF1
ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKLSAgICB2
b2lkIGluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2
NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0
IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGluY3JlYXNlU3Bh
Y2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNpemUpOwotICAgIHZvaWQgZGVj
cmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6ZSk7Ci0gICAg
dm9pZCByZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mKTsKLQotICAgIHZvaWQgaW5p
dGlhbGl6ZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikgeyBlbnN1cmVRdW90
YVVzZXIob3JpZ2luKTsgfQorICAgIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIHJlcXVl
c3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHVpbnQ2NF90IGRpc2tVc2FnZShjb25zdCBTdHJpbmcmLCBjb25z
dCBDbGllbnRPcmlnaW4mKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJ5U3RvcChTaG91
bGRGb3JjZVN0b3ApOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lKCk7CiAKIHByaXZh
dGU6Ci0gICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJik7
Ci0gICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGly
ZWN0b3J5UGF0aCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOworICAgIElEQlNlcnZlcihQQUw6OlNl
c3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYpOworICAgIElEQlNl
cnZlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgs
IFN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciYmKTsKIAogICAgIFVuaXF1ZUlEQkRh
dGFiYXNlJiBnZXRPckNyZWF0ZVVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IElEQkRhdGFiYXNlSWRl
bnRpZmllciYpOwogICAgIApAQCAtMTQyLDUxICsxMzUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQg
cmVtb3ZlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZUZvclZlcnNpb24oV2FsbFRpbWUsIGNvbnN0IFN0
cmluZyYpOwogICAgIHZvaWQgcmVtb3ZlRGF0YWJhc2VzV2l0aE9yaWdpbnNGb3JWZXJzaW9uKGNv
bnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiwgY29uc3QgU3RyaW5nJik7CiAKLSAgICBj
bGFzcyBRdW90YVVzZXIgZmluYWwgOiBwdWJsaWMgU3RvcmFnZVF1b3RhVXNlciB7Ci0gICAgICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgUXVvdGFVc2Vy
KElEQlNlcnZlciYsIFN0b3JhZ2VRdW90YU1hbmFnZXIqLCBDbGllbnRPcmlnaW4mJik7Ci0gICAg
ICAgIH5RdW90YVVzZXIoKTsKLQotICAgICAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBtYW5hZ2Vy
KCkgeyByZXR1cm4gbV9tYW5hZ2VyLmdldCgpOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRTcGFjZVVz
ZWQodWludDY0X3Qgc3BhY2VVc2VkKSB7IG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOyB9Ci0gICAg
ICAgIHZvaWQgcmVzZXRTcGFjZVVzZWQoKTsKLQotICAgICAgICB2b2lkIGluY3JlYXNlUG90ZW50
aWFsU3BhY2VVc2VkKHVpbnQ2NF90IGluY3JlYXNlKSB7IG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFz
ZSArPSBpbmNyZWFzZTsgfQotICAgICAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2Vk
KHVpbnQ2NF90IGRlY3JlYXNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9lc3Rp
bWF0ZWRTcGFjZUluY3JlYXNlID49IGRlY3JlYXNlKTsKLSAgICAgICAgICAgIG1fZXN0aW1hdGVk
U3BhY2VJbmNyZWFzZSAtPSBkZWNyZWFzZTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGluY3Jl
YXNlU3BhY2VVc2VkKHVpbnQ2NF90IHNpemUpOwotICAgICAgICB2b2lkIGRlY3JlYXNlU3BhY2VV
c2VkKHVpbnQ2NF90IHNpemUpOwotCi0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZVNwYWNlVXNlZCh1
aW50NjRfdCBzcGFjZVVzZWQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdWludDY0X3Qgc3Bh
Y2VVc2VkKCkgY29uc3QgZmluYWwKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1faXNJ
bml0aWFsaXplZCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zcGFjZVVzZWQgKyBtX2VzdGltYXRl
ZFNwYWNlSW5jcmVhc2U7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBjb21wdXRlU3BhY2VVc2Vk
KCkgZmluYWw7Ci0gICAgICAgIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJikgZmluYWw7Ci0KLSAgICAgICAgSURCU2VydmVyJiBtX3NlcnZlcjsKLSAgICAg
ICAgV2Vha1B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBtX21hbmFnZXI7Ci0gICAgICAgIENsaWVu
dE9yaWdpbiBtX29yaWdpbjsKLSAgICAgICAgYm9vbCBtX2lzSW5pdGlhbGl6ZWQgeyBmYWxzZSB9
OwotICAgICAgICB1aW50NjRfdCBtX3NwYWNlVXNlZCB7IDAgfTsKLSAgICAgICAgdWludDY0X3Qg
bV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlIHsgMCB9OwotICAgICAgICBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+IG1faW5pdGlhbGl6YXRpb25DYWxsYmFjazsKLSAgICB9OwotCi0gICAgV0VCQ09S
RV9FWFBPUlQgUXVvdGFVc2VyJiBlbnN1cmVRdW90YVVzZXIoY29uc3QgQ2xpZW50T3JpZ2luJik7
Ci0gICAgdm9pZCBzdGFydENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRP
cmlnaW4mKTsKLSAgICB2b2lkIGNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50
T3JpZ2luJik7Ci0gICAgdm9pZCBmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29u
c3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc3BhY2VVc2VkKTsKLQogICAgIFBBTDo6U2Vzc2lv
bklEIG1fc2Vzc2lvbklEOwogICAgIEhhc2hNYXA8SURCQ29ubmVjdGlvbklkZW50aWZpZXIsIFJl
ZlB0cjxJREJDb25uZWN0aW9uVG9DbGllbnQ+PiBtX2Nvbm5lY3Rpb25NYXA7CiAgICAgSGFzaE1h
cDxJREJEYXRhYmFzZUlkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxVbmlxdWVJREJEYXRhYmFz
ZT4+IG1fdW5pcXVlSURCRGF0YWJhc2VNYXA7CkBAIC0xOTgsOCArMTQ2LDcgQEAgcHJpdmF0ZToK
IAogICAgIFN0cmluZyBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aDsKIAotICAgIEhhc2hNYXA8Q2xp
ZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8UXVvdGFVc2VyPj4gbV9xdW90YVVzZXJzOwotICAg
IFF1b3RhTWFuYWdlckdldHRlciBtX3F1b3RhTWFuYWdlckdldHRlcjsKKyAgICBTdG9yYWdlUXVv
dGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXIgbV9zcGFjZVJlcXVlc3RlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggZmYwOTBmNzZi
YjVkNDI4MzkyNjU2MTg4ZWZhN2ZmMWM5NDViMWM5Yy4uNWZmMjljNzAyNjEwNWE4ZWY2Y2QxZDUy
OWQ1YTc4NDc0NzAxYzkxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0xODYsNTYg
KzE4Niw2IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIHF1b3RhRXJyb3JNZXNzYWdlTmFtZShjb25z
dCBjaGFyKiB0YXNrTmFtZSkKICAgICByZXR1cm4gbWFrZVN0cmluZygiRmFpbGVkIHRvICIsIHRh
c2tOYW1lLCAiIGluIGRhdGFiYXNlIGJlY2F1c2Ugbm90IGVub3VnaCBzcGFjZSBmb3IgZG9tYWlu
Iik7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlcXVlc3RTcGFjZShVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0
IGNoYXIqIHRhc2tOYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElEQkVycm9yJiYpPiYmIGNh
bGxiYWNrKQotewotICAgIG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9pZGVudGlmaWVyLm9yaWdp
bigpLCB0YXNrU2l6ZSwgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHRoaXMsIHdlYWtU
cmFuc2FjdGlvbiA9IG1ha2VXZWFrUHRyKHRyYW5zYWN0aW9uKSwgdGFza05hbWUsIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgewotICAgICAgICBp
ZiAoIXdlYWtUaGlzKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25F
cnJvciB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
d2Vha1RyYW5zYWN0aW9uKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25v
d25FcnJvciB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAo
bV9vd25pbmdQb2ludGVyRm9yQ2xvc2UpIHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBjbG9zaW5n
IHRoZSBkYXRhYmFzZSwgdGhlcmUgaXMgbm8gcG9pbnQgaW4gdHJ5aW5nIHRvIG1vZGlmeSB0aGUg
ZGF0YWJhc2UgYXQgdGhhdCBwb2ludC4KLSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsg
VW5rbm93bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgc3dpdGNoIChkZWNpc2lvbikgewotICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6
OkRlY2lzaW9uOjpEZW55OgotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBRdW90YUV4
Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSh0YXNrTmFtZSkgfSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246
OkdyYW50OgotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyB9KTsKLSAgICAgICAgfTsK
LSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6d2FpdEZvclJlcXVlc3RTcGFj
ZUNvbXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYgY2FsbGJhY2spCi17Ci0gICAgcmVx
dWVzdFNwYWNlKHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92ZShjYWxsYmFjaykpOwotfQotCi12
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlk
ZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKQotewotICAgIG1fc2VydmVyLT5pbmNyZWFzZVBv
dGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplKTsKLSAgICBB
U1NFUlQoIW1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5jb250YWlucyhpZGVudGlmaWVyKSk7
Ci0gICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmFkZChpZGVudGlmaWVyLCB0YXNrU2l6
ZSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZpbmlzaFNwYWNlSW5jcmVhc2VUYXNr
KHVpbnQ2NF90IGlkZW50aWZpZXIsIGJvb2wgaXNUYXNrU3VjY2Vzc2Z1bCkKLXsKLSAgICBhdXRv
IGl0ZXJhdG9yID0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmZpbmQoaWRlbnRpZmllcik7
Ci0gICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5lbmQo
KSk7Ci0gICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmll
ci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBpZiAoaXNUYXNrU3VjY2Vzc2Z1bCkK
LSAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4o
KSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MucmVt
b3ZlKGl0ZXJhdG9yKTsKLX0KLQogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJl
bnRPcGVuT3BlcmF0aW9uKCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24gKCVwKSIsIHRoaXMpOwpAQCAt
MjQ2LDI5ICsxOTYsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9w
ZW5PcGVyYXRpb24oKQogICAgIGlmICghbV9kYXRhYmFzZUluZm8pIHsKICAgICAgICAgaWYgKCFt
X2lzT3BlbmluZ0JhY2tpbmdTdG9yZSkgewogICAgICAgICAgICAgbV9pc09wZW5pbmdCYWNraW5n
U3RvcmUgPSB0cnVlOwotICAgICAgICAgICAgLy8gV2UgZG8gbm90IGtub3cgd2hldGhlciB0aGlz
IGlzIGFuIGV4aXN0aW5nIG9yIGEgbmV3IGRhdGFiYXNlLgotICAgICAgICAgICAgLy8gV2Ugc2V0
IGEgc21hbGwgY29zdCBzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBvcGVuIGFuIGluZmlu
aXRlIG51bWJlciBvZiBkYXRhYmFzZS4KLSAgICAgICAgICAgIG1fc2VydmVyLT5yZXF1ZXN0U3Bh
Y2UobV9pZGVudGlmaWVyLm9yaWdpbigpLCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0LCBbdGhp
cywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgICAgICAgICAgaWYgKG1fb3duaW5nUG9pbnRlckZvckNsb3NlKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGRlY2lz
aW9uKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lv
bjo6RGVueTogewotICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IElEQlJlc3VsdERh
dGE6OmVycm9yKG1fY3VycmVudE9wZW5EQlJlcXVlc3QtPnJlcXVlc3REYXRhKCkucmVxdWVzdElk
ZW50aWZpZXIoKSwgSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNz
YWdlTmFtZSgib3BlbkRhdGFiYXNlIikgfSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVu
dE9wZW5EQlJlcXVlc3QtPmNvbm5lY3Rpb24oKS5kaWRPcGVuRGF0YWJhc2UocmVzdWx0KTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICAgICAgICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBj
YXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudDoKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBjYWxsYmFja0lEID0gdGhpcy0+Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50
aWZpZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxs
YmFja0lELCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0KTsKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy0+cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyLCBjYWxsYmFja0lE
KSk7Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcG9z
dERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyKSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTgyMSwyMyArNzQ5LDMwIEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmFkZE9wZW5EYXRhYmFzZUNvbm5lY3Rpb24oUmVmPFVuaXF1ZUlEQkRhdGFiYXNlQ29u
bmVjdGlvCiAgICAgbV9vcGVuRGF0YWJhc2VDb25uZWN0aW9ucy5hZGQoYWRvcHRSZWYoY29ubmVj
dGlvbi5sZWFrUmVmKCkpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tp
bmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIHVpbnQ2NF90
IHRhc2tJZGVudGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9y
ZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0
YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwogCisgICAgSURCRGF0YWJhc2VJ
bmZvIGRhdGFiYXNlSW5mbzsKKyAgICBtX29yaWdpbiA9IGlkZW50aWZpZXIub3JpZ2luKCk7Cisg
ICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2VydmVyLT5yZXF1ZXN0
U3BhY2UobV9vcmlnaW4sIGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QpOworICAgIGlmIChkZWNp
c2lvbiA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5mbywgSURCRXJyb3Io
UXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIk9wZW5CYWNraW5nU3Rv
cmUiKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVCghbV9iYWNraW5n
U3RvcmUpOwogICAgIG1fYmFja2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9y
ZShpZGVudGlmaWVyKTsKICAgICBtX2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJh
bnNhY3Rpb25zID0gbV9iYWNraW5nU3RvcmUtPnN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rp
b25zKCk7CiAgICAgbV9iYWNraW5nU3RvcmVJc0VwaGVtZXJhbCA9IG1fYmFja2luZ1N0b3JlLT5p
c0VwaGVtZXJhbCgpOwogCi0gICAgSURCRGF0YWJhc2VJbmZvIGRhdGFiYXNlSW5mbzsKICAgICBh
dXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRh
dGFiYXNlSW5mbyk7Ci0KLSAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRh
dGFiYXNlSW5mbywgZXJyb3IsICB0YXNrSWRlbnRpZmllcikpOworICAgIHBvc3REYXRhYmFzZVRh
c2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvcikpOwogfQogCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5m
byYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikK
K3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlIik7CkBAIC04NDgsOCArNzgzLDYgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8m
IGluZm8sIGNvbnN0IEkKICAgICBBU1NFUlQobV9pc09wZW5pbmdCYWNraW5nU3RvcmUpOwogICAg
IG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gZmFsc2U7CiAKLSAgICBmaW5pc2hTcGFjZUluY3Jl
YXNlVGFzayh0YXNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwotCiAgICAgaWYgKG1faGFy
ZENsb3NlZEZvclVzZXJEZWxldGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtODYxLDM3ICs3OTQs
MjYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9i
amVjdFN0b3JlIik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9u
Q29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24s
IHRhc2tTaXplLCAiY3JlYXRlT2JqZWN0U3RvcmUiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2Fj
dGlvbiwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0
YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBR
dW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3Ip
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5jcmVhdGVP
YmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIGluZm8sIFdU
Rk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXpl
LCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJv
ciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFj
a09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwg
dGFza1NpemUpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJh
Y2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbywgIHF1b3RhRXJyb3Ip
KTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRy
YW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIAotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIHF1b3Rh
RXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKQog
ewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9y
ZSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1D
cmVhdGVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKCFxdW90YUVycm9yLmlzTnVsbCgpKSB7Ci0g
ICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFj
a0lkZW50aWZpZXIsIHF1b3RhRXJyb3IsIGluZm8pKTsKKyAgICAvLyBRdW90YSBjaGVjay4KKyAg
ICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6
ZShpbmZvKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29yaWdpbiwgdGFza1Np
emUpID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7CisgICAgICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZp
ZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJD
cmVhdGVPYmplY3RTdG9yZSIpKSwgaW5mbykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKICAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2lu
Z1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGluZm8pOwog
CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNr
SWRlbnRpZmllciwgZXJyb3IsIGluZm8pKTsKQEAgLTkwMiw3ICs4MjQsNiBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0
b3JlIik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIs
IGVycm9yLmlzTnVsbCgpKTsKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fZGF0
YWJhc2VJbmZvLT5hZGRFeGlzdGluZ09iamVjdFN0b3JlKGluZm8pOwogCkBAIC05MTQsMTcgKzgz
NSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVP
YmplY3RTdG9yZSIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNh
Y3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTmFtZSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFl
cnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZU9iamVj
dFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU5hbWUsIFdURk1v
dmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVs
ZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtOTY1LDI4ICs4NzUsMTUgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cmVuYW1lT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFp
bikgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlIik7CiAKLSAgICBhdXRvIHRh
c2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMo
KTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicmVuYW1lT2JqZWN0
U3RvcmUiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBuZXdOYW1lLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9
IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJv
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPnJlbmFt
ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwotICAg
IH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVy
UXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVv
dGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIElEQkVycm9yIGVycm9yID0gcXVvdGFFcnJvcjsKKyAgICBJREJFcnJv
ciBlcnJvcjsKICAgICBhdXRvKiBpbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGlu
Z09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgaWYgKCFpbmZvKQogICAg
ICAgICBlcnJvciA9IElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQXR0ZW1wdCB0byByZW5hbWUg
bm9uLWV4aXN0YW50IG9iamVjdCBzdG9yZSJfcyB9OwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNl
VGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9i
amVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIGVycm9yKSk7CiB9CiAKQEAgLTk5NSw4ICs4
OTIsMTAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3Jl
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY28KICAgICBBU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVJlbmFtZU9iamVjdFN0b3JlIik7CiAKLSAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAg
ICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKKyAgICAv
LyBRdW90YSBjaGVjay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9u
Q29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RT
cGFjZShtX29yaWdpbiwgdGFza1NpemUpID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
OjpEZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0
b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVv
dGFFcnJvck1lc3NhZ2VOYW1lKCJSZW5hbWVPYmplY3RTdG9yZSIpKSwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBuZXdOYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMTEsNyAr
OTEwLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0
b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2so
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlzTnVs
bCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIApAQCAtMTAyMywxNyArOTIxLDYgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiB0cmFuc2FjdGkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUiKTsKIAot
ICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRy
YW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxs
KCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5jbGVhck9iamVjdFN0b3JlQWZldFF1
b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgV1RGTW92ZShjYWxs
YmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVj
dFN0b3JlQWZldFF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgRXJyb3JDYWxsYmFjayBjYWxs
YmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVy
cm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTEwNjQsMzMgKzk1MSwyMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVh
dGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgYwogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlx
dWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZh
dWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGluZm8pOwotICAgIHJlcXVlc3RT
cGFjZSh0cmFuc2FjdGlvbiwgdGFza1NpemUsICJjcmVhdGVJbmRleCIsIFt0aGlzLCB0YXNrU2l6
ZSwgJnRyYW5zYWN0aW9uLCBpbmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRv
IGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3Iu
Y29kZSgpICE9IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RG
TW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRo
aXMtPmNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgaW5m
bywgV1RGTW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUs
IFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJJbmRl
eEluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBxdW90
YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJl
RXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6
ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvLCBxdW90YUVycm9yKSk7CisgICAgcG9zdERh
dGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRl
bnRpZmllcigpLCBpbmZvKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1D
cmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mIGlu
Zm8sIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4
SW5mbyYgaW5mbykKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5k
ZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4Iik7CiAK
LSAgICBpZiAoIXF1b3RhRXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgcXVvdGFFcnJvciwgaW5m
bykpOworICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0
aW1hdGVTaXplKGluZm8pOworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1fb3JpZ2lu
LCB0YXNrU2l6ZSkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAg
ICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRp
ZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUo
IkNyZWF0ZUluZGV4IikpLCBpbmZvKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEx
MTIsOCArOTg3LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUlu
ZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1DcmVhdGVJbmRleCIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2so
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7Ci0KICAgICBpZiAoZXJyb3IuaXNO
dWxsKCkpIHsKICAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKICAgICAgICAgYXV0byog
b2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0
b3JlKGluZm8ub2JqZWN0U3RvcmVJZGVudGlmaWVyKCkpOwpAQCAtMTEyOSwxNyArMTAwMiw2IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleCIp
OwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlz
LCAmdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhOYW1lLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBp
ZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9y
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+ZGVsZXRl
SW5kZXhBZnRlclF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
aW5kZXhOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQotewogICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShj
YWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE4
OSwyMyArMTA1MSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleChVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdQogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6cmVuYW1lSW5kZXgiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVy
YXRpb25Db3N0ICsgbmV3TmFtZS5zaXplSW5CeXRlcygpOwotICAgIHJlcXVlc3RTcGFjZSh0cmFu
c2FjdGlvbiwgdGFza1NpemUsICJyZW5hbWVJbmRleCIsIFt0aGlzLCB0YXNrU2l6ZSwgJnRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0gICAg
ICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVk
RXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5yZW5hbWVJbmRleEFmdGVyUXVv
dGFDaGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5k
ZXhJZGVudGlmaWVyLCBuZXdOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwotICAgIH0p
OwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVj
ayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNv
bnN0IElEQkVycm9yJiBxdW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBz
dG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2Fs
bGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBxdW90YUVy
cm9yOworICAgIElEQkVycm9yIGVycm9yOwogICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1f
ZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50
aWZpZXIpOwogICAgIGlmICghb2JqZWN0U3RvcmVJbmZvKQogICAgICAgICBlcnJvciA9IElEQkVy
cm9yIHsgVW5rbm93bkVycm9yLCAiQXR0ZW1wdCB0byByZW5hbWUgaW5kZXggaW4gbm9uLWV4aXN0
YW50IG9iamVjdCBzdG9yZSJfcyB9OwpAQCAtMTIxNCw3ICsxMDY0LDYgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUs
IFVuaXF1ZUlEQkQKICAgICBpZiAoIWluZGV4SW5mbykKICAgICAgICAgZXJyb3IgPSBJREJFcnJv
ciB7IFVua25vd25FcnJvciwgIkF0dGVtcHQgdG8gcmVuYW1lIG5vbi1leGlzdGFudCBpbmRleCJf
cyB9OwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7
CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlv
bi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRp
ZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKIH0KIApAQCAtMTIyMyw4ICsxMDcyLDEwIEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElECiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9H
KEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCIp
OwogCi0gICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKKyAgICAvLyBRdW90YSBj
aGVjay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5l
d05hbWUuc2l6ZUluQnl0ZXMoKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29y
aWdpbiwgdGFza1NpemUpID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7
CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lk
ZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VO
YW1lKCJSZW5hbWVJbmRleCIpKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZp
ZXIsIG5ld05hbWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTIzOSw3ICsxMDkw
LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1SZW5hbWVJbmRleCIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJ
ZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CiAg
ICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhp
c3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgICAgICBBU1NFUlQo
b2JqZWN0U3RvcmVJbmZvKTsKQEAgLTEyNTMsNTIgKzExMDMsMzkgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1
ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVl
LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBLZXlE
YXRhQ2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZChj
b25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURh
dGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0
ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cHV0T3JBZGQiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3Jp
dGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGtleURhdGEpICsgZXN0aW1hdGVTaXplKHZh
bHVlKTsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOwotICAgIGF1dG8qIG9iamVjdFN0b3Jl
ID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKHJlcXVlc3REYXRh
Lm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKLSAgICBpZiAob2JqZWN0U3RvcmUpCi0gICAgICAg
IHRhc2tTaXplICs9IG9iamVjdFN0b3JlLT5pbmRleE5hbWVzKCkuc2l6ZSgpICogdGFza1NpemU7
Ci0KLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicHV0T3JBZGQiLCBb
dGhpcywgdGFza1NpemUsIHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgb3ZlcndyaXRlTW9kZV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0g
ICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2Vl
ZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPnB1dE9yQWRkQWZ0
ZXJRdW90YUNoZWNrKHRhc2tTaXplLCByZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3
cml0ZU1vZGUsIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tT
aXplLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEm
IGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrLCBjb25z
dCBJREJFcnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3Rv
cmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxi
YWNrSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2Fs
bGJhY2tJRCwgdGFza1NpemUpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCwgY2FsbGJh
Y2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9i
amVjdFN0b3JlSWRlbnRpZmllcigpLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgcXVv
dGFFcnJvcikpOworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJRCwgcmVx
dWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3Jl
SWRlbnRpZmllcigpLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSkpOwogfQogCi12b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlE
YXRhLCBjb25zdCBJREJWYWx1ZSYgb3JpZ2luYWxSZWNvcmRWYWx1ZSwgSW5kZXhlZERCOjpPYmpl
Y3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgY29uc3QgSURCRXJyb3ImIHF1b3Rh
RXJyb3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJL
ZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgb3JpZ2luYWxSZWNvcmRWYWx1ZSwgSW5k
ZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSkKIHsKICAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkIik7CiAKLSAgICBBU1NFUlQobV9iYWNraW5nU3Rv
cmUpOwotICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOwotCiAgICAgSURCS2V5RGF0
YSB1c2VkS2V5OwogICAgIElEQkVycm9yIGVycm9yOwogCi0gICAgaWYgKCFxdW90YUVycm9yLmlz
TnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxs
YmFja0lkZW50aWZpZXIsIHF1b3RhRXJyb3IsIHVzZWRLZXkpKTsKKyAgICAvLyBRdW90YSBjaGVj
ay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGlt
YXRlU2l6ZShrZXlEYXRhKSArIGVzdGltYXRlU2l6ZShvcmlnaW5hbFJlY29yZFZhbHVlKTsKKyAg
ICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOworICAgIGF1dG8qIG9iamVjdFN0b3JlID0gbV9kYXRh
YmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmll
cik7CisgICAgaWYgKG9iamVjdFN0b3JlKQorICAgICAgICB0YXNrU2l6ZSArPSBvYmplY3RTdG9y
ZS0+aW5kZXhOYW1lcygpLnNpemUoKSAqIHRhc2tTaXplOworICAgIGlmIChtX3NlcnZlci0+cmVx
dWVzdFNwYWNlKG1fb3JpZ2luLCB0YXNrU2l6ZSkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVj
aXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQs
IGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVy
cm9yTWVzc2FnZU5hbWUoIlB1dE9yQWRkIikpLCB1c2VkS2V5KSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOworICAgIEFTU0VSVChvYmplY3RT
dG9yZUlkZW50aWZpZXIpOwogICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoSW5kZXhlZERCLCAiJXAgLSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVB1dE9yQWRkOiBtX2JhY2tpbmdTdG9yZSBpcyBudWxsIiwgdGhpcyk7CiAgICAgICAgIGVycm9y
ID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFsaWQg
Zm9yIGNhbGwgdG8gcHV0IG9yIGFkZCJfcyk7CkBAIC0xMzcyLDI2ICsxMjA5LDE0IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElECiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0co
SW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQi
KTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IuaXNOdWxsKCkpOwogICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlm
aWVyLCBlcnJvciwgcmVzdWx0S2V5KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0
UmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldFJlY29yZERhdGEmIGdldFJl
Y29yZERhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3Qg
SURCR2V0UmVjb3JkRGF0YSYgZ2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJh
Y2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAi
KG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQiKTsKIAotICAgIHdhaXRGb3JSZXF1
ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGdldFJl
Y29yZERhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0
YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxi
YWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIHRoaXMtPmdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgZ2V0
UmVjb3JkRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiBnZXRSZWNvcmREYXRhLCBH
ZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0g
c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNh
bGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MDIsMjIgKzEyMjcsMTEgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVl
c3REYXRhJiByZXF1ZXN0RGEKICAgICAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCwgY2Fs
bGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRh
Lm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBnZXRSZWNvcmREYXRhLmtleVJhbmdlRGF0YSwgZ2V0
UmVjb3JkRGF0YS50eXBlKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJl
Y29yZHMoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElE
QlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdl
dEFsbFJlY29yZHNEYXRhLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1
ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBH
ZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRB
bGxSZWNvcmRzIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2Fj
dGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFl
cnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsg
fSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Z2V0QWxs
UmVjb3Jkc0FmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jkc0RhdGEsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
Z2V0QWxsUmVjb3Jkc0FmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSwgR2V0
QWxsUmVzdWx0c0NhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQg
PSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICgh
Y2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQzMSw3ICsxMjQ1LDYgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0IElEQlIKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUdldFJlY29yZCIpOwogCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsK
LQogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7CiAgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tp
bmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBrZXlSYW5nZURhdGEsIHR5cGUsIHJlc3VsdCk7CiAKQEAgLTE0NDQsNyArMTI1Nyw2
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCIpOwogCiAgICAgQVNTRVJUKG1f
YmFja2luZ1N0b3JlKTsKLQogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7CiAgICAgSURCRXJyb3Ig
ZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0SW5kZXhSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgcmVjb3JkVHlwZSwg
cmFuZ2UsIHJlc3VsdCk7CiAKQEAgLTE0NjMsOSArMTI3NSw4IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEFsbFJlY29yZHMiKTsKLQorICAg
IAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KICAgICBJREJHZXRBbGxSZXN1bHQgcmVz
dWx0OwogICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldEFsbFJlY29yZHMo
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBnZXRBbGxSZWNvcmRzRGF0YSwgcmVzdWx0KTsKIApAQCAt
MTQ4MCwyMiArMTI5MSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0
QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbgogICAgIHBlcmZvcm1H
ZXRBbGxSZXN1bHRzQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0
YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgQ291bnRDYWxsYmFjayBjYWxsYmFjaykK
K3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldENvdW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgQ291bnRDYWxsYmFjayBj
YWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmdldENvdW50Iik7CiAKLSAgICB3YWl0Rm9y
UmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBy
YW5nZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2so
V1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgdGhpcy0+Z2V0Q291bnRBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIHJhbmdlLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmdldENvdW50QWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0
YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgQ291bnRDYWxsYmFjayBjYWxsYmFjaykK
LXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdU
Rk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsK
QEAgLTE1MjQsMjIgKzEzMjQsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bUdldENvdW50KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSUQKICAgICBwZXJm
b3JtQ291bnRDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBjb3VudCk7CiB9CiAK
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgRXJyb3JDYWxsYmFjayBjYWxs
YmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZChjb25zdCBJREJSZXF1
ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRh
LCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVj
b3JkIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwg
W3RoaXMsIHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxs
KCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5kZWxldGVSZWNvcmRBZnRlclF1b3Rh
Q2hlY2socmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAg
IH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmRBZnRlclF1b3Rh
Q2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmIGtleVJhbmdlRGF0YSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50
NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJh
Y2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NTIsNyAr
MTM0MSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQodWlu
dDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJCiAgICAgTE9HKEluZGV4ZWREQiwgIihk
YikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQiKTsKIAogICAgIElEQkVy
cm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJhbmdlKHRyYW5zYWN0aW9uSWRlbnRp
Zmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCByYW5nZSk7Ci0KICAgICBwb3N0RGF0YWJhc2VU
YXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1EZWxldGVSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpKTsKIH0K
IApAQCAtMTU2NCwyMiArMTM1MiwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29ucwogICAgIHBl
cmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOwogfQogCi12b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQkN1cnNvckluZm8mIGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
dERhdGEsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxi
YWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvciIpOwogCi0gICAgd2FpdEZvclJl
cXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgaW5m
bywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RG
TW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgdGhpcy0+b3BlbkN1cnNvckFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgaW5mbywgV1RG
TW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpv
cGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0
YSwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2sp
Ci17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihX
VEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47
CkBAIC0xNjA1LDIyICsxMzgyLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1PcGVuQ3Vyc29yKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBwZXJm
b3JtR2V0UmVzdWx0Q2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvcihVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVl
c3REYXRhLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSwgR2V0UmVzdWx0Q2FsbGJh
Y2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yKGNvbnN0
IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEm
IGRhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6
aXRlcmF0ZUN1cnNvciIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJh
bnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgZGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051
bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+aXRlcmF0ZUN1cnNvckFm
dGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgZGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAg
IH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yQWZ0ZXJRdW90
YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSXRlcmF0
ZUN1cnNvckRhdGEmIGRhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxs
YmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4NCwx
NyArMTQ1MCw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uKFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAKICAgICBBU1NFUlQodHJhbnNh
Y3Rpb24uZGF0YWJhc2VDb25uZWN0aW9uKCkuZGF0YWJhc2UoKSA9PSB0aGlzKTsKIAotICAgIHdh
aXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0
aW9uLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUg
ewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhX
VEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
dGhpcy0+Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIFdURk1v
dmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y29t
bWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3Qg
Y2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7
CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xNzE1LDkgKzE0NzAs
NiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbkFmdGVyUXVvdGFD
aGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikKIHsKLSAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uIC0gJXMiLCB0cmFuc2FjdGlvbklk
ZW50aWZpZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCiAgICAgSURCRXJyb3Ig
ZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Y29tbWl0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVu
dGlmaWVyKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiB9CkBA
IC0xNzQ4LDI0ICsxNTAwLDEzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1D
b21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsCiAgICAgdHJhbnNh
Y3Rpb25Db21wbGV0ZWQobV9maW5pc2hpbmdUcmFuc2FjdGlvbnMudGFrZSh0cmFuc2FjdGlvbklk
ZW50aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlv
bihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2FpdEZvclBlbmRp
bmdUYXNrcyB3YWl0Rm9yUGVuZGluZ1Rhc2tzLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQordm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVl
SURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5p
ZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgQVNTRVJU
KHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigpLmRhdGFiYXNlKCkgPT0gdGhpcyk7CiAK
LSAgICBpZiAod2FpdEZvclBlbmRpbmdUYXNrcyA9PSBXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpZZXMp
IHsKLSAgICAgICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0
aGlzLCAmdHJhbnNhY3Rpb24sIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBl
cnJvcikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMtPmFib3J0VHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb24sIFdhaXRGb3JQZW5kaW5nVGFza3M6Ok5vLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgdWludDY0X3QgY2Fs
bGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAg
ICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5o
CmluZGV4IGVjM2ZjMGM3M2VhMzBlMjRlN2EwY2VlNTg4OWYzOTYxZjBjYzRjMjcuLjhlODJhODE0
MDBjOWE3MTY0NDFhMDY5OTdjZWRlM2YwMzI4YzViNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5o
CkBAIC00NCw2ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IENsaWVu
dE9yaWdpbjsKIGNsYXNzIElEQkVycm9yOwogY2xhc3MgSURCR2V0QWxsUmVzdWx0Owogc3RydWN0
IElEQkdldFJlY29yZERhdGE7CkBAIC04OSwxNyArOTAsMTUgQEAgcHVibGljOgogICAgIHZvaWQg
Y3JlYXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQkluZGV4
SW5mbyYsIEVycm9yQ2FsbGJhY2spOwogICAgIHZvaWQgZGVsZXRlSW5kZXgoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBpbmRleE5hbWUsIEVycm9yQ2FsbGJhY2spOwogICAgIHZvaWQgcmVuYW1lSW5kZXgo
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVy
cm9yQ2FsbGJhY2spOwotICAgIHZvaWQgcHV0T3JBZGQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElE
QlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxs
YmFjayk7Ci0gICAgdm9pZCBnZXRSZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYs
IGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYsIEdldFJlc3Vs
dENhbGxiYWNrKTsKLSAgICB2b2lkIGdldEFsbFJlY29yZHMoVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0Rh
dGEmLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0Q291bnQoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiwgQ291bnRDYWxsYmFjayk7Ci0gICAgdm9pZCBkZWxldGVSZWNvcmQoVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBvcGVuQ3Vyc29yKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElE
QkN1cnNvckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBpdGVyYXRlQ3Vyc29y
KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNv
bnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2spOworICAgIHZvaWQg
cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3Qg
SURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNh
bGxiYWNrKTsKKyAgICB2b2lkIGdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0
IElEQkdldFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CisgICAgdm9pZCBnZXRBbGxS
ZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEm
LCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOworICAgIHZvaWQgZ2V0Q291bnQoY29uc3QgSURCUmVx
dWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBDb3VudENhbGxiYWNrKTsKKyAgICB2
b2lkIGRlbGV0ZVJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYsIEVycm9yQ2FsbGJhY2spOworICAgIHZvaWQgb3BlbkN1cnNvcihjb25zdCBJREJSZXF1
ZXN0RGF0YSYsIGNvbnN0IElEQkN1cnNvckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7CisgICAg
dm9pZCBpdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCSXRlcmF0
ZUN1cnNvckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CiAgICAgdm9pZCBjb21taXRUcmFuc2Fj
dGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgRXJyb3JDYWxsYmFjayk7Ci0KLSAg
ICBlbnVtIGNsYXNzIFdhaXRGb3JQZW5kaW5nVGFza3MgeyBObywgWWVzIH07Ci0gICAgdm9pZCBh
Ym9ydFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBXYWl0Rm9yUGVu
ZGluZ1Rhc2tzLCBFcnJvckNhbGxiYWNrKTsKKyAgICB2b2lkIGFib3J0VHJhbnNhY3Rpb24oVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwogCiAgICAgdm9pZCBk
aWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9u
JiwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwog
ICAgIHZvaWQgdHJhbnNhY3Rpb25EZXN0cm95ZWQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYpOwpAQCAtMTM5LDM3ICsxMzgsMjAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2NoZWR1bGVT
aHV0ZG93bkZvckNsb3NlKCk7CiAKLSAgICB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90
YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwg
Y29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgRXJyb3JDYWxsYmFjaywgY29uc3QgSURCRXJyb3Im
KTsKLSAgICB2b2lkIHJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRh
c2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2ssIGNvbnN0
IElEQkVycm9yJik7Ci0gICAgdm9pZCBjcmVhdGVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRf
dCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQkluZGV4
SW5mbyYsIEVycm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCByZW5hbWVJ
bmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5k
ZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2ssIGNvbnN0
IElEQkVycm9yJik7Ci0gICAgdm9pZCBwdXRPckFkZEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0
YXNrU2l6ZSwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3Qg
SURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNh
bGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgZGVsZXRlUmVjb3JkQWZ0ZXJRdW90
YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXJy
b3JDYWxsYmFjayk7Ci0KLSAgICB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNr
KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3Jl
TmFtZSwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBjbGVhck9iamVjdFN0b3JlQWZldFF1b3Rh
Q2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBkZWxldGVJbmRleEFmdGVyUXVv
dGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmLCBFcnJvckNhbGxiYWNrKTsKLSAgICB2b2lkIGdl
dFJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdl
dFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRBbGxSZWNvcmRz
QWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0QWxsUmVj
b3Jkc0RhdGEmLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0Q291bnRBZnRl
clF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
LCBDb3VudENhbGxiYWNrKTsKLSAgICB2b2lkIG9wZW5DdXJzb3JBZnRlclF1b3RhQ2hlY2soY29u
c3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJDdXJzb3JJbmZvJiwgR2V0UmVzdWx0Q2FsbGJh
Y2spOwotICAgIHZvaWQgaXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1
ZXN0RGF0YSYsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwgR2V0UmVzdWx0Q2FsbGJhY2sp
OwotICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwotCiAgICAgLy8gRGF0YWJhc2UgdGhy
ZWFkIG9wZXJhdGlvbnMKICAgICB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRh
YmFzZUlkZW50aWZpZXImKTsKLSAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJiwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpOworICAgIHZvaWQgb3Bl
bkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKICAgICB2b2lkIHBl
cmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lk
IHBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHZv
aWQgYmVnaW5UcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5m
byYpOwotICAgIHZvaWQgcGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIGNvbnN0IElEQkVycm9yJik7CisgICAg
dm9pZCBwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29u
c3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBwZXJmb3JtRGVsZXRlT2JqZWN0U3Rv
cmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
KTsKICAgICB2b2lkIHBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFt
ZSwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIHBlcmZvcm1DbGVhck9iamVjdFN0b3JlKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7Ci0g
ICAgdm9pZCBwZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3Qg
SURCSW5kZXhJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIHBlcmZvcm1DcmVhdGVJ
bmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mKTsKICAgICB2
b2lkIHBlcmZvcm1EZWxldGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllcik7CiAgICAgdm9p
ZCBwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHBlcmZvcm1QdXRPckFkZCh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNv
bnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVP
dmVyd3JpdGVNb2RlLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgcGVyZm9ybVB1dE9yQWRk
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
Y29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9y
ZU92ZXJ3cml0ZU1vZGUpOwogICAgIHZvaWQgcGVyZm9ybUdldFJlY29yZCh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJh
bmdlRGF0YSYsIElEQkdldFJlY29yZERhdGFUeXBlKTsKICAgICB2b2lkIHBlcmZvcm1HZXRBbGxS
ZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRh
Jik7CiAgICAgdm9pZCBwZXJmb3JtR2V0SW5kZXhSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZp
ZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsK
QEAgLTE4Niw3ICsxNjgsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gTWFpbiB0aHJlYWQgY2FsbGJh
Y2tzCiAgICAgdm9pZCBkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNp
b24pOwotICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8m
LCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRp
ZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3Im
KTsKICAgICB2b2lkIGRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7
CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
cik7CiAgICAgdm9pZCBkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsKQEAgLTI0NSwxMSArMjI3LDYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIG1heWJlRmluaXNoSGFyZENsb3NlKCk7CiAgICAgYm9vbCBpc0RvbmVXaXRo
SGFyZENsb3NlKCk7CiAKLSAgICB2b2lkIHJlcXVlc3RTcGFjZShVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJik7Ci0gICAgdm9pZCB3YWl0Rm9y
UmVxdWVzdFNwYWNlQ29tcGxldGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJik7Ci0gICAgdm9pZCBzdGFydFNwYWNl
SW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAg
ICB2b2lkIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIGJvb2wg
aXNUYXNrU3VjY2Vzc2Z1bCk7Ci0KICAgICB2b2lkIGNsZWFyVHJhbnNhY3Rpb25zT25Db25uZWN0
aW9uKFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYpOwogCiAgICAgc3RhdGljIHVpbnQ2NF90
IGdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7CkBAIC0zMDUsNyArMjgyLDcgQEAg
cHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8SURCUmVzb3VyY2VJZGVudGlmaWVyPiBtX2N1cnNvclBy
ZWZldGNoZXM7CiAKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCB1aW50NjRfdD4gbV9wZW5kaW5nU3Bh
Y2VJbmNyZWFzZVRhc2tzOworICAgIENsaWVudE9yaWdpbiBtX29yaWdpbjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0
aW9uLmNwcAppbmRleCBmZTkxMGZhZjk4NDlkYzJiMDQ3ZWJhOTdhZTU2NjU3OWZkMTNkMjEwLi44
MDA2MDY5ODgzNDRmMWIzOWI4YjlmYmMxOTk5ODIxZDgyNjIxYjg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6YWJvcnRUcmFuc2FjdGlvbldpdGhvdXRDYWxsYmFj
ayhVbmlxdWVJREJEYXRhYgogICAgIGlmICghbV9kYXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIG1fZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIFVuaXF1
ZUlEQkRhdGFiYXNlOjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpObywgW3RoaXMsIHByb3RlY3RlZFRo
aXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7CisgICAgbV9kYXRh
YmFzZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHByb3RlY3RlZFRoaXMs
IHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7CiAgICAgICAgIEFTU0VS
VChtX3RyYW5zYWN0aW9uTWFwLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwogICAg
ICAgICBtX3RyYW5zYWN0aW9uTWFwLnJlbW92ZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAg
IH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCmluZGV4
IGE4ZDJiZGM3NDBjODk3MWE1YTdjMDRlNzZjMDMyOWI0NzZhZGM0MjYuLjc2ZWRkYzQ1YjA3NmJl
M2U2OTcyODQ1ZDExZTIxNTBiNmYwN2Q4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbi5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uOjphYm9ydCgpCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VD
b25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAKLSAgICBkYXRh
YmFzZS0+YWJvcnRUcmFuc2FjdGlvbigqdGhpcywgVW5pcXVlSURCRGF0YWJhc2U6OldhaXRGb3JQ
ZW5kaW5nVGFza3M6OlllcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShh
dXRvJiBlcnJvcikgeworICAgIGRhdGFiYXNlLT5hYm9ydFRyYW5zYWN0aW9uKCp0aGlzLCBbdGhp
cywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKGF1dG8mIGVycm9yKSB7CiAgICAgICAg
IExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCAoY2Fs
bGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0yODYsNyArMjg2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRP
ckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGMKICAgICBhdXRvIGRhdGFi
YXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFi
YXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+cHV0T3JBZGQoKnRoaXMsIHJlcXVlc3REYXRhLCBr
ZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIGtl
eSkgeworICAgIGRhdGFiYXNlLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUs
IG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVx
dWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsKICAgICAgICAg
TE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkIChj
YWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTMwNyw3ICszMDcsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Omdl
dFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAgYXV0byBkYXRh
YmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRh
YmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmdldFJlY29yZCgqdGhpcywgcmVxdWVzdERhdGEs
IGdldFJlY29yZERhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVx
dWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgeworICAg
IGRhdGFiYXNlLT5nZXRSZWNvcmQocmVxdWVzdERhdGEsIGdldFJlY29yZERhdGEsIFt0aGlzLCB3
ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBj
b25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkIChjYWxsYmFjaykiKTsKICAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMyOCw3ICszMjgsNyBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMoY29uc3Qg
SURCUmVxdWVzdERhdGEmIHJlcXVlc3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNl
Q29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAg
IGRhdGFiYXNlLT5nZXRBbGxSZWNvcmRzKCp0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jk
c0RhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFd
KGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgeworICAgIGRhdGFi
YXNlLT5nZXRBbGxSZWNvcmRzKHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3Is
IGNvbnN0IElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIs
ICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNvcmRzIChjYWxsYmFjayki
KTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM0OSw3
ICszNDksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50KGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgYwogICAgIGF1dG8gZGF0YWJhc2UgPSBt
X2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwog
ICAgIAotICAgIGRhdGFiYXNlLT5nZXRDb3VudCgqdGhpcywgcmVxdWVzdERhdGEsIGtleVJhbmdl
RGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0o
YXV0byYgZXJyb3IsIHVpbnQ2NF90IGNvdW50KSB7CisgICAgZGF0YWJhc2UtPmdldENvdW50KHJl
cXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCB1aW50NjRfdCBjb3VudCkgewogICAgICAg
ICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQg
KGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMzcwLDcgKzM3MCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
ZGVsZXRlUmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0CiAgICAgYXV0byBk
YXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChk
YXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmRlbGV0ZVJlY29yZCgqdGhpcywgcmVxdWVz
dERhdGEsIGtleVJhbmdlRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMp
LCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+ZGVsZXRlUmVjb3Jk
KHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRleGVk
REIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmQgKGNhbGxiYWNr
KSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzkx
LDcgKzM5MSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNv
cihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAgYXV0byBkYXRhYmFzZSA9
IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7
CiAgICAgCi0gICAgZGF0YWJhc2UtPm9wZW5DdXJzb3IoKnRoaXMsIHJlcXVlc3REYXRhLCBpbmZv
LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRv
JiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRhYmFzZS0+b3Bl
bkN1cnNvcihyZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVz
dWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpvcGVuQ3Vyc29yIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTQxMiw3ICs0MTIsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVl
c3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2Uo
KTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5pdGVyYXRlQ3Vy
c29yKCp0aGlzLCByZXF1ZXN0RGF0YSwgZGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYg
cmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPml0ZXJhdGVDdXJzb3IocmVxdWVzdERhdGEsIGRhdGEs
IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8m
IGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvciAoY2FsbGJh
Y2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNz
SURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
blByb2Nlc3NJREJTZXJ2ZXIuY3BwCmluZGV4IDkxMTFmNTk3OGUzYjgwNjE4NTVjMjBmNWFmYWE1
YjY1NWRjY2VhMjEuLjVlYzM3OTcxMTUyOThjYzkzMTEzMzUwODcxZjE3ZTFmMDI4Mzc1ZmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nl
c3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC02MSwzNiArNjEsMzcgQEAgUmVmPEluUHJv
Y2Vzc0lEQlNlcnZlcj4gSW5Qcm9jZXNzSURCU2VydmVyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb24KIAogSW5Qcm9jZXNzSURCU2VydmVyOjp+SW5Qcm9jZXNzSURCU2VydmVy
KCkgPSBkZWZhdWx0OwogCi1TdG9yYWdlUXVvdGFNYW5hZ2VyKiBJblByb2Nlc3NJREJTZXJ2ZXI6
OnF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK1JlZlB0cjxTdG9yYWdl
UXVvdGFNYW5hZ2VyPiBJblByb2Nlc3NJREJTZXJ2ZXI6OnF1b3RhTWFuYWdlcihjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbikKIHsKICAgICByZXR1cm4gbV9xdW90YU1hbmFnZXJzLmVuc3VyZShv
cmlnaW4sIFtdIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U3RvcmFnZVF1b3RhTWFuYWdl
cj4oU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCksIFtdKHVpbnQ2NF90IHF1b3Rh
LCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2Fs
bGJhY2spIHsKKyAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZShTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSwgW10geworICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIH0sIFtdKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2Us
IHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKICAgICAgICAgICAgIGNh
bGxiYWNrKHF1b3RhICsgY3VycmVudFNwYWNlICsgc3BhY2VJbmNyZWFzZSk7CiAgICAgICAgIH0p
OwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQotc3RhdGljIGlubGluZSBJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFNYW5hZ2VyR2V0dGVyIHN0b3JhZ2VRdW90YU1hbmFnZXJH
ZXR0ZXIoSW5Qcm9jZXNzSURCU2VydmVyJiBzZXJ2ZXIpCi17Ci0gICAgcmV0dXJuIFt3ZWFrU2Vy
dmVyID0gbWFrZVdlYWtQdHIoc2VydmVyKV0oUEFMOjpTZXNzaW9uSUQsIGNvbnN0IGF1dG8mIG9y
aWdpbikgewotICAgICAgICByZXR1cm4gd2Vha1NlcnZlciA/IHdlYWtTZXJ2ZXItPnF1b3RhTWFu
YWdlcihvcmlnaW4pIDogbnVsbHB0cjsKLSAgICB9OworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsK
IH0KIAogSW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklEKQotICAgIDogbV9zZXJ2ZXIoSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0
ZShzZXNzaW9uSUQsIHN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0ZXIoKnRoaXMpKSkKIHsKICAgICBy
ZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlciA9IElE
QkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGUoKnRoaXMpOwogICAgIG1fY29u
bmVjdGlvblRvQ2xpZW50ID0gSURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQ6OmNyZWF0
ZSgqdGhpcyk7CisgICAgbV9zZXJ2ZXIgPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNl
c3Npb25JRCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQpIG11dGFibGUgeworICAg
ICAgICBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlciA9IHdl
YWtUaGlzID8gcXVvdGFNYW5hZ2VyKG9yaWdpbikgOiBudWxscHRyOworICAgICAgICByZXR1cm4g
c3RvcmFnZVF1b3RhTWFuYWdlciA/IHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9u
QmFja2dyb3VuZFRocmVhZChzcGFjZVJlcXVlc3RlZCkgOiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6RGVueTsKKyAgICB9KTsKIH0KIAogSW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nl
c3NJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlRGlyZWN0b3J5UGF0aCkKLSAgICA6IG1fc2VydmVyKElEQlNlcnZlcjo6SURCU2VydmVyOjpj
cmVhdGUoc2Vzc2lvbklELCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIHN0b3JhZ2VRdW90YU1hbmFn
ZXJHZXR0ZXIoKnRoaXMpKSkKIHsKICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKICAg
ICBtX2Nvbm5lY3Rpb25Ub1NlcnZlciA9IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVy
OjpjcmVhdGUoKnRoaXMpOwogICAgIG1fY29ubmVjdGlvblRvQ2xpZW50ID0gSURCU2VydmVyOjpJ
REJDb25uZWN0aW9uVG9DbGllbnQ6OmNyZWF0ZSgqdGhpcyk7CisgICAgbV9zZXJ2ZXIgPSBJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgZGF0YWJhc2VEaXJlY3RvcnlQYXRo
LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKGNvbnN0IENsaWVudE9yaWdp
biYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCkgbXV0YWJsZSB7CisgICAgICAgIFJl
ZlB0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBzdG9yYWdlUXVvdGFNYW5hZ2VyID0gd2Vha1RoaXMg
PyBxdW90YU1hbmFnZXIob3JpZ2luKSA6IG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdG9yYWdl
UXVvdGFNYW5hZ2VyID8gc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlT25CYWNrZ3Jv
dW5kVGhyZWFkKHNwYWNlUmVxdWVzdGVkKSA6IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
OjpEZW55OworICAgIH0pOwogfQogCiBJREJDb25uZWN0aW9uSWRlbnRpZmllciBJblByb2Nlc3NJ
REJTZXJ2ZXI6OmlkZW50aWZpZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCmluZGV4
IGM3YjUzMjFjYTM2MWM3NDFlNTJkNDVlYzE4YTgzMThmYWQwODI5YzAuLjBkZDk3NDQyMzA5Yzhl
NzRhNjA3Njk4MWJkOGViOTBmYTY5NGQ2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKQEAg
LTYzLDkgKzYzLDggQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgSURCQ2xpZW50OjpJ
REJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb25Ub1NlcnZlcigpIGNvbnN0OwogICAgIElE
QlNlcnZlcjo6SURCQ29ubmVjdGlvblRvQ2xpZW50JiBjb25uZWN0aW9uVG9DbGllbnQoKSBjb25z
dDsKLSAgICBJREJTZXJ2ZXI6OklEQlNlcnZlciYgc2VydmVyKCkgeyByZXR1cm4gbV9zZXJ2ZXIu
Z2V0KCk7IH0KLQotICAgIElEQlNlcnZlcjo6SURCU2VydmVyJiBpZGJTZXJ2ZXIoKSB7IHJldHVy
biBtX3NlcnZlci5nZXQoKTsgfQorICAgIElEQlNlcnZlcjo6SURCU2VydmVyJiBzZXJ2ZXIoKSB7
IHJldHVybiAqbV9zZXJ2ZXI7IH0KKyAgICBJREJTZXJ2ZXI6OklEQlNlcnZlciYgaWRiU2VydmVy
KCkgeyByZXR1cm4gKm1fc2VydmVyOyB9CiAKICAgICAvLyBJREJDb25uZWN0aW9uVG9TZXJ2ZXIK
ICAgICB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IElEQlJlcXVlc3REYXRhJikgZmluYWw7CkBA
IC0xMjUsMTcgKzEyNCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKSBvdmVycmlkZSB7IFJl
ZkNvdW50ZWQ8SW5Qcm9jZXNzSURCU2VydmVyPjo6cmVmKCk7IH0KICAgICB2b2lkIGRlcmVmKCkg
b3ZlcnJpZGUgeyBSZWZDb3VudGVkPEluUHJvY2Vzc0lEQlNlcnZlcj46OmRlcmVmKCk7IH0KIAot
ICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIHF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4m
KTsKKyAgICBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyKGNvbnN0IENs
aWVudE9yaWdpbiYpOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEluUHJvY2Vzc0lEQlNlcnZl
cihQQUw6OlNlc3Npb25JRCk7CiAgICAgSW5Qcm9jZXNzSURCU2VydmVyKFBBTDo6U2Vzc2lvbklE
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CiAKLSAgICBSZWY8SURCU2Vy
dmVyOjpJREJTZXJ2ZXI+IG1fc2VydmVyOworICAgIFJlZlB0cjxJREJTZXJ2ZXI6OklEQlNlcnZl
cj4gbV9zZXJ2ZXI7CiAgICAgUmVmUHRyPElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVy
PiBtX2Nvbm5lY3Rpb25Ub1NlcnZlcjsKICAgICBSZWZQdHI8SURCU2VydmVyOjpJREJDb25uZWN0
aW9uVG9DbGllbnQ+IG1fY29ubmVjdGlvblRvQ2xpZW50OwogCi0gICAgSGFzaE1hcDxDbGllbnRP
cmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9xdW90YU1hbmFn
ZXJzOworICAgIEhhc2hNYXA8Q2xpZW50T3JpZ2luLCBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdl
cj4+IG1fcXVvdGFNYW5hZ2VyczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAw
ZjQ4Y2YwZjczOGU3MzA3MzNjNmM0MzNiMDg5ZjBjOThiMzU0YzBmLi4zZDAyZWQxNGNjMjhkNDE0
NGZlOGVhNzcwZGU2YjI4ODJiMDllODhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTI5LDcgKzExMjksNiBAQAogCQk0MUQy
OEQwRDIxMzlFMDU4MDBGNDIwNkYgLyogTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFEMjhEMEIyMTM5RTAx
RDAwRjQyMDZGIC8qIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmNwcCAqLzsgfTsKIAkJNDFENDFD
NjcyMjU2ODc0RjAwNjk3OTQyIC8qIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUQ0MUM2NTIyNTY4NTkyMDA2
OTc5NDIgLyogU2VydmljZVdvcmtlckludGVybmFscy5tbSAqLzsgfTsKIAkJNDFERTdDN0MyMjJE
QTE0MzAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxREU3QzdCMjIyREExM0UwMDUzMkI2NSAvKiBT
dG9yYWdlUXVvdGFNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJNDFERTdDN0QyMjJEQTE0ODAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YVVz
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxREU3
Qzc4MjIyREExM0MwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFERUZDQjYxRTU2QzFCRDAwMEQ5
RTVGIC8qIEpTRE9NTWFwTGlrZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDFERUZDQjQxRTU2QzFCOTAwMEQ5RTVGIC8qIEpTRE9NTWFwTGlrZS5oICov
OyB9OwogCQk0MUUxQjFEMTBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRTFCMUNCMEZGNTk4
NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5oICovOyB9OwogCQk0MUU5RENFNzIzMTk3NEJG
MDBGMzU5NDkgLyogQmxvYkxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDFFOURDRTQyMzE5NzNGRTAwRjM1OTQ5IC8qIEJsb2JMb2FkZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzQ2Niw3
ICs3NDY1LDYgQEAKIAkJNDFEMjhEMEMyMTM5RTAxRTAwRjQyMDZGIC8qIExpYldlYlJUQ1N0YXRz
Q29sbGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpYldlYlJUQ1N0
YXRzQ29sbGVjdG9yLmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDU3RhdHNDb2xsZWN0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFENDFDNjUyMjU2ODU5MjAwNjk3OTQy
IC8qIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBTZXJ2aWNlV29ya2VySW50ZXJuYWxzLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MUQ1MUJCMjFFNEUyRTgxMDAxMzFBNUIgLyogTGliV2ViUlRDQXVkaW9G
b3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGliV2ViUlRDQXVkaW9G
b3JtYXQuaDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJSVENBdWRpb0Zvcm1hdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0MURFN0M3ODIyMkRBMTNDMDA1MzJCNjUgLyogU3RvcmFn
ZVF1b3RhVXNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlUXVv
dGFVc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxREU3QzdBMjIyREExM0Qw
MDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MURFN0M3QjIyMkRBMTNFMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFu
YWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlUXVvdGFNYW5h
Z2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxREVGQ0IyMUU1NkMxQjkwMDBE
OUU1RiAvKiBKU0RPTUJpbmRpbmdJbnRlcm5hbHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmph
dmFzY3JpcHQ7IHBhdGggPSBKU0RPTUJpbmRpbmdJbnRlcm5hbHMuanM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNzEwNCw3ICsxNzEwMiw2IEBACiAJCQkJMUEzNzYzNkExQTJFNjhC
QjAwOUE3RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oICovLAogCQkJCTQxREU3QzdB
MjIyREExM0QwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLywKIAkJCQk0MURF
N0M3QjIyMkRBMTNFMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5oICovLAotCQkJCTQx
REU3Qzc4MjIyREExM0MwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggKi8sCiAJCQkJNTE2
NkQzQ0MxRThFRDQxMTAwQUQ2MkUzIC8qIFN0b3JhZ2VUeXBlLmggKi8sCiAJCQkpOwogCQkJaW5k
ZW50V2lkdGggPSA0OwpAQCAtMzIyMjUsNyArMzIyMjIsNiBAQAogCQkJCUM1MEQwRTgzMEZGNDI3
MjkwMEFDMjY0NCAvKiBTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTM3
NjM2QzFBMkU2OEJCMDA5QTdFRTIgLyogU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MURFN0M3QzIyMkRBMTQzMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFu
YWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDFERTdDN0QyMjJEQTE0ODAwNTMyQjY1IC8qIFN0
b3JhZ2VRdW90YVVzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDOUVGMkYzMjFGMDYxOTAwMDNC
REM1NiAvKiBTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTY2
RDNDRDFFOEVENDhGMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ2ODJEMjAwMUY3OTc4MzAwMEM4NjNEQiAvKiBTdG9yZWRDcmVkZW50aWFsc1BvbGljeS5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VR
dW90YU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5h
Z2VyLmNwcAppbmRleCA4NTI1NzUyZTYzMzQ3OTUzMGVmMTRlY2I3NGY4NWJhZjY4ZDljNTViLi4w
YzYxM2QxYTcyZGZlYTY1OWNiMmU3MWE4MjBhYWFiNjA5YWE5NjE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKQEAgLTI3LDIxMyArMjcsMTIw
IEBACiAjaW5jbHVkZSAiU3RvcmFnZVF1b3RhTWFuYWdlci5oIgogCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VRdW90YVVzZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9CaW5h
cnlTZW1hcGhvcmUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdG9yYWdlUXVvdGFNYW5h
Z2VyOjp+U3RvcmFnZVF1b3RhTWFuYWdlcigpCitSZWY8U3RvcmFnZVF1b3RhTWFuYWdlcj4gU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmIHVz
YWdlR2V0dGVyLCBRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3Rl
cikKIHsKLSAgICB3aGlsZSAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAg
bV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCkuY2FsbGJhY2soRGVjaXNpb246OkRlbnkpOwor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0b3JhZ2VRdW90YU1hbmFnZXIocXVvdGEsIFdURk1v
dmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKSk7CiB9CiAK
LXVpbnQ2NF90IFN0b3JhZ2VRdW90YU1hbmFnZXI6OnNwYWNlVXNhZ2UoKSBjb25zdAorU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6U3RvcmFnZVF1b3RhTWFuYWdlcih1aW50NjRfdCBxdW90YSwgVXNhZ2VH
ZXR0ZXImJiB1c2FnZUdldHRlciwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVh
c2VSZXF1ZXN0ZXIpCisgICAgOiBtX3F1b3RhKHF1b3RhKQorICAgICwgbV91c2FnZUdldHRlcihX
VEZNb3ZlKHVzYWdlR2V0dGVyKSkKKyAgICAsIG1fcXVvdGFJbmNyZWFzZVJlcXVlc3RlcihXVEZN
b3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKQorICAgICwgbV93b3JrUXVldWUoV29ya1F1ZXVl
OjpjcmVhdGUoIlN0b3JhZ2VRdW90YU1hbmFnZXIgQmFja2dyb3VuZCBRdWV1ZSIsIFdvcmtRdWV1
ZTo6VHlwZTo6U2VyaWFsKSkKKyAgICAsIG1faW5pdGlhbFF1b3RhKHF1b3RhKQogewotICAgIHVp
bnQ2NF90IHVzYWdlID0gMDsKLSAgICBmb3IgKGF1dG8mIHVzZXIgOiBtX3VzZXJzKQotICAgICAg
ICB1c2FnZSArPSB1c2VyLT5zcGFjZVVzZWQoKTsKLSAgICByZXR1cm4gdXNhZ2U7CiB9CiAKLXZv
aWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpCit2
b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCh1aW50NjRf
dCBzcGFjZVJlcXVlc3RlZCwgUmVxdWVzdENhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgaWYg
KCFtX3F1b3RhKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
IAotICAgIGF1dG8gZGVmYXVsdFF1b3RhU3RlcCA9IG1fcXVvdGEgLyAxMDsKLSAgICBtX3F1b3Rh
ID0gc3RkOjptYXgobV9xdW90YSwgZGVmYXVsdFF1b3RhU3RlcCAqICgoc3BhY2VVc2FnZSgpIC8g
ZGVmYXVsdFF1b3RhU3RlcCkgKyAxKSk7Ci19Ci0KLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
aW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQoKQotewotICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXph
dGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPFN0b3Jh
Z2VRdW90YVVzZXIqPiB1c2Vyc1RvSW5pdGlhbGl6ZTsKLSAgICBmb3IgKGF1dG8mIGtleVZhbHVl
IDogbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2VycykgewotICAgICAgICBpZiAoa2V5VmFsdWUu
dmFsdWUgPT0gV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpObykgewotICAgICAgICAgICAga2V5VmFs
dWUudmFsdWUgPSBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ6OlllczsKLSAgICAgICAgICAgIHVzZXJz
VG9Jbml0aWFsaXplLmFwcGVuZChrZXlWYWx1ZS5rZXkpOworICAgIC8vIEZhc3QgcGF0aC4KKyAg
ICBpZiAobV9xdW90YUNvdW50RG93bkxvY2sudHJ5TG9jaygpKSB7CisgICAgICAgIGlmICh0cnlH
cmFudFJlcXVlc3Qoc3BhY2VSZXF1ZXN0ZWQpKSB7CisgICAgICAgICAgICBtX3F1b3RhQ291bnRE
b3duTG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKERlY2lzaW9uOjpHcmFudCk7
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbV9xdW90YUNvdW50RG93
bkxvY2sudW5sb2NrKCk7CiAgICAgfQotICAgIGZvciAoYXV0byogdXNlciA6IHVzZXJzVG9Jbml0
aWFsaXplKSB7Ci0gICAgICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmNvbnRh
aW5zKHVzZXIpKQotICAgICAgICAgICAgYXNrVXNlclRvSW5pdGlhbGl6ZSgqdXNlcik7Ci0gICAg
fQorCisgICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIHNwYWNlUmVxdWVzdGVkLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XSgpIG11dGFibGUgeworICAgICAgICBhdXRvIGRlY2lzaW9uID0gcmVxdWVzdFNwYWNlT25CYWNr
Z3JvdW5kVGhyZWFkKHNwYWNlUmVxdWVzdGVkKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChb
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZGVjaXNpb25dKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICBjYWxsYmFjayhkZWNpc2lvbik7CisgICAgICAgIH0pOworICAgIH0pOwogfQogCi12
b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUoU3RvcmFnZVF1b3Rh
VXNlciYgdXNlcikKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCh1aW50NjRfdCBzcGFjZVJlcXVl
c3RlZCkKIHsKLSAgICB1c2VyLndoZW5Jbml0aWFsaXplZChbdGhpcywgJnVzZXIsIHdlYWtUaGlz
ID0gbWFrZVdlYWtQdHIodGhpcyldKCkgewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAg
ICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgICAgIGlm
IChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLnJlbW92ZSgmdXNlcikpCi0gICAgICAgICAg
ICBtX3VzZXJzLmFkZCgmdXNlcik7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9xdW90YUNvdW50
RG93bkxvY2spOwogCi0gICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKHRyeUdyYW50UmVxdWVzdChz
cGFjZVJlcXVlc3RlZCkpCisgICAgICAgIHJldHVybiBEZWNpc2lvbjo6R3JhbnQ7CiAKLSAgICAg
ICAgLy8gTWFrZSBzdXJlIHF1b3RhIGlzIHNldCBiZWZvcmUgaGFuZGxpbmcgZmlyc3QgcmVxdWVz
dC4KLSAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlVuaW5pdGlhbGl6ZWQpIHsKLSAgICAg
ICAgICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKLSAgICAgICAgICAgIG1fc3Rh
dGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgICAgICB9CisgICAgbV91
c2FnZSA9IG1fdXNhZ2VHZXR0ZXIoKTsKKyAgICB1cGRhdGVRdW90YUJhc2VkT25Vc2FnZSgpOwor
ICAgIG1fcXVvdGFDb3VudERvd24gPSBtX3VzYWdlIDwgbV9xdW90YSA/IG1fcXVvdGEgLSBtX3Vz
YWdlIDogMDsKKyAgICBpZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkKKyAgICAg
ICAgcmV0dXJuIERlY2lzaW9uOjpHcmFudDsKIAotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVl
c3RzKHsgfSk7Ci0gICAgfSk7Ci19CisgICAgLy8gQmxvY2sgdGhpcyB0aHJlYWQgdW50aWwgZ2V0
dGluZyBkZWNzaW9uIGZvciBxdW90YSBpbmNyZWFzZS4KKyAgICBCaW5hcnlTZW1hcGhvcmUgc2Vt
YXBob3JlOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgc3BhY2VSZXF1ZXN0ZWQsICZzZW1hcGhvcmVdKCkgbXV0YWJsZSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXIgYXNrcyBm
b3IgcXVvdGEgaW5jcmVhc2UgJSIgUFJJdTY0LCB0aGlzLCBzcGFjZVJlcXVlc3RlZCk7CisgICAg
ICAgIG1fcXVvdGFJbmNyZWFzZVJlcXVlc3RlcihtX3F1b3RhLCBtX3VzYWdlLCBzcGFjZVJlcXVl
c3RlZCwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCAmc2Vt
YXBob3JlXShPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEpIG11dGFibGUgeworICAgICAgICAg
ICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlciByZWNlaXZl
cyBxdW90YSBpbmNyZWFzZSByZXNwb25zZSAlIiBQUkl1NjQsIHRoaXMsIG5ld1F1b3RhID8gKm5l
d1F1b3RhIDogMCk7CisgICAgICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi12b2lk
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFkZFVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKLXsK
LSAgICBBU1NFUlQoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnMoJnVzZXIp
KTsKLSAgICBBU1NFUlQoIW1fdXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBtX3BlbmRpbmdJ
bml0aWFsaXphdGlvblVzZXJzLmFkZCgmdXNlciwgV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpObyk7
CisgICAgICAgICAgICBpZiAobmV3UXVvdGEpCisgICAgICAgICAgICAgICAgbV9xdW90YSA9ICpu
ZXdRdW90YTsKIAotICAgIGlmICghbV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAg
ICBhc2tVc2VyVG9Jbml0aWFsaXplKHVzZXIpOwotfQorICAgICAgICAgICAgc2VtYXBob3JlLnNp
Z25hbCgpOworICAgICAgICB9KTsKKyAgICB9KTsKIAotYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpzaG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3QKLXsK
LSAgICBpZiAoIXNwYWNlSW5jcmVhc2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzZW1h
cGhvcmUud2FpdCgpOwogCi0gICAgcmV0dXJuIHNwYWNlVXNhZ2UoKSArIHNwYWNlSW5jcmVhc2Ug
PiBtX3F1b3RhOworICAgIG1fdXNhZ2UgPSBtX3VzYWdlR2V0dGVyKCk7CisgICAgbV9xdW90YUNv
dW50RG93biA9IG1fdXNhZ2UgPCBtX3F1b3RhID8gbV9xdW90YSAtIG1fdXNhZ2UgOiAwOworICAg
IHJldHVybiB0cnlHcmFudFJlcXVlc3Qoc3BhY2VSZXF1ZXN0ZWQpID8gRGVjaXNpb246OkdyYW50
IDogRGVjaXNpb246OkRlbnk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3Zl
VXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQorYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp0
cnlHcmFudFJlcXVlc3QodWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQpCiB7Ci0gICAgQVNTRVJUKG1f
dXNlcnMuY29udGFpbnMoJnVzZXIpIHx8IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29u
dGFpbnMoJnVzZXIpKTsKLSAgICBtX3VzZXJzLnJlbW92ZSgmdXNlcik7Ci0gICAgaWYgKG1fcGVu
ZGluZ0luaXRpYWxpemF0aW9uVXNlcnMucmVtb3ZlKCZ1c2VyKSAmJiBtX3BlbmRpbmdJbml0aWFs
aXphdGlvblVzZXJzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBXaGVuIGJlaW5nIGNsZWFyZWQs
IHF1b3RhIHVzZXJzIG1heSByZW1vdmUgdGhlbXNlbHZlcyBhbmQgYWRkIHRoZW1zZWx2ZXMgdG8g
dHJpZ2dlciByZWluaXRpYWxpemF0aW9uLgotICAgICAgICAvLyBMZXQncyB3YWl0IGZvciBhZGRV
c2VyIHRvIGJlIGNhbGxlZCBiZWZvcmUgcHJvY2Vzc2luZyBwZW5kaW5nIHJlcXVlc3RzLgotICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMp
XSB7Ci0gICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKLSAg
ICAgICAgfSk7CisgICAgQVNTRVJUKG1fcXVvdGFDb3VudERvd25Mb2NrLmlzTG9ja2VkKCkpOwor
ICAgIGlmIChzcGFjZVJlcXVlc3RlZCA8PSBtX3F1b3RhQ291bnREb3duKSB7CisgICAgICAgIG1f
cXVvdGFDb3VudERvd24gLT0gc3BhY2VSZXF1ZXN0ZWQ7CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9Ci0KLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIFJlcXVlc3RDYWxsYmFjayYmIGNh
bGxiYWNrKQorICAgIAordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVRdW90YUJhc2Vk
T25Vc2FnZSgpCiB7Ci0gICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShj
YWxsYmFjaykgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXNwYWNlSW5j
cmVhc2UpIHsKLSAgICAgICAgY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAo
IW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcGVu
ZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spIH0p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZEFza0Zvck1vcmVTcGFj
ZShzcGFjZUluY3JlYXNlKSkgewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBz
cGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKLQotICAgICAgICAvLyBUcnkgcHJv
Y2Vzc2luZyByZXF1ZXN0IGFnYWluIGFmdGVyIG1ha2luZyBzdXJlIHVzYWdlIGlzIGFjY3VyYXRl
LgotICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKLSAgICAgICAg
Zm9yIChhdXRvJiB1c2VyIDogY29weVRvVmVjdG9yKG1fdXNlcnMpKQotICAgICAgICAgICAgdXNl
ci0+Y29tcHV0ZVNwYWNlVXNlZCgpOwotCi0gICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6
YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9z
dGF0ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgIGFza0Zvck1vcmVTcGFj
ZShzcGFjZUluY3JlYXNlKTsKLSAgICAgICAgcmV0dXJuOworICAgIC8vIFdoZW4gU3RvcmFnZVF1
b3RhTWFuYWdlciBpcyB1c2VkIGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugd2FudCB0byBtYWtlIHN1
cmUgaXRzIGluaXRpYWwgcXVvdGEgaXMgYmlnZ2VyIHRoYW4gY3VycmVudCBkaXNrIHVzYWdlLAor
ICAgIC8vIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHF1b3RhIHdhcyBpbmNyZWFz
ZWQgdG8gYXQgbGVhc3QgdGhlIGRpc2sgdXNhZ2UgdW5kZXIgdXNlcidzIHBlcm1pc3Npb24gYmVm
b3JlLgorICAgIEFTU0VSVChtX3F1b3RhQ291bnREb3duTG9jay5pc0xvY2tlZCgpKTsKKyAgICBp
ZiAoIW1fcXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlKSB7CisgICAgICAgIG1fcXVvdGFVcGRhdGVk
QmFzZWRPblVzYWdlID0gdHJ1ZTsKKyAgICAgICAgYXV0byBkZWZhdWx0UXVvdGFTdGVwID0gbV9x
dW90YSAvIDEwOworICAgICAgICBtX3F1b3RhID0gc3RkOjptYXgobV9xdW90YSwgZGVmYXVsdFF1
b3RhU3RlcCAqICgobV91c2FnZSAvIGRlZmF1bHRRdW90YVN0ZXApICsgMSkpOwogICAgIH0KLQot
ICAgIG1fc3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgIGNhbGxi
YWNrKERlY2lzaW9uOjpHcmFudCk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNr
Rm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpCit2b2lkIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZygpCiB7Ci0gICAg
QVNTRVJUKHNob3VsZEFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKSk7Ci0gICAgQVNTRVJU
KG1fc3RhdGUgPT0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZSk7Ci0KLSAgICBSRUxFQVNFX0xP
RyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UgJSIg
UFJJdTY0LCB0aGlzLCBzcGFjZUluY3JlYXNlKTsKLSAgICBtX3N0YXRlID0gU3RhdGU6OldhaXRp
bmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2U7Ci0gICAgbV9zcGFjZUluY3JlYXNlUmVxdWVzdGVy
KG1fcXVvdGEsIHNwYWNlVXNhZ2UoKSwgc3BhY2VJbmNyZWFzZSwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpXShPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEpIHsKLSAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSRUxFQVNF
X0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2Ug
cmVjZWl2ZWQgcmVzcG9uc2UgJSIgUFJJdTY0LCB0aGlzLCBuZXdRdW90YSA/ICpuZXdRdW90YSA6
IDApOwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlOwotICAg
ICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKG5ld1F1b3RhKTsKLSAgICB9KTsKKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX3F1b3RhQ291bnREb3duTG9jayk7CisgICAgbV9xdW90YSA9IG1faW5p
dGlhbFF1b3RhOworICAgIG1fcXVvdGFDb3VudERvd24gPSAwOworICAgIG1fcXVvdGFVcGRhdGVk
QmFzZWRPblVzYWdlID0gZmFsc2U7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJv
Y2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEpCit2b2lkIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OnJlc2V0UXVvdGFGb3JUZXN0aW5nKCkKIHsKLSAgICBpZiAobV9w
ZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobmV3
UXVvdGEpCi0gICAgICAgIG1fcXVvdGEgPSAqbmV3UXVvdGE7Ci0KLSAgICBpZiAobV9zdGF0ZSA9
PSBTdGF0ZTo6V2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkFza2luZ0Zvck1vcmVT
cGFjZSkgewotICAgICAgICBhdXRvIHJlcXVlc3QgPSBtX3BlbmRpbmdSZXF1ZXN0cy50YWtlRmly
c3QoKTsKLSAgICAgICAgYm9vbCBzaG91bGRBbGxvd1JlcXVlc3QgPSAhc2hvdWxkQXNrRm9yTW9y
ZVNwYWNlKHJlcXVlc3Quc3BhY2VJbmNyZWFzZSk7Ci0KLSAgICAgICAgUkVMRUFTRV9MT0coU3Rv
cmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyBm
aXJzdCByZXF1ZXN0IGRlY2lzaW9uIGlzICVkIiwgdGhpcywgc2hvdWxkQWxsb3dSZXF1ZXN0KTsK
LQotICAgICAgICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKLSAg
ICAgICAgcmVxdWVzdC5jYWxsYmFjayhzaG91bGRBbGxvd1JlcXVlc3QgPyBEZWNpc2lvbjo6R3Jh
bnQgOiBEZWNpc2lvbjo6RGVueSk7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtX3BlbmRpbmdSZXF1
ZXN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byYgcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVl
c3RzLmZpcnN0KCk7Ci0KLSAgICAgICAgaWYgKHNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0
LnNwYWNlSW5jcmVhc2UpKSB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6TWFr
aW5nRGVjaXNpb25Gb3JSZXF1ZXN0KSB7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRl
OjpDb21wdXRpbmdTcGFjZVVzZWQ7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiB1c2VyIDog
Y29weVRvVmVjdG9yKG1fdXNlcnMpKQotICAgICAgICAgICAgICAgICAgICB1c2VyLT5jb21wdXRl
U3BhY2VVc2VkKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0
aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNl
OwotICAgICAgICAgICAgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSA9IDA7Ci0gICAgICAgICAgICBm
b3IgKGF1dG8mIHBlbmRpbmdSZXF1ZXN0IDogbV9wZW5kaW5nUmVxdWVzdHMpCi0gICAgICAgICAg
ICAgICAgc3BhY2VJbmNyZWFzZSArPSBwZW5kaW5nUmVxdWVzdC5zcGFjZUluY3JlYXNlOwotICAg
ICAgICAgICAgYXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lv
bkZvclJlcXVlc3Q7Ci0gICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpLmNhbGxi
YWNrKERlY2lzaW9uOjpHcmFudCk7Ci0gICAgfQorICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcXVv
dGFDb3VudERvd25Mb2NrKTsKKyAgICBtX3F1b3RhID0gbV9pbml0aWFsUXVvdGE7CisgICAgbV9x
dW90YUNvdW50RG93biA9IDA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKaW5kZXggMDk1NjYzMDZmNTU5
MWFiYjU5ZDBhZmQ4ZWVhNDg2NzlhNWY2YzYzYy4uOWJkZmRkNDdhMThhMTc2YzViYzMzZjRiODYy
ODkyMjM0YWQyOWFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
UXVvdGFNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmgKQEAgLTI1LDc3ICsyNSw1NCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkNsaWVudE9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9X
b3JrUXVldWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTdG9yYWdlUXVvdGFV
c2VyOwotCi1jbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VyIDogcHVibGljIENhbk1ha2VXZWFrUHRy
PFN0b3JhZ2VRdW90YU1hbmFnZXI+IHsKK2NsYXNzIFN0b3JhZ2VRdW90YU1hbmFnZXIgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U3RvcmFnZVF1b3RhTWFuYWdlcj4sIHB1YmxpYyBDYW5N
YWtlV2Vha1B0cjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgdXNpbmcgU3BhY2VJbmNyZWFzZVJlcXVlc3RlciA9IFdURjo6
RnVuY3Rpb248dm9pZCh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3VycmVudFNwYWNlLCB1aW50
NjRfdCBzcGFjZUluY3JlYXNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVpbnQ2
NF90Pik+JiYpPjsKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKHVpbnQ2NF90IHF1b3RhLCBTcGFj
ZUluY3JlYXNlUmVxdWVzdGVyJiYgc3BhY2VJbmNyZWFzZVJlcXVlc3RlcikKLSAgICAgICAgOiBt
X3F1b3RhKHF1b3RhKQotICAgICAgICAsIG1fc3BhY2VJbmNyZWFzZVJlcXVlc3RlcihXVEZNb3Zl
KHNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIpKQotICAgIHsKLSAgICB9Ci0gICAgV0VCQ09SRV9FWFBP
UlQgflN0b3JhZ2VRdW90YU1hbmFnZXIoKTsKKyAgICB1c2luZyBVc2FnZUdldHRlciA9IEZ1bmN0
aW9uPHVpbnQ2NF90KCk+OworICAgIHVzaW5nIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBGdW5j
dGlvbjx2b2lkKHVpbnQ2NF90IGN1cnJlbnRRdW90YSwgdWludDY0X3QgY3VycmVudFVzYWdlLCB1
aW50NjRfdCByZXF1ZXN0ZWRJbmNyZWFzZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25h
bDx1aW50NjRfdD4pPiYmKT47CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTdG9yYWdl
UXVvdGFNYW5hZ2VyPiBjcmVhdGUodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYsIFF1b3Rh
SW5jcmVhc2VSZXF1ZXN0ZXImJik7CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGRl
ZmF1bHRUaGlyZFBhcnR5UXVvdGFGcm9tUGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpIHsg
cmV0dXJuIHF1b3RhIC8gMTA7IH0KLQogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVm
YXVsdFF1b3RhKCkgeyByZXR1cm4gMTAwMCAqIE1COyB9CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkgeyByZXR1cm4gZGVmYXVsdFRoaXJkUGFy
dHlRdW90YUZyb21QZXJPcmlnaW5RdW90YShkZWZhdWx0UXVvdGEoKSk7IH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYWRkVXNlcihTdG9yYWdlUXVvdGFVc2VyJik7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZW1vdmVVc2VyKFN0b3JhZ2VRdW90YVVzZXImKTsKLQogICAgIGVudW0gY2xh
c3MgRGVjaXNpb24geyBEZW55LCBHcmFudCB9OwogICAgIHVzaW5nIFJlcXVlc3RDYWxsYmFjayA9
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRGVjaXNpb24pPjsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlcXVlc3RTcGFjZSh1aW50NjRfdCwgUmVxdWVzdENhbGxiYWNrJiYpOwotICAgIHZvaWQg
cmVzZXRRdW90YSh1aW50NjRfdCBuZXdRdW90YSkgeyBtX3F1b3RhID0gbmV3UXVvdGE7IH0KKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCh1aW50NjRfdCwg
UmVxdWVzdENhbGxiYWNrJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIERlY2lzaW9uIHJlcXVlc3RT
cGFjZU9uQmFja2dyb3VuZFRocmVhZCh1aW50NjRfdCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKLQotICAgIGVudW0gY2xhc3MgU3Rh
dGUgewotICAgICAgICBVbmluaXRpYWxpemVkLAotICAgICAgICBDb21wdXRpbmdTcGFjZVVzZWQs
Ci0gICAgICAgIFdhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UsCi0gICAgICAgIEFza2lu
Z0Zvck1vcmVTcGFjZSwKLSAgICAgICAgTWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0LAotICAgIH07
Ci0gICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCByZXNldFF1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZUZvclRlc3RpbmcoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0UXVvdGFGb3JUZXN0aW5nKCk7CiAKIHByaXZh
dGU6Ci0gICAgdWludDY0X3Qgc3BhY2VVc2FnZSgpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkQXNr
Rm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpIGNvbnN0OwotICAgIHZvaWQgYXNr
Rm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpOwotCi0gICAgdm9pZCBpbml0aWFs
aXplVXNlcnNJZk5lZWRlZCgpOwotICAgIHZvaWQgYXNrVXNlclRvSW5pdGlhbGl6ZShTdG9yYWdl
UXVvdGFVc2VyJik7CisgICAgU3RvcmFnZVF1b3RhTWFuYWdlcih1aW50NjRfdCBxdW90YSwgVXNh
Z2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmKTsKKyAgICBib29sIHRyeUdyYW50
UmVxdWVzdCh1aW50NjRfdCk7CiAKLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0
aW9uYWw8dWludDY0X3Q+KTsKKyAgICB2b2lkIHVwZGF0ZVF1b3RhQmFzZWRPblVzYWdlKCk7CiAK
KyAgICBMb2NrIG1fcXVvdGFDb3VudERvd25Mb2NrOworICAgIHVpbnQ2NF90IG1fcXVvdGFDb3Vu
dERvd24geyAwIH07CiAgICAgdWludDY0X3QgbV9xdW90YSB7IDAgfTsKKyAgICB1aW50NjRfdCBt
X3VzYWdlIHsgMCB9OwogCi0gICAgU3BhY2VJbmNyZWFzZVJlcXVlc3RlciBtX3NwYWNlSW5jcmVh
c2VSZXF1ZXN0ZXI7CisgICAgVXNhZ2VHZXR0ZXIgbV91c2FnZUdldHRlcjsKKyAgICBRdW90YUlu
Y3JlYXNlUmVxdWVzdGVyIG1fcXVvdGFJbmNyZWFzZVJlcXVlc3RlcjsKIAotICAgIGVudW0gY2xh
c3MgV2hlbkluaXRpYWxpemVkQ2FsbGVkIHsgTm8sIFllcyB9OwotICAgIEhhc2hNYXA8U3RvcmFn
ZVF1b3RhVXNlciosIFdoZW5Jbml0aWFsaXplZENhbGxlZD4gbV9wZW5kaW5nSW5pdGlhbGl6YXRp
b25Vc2VyczsKLSAgICBIYXNoU2V0PFN0b3JhZ2VRdW90YVVzZXIqPiBtX3VzZXJzOworICAgIFJl
ZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOwogCi0gICAgc3RydWN0IFBlbmRpbmdSZXF1ZXN0IHsK
LSAgICAgICAgdWludDY0X3Qgc3BhY2VJbmNyZWFzZTsKLSAgICAgICAgUmVxdWVzdENhbGxiYWNr
IGNhbGxiYWNrOwotICAgIH07Ci0gICAgRGVxdWU8UGVuZGluZ1JlcXVlc3Q+IG1fcGVuZGluZ1Jl
cXVlc3RzOworICAgIGJvb2wgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgeyBmYWxzZSB9Owog
Ci0gICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpVbmluaXRpYWxpemVkIH07CisgICAgLy8gVGVz
dCBvbmx5LgorICAgIHVpbnQ2NF90IG1faW5pdGlhbFF1b3RhIHsgMCB9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlUXVvdGFVc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcxMGNlZWM2MGM1ZGU1MGM2MDlkMjMx
YjBmMGRmOTY3NDk0OTQyMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFu
ZGxlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFN0b3JhZ2VRdW90YVVzZXIg
ewotcHVibGljOgotICAgIHZpcnR1YWwgflN0b3JhZ2VRdW90YVVzZXIoKSA9IGRlZmF1bHQ7Ci0K
LSAgICB2aXJ0dWFsIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgd2hlbkluaXRp
YWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykgeyBjYWxsYmFjaygp
OyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDVmMjNjYzY2YWExMWY3ZDI4ZTc2
MTVjY2I4NTEzNjdjMjAzMTViZTMuLmM0ZjYwN2E4OTgwNDI5OTJmMjY2ZjQ5MzhiNjUzNDAxNzYx
MDJhMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgog
I2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2Vic2l0
ZURhdGFUeXBlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0Nvb2tpZUphci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRE5TLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9EZXByZWNhdGVkR2xvYmFsU2V0dGluZ3MuaD4KQEAgLTMxNiw2ICszMTcsOSBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJgogICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vz
c2lvbklEOwogICAgIHNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRl
KCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzKSkpOwogCisgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3Vt
ZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBhZGRTZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRl
cnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBhZGRJbmRleGVkRGF0
YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNl
bmRpZgpAQCAtMzI2LDcgKzMzMCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVO
ZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAgICAgICAg
IGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCksIHNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheUVuYWJsZWQsIFdURk1vdmUo
cGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KSwgcGFyYW1ldGVy
cy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAg
ICB9CiAjZW5kaWYKLSAgICBpbml0aWFsaXplU3RvcmFnZVF1b3RhKHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMpOwogCiAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+YWRkKHNl
c3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIApAQCAtNDM0LDI4ICs0MzcsMzkgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZWRDcmVkZW50aWFscygpCiAKIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMmJiBwYXJhbWV0ZXJzKQogeworICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOworCisgICAgYWRkU2Vzc2lvblN0b3JhZ2VR
dW90YU1hbmFnZXIoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSwg
cGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOworCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgYWRkSW5k
ZXhlZERhdGFiYXNlU2Vzc2lvbihwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5z
ZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgYWRkSW5kZXhl
ZERhdGFiYXNlU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBpZiAocGFyZW50
UHJvY2Vzc0hhc1NlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpKQotICAgICAgICBhZGRTZXJ2aWNl
V29ya2VyU2Vzc2lvbihwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9u
SUQsIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxl
ZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rvcnkp
LCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOworICAgICAgICBhZGRTZXJ2aWNlV29ya2VyU2Vzc2lvbihzZXNzaW9uSUQsIHBhcmFt
ZXRlcnMuc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92
ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0
ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwog
I2VuZGlmCiAKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQocGFyYW1ldGVycy5uZXR3b3Jr
U2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVj
dG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwot
Ci0gICAgaW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShwYXJhbWV0ZXJzKTsKKyAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9y
eSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCiAg
ICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVEYXRhU3RvcmVTZXNzaW9u
KCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6
aW5pdGlhbGl6ZVN0b3JhZ2VRdW90YShjb25zdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYg
cGFyYW1ldGVycykKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1
aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBh
dGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgY2FjaGVSb290UGF0aEhhbmRsZSkKIHsKLSAg
ICBhdXRvJiBtYW5hZ2VycyA9ICBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmVuc3VyZShwYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIFtdIHsKLSAgICAgICAgcmV0
dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsgfTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci0g
ICAgbWFuYWdlcnMuc2V0RGVmYXVsdFF1b3RhcyhwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VR
dW90YSwgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKTsKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAg
IGF1dG8gW2l0ZXIsIGlzTmV3RW50cnldID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMu
ZW5zdXJlKHNlc3Npb25JRCwgW2RlZmF1bHRRdW90YSwgZGVmYXVsdFRoaXJkUGFydHlRdW90YSwg
Y2FjaGVSb290UGF0aF0geworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlcj4oY2FjaGVSb290UGF0aCwgZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQ
YXJ0eVF1b3RhKTsKKyAgICB9KTsKKyAgICBpZiAoaXNOZXdFbnRyeSkKKyAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGNhY2hlUm9vdFBhdGhIYW5kbGUpOworfQor
Cit2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9zZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBBU1NFUlQobV9zZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlcnMuY29udGFpbnMoc2Vzc2lvbklEKSk7CisgICAgbV9zZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbihjb25zdCBGdW5jdGlvbjx2b2lkKE5ldHdvcmtTZXNz
aW9uJik+JiBmdW5jdG9yKQpAQCAtNTc2LDggKzU5MCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmRlc3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKICNlbmRpZgogCiAgICAg
bV9zdG9yYWdlTWFuYWdlclNldC0+cmVtb3ZlKHNlc3Npb25JRCk7Ci0KLSAgICBtX3N0b3JhZ2VR
dW90YU1hbmFnZXJzLnJlbW92ZShzZXNzaW9uSUQpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X0xPQURfU1RBVElTVElDUykKQEAgLTE0NjgsOSArMTQ4MCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nl
c3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0
PFdlYnNpCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgY2xlYXJE
aXNrQ2FjaGUobW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5kbGVyID0gV1RGTW92ZShjbGVh
clRhc2tzSGFuZGxlcildIHsgfSk7CiAKLSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykgfHwgd2Vic2l0ZURhdGFUeXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRPTUNhY2hlKSkKLSAgICAgICAgY2xlYXJTdG9y
YWdlUXVvdGEoc2Vzc2lvbklEKTsKLQogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6QWRDbGlja0F0dHJpYnV0aW9ucykpIHsKICAgICAgICAgaWYgKGF1
dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKICAg
ICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5jbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbigpOwpAQCAt
MTU2MywxOSArMTU3Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRh
Rm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvCiAgICAgICAgIH0KICAg
ICAgICAgV2ViQ29yZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OnJlbW92ZVNlc3Npb25DcmVkZW50aWFs
c1dpdGhPcmlnaW5zKG9yaWdpbkRhdGFzKTsKICAgICB9Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHN0b3JhZ2UgcXVvdGEgY2xlYXJpbmcgZm9yIHRoZXNlIG9yaWdpbnMuCi19Ci0KLXZvaWQg
TmV0d29ya1Byb2Nlc3M6OmNsZWFyU3RvcmFnZVF1b3RhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCkKLXsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5maW5kKHNl
c3Npb25JRCk7Ci0gICAgaWYgKGl0ZXJhdG9yID09IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuZW5k
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIG1hbmFnZXJzID0gaXRlcmF0b3ItPnZh
bHVlOwotICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1hbmFnZXJzLm1hbmFnZXJzUGVyT3JpZ2lu
KCkpCi0gICAgICAgIG1hbmFnZXIudmFsdWUtPnJlc2V0UXVvdGEobWFuYWdlcnMuZGVmYXVsdFF1
b3RhKG1hbmFnZXIua2V5KSk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQpAQCAtMjIxNywxMCArMjIxMyw5IEBAIFJlZjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gTmV0
d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uCiAgICAg
ICAgIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0aHMuZ2V0KHNlc3Npb25JRCk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklELCBwYXRoLCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBhdXRvJiBvcmlnaW4pIC0+IFN0b3JhZ2VRdW90YU1hbmFnZXIqIHsKLSAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBy
ZXR1cm4gJnRoaXMtPnN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBvcmlnaW4pOworICAg
IHJldHVybiBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgcGF0aCwgW3Ro
aXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRF0oY29uc3QgYXV0byYg
b3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCkgeworICAgICAgICBSZWZQdHI8U3RvcmFn
ZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlciA9IHdlYWtUaGlzID8gdGhpcy0+c3Rv
cmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbikgOiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gc3RvcmFnZVF1b3RhTWFuYWdlciA/IHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RT
cGFjZU9uQmFja2dyb3VuZFRocmVhZChzcGFjZVJlcXVlc3RlZCkgOiBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpEZWNpc2lvbjo6RGVueTsKICAgICB9KTsKIH0KIApAQCAtMjMwNyw4ICsyMzAyLDE4IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseShoYW5kbGUpOwogICAgICAgICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBwb3N0U3RvcmFnZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMsIGluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeSkpOworICAgICAgICBzZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlcklEQlJvb3RQYXRoKHNlc3Npb25JRCwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKICAg
ICB9CiB9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VySURCUm9vdFBhdGgoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGlk
YlJvb3RQYXRoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXJzTG9jayk7CisgICAgYXV0byogc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgPSBt
X3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5nZXQoc2Vzc2lvbklEKTsKKyAgICBBU1NFUlQo
c2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpOworICAgIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VyLT5zZXRJREJSb290UGF0aChpZGJSb290UGF0aCk7Cit9CisKICNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6c3luY0xvY2FsU3RvcmFn
ZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yMzI1
LDkgKzIzMzAsMTggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJMZWdhY3lQcml2YXRlQnJv
d3NpbmdMb2NhbFN0b3JhZ2UoKQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjp1cGRhdGVRdW90YUJh
c2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IENsaWVudE9yaWdpbiYgb3JpZ2luKQogewotICAgIGF1dG8mIG1hbmFnZXIgPSBzdG9yYWdlUXVv
dGFNYW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsKLSAgICBtYW5hZ2VyLnJlc2V0UXVvdGEobV9z
dG9yYWdlUXVvdGFNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCktPnZhbHVlLmRlZmF1bHRRdW90YShv
cmlnaW4pKTsKLSAgICBtYW5hZ2VyLnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKKyAg
ICBhdXRvIHN0b3JhZ2VRdW90YU1hbmFnZXIgPSB0aGlzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKHNl
c3Npb25JRCwgb3JpZ2luKTsKKyAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5yZXNldFF1b3RhVXBk
YXRlZEJhc2VkT25Vc2FnZUZvclRlc3RpbmcoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6
cmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIGlmIChhdXRvKiBzZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlciA9IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzLmdldChzZXNz
aW9uSUQpKSB7CisgICAgICAgIGZvciAoYXV0byBzdG9yYWdlUXVvdGFNYW5hZ2VyIDogc2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXItPmV4aXN0aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMoKSkKKyAg
ICAgICAgICAgIHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlc2V0UXVvdGFGb3JUZXN0aW5nKCk7Cisg
ICAgfQorICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKICNpZiBFTkFCTEUoU0FOREJPWF9F
WFRFTlNJT05TKQpAQCAtMjQwNCw2MiArMjQxOCwzNSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpy
ZXF1ZXN0U3RvcmFnZVNwYWNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50
TwogICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6UmVxdWVzdFN0b3JhZ2VTcGFjZSB7IHNlc3Npb25J
RCwgb3JpZ2luLCBxdW90YSwgY3VycmVudFNpemUsIHNwYWNlUmVxdWlyZWQgfSwgV1RGTW92ZShj
YWxsYmFjayksIDApOwogfQogCi1jbGFzcyBRdW90YVVzZXJJbml0aWFsaXplciBmaW5hbCA6IHB1
YmxpYyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBRdW90YVVzZXJJbml0aWFsaXplcihTdG9yYWdl
UXVvdGFNYW5hZ2VyJiBtYW5hZ2VyKQotICAgICAgICA6IG1fbWFuYWdlcihtYWtlV2Vha1B0ciht
YW5hZ2VyKSkKLSAgICB7Ci0gICAgICAgIG1hbmFnZXIuYWRkVXNlcigqdGhpcyk7Ci0gICAgfQot
Ci0gICAgflF1b3RhVXNlckluaXRpYWxpemVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX21hbmFn
ZXIpCi0gICAgICAgICAgICBtX21hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgICAgICBp
ZiAobV9jYWxsYmFjaykKLSAgICAgICAgICAgIG1fY2FsbGJhY2soKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgLy8gU3RvcmFnZVF1b3RhVXNlciBBUEkuCi0gICAgdWludDY0X3Qgc3BhY2VVc2Vk
KCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9CitSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gTmV0d29y
a1Byb2Nlc3M6OnN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIGF1dG8qIHNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VyID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZ2V0KHNlc3Npb25J
RCk7CisgICAgaWYgKCFzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2spIGZpbmFsCi0gICAgewotICAgICAgICBtX2NhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayk7Ci0gICAgfQorICAgIFN0cmluZyBpZGJSb290UGF0aDsKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICBpZGJSb290UGF0aCA9IHNlc3Npb25TdG9yYWdlUXVv
dGFNYW5hZ2VyLT5pZGJSb290UGF0aCgpOworI2VuZGlmCisgICAgU3RvcmFnZVF1b3RhTWFuYWdl
cjo6VXNhZ2VHZXR0ZXIgdXNhZ2VHZXR0ZXIgPSBbY2FjaGVSb290UGF0aCA9IHNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyLT5jYWNoZVJvb3RQYXRoKCkuaXNvbGF0ZWRDb3B5KCksIGlkYlJvb3RQ
YXRoID0gaWRiUm9vdFBhdGguaXNvbGF0ZWRDb3B5KCksIG9yaWdpbiA9IG9yaWdpbi5pc29sYXRl
ZENvcHkoKV0oKSB7CisgICAgICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOyAgICAKIAotICAg
IFdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gbV9tYW5hZ2VyOwotICAgIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4gbV9jYWxsYmFjazsKLX07CisgICAgICAgIHVpbnQ2NF90IHVzYWdlID0g
Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OmRpc2tVc2FnZShjYWNoZVJvb3RQYXRoLCBvcmlnaW4pOwor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgICAgICB1c2FnZSArPSBJREJTZXJ2ZXI6
OklEQlNlcnZlcjo6ZGlza1VzYWdlKGlkYlJvb3RQYXRoLCBvcmlnaW4pOworI2VuZGlmCiAKLXZv
aWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVRdW90YVVzZXJzKFN0b3JhZ2VRdW90YU1hbmFn
ZXImIG1hbmFnZXIsIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2lu
JiBvcmlnaW4pCi17Ci0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIG9yaWdpbiwgdXNlciA9IG1ha2VVbmlx
dWU8UXVvdGFVc2VySW5pdGlhbGl6ZXI+KG1hbmFnZXIpXSgpIG11dGFibGUgeworICAgICAgICBy
ZXR1cm4gdXNhZ2U7CisgICAgfTsKKyAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpRdW90YUluY3Jl
YXNlUmVxdWVzdGVyIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBbdGhpcywgd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cigqdGhpcyksIHNlc3Npb25JRCwgb3JpZ2luXSAodWludDY0X3QgY3VycmVudFF1
b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHJlcXVlc3RlZEluY3JlYXNlLCBh
dXRvJiYgY2FsbGJhY2spIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy0+aWRi
U2VydmVyKHNlc3Npb25JRCkuaW5pdGlhbGl6ZVF1b3RhVXNlcihvcmlnaW4pOwotICAgICAgICBD
YWNoZVN0b3JhZ2U6OkVuZ2luZTo6aW5pdGlhbGl6ZVF1b3RhVXNlcigqdGhpcywgc2Vzc2lvbklE
LCBvcmlnaW4sIFt1c2VyID0gV1RGTW92ZSh1c2VyKV0geyB9KTsKLSAgICB9KTsKLX0KKyAgICAg
ICAgICAgIGNhbGxiYWNrKHsgfSk7CisgICAgICAgIHJlcXVlc3RTdG9yYWdlU3BhY2Uoc2Vzc2lv
bklELCBvcmlnaW4sIGN1cnJlbnRRdW90YSwgY3VycmVudFNwYWNlLCByZXF1ZXN0ZWRJbmNyZWFz
ZSwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIH07CiAKLVN0b3JhZ2VRdW90YU1hbmFnZXImIE5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAgYXV0byYgc3RvcmFnZVF1b3Rh
TWFuYWdlcnMgPSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmVuc3VyZShzZXNzaW9uSUQsIFtdIHsK
LSAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsgfTsKLSAgICB9KS5pdGVyYXRv
ci0+dmFsdWU7Ci0gICAgcmV0dXJuICpzdG9yYWdlUXVvdGFNYW5hZ2Vycy5tYW5hZ2Vyc1Blck9y
aWdpbigpLmVuc3VyZShvcmlnaW4sIFt0aGlzLCAmc3RvcmFnZVF1b3RhTWFuYWdlcnMsIHNlc3Np
b25JRCwgJm9yaWdpbl0gewotICAgICAgICBhdXRvIG1hbmFnZXIgPSBtYWtlVW5pcXVlPFN0b3Jh
Z2VRdW90YU1hbmFnZXI+KHN0b3JhZ2VRdW90YU1hbmFnZXJzLmRlZmF1bHRRdW90YShvcmlnaW4p
LCBbdGhpcywgc2Vzc2lvbklELCBvcmlnaW5dKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJy
ZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKLSAgICAg
ICAgICAgIHRoaXMtPnJlcXVlc3RTdG9yYWdlU3BhY2Uoc2Vzc2lvbklELCBvcmlnaW4sIHF1b3Rh
LCBjdXJyZW50U3BhY2UsIHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICAg
ICAgfSk7Ci0gICAgICAgIGluaXRpYWxpemVRdW90YVVzZXJzKCptYW5hZ2VyLCBzZXNzaW9uSUQs
IG9yaWdpbik7Ci0gICAgICAgIHJldHVybiBtYW5hZ2VyOwotICAgIH0pLml0ZXJhdG9yLT52YWx1
ZTsKKyAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPmVuc3VyZU9yaWdpblN0
b3JhZ2VRdW90YU1hbmFnZXIob3JpZ2luLCBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+ZGVm
YXVsdFF1b3RhKG9yaWdpbiksIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5j
cmVhc2VSZXF1ZXN0ZXIpKTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBmNjJmMDFkMzgwZjQw
MTA1NTJhYWQzODg5YTQ5N2Q1MTI2ZjhhMzUzLi43ZDZiZGVjNTExNjRlZWUwODBiOWVlMTJjYmQ5
MTBmZTNlOTljMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5oCkBAIC0yODQsNiArMjg0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJMZWdh
Y3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoKTsKIAogICAgIHZvaWQgdXBkYXRlUXVvdGFC
YXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYpOworICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lP
TlMpCiAgICAgdm9pZCBnZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZUFycmF5JiYpPiYmKTsKQEAgLTMyNyw3ICszMjgsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRBZENsaWNrQXR0cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhQQUw6
OlNlc3Npb25JRCwgVVJMJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9p
ZCBtYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoUEFMOjpTZXNzaW9u
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKLSAgICBXZWJDb3JlOjpTdG9yYWdl
UXVvdGFNYW5hZ2VyJiBzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luJik7CiAKICAgICB2b2lkIGFkZEtlcHRBbGl2ZUxvYWQoUmVmPE5ldHdv
cmtSZXNvdXJjZUxvYWRlcj4mJik7CiAgICAgdm9pZCByZW1vdmVLZXB0QWxpdmVMb2FkKE5ldHdv
cmtSZXNvdXJjZUxvYWRlciYpOwpAQCAtNDQyLDYgKzQ0Myw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjb2xsZWN0SW5kZXhlZERhdGFiYXNlT3JpZ2luc0ZvclZlcnNpb24oY29uc3QgU3RyaW5nJiwg
SGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+Jik7CiAgICAgSGFzaFNldDxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGluZGV4ZWREYXRhYmFzZU9yaWdpbnMoY29uc3QgU3Ry
aW5nJiBwYXRoKTsKICAgICBSZWY8V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI+IGNyZWF0
ZUlEQlNlcnZlcihQQUw6OlNlc3Npb25JRCk7CisgICAgdm9pZCBzZXRTZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlcklEQlJvb3RQYXRoKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGlkYlJv
b3RQYXRoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtNDYxLDgg
KzQ2Myw0NCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGVyZm9ybU5leHRTdG9yYWdlVGFzaygpOwog
ICAgIHZvaWQgZW5zdXJlUGF0aEV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpOwogCi0gICAgdm9p
ZCBjbGVhclN0b3JhZ2VRdW90YShQQUw6OlNlc3Npb25JRCk7Ci0gICAgdm9pZCBpbml0aWFsaXpl
U3RvcmFnZVF1b3RhKGNvbnN0IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJik7CisgICAgY2xh
c3MgU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vy
KGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0aCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50
NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKQorICAgICAgICAgICAgOiBtX2NhY2hlUm9vdFBh
dGgoY2FjaGVSb290UGF0aCkKKyAgICAgICAgICAgICwgbV9kZWZhdWx0UXVvdGEoZGVmYXVsdFF1
b3RhKQorICAgICAgICAgICAgLCBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGEoZGVmYXVsdFRoaXJk
UGFydHlRdW90YSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHVpbnQ2NF90IGRlZmF1
bHRRdW90YShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikgY29uc3QgeyByZXR1
cm4gb3JpZ2luLnRvcE9yaWdpbiA9PSBvcmlnaW4uY2xpZW50T3JpZ2luID8gbV9kZWZhdWx0UXVv
dGEgOiBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGE7IH0KKworICAgICAgICBSZWZQdHI8V2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gZW5zdXJlT3JpZ2luU3RvcmFnZVF1b3RhTWFuYWdlcihX
ZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luLCB1aW50NjRfdCBxdW90YSwgV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcjo6VXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcjo6UXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VS
ZXF1ZXN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gW2l0ZXIsIGlzTmV3RW50cnld
ID0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUob3JpZ2luLCBbcXVvdGEsIHVzYWdlR2V0
dGVyID0gV1RGTW92ZSh1c2FnZUdldHRlciksIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEZN
b3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAg
IHJldHVybiBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUocXVvdGEsIFdURk1v
dmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIoKml0ZXItPnZhbHVlKTsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8gZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2Vycygp
IHsgcmV0dXJuIG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMudmFsdWVzKCk7IH0KKworICAgICAgICBj
b25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlUm9vdFBh
dGg7IH0KKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICAgICAgdm9pZCBzZXRJREJS
b290UGF0aChjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKSB7IG1faWRiUm9vdFBhdGggPSBpZGJS
b290UGF0aDsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZGJSb290UGF0aDsgfQorI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICBT
dHJpbmcgbV9jYWNoZVJvb3RQYXRoOworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAg
ICAgICBTdHJpbmcgbV9pZGJSb290UGF0aDsKKyNlbmRpZgorICAgICAgICB1aW50NjRfdCBtX2Rl
ZmF1bHRRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgp
IH07CisgICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YSB7IFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB9OworICAgICAg
ICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdpbiwgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI+PiBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzOworICAgIH07CisgICAgdm9pZCBh
ZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgdWludDY0X3QgZGVm
YXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcm
IGNhY2hlUm9vdFBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpOworICAgIHZvaWQgcmVt
b3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQpOwogCiAgICAgLy8g
Q29ubmVjdGlvbnMgdG8gV2ViUHJvY2Vzc2VzLgogICAgIEhhc2hNYXA8V2ViQ29yZTo6UHJvY2Vz
c0lkZW50aWZpZXIsIFJlZjxOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4+IG1fd2ViUHJv
Y2Vzc0Nvbm5lY3Rpb25zOwpAQCAtNTMzLDIzICs1NzEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9pc0lUUERhdGFiYXNlRW5hYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYKICAgICAKLSAgICBjbGFz
cyBTdG9yYWdlUXVvdGFNYW5hZ2VycyB7Ci0gICAgcHVibGljOgotICAgICAgICB1aW50NjRfdCBk
ZWZhdWx0UXVvdGEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pIGNvbnN0IHsg
cmV0dXJuIG9yaWdpbi50b3BPcmlnaW4gPT0gb3JpZ2luLmNsaWVudE9yaWdpbiA/IG1fZGVmYXVs
dFF1b3RhIDogbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhOyB9Ci0gICAgICAgIHZvaWQgc2V0RGVm
YXVsdFF1b3Rhcyh1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBh
cnR5UXVvdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZGVmYXVsdFF1b3RhID0gZGVmYXVs
dFF1b3RhOwotICAgICAgICAgICAgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhID0gZGVmYXVsdFRo
aXJkUGFydHlRdW90YTsKLSAgICAgICAgfQotCi0gICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xp
ZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+
JiBtYW5hZ2Vyc1Blck9yaWdpbigpIHsgcmV0dXJuIG1fbWFuYWdlcnNQZXJPcmlnaW47IH0KLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFF1b3RhIHsgV2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCkgfTsKLSAgICAgICAgdWludDY0X3Qg
bV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6
ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgpIH07Ci0gICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xp
ZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+
IG1fbWFuYWdlcnNQZXJPcmlnaW47Ci0gICAgfTsKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklE
LCBTdG9yYWdlUXVvdGFNYW5hZ2Vycz4gbV9zdG9yYWdlUXVvdGFNYW5hZ2VyczsKKyAgICBMb2Nr
IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jazsKKyAgICBIYXNoTWFwPFBBTDo6U2Vz
c2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3Nl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyczsKIAogICAgIE9wdGlvblNldDxOZXR3b3JrQ2FjaGU6
OkNhY2hlT3B0aW9uPiBtX2NhY2hlT3B0aW9uczsKICAgICBXZWJDb3JlOjpNZXNzYWdlUG9ydENo
YW5uZWxSZWdpc3RyeSBtX21lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lzdHJ5OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4K
aW5kZXggMzY3NzY3NzQ4MGI4MmE0NDMzZjg1ZDI4MmIzZTVmYjgwNmE5MWU2My4uMzYxZTkwNzAx
MDlkZTVjYmY0NTE4MjE0ZmY4YTg5MDhkYmQ5NThlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0xNjMs
NCArMTYzLDYgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewog
CiAgICAgU2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyBzZWNv
bmRzKSAtPiAoKSBTeW5jaHJvbm91cwogICAgIFJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91
dEZvclRlc3RpbmcoKSAtPiAoKSBTeW5jaHJvbm91cworCisgICAgUmVzZXRRdW90YShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQpIC0+ICgpIEFzeW5jCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKaW5kZXgg
ZWZlN2UxNWIwNWY3ZDI1NjEwOWU4NjMyZTJmMzA1ZTIxYzM2ODRiNi4uM2Q2NTk0NzExYjUwMjlk
YzE3M2Y3OTAwNGU1NjAzYTNiZWJjYjk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcApAQCAtMTk2LDEz
ICsxOTYsNjggQEAgdm9pZCBFbmdpbmU6OmNsZWFyQ2FjaGVzRm9yT3JpZ2luKE5ldHdvcmtQcm9j
ZXNzJiBuZXR3b3JrUHJvY2VzcywgUEFMOjpTZXNzaW9uSUQKICAgICB9KTsKIH0KIAotdm9pZCBF
bmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIoTmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNz
LCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYg
Y2xpZW50T3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCitzdGF0aWMgdWludDY0X3QgZ2V0RGlyZWN0b3J5U2l6ZShjb25zdCBTdHJpbmcmIGRpcmVj
dG9yeVBhdGgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICB1aW50NjRf
dCBkaXJlY3RvcnlTaXplID0gMDsKKyAgICBEZXF1ZTxTdHJpbmc+IHBhdGhzOworICAgIHBhdGhz
LmFwcGVuZChkaXJlY3RvcnlQYXRoKTsKKyAgICB3aGlsZSAoIXBhdGhzLmlzRW1wdHkoKSkgewor
ICAgICAgICBhdXRvIHBhdGggPSBwYXRocy50YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKEZpbGVT
eXN0ZW06OmZpbGVJc0RpcmVjdG9yeShwYXRoLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1i
b2xpY0xpbmtzOjpObykpIHsKKyAgICAgICAgICAgIGF1dG8gbmV3UGF0aHMgPSBGaWxlU3lzdGVt
OjpsaXN0RGlyZWN0b3J5KHBhdGgsICIqIl9zKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbmV3
UGF0aCA6IG5ld1BhdGhzKSB7CisgICAgICAgICAgICAgICAgLy8gRmlsZXMgaW4gL0Jsb2JzIGRp
cmVjdG9yeSBhcmUgaGFyZCBsaW5rLgorICAgICAgICAgICAgICAgIGF1dG8gZmlsZU5hbWUgPSBG
aWxlU3lzdGVtOjpsYXN0Q29tcG9uZW50T2ZQYXRoSWdub3JpbmdUcmFpbGluZ1NsYXNoKG5ld1Bh
dGgpOworICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZSA9PSAiQmxvYnMiKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBwYXRocy5hcHBlbmQobmV3UGF0
aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgICAgIEZpbGVTeXN0ZW06OmdldEZp
bGVTaXplKHBhdGgsIGZpbGVTaXplKTsKKyAgICAgICAgZGlyZWN0b3J5U2l6ZSArPSBmaWxlU2l6
ZTsKKyAgICB9CisgICAgcmV0dXJuIGRpcmVjdG9yeVNpemU7Cit9CisKK3VpbnQ2NF90IEVuZ2lu
ZTo6ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYgb3JpZ2luKQogewotICAgIGZyb20obmV0d29ya1Byb2Nlc3MsIHNlc3Npb25JRCwg
W2NsaWVudE9yaWdpbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oYXV0byYgZW5naW5lKSBtdXRhYmxlIHsKLSAgICAgICAgZW5naW5lLnJlYWRDYWNoZXNG
cm9tRGlzayhjbGllbnRPcmlnaW4sIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXShhdXRvJiYgY2FjaGVzT3JFcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAgICB9KTsKKyAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChyb290UGF0aC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgU3RyaW5nIHNhbHRQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KHJvb3RQYXRoLCAic2FsdCJfcyk7CisgICAgYXV0byBzYWx0ID0gcmVh
ZE9yTWFrZVNhbHQoc2FsdFBhdGgpOworICAgIGlmICghc2FsdCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBLZXkga2V5KG9yaWdpbi50b3BPcmlnaW4udG9TdHJpbmcoKSwgb3JpZ2luLmNsaWVu
dE9yaWdpbi50b1N0cmluZygpLCB7IH0sIHsgfSwgKnNhbHQpOworICAgIFN0cmluZyBkaXJlY3Rv
cnlQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJvb3RQYXRoLCBr
ZXkuaGFzaEFzU3RyaW5nKCkpOworCisgICAgU3RyaW5nIHNpemVGaWxlUGF0aCA9IENhY2hlczo6
Y2FjaGVzU2l6ZUZpbGVuYW1lKGRpcmVjdG9yeVBhdGgpOworICAgIGlmIChhdXRvIHJlY29yZGVk
U2l6ZSA9IHJlYWRTaXplRmlsZShzaXplRmlsZVBhdGgpKQorICAgICAgICByZXR1cm4gKnJlY29y
ZGVkU2l6ZTsKKworICAgIHJldHVybiBnZXREaXJlY3RvcnlTaXplKGRpcmVjdG9yeVBhdGgpOwor
fQorCit2b2lkIEVuZ2luZTo6cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2lu
LCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYgY2FsbGJhY2spCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKKyAgICAg
ICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkp
OworCisgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90
YU1hbmFnZXIgPSBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lv
bklELCBvcmlnaW4pOworICAgIGlmICghc3RvcmFnZVF1b3RhTWFuYWdlcikKKyAgICAgICAgY2Fs
bGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpOworCisg
ICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKHNwYWNlUmVx
dWVzdGVkLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIEVuZ2luZTo6RW5naW5lKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgTmV0d29ya1Byb2Nlc3MmIHByb2Nlc3MsIFN0cmluZyYmIHJvb3RQ
YXRoKQpAQCAtMzQxLDcgKzM5Niw3IEBAIHZvaWQgRW5naW5lOjpyZWFkQ2FjaGVzRnJvbURpc2so
Y29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIENhY2hlc0NhbGxiCiAKICAgICAg
ICAgYXV0byYgY2FjaGVzID0gbV9jYWNoZXMuZW5zdXJlKG9yaWdpbiwgWyZvcmlnaW4sIHRoaXNd
IHsKICAgICAgICAgICAgIGF1dG8gcGF0aCA9IGNhY2hlc1Jvb3RQYXRoKG9yaWdpbik7Ci0gICAg
ICAgICAgICByZXR1cm4gQ2FjaGVzOjpjcmVhdGUoKnRoaXMsIFdlYkNvcmU6OkNsaWVudE9yaWdp
biB7IG9yaWdpbiB9LCBXVEZNb3ZlKHBhdGgpLCBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVv
dGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmlnaW4pKTsKKyAgICAgICAgICAgIHJldHVybiBDYWNo
ZXM6OmNyZWF0ZSgqdGhpcywgV2ViQ29yZTo6Q2xpZW50T3JpZ2luIHsgb3JpZ2luIH0sIFdURk1v
dmUocGF0aCkpOwogICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiAKICAgICAgICAgaWYgKGNh
Y2hlcy0+aXNJbml0aWFsaXplZCgpKSB7CkBAIC00NzMsMTIgKzUyOCwxMyBAQCB2b2lkIEVuZ2lu
ZTo6cmVtb3ZlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogICAgIH0pOwogfQogCi12b2lk
IEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90IHNpemUp
Cit2b2lkIEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90
IHNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
KyAgICBDb21wbGV0aW9uSGFuZGxlckNhbGxpbmdTY29wZSBjb21wbGV0aW9uSGFuZGxlckNhbGxl
cihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1faW9RdWV1ZS0+ZGlzcGF0Y2goW3BhdGggPSBwYXRo
Lmlzb2xhdGVkQ29weSgpLCBzaXplXSgpIHsKKyAgICBtX2lvUXVldWUtPmRpc3BhdGNoKFtwYXRo
ID0gcGF0aC5pc29sYXRlZENvcHkoKSwgc2l6ZSwgY29tcGxldGlvbkhhbmRsZXJDYWxsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIoZ2xvYmFsU2l6ZUZpbGVMb2NrKTsKICAgICAgICAgYXV0byBmaWxlSGFu
ZGxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2Rl
OjpXcml0ZSk7CiAgICAgICAgIGF1dG8gY2xvc2VGaWxlSGFuZGxlciA9IG1ha2VTY29wZUV4aXQo
WyZdIHsKQEAgLTQ4OSw2ICs1NDUsOCBAQCB2b2lkIEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90IHNpemUpCiAKICAgICAgICAgRmlsZVN5c3RlbTo6dHJ1
bmNhdGVGaWxlKGZpbGVIYW5kbGUsIDApOwogICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmls
ZShmaWxlSGFuZGxlLCBTdHJpbmc6Om51bWJlcihzaXplKS51dGY4KCkuZGF0YSgpLCBTdHJpbmc6
Om51bWJlcihzaXplKS51dGY4KCkubGVuZ3RoKCkpOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXJDYWxsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyQ2FsbGVyKV0oKSBtdXRhYmxlIHsgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTUxMyw4ICs1
NzEsOCBAQCBPcHRpb25hbDx1aW50NjRfdD4gRW5naW5lOjpyZWFkU2l6ZUZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoKQogICAgIGlmICghV1RGOjpjb252ZXJ0U2FmZWx5KGZpbGVTaXplLCBieXRlc1Rv
UmVhZCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBWZWN0b3I8Y2hhcj4g
YnVmZmVyKGJ5dGVzVG9SZWFkKTsKLSAgICBzaXplX3QgdG90YWxCeXRlc1JlYWQgPSBGaWxlU3lz
dGVtOjpyZWFkRnJvbUZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUo
KSk7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IGJ1ZmZlcihieXRlc1RvUmVhZCk7CisgICAg
c2l6ZV90IHRvdGFsQnl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVhZEZyb21GaWxlKGZpbGVIYW5k
bGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlci5kYXRhKCkpLCBidWZmZXIuc2l6ZSgp
KTsKICAgICBpZiAodG90YWxCeXRlc1JlYWQgIT0gYnl0ZXNUb1JlYWQpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oCmluZGV4IGEzYWFhZjA5MDFjOTVlNjE1MDUy
MTlkZDJjMWViN2Y2NTcyMGYwNTYuLjIyZWU2NmJjYTQ3NmJjZTJiY2E0YjJkNTFkYWNlOTU0N2Fk
NzE3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIk5ldHdv
cmtDYWNoZURhdGEuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvQ2xpZW50T3JpZ2luLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2Vy
Lmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTc5LDEyICs4MCwxNSBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplUXVvdGFVc2VyKE5ldHdvcmtQcm9jZXNzJiwg
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBzdGF0aWMgdWludDY0X3QgZGlza1VzYWdlKGNvbnN0
IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHZv
aWQgcmVxdWVzdFNwYWNlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNw
YWNlUmVxdWVzdGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OkRlY2lzaW9uKT4mJik7CisKICAgICBib29sIHNob3VsZFBlcnNpc3QoKSBjb25z
dCB7IHJldHVybiAhIW1faW9RdWV1ZTt9CiAKICAgICB2b2lkIHdyaXRlRmlsZShjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBOZXR3b3JrQ2FjaGU6OkRhdGEmJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdp
bmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKICAgICB2b2lkIHJlYWRGaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgTmV0d29ya0NhY2hlOjpE
YXRhJiwgaW50IGVycm9yKT4mJik7CiAgICAgdm9pZCByZW1vdmVGaWxlKGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUpOwotICAgIHZvaWQgd3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmLCB1aW50NjRf
dCBzaXplKTsKKyAgICB2b2lkIHdyaXRlU2l6ZUZpbGUoY29uc3QgU3RyaW5nJiwgdWludDY0X3Qg
c2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICBzdGF0aWMgT3B0aW9uYWw8
dWludDY0X3Q+IHJlYWRTaXplRmlsZShjb25zdCBTdHJpbmcmKTsKIAogICAgIGNvbnN0IFN0cmlu
ZyYgcm9vdFBhdGgoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RQYXRoOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGUuY3BwCmluZGV4IDZmYzUzZTAzYzRkNjdhMDBmYTkxZjJiM2ZjZmJkZDdlMTE5Njhj
ZTMuLmJhMTM0Y2Y0Y2FiMDA1ZjM0MjEzODlkNTU5MDE2OWVjNDdhZDRlOWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2Fj
aGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGUuY3BwCkBAIC00MTQsOCArNDE0LDExIEBAIHZvaWQgQ2FjaGU6OnB1dChW
ZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJiBjYWxs
YmFjaykKICAgICAgICAgYXV0byBwb3NpdGlvbiA9IChzYW1lVVJMUmVjb3JkcyAmJiAhbWF0Y2hp
bmdSZWNvcmRzLmlzRW1wdHkoKSkgPyBzYW1lVVJMUmVjb3Jkcy0+ZmluZE1hdGNoaW5nKFsmXShj
b25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIgPT0gbWF0Y2hpbmdSZWNv
cmRzWzBdOyB9KSA6IG5vdEZvdW5kOwogCiAgICAgICAgIHNwYWNlUmVxdWlyZWQgKz0gcmVjb3Jk
LnJlc3BvbnNlQm9keVNpemU7Ci0gICAgICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkKLSAg
ICAgICAgICAgIHNwYWNlUmVxdWlyZWQgLT0gc2FtZVVSTFJlY29yZHMtPmF0KHBvc2l0aW9uKS5z
aXplOworICAgICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgIHVp
bnQ2NF90IHNwYWNlRGVjcmVhc2VkID0gc2FtZVVSTFJlY29yZHMtPmF0KHBvc2l0aW9uKS5zaXpl
OworICAgICAgICAgICAgaWYgKHNwYWNlUmVxdWlyZWQgPj0gc3BhY2VEZWNyZWFzZWQpCisgICAg
ICAgICAgICAgICAgc3BhY2VSZXF1aXJlZCAtPSBzcGFjZURlY3JlYXNlZDsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIG1fY2FjaGVzLnJlcXVlc3RTcGFjZShzcGFjZVJlcXVpcmVkLCBbY2FjaGVz
ID0gbWFrZVJlZihtX2NhY2hlcyksIGlkZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIHJlY29yZHMg
PSBXVEZNb3ZlKHJlY29yZHMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShPcHRpb25h
bDxET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewpAQCAtNDUwLDcgKzQ1
MywxMCBAQCB2b2lkIENhY2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVx
dWVzdCwgV2ViQ29yZTo6Q2FjaGVRdWVyeU9wdGlvbgogICAgICAgICByZXR1cm4gc2hvdWxkUmVt
b3ZlOwogICAgIH0pOwogCi0gICAgY2FsbGJhY2soV1RGTW92ZShyZWNvcmRJZGVudGlmaWVycykp
OworICAgIC8vIFRoaXMgb3BlcmF0aW9uIHdvdWxkIGNoYW5nZSBjYWNoZXMgc2l6ZSwgc28gbWFr
ZSBzdXJlIGNhbGxiYWNrIGZpbmlzaGVzIGFmdGVyIHNpemUgZmlsZSBpcyB1cGRhdGVkLgorICAg
IG1fY2FjaGVzLnVwZGF0ZVNpemVGaWxlKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBy
ZWNvcmRJZGVudGlmaWVycyA9IFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpXSgpIG11dGFibGUg
eworICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJzKSk7CisgICAgfSk7
CiB9CiAKIHZvaWQgQ2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KGNvbnN0IFZlY3Rvcjx1aW50
NjRfdD4mIHJlY29yZElkZW50aWZpZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmlu
ZGV4IDAzYTA2MGNlZjJiYzY3MjAxNGI3NTk2YmM1ZGE0ZWU5NDM4NjFhN2MuLmYyMzc0NTE4M2Zm
NzE3NTkyN2E1MDBhNWQwNmY3YzdiMjNjMWNkMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hl
cy5jcHAKQEAgLTU2LDM2ICs1NiwyMSBAQCBTdHJpbmcgQ2FjaGVzOjpjYWNoZXNTaXplRmlsZW5h
bWUoY29uc3QgU3RyaW5nJiBjYWNoZXNSb290c1BhdGgpCiAgICAgcmV0dXJuIEZpbGVTeXN0ZW06
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZXNSb290c1BhdGgsICJlc3RpbWF0ZWRzaXpl
Il9zKTsKIH0KIAotUmVmPENhY2hlcz4gQ2FjaGVzOjpjcmVhdGUoRW5naW5lJiBlbmdpbmUsIFdl
YkNvcmU6OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXImIHF1b3RhTWFuYWdlcikKK1JlZjxDYWNoZXM+IENhY2hlczo6
Y3JlYXRlKEVuZ2luZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0
cmluZyYmIHJvb3RQYXRoKQogewotICAgIGF1dG8gY2FjaGVzID0gYWRvcHRSZWYoKm5ldyBDYWNo
ZXMgeyBlbmdpbmUsIFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShyb290UGF0aCksIHF1b3RhTWFu
YWdlciB9KTsKLSAgICBxdW90YU1hbmFnZXIuYWRkVXNlcihjYWNoZXMuZ2V0KCkpOwotICAgIHJl
dHVybiBjYWNoZXM7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2FjaGVzIHsgZW5naW5lLCBX
VEZNb3ZlKG9yaWdpbiksIFdURk1vdmUocm9vdFBhdGgpIH0pOwogfQogCi1DYWNoZXM6OkNhY2hl
cyhFbmdpbmUmIGVuZ2luZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcm
JiByb290UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYgcXVvdGFNYW5hZ2VyKQor
Q2FjaGVzOjpDYWNoZXMoRW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmIG9y
aWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgpCiAgICAgOiBtX2VuZ2luZSgmZW5naW5lKQogICAgICwg
bV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICwgbV9yb290UGF0aChXVEZNb3ZlKHJvb3RQ
YXRoKSkKLSAgICAsIG1fcXVvdGFNYW5hZ2VyKG1ha2VXZWFrUHRyKHF1b3RhTWFuYWdlcikpCiB7
CiB9CiAKIENhY2hlczo6fkNhY2hlcygpCiB7CiAgICAgQVNTRVJUKG1fcGVuZGluZ1dyaXRpbmdD
YWNoZXNUb0Rpc2tDYWxsYmFja3MuaXNFbXB0eSgpKTsKLQotICAgIGlmIChtX3F1b3RhTWFuYWdl
cikKLSAgICAgICAgbV9xdW90YU1hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotfQotCi12b2lk
IENhY2hlczo6d2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxs
YmFjaykKLXsKLSAgICBpbml0aWFsaXplKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShh
dXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihDYWNoZVN0b3JhZ2UsICJDYWNoZXM6OmluaXRpYWxpemUgZmFpbGVk
LCByZXBvcnRlZCBzcGFjZSB1c2VkIHdpbGwgYmUgemVybyIpOwotICAgICAgICBjYWxsYmFjaygp
OwotICAgIH0pOwogfQogCiB2b2lkIENhY2hlczo6cmV0cmlldmVPcmlnaW5Gcm9tRGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYgZm9sZGVyUGF0aCwgV29ya1F1ZXVlJiBxdWV1ZSwgV1RGOjpDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdpbj4mJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCkBAIC0yMDgsMTAgKzE5MywxNCBAQCB2b2lkIENhY2hlczo6aW5pdGlh
bGl6ZShXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJh
Y2spCiAgICAgfSk7CiB9CiAKLXZvaWQgQ2FjaGVzOjp1cGRhdGVTaXplRmlsZSgpCit2b2lkIENh
Y2hlczo6dXBkYXRlU2l6ZUZpbGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIGlmIChtX2VuZ2luZSkKLSAgICAgICAgbV9lbmdpbmUtPndyaXRl
U2l6ZUZpbGUoY2FjaGVzU2l6ZUZpbGVuYW1lKG1fcm9vdFBhdGgpLCBtX3NpemUpOworICAgIGlm
ICghbV9lbmdpbmUpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1fZW5naW5lLT53cml0ZVNpemVGaWxlKGNhY2hlc1NpemVGaWxl
bmFtZShtX3Jvb3RQYXRoKSwgbV9zaXplLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKIHZvaWQgQ2FjaGVzOjppbml0aWFsaXplU2l6ZSgpCkBAIC0yMzIsMTMgKzIyMSwxMiBAQCB2
b2lkIENhY2hlczo6aW5pdGlhbGl6ZVNpemUoKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgICAgICAgICB1cGRh
dGVTaXplRmlsZSgpOwotCi0gICAgICAgICAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAg
ICAgICAgICAgYXV0byBwZW5kaW5nQ2FsbGJhY2tzID0gV1RGTW92ZShtX3BlbmRpbmdJbml0aWFs
aXphdGlvbkNhbGxiYWNrcyk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogcGVu
ZGluZ0NhbGxiYWNrcykKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQpOwot
CisgICAgICAgICAgICB1cGRhdGVTaXplRmlsZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgbV9pc0luaXRp
YWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhdXRvIHBlbmRpbmdDYWxsYmFja3MgPSBX
VEZNb3ZlKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uQ2FsbGJhY2tzKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogcGVuZGluZ0NhbGxiYWNrcykKKyAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2soV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gZGVjb2RlZCA9IENhY2hlOjpkZWNv
ZGVSZWNvcmRIZWFkZXIoKnN0b3JhZ2UpOwpAQCAtMjczLDEzICsyNjEsMTEgQEAgdm9pZCBDYWNo
ZXM6OmNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
ICAgICAgICAgbV9zdG9yYWdlLT5jbGVhcihTdHJpbmcgeyB9LCAtV2FsbFRpbWU6OmluZmluaXR5
KCksIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y2xlYXJN
ZW1vcnlSZXByZXNlbnRhdGlvbigpOwotICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+cmVzZXRT
cGFjZVVzZWQoKTsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgICAgIH0p
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24o
KTsKLSAgICByZXNldFNwYWNlVXNlZCgpOwogICAgIGNsZWFyUGVuZGluZ1dyaXRpbmdDYWNoZXNU
b0Rpc2tDYWxsYmFja3MoKTsKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQpAQCAtNTI1LDEy
ICs1MTEsMTIgQEAgdm9pZCBDYWNoZXM6OnJlYWRSZWNvcmRzTGlzdChDYWNoZSYgY2FjaGUsIE5l
dHdvcmtDYWNoZTo6U3RvcmFnZTo6VHJhdmVyc2VIYW5kbGUKIAogdm9pZCBDYWNoZXM6OnJlcXVl
c3RTcGFjZSh1aW50NjRfdCBzcGFjZVJlcXVpcmVkLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6
Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgaWYgKCFtX3F1b3RhTWFuYWdl
cikgeworICAgIGlmICghbV9lbmdpbmUpIHsKICAgICAgICAgY2FsbGJhY2soRXJyb3I6OlF1b3Rh
RXhjZWVkZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9xdW90YU1hbmFnZXIt
PnJlcXVlc3RTcGFjZShzcGFjZVJlcXVpcmVkLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CisgICAgbV9lbmdpbmUtPnJlcXVlc3RTcGFjZSht
X29yaWdpbiwgc3BhY2VSZXF1aXJlZCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1
dG8gZGVjaXNpb24pIG11dGFibGUgewogICAgICAgICBzd2l0Y2ggKGRlY2lzaW9uKSB7CiAgICAg
ICAgIGNhc2UgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk6CiAg
ICAgICAgICAgICBjYWxsYmFjayhFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CkBAIC01NDgsNyArNTM0
LDYgQEAgdm9pZCBDYWNoZXM6OndyaXRlUmVjb3JkKGNvbnN0IENhY2hlJiBjYWNoZSwgY29uc3Qg
UmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZEluZm8KICAgICBBU1NFUlQobV9zaXplID49IHByZXZp
b3VzUmVjb3JkU2l6ZSk7CiAgICAgbV9zaXplICs9IHJlY29yZEluZm9ybWF0aW9uLnNpemU7CiAg
ICAgbV9zaXplIC09IHByZXZpb3VzUmVjb3JkU2l6ZTsKLSAgICB1cGRhdGVTaXplRmlsZSgpOwog
CiAgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpIHsKICAgICAgICAgbV92b2xhdGlsZVN0b3JhZ2Uu
c2V0KHJlY29yZEluZm9ybWF0aW9uLmtleSwgV1RGTW92ZShyZWNvcmQpKTsKQEAgLTU1NiwxMyAr
NTQxLDE1IEBAIHZvaWQgQ2FjaGVzOjp3cml0ZVJlY29yZChjb25zdCBDYWNoZSYgY2FjaGUsIGNv
bnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmRJbmZvCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBtX3N0b3JhZ2UtPnN0b3JlKENhY2hlOjplbmNvZGUocmVjb3JkSW5mb3JtYXRpb24s
IHJlY29yZCksIHsgfSwgW3Byb3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShpbnQgZXJyb3IpIG11dGFibGUgeworICAgIG1f
c3RvcmFnZS0+c3RvcmUoQ2FjaGU6OmVuY29kZShyZWNvcmRJbmZvcm1hdGlvbiwgcmVjb3JkKSwg
eyB9LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwcm90ZWN0ZWRTdG9y
YWdlID0gbWFrZVJlZigqbV9zdG9yYWdlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0o
aW50IGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihDYWNoZVN0b3JhZ2UsICJDYWNoZXM6OndyaXRlUmVjb3JkIGZhaWxl
ZCB3aXRoIGVycm9yICVkIiwgZXJyb3IpOwogICAgICAgICAgICAgY2FsbGJhY2soRXJyb3I6Oldy
aXRlRGlzayk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgY2FsbGJh
Y2soV1RGOjpudWxsb3B0KTsKKyAgICAgICAgdXBkYXRlU2l6ZUZpbGUoW2NhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51
bGxvcHQpOworICAgICAgICB9KTsKICAgICB9KTsKIH0KIApAQCAtNjA1LDcgKzU5Miw3IEBAIHZv
aWQgQ2FjaGVzOjpyZW1vdmVSZWNvcmQoY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZCkK
IAogICAgIEFTU0VSVChtX3NpemUgPj0gcmVjb3JkLnNpemUpOwogICAgIG1fc2l6ZSAtPSByZWNv
cmQuc2l6ZTsKLSAgICB1cGRhdGVTaXplRmlsZSgpOworICAgIHVwZGF0ZVNpemVGaWxlKFtdIHsg
fSk7CiAKICAgICByZW1vdmVDYWNoZUVudHJ5KHJlY29yZC5rZXkpOwogfQpAQCAtNjIxLDE3ICs2
MDgsNiBAQCB2b2lkIENhY2hlczo6cmVtb3ZlQ2FjaGVFbnRyeShjb25zdCBOZXR3b3JrQ2FjaGU6
OktleSYga2V5KQogICAgIG1fc3RvcmFnZS0+cmVtb3ZlKGtleSk7CiB9CiAKLXZvaWQgQ2FjaGVz
OjpyZXNldFNwYWNlVXNlZCgpCi17Ci0gICAgbV9zaXplID0gMDsKLSAgICB1cGRhdGVTaXplRmls
ZSgpOwotCi0gICAgaWYgKG1fcXVvdGFNYW5hZ2VyKSB7Ci0gICAgICAgIG1fcXVvdGFNYW5hZ2Vy
LT5yZW1vdmVVc2VyKCp0aGlzKTsKLSAgICAgICAgbV9xdW90YU1hbmFnZXItPmFkZFVzZXIoKnRo
aXMpOwotICAgIH0KLX0KLQogdm9pZCBDYWNoZXM6OmNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24o
KQogewogICAgIG1ha2VEaXJ0eSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKaW5kZXggMDMy
MzFmM2E5YjA1NzY3MmQ2MzFiYjk2ZTY3YTZlYjk5ZTFkN2NiYi4uNWQzOTRhMGU0ODg1N2IwMjVj
YWE0ODM0YWQyNmJlODQ3ZGQ5ZjU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCkBAIC0y
OCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaCIKICNpbmNs
dWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmln
aW4uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VRdW90YVVzZXIuaD4KICNpbmNsdWRlIDx3
dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KIApAQCAtNDIs
MTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBDYWNoZVN0b3JhZ2UgewogCiBjbGFzcyBFbmdpbmU7CiAK
LWNsYXNzIENhY2hlcyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENhY2hlcz4sIHByaXZhdGUg
V2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlciB7CitjbGFzcyBDYWNoZXMgZmluYWwgOiBwdWJsaWMg
UmVmQ291bnRlZDxDYWNoZXM+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgU3RyaW5nIGNhY2hlc1Np
emVGaWxlbmFtZShjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgUmVmPENhY2hlcz4gY3JlYXRl
KEVuZ2luZSYsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmLCBTdHJpbmcmJiByb290UGF0aCwgV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYpOworICAgIHN0YXRpYyBTdHJpbmcgY2FjaGVzU2l6
ZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgY2FjaGVzUm9vdHNQYXRoKTsKKyAgICBzdGF0aWMgUmVm
PENhY2hlcz4gY3JlYXRlKEVuZ2luZSYsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmLCBTdHJpbmcm
JiByb290UGF0aCk7CiAgICAgfkNhY2hlcygpOwogCiAgICAgc3RhdGljIHZvaWQgcmV0cmlldmVP
cmlnaW5Gcm9tRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZm9sZGVyUGF0aCwgV29ya1F1ZXVlJiwg
V1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkNsaWVudE9yaWdp
bj4mJik+JiYpOwpAQCAtNzksMjIgKzc4LDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIo
V1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJNZW1vcnlS
ZXByZXNlbnRhdGlvbigpOwotICAgIHZvaWQgcmVzZXRTcGFjZVVzZWQoKTsKIAogICAgIHVpbnQ2
NF90IHN0b3JhZ2VTaXplKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVTaXplRmlsZShDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiBwcml2YXRlOgotICAgIENhY2hlcyhFbmdpbmUmLCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXImKTsKLQotICAgIC8vIFN0b3JhZ2VRdW90YVVzZXIgQVBJLgotICAgIHVp
bnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIENh
Y2hlcyhFbmdpbmUmLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgp
OwogCiAgICAgdm9pZCBpbml0aWFsaXplU2l6ZSgpOwogICAgIHZvaWQgcmVhZENhY2hlc0Zyb21E
aXNrKFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBXZWJDb3JlOjpE
T01DYWNoZUVuZ2luZTo6RXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIHdyaXRlQ2FjaGVzVG9EaXNr
KFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAKLSAgICB2
b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwot
CiAgICAgdm9pZCBzdG9yZU9yaWdpbihXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlv
bkNhbGxiYWNrJiYpOwogICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+
IHJlYWRPcmlnaW4oY29uc3QgTmV0d29ya0NhY2hlOjpEYXRhJik7CiAKQEAgLTEwNiw4ICsxMDAs
NiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBoYXNBY3RpdmVDYWNoZSgpIGNvbnN0OwogCi0gICAg
dm9pZCB1cGRhdGVTaXplRmlsZSgpOwotCiAgICAgYm9vbCBtX2lzSW5pdGlhbGl6ZWQgeyBmYWxz
ZSB9OwogICAgIEVuZ2luZSogbV9lbmdpbmUgeyBudWxscHRyIH07CiAgICAgdWludDY0X3QgbV91
cGRhdGVDb3VudGVyIHsgMCB9OwpAQCAtMTIyLDcgKzExNCw2IEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2s+IG1fcGVuZGlu
Z0luaXRpYWxpemF0aW9uQ2FsbGJhY2tzOwogICAgIGJvb2wgbV9pc1dyaXRpbmdDYWNoZXNUb0Rp
c2sgeyBmYWxzZSB9OwogICAgIERlcXVlPENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8
V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPik+PiBtX3BlbmRpbmdXcml0aW5nQ2FjaGVz
VG9EaXNrQ2FsbGJhY2tzOwotICAgIFdlYWtQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
cj4gbV9xdW90YU1hbmFnZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBDYWNoZVN0b3JhZ2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNw
cAppbmRleCBjMGZjZjljNWY2MDBhYTVhYzExNjNlNDdhNGIyNmRhYzQyMDY1YWE5Li42ZDBjMTI5
YTc0MDUxMGQzODY5NzM3MDVhZDA5MmVmMTMyY2MwNzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuY3BwCkBAIC01NSw2ICs1NSw4
IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiAKICAgICBlbmNvZGVyIDw8IGxvY2FsU3RvcmFnZURpcmVjdG9yeSA8
PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CiAKKyAgICBlbmNvZGVyIDw8
IGNhY2hlU3RvcmFnZURpcmVjdG9yeSA8PCBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7CisKICAgICBlbmNvZGVyIDw8IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKICAgICBlbmNv
ZGVyIDw8IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7CiB9CkBAIC0xNDEsNiArMTQz
LDE4IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzPiBXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUg
PSBXVEZNb3ZlKCpsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCisgICAg
T3B0aW9uYWw8U3RyaW5nPiBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgZGVjb2RlciA+PiBj
YWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnkgPSBXVEZNb3ZlKCpjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOworCisgICAgT3B0aW9u
YWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGU7CisgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjYWNoZVN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOworCiAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHBlck9yaWdpblN0b3Jh
Z2VRdW90YTsKICAgICBkZWNvZGVyID4+IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKICAgICBpZiAo
IXBlck9yaWdpblN0b3JhZ2VRdW90YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IDA5NWYwOWQ2YWY5M2Y5MTNlYmIyOWY3MDI2
N2FlOWMxYjc0YmU4OGUuLmYyN2RmNDg5ODA5ZjMxOTYwOGI2ODBjYjJhOGExYzE0YjcwMTg0Mzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRl
cnMuaApAQCAtNzEsNiArNzEsOSBAQCBzdHJ1Y3QgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMg
ewogICAgIFN0cmluZyBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIGxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKIAorICAgIFN0
cmluZyBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IGNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKwogICAgIHVpbnQ2NF90IHBl
ck9yaWdpblN0b3JhZ2VRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1
bHRRdW90YSgpIH07CiAgICAgdWludDY0X3QgcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90
YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRUaGlyZFBhcnR5UXVvdGEo
KSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vi
c2l0ZURhdGFTdG9yZVJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dl
YnNpdGVEYXRhU3RvcmVSZWYuY3BwCmluZGV4IDdlYjc1Nzc2NGU5NDhmNWE0ZGQ1NzdlYWJiYzYy
MzFhMjczOGNhYTYuLjk5YTQwODZlMjNmZDYwMTYxZGMwNDFiMDg4ZjcxZDBjMDc1ZjVjNzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9y
ZVJlZi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0
YVN0b3JlUmVmLmNwcApAQCAtNjg2LDMgKzY4NiwxMSBAQCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9y
ZVNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhXS1dlYnNpdGVEYXRhU3RvcmVS
ZQogewogICAgIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZVJlZiktPnNldENhY2hlTW9kZWxTeW5j
aHJvbm91c2x5Rm9yVGVzdGluZyhXZWJLaXQ6OnRvQ2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CiB9
CisKK3ZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlUmVzZXRRdW90YShXS1dlYnNpdGVEYXRhU3RvcmVS
ZWYgZGF0YVN0b3JlUmVmLCB2b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVSZXNldFF1
b3RhQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlUmVm
KS0+cmVzZXRRdW90YShbY29udGV4dCwgY2FsbGJhY2tdIHsKKyAgICAgICAgaWYgKGNhbGxiYWNr
KQorICAgICAgICAgICAgY2FsbGJhY2soY29udGV4dCk7CisgICAgfSk7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCmlu
ZGV4IDk1MjM5YTNiMGIzYWQ2MGMyZjc4MzdmZTZmNWExMDc3MzYxYWZkZTAuLjIzZmMyZTcyNmY5
MjBmMWFiM2RmOWVkMGQyN2ZkMDYxYWMyOTcxNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCkBAIC0xNTUsNiArMTU1
LDkgQEAgV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlQ2xlYXJBZENsaWNrQXR0cmli
dXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3YKIAogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRl
RGF0YVN0b3JlU2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKFdLV2Vic2l0ZURh
dGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIFdLQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKTsKIAordHlw
ZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlUmVzZXRRdW90YUNhbGxiYWNrKSh2b2lkKiBm
dW5jdGlvbkNvbnRleHQpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlUmVzZXRR
dW90YShXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCB2b2lkKiBjb250ZXh0LCBX
S1dlYnNpdGVEYXRhU3RvcmVSZXNldFF1b3RhQ2FsbGJhY2sgY2FsbGJhY2spOworCiAjaWZkZWYg
X19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggYWQ1Nzk5MWUzY2FjN2M1
YWZiZWZjOGE2NWY5YWZmOWI0MDljYTkyNC4uNGM0MWM5MzhhODY3ZGFjNjAyMjdlZTQwZDY3NWM5
NmY0ZDRmMTgzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0xMzY3LDYgKzEzNjcsMTEgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0aW9uKCkKICAgICBtX2FjdGl2
aXR5RnJvbVdlYlByb2Nlc3NlcyA9IG51bGxwdHI7CiB9CiAKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6cmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBzZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFF1b3RhKHNlc3Npb25JRCksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICN1
bmRlZiBNRVNTQUdFX0NIRUNLCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IDcyY2U0MjU2YmFhZTA3YzkyZWZjZDQ5
OGUxMzIwNmJhMjk5NDNiNWEuLmI3N2NlN2QzZTZhZmVlMTFhZTYyMDA5Y2Y2OWVjZjRiNzAwY2Q1
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5oCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gY2xhc3MgU3RvcmFnZUFjY2Vz
c1Byb21wdFdhc1Nob3duIDogYm9vbDsKIGVudW0gY2xhc3MgU3RvcmFnZUFjY2Vzc1dhc0dyYW50
ZWQgOiBib29sOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5E
YXRhOworc3RydWN0IENsaWVudE9yaWdpbjsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0x
OTYsNiArMTk3LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lD
dXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHVucmVnaXN0ZXJTY2hlbWVG
b3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKIAorICAgIHZvaWQgcmVzZXRR
dW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKwogcHJp
dmF0ZToKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAgICB2b2lkIGdldExhdW5jaE9w
dGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJikgb3ZlcnJpZGU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggNDA2OGVlNDFmZmNkNmRm
OTVhM2QzYjUxNmJiYzI1MzBlMmM5OTg5MS4uN2VlY2EzZDNjYjQzYjNiMjY3MDYyOWQwZmFjZGY1
MTE5ODgwYWIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cApAQCAtNTUxLDYgKzU1MSwxMiBAQCBOZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9v
bDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aAogICAgIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0g
bG9jYWxTdG9yYWdlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlKTsKIAorICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0
YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKSA6IG51
bGxTdHJpbmcoKTsKKyAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0
b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgICAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eSA9IFdURk1vdmUoY2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKKyAgICB9CisKICAgICBpZiAobV93
ZWJzaXRlRGF0YVN0b3JlKQogICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkoKTsKICAgICBpZiAocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KaW5kZXgg
MGZmM2VhMDk2MzFiNTc3ZDFlYTc5MDgyNWUzMDVlZTkzMjNmYmRjNy4uMDcxOTllY2FjZGNiNDc2
NDkwNzQzMzI4ZTk4OWNiYWM1YmFiNGNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVD
b2NvYS5tbQpAQCAtMTkxLDYgKzE5MSwxMCBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBX
ZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICAgICBpZiAoIXBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGly
ZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CiAKKyAgICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IGNhY2hlU3RvcmFnZURp
cmVjdG9yeSgpOworICAgIGlmICghcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNF
bXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3Jp
dGVEaXJlY3RvcnkocGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKwogICAgIHBhcmFtZXRlcnMu
cGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gcGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7CiAgICAgcGFy
YW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhID0gcGVyVGhpcmRQYXJ0eU9y
aWdpblN0b3JhZ2VRdW90YSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IGJiOTg0MTY2NDU0YjU2
YWVhNGM4ZGJkNDg1YjcyMTQwMGJiMTg2Y2EuLmFjMmYzOGQ3ZWRiNTRmN2EyNGFiYWQzZGE0NGU1
NmQ4ZWQzNjE3OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0yMDgzLDYgKzIwODMsMTIgQEAgV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShsb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKICAgICB9CiAKKyAgICBhdXRvIGNhY2hlU3RvcmFnZURpcmVjdG9y
eSA9IHRoaXMtPmNhY2hlU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGlmICghY2FjaGVTdG9yYWdl
RGlyZWN0b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIHBhcmFt
ZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gY2FjaGVTdG9yYWdlRGlyZWN0b3J5OworICAg
IH0KKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIHBhcmFtZXRlcnMuaW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5ID0gcmVzb2x2ZWRJbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKTsK
ICAgICBpZiAoIXBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkK
QEAgLTIxNjksNiArMjE3NSwxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldExvY2FsU3Rv
cmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxTdG9yYWdlRAogICAgIEFTU0VS
VCghY29tcGxldGlvbkhhbmRsZXIpOwogfQogCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlc2V0
UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGZvciAoYXV0byYgcHJvY2Vzc1Bvb2wg
OiBwcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAoYXV0byogcHJvY2VzcyA9IHByb2Nlc3NQ
b29sLT5uZXR3b3JrUHJvY2VzcygpKQorICAgICAgICAgICAgcHJvY2Vzcy0+cmVzZXRRdW90YSht
X3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5
UmVmKCldIHsgfSk7CisgICAgfQorfQorCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogV1RGOjpTdHJp
bmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdE1lZGlhQ2FjaGVEaXJlY3RvcnkoKQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oCmluZGV4IDI3ODRmZTM3ZTNlYTRhOGExOGU1NTUxZDM5YjJjYTM5OTIwN2ZhYWEuLmY1
ZWU0MjIwN2RhMjBmOTI3NjFhZGIxMDI1Mzk2Y2QxY2E4MWVmOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAg
LTI5MSw3ICsyOTEsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFdURjo6U3RyaW5nIGRlZmF1bHRN
ZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCk7CiAgICAgc3RhdGljIFdURjo6U3RyaW5nIGRlZmF1
bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsKICAgICBzdGF0aWMgV1RGOjpT
dHJpbmcgZGVmYXVsdEphdmFTY3JpcHRDb25maWd1cmF0aW9uRGlyZWN0b3J5KCk7Ci0gICAgCisK
KyAgICB2b2lkIHJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKwogcHJp
dmF0ZToKICAgICB2b2lkIGZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIFJlZlB0cjxXb3JrUXVldWU+
JiYsIEZ1bmN0aW9uPHZvaWQoVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPik+JiYgYXBwbHkpOwog
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGJm
MTMzYWEzODIxMjkzYjIxYzEyOTZjOTliOTg5Y2Y3NmZjZjlkZC4uY2I2YzM1YmI1NDVmODhjNTBm
OGJlODc0NzY3YTAyNjRkMmIzZTBiZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE5LTExLTIxICBTaWh1aSBMaXUg
IDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENyb3NzLXRocmVhZCB2ZXJzaW9uIFN0
b3JhZ2VRdW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMzk3MQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTcyOTAzNDk+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHA6IFJlbW92
ZWQgYXMgd2UgaGF2ZSBhIGRpZmZlcmVudCBTdG9yYWdlUXVvdGFNYW5hZ2VyIAorICAgICAgICBp
bXBsZW1lbnRhdGlvbiBub3cuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHA6IHJlc2V0IFN0b3JhZ2VRdW90YU1hbmFnZXIncyBxdW90YSBiZXR3ZWVuIHRlc3Rz
LgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZh
bHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFF1b3RhKToKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisKIDIwMTktMTEtMjEgIEpv
bmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIHJ1bi13ZWJraXQt
dGVzdHM6IENsZWFuLXVwIHNpbXVsYXRvciBwcm9jZXNzZXMgYWZ0ZXIgdGVhcmluZyBkb3duIHNp
bXVsYXRvcnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzMxOWQyZmM0OTcwZWM0ZWViY2Qw
MTE0YTM0MDcwZjVhZGRkMWEwNC4uYjNiYTlhMmNhZGVmYTFiNWE1OThhNmU0MjA2NDIxNjdmNjYx
NGUwZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTczNyw3ICs3MzcsNiBAQAogCQk5Mzk5
QkEwNjIzNzExMTRGMDA4MzkyQkYgLyogSW5kZXhlZERCTm90SW5QYWdlQ2FjaGUuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk5QkEw
MzIzNzExMEJGMDA4MzkyQkYgLyogSW5kZXhlZERCTm90SW5QYWdlQ2FjaGUuaHRtbCAqLzsgfTsK
IAkJOTNBRjRFQ0UxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dEZvckltYWdlc19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNBRjRFQ0QxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwICovOyB9OwogCQk5M0FGNEVEMTE1
MDZGMTMwMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0FGNEVDRjE1MDZGMTIzMDA3RkQ1
N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCAqLzsgfTsKLQkJOTNCNjIwNTQyMzRFQTYyQzAwRDQ5
Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNjIwNTMyMzRFQTMyQjAwRDQ5Qjk3IC8qIFN0b3JhZ2VR
dW90YU1hbmFnZXIuY3BwICovOyB9OwogCQk5M0NGQTg2NzFDRUI5RTM4MDAwNTY1QTggLyogYXV0
b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQ0ZBODY2MUNFQjlERTEwMDA1NjVBOCAvKiBhdXRvZm9j
dXNlZC10ZXh0LWlucHV0Lmh0bWwgKi87IH07CiAJCTkzRDExOUZDMjJDNjgwRjcwMDlCRTNDNyAv
KiBsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRDExOUZCMjJDNTcxMTIwMDlC
RTNDNyAvKiBsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sICovOyB9OwogCQk5
M0UyQzU1NTFGRDMyMDQxMDBFMURGNkEgLyogTGluZUVuZGluZy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0UyQzU1NDFGRDMyMDQxMDBFMURGNkEg
LyogTGluZUVuZGluZy5jcHAgKi87IH07CkBAIC0xMTQyLDcgKzExNDEsNiBAQAogCQkJZHN0UGF0
aCA9IFRlc3RXZWJLaXRBUEkucmVzb3VyY2VzOwogCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDc7CiAJ
CQlmaWxlcyA9ICgKLQkJCQlDRDgzOTRERjIzMkFGN0MwMDAxNDk0OTUgLyogbWVkaWEtbG9hZGlu
Zy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTU1QTgxN0ZGMjE4MTAyMUEwMDA0QTM5
QSAvKiAxMDB4MTAwLXJlZC50Z2EgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMUE5RTUyQzkx
M0U2NUVGNDAwNjkxN0Y1IC8qIDE4LWNoYXJhY3RlcnMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LywKIAkJCQk1NUE4MTgwMDIxODEwMjIxMDAwNEEzOUEgLyogNDAweDQwMC1ncmVlbi5wbmcgaW4g
Q29weSBSZXNvdXJjZXMgKi8sCkBAIC0xMzc1LDYgKzEzNzMsNyBAQAogCQkJCTkzMEFENDAyMTUw
Njk4RDAwMDY3OTcwRiAvKiBsb3RzLW9mLXRleHQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywK
IAkJCQlBRDU3QUMyMjFEQTc0NjZFMDBGRjFCREUgLyogbWFueS1pZnJhbWVzLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8sCiAJCQkJNzc3MkVDRTEyMkZFMDZDNjAwMDlBNzk5IC8qIG1hbnktc2Ft
ZS1vcmlnaW4taWZyYW1lcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCUNEODM5NERG
MjMyQUY3QzAwMDE0OTQ5NSAvKiBtZWRpYS1sb2FkaW5nLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMg
Ki8sCiAJCQkJQ0RBMzE1OUExRUQ1NDhGMTAwOUY2MEQzIC8qIE1lZGlhUGxheWJhY2tTbGVlcEFz
c2VydGlvbi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCUNEQzk0NDJGMUVGMjA1RDYw
MDU5QzNDNCAvKiBtZWRpYXN0cmVhbXRyYWNrLWRldGFjaGVkLmh0bWwgaW4gQ29weSBSZXNvdXJj
ZXMgKi8sCiAJCQkJRTEyMjBEQ0ExNTVCMjhBQTAwMTNFMkZDIC8qIE1lbW9yeUNhY2hlRGlzYWJs
ZVdpdGhpblJlc291cmNlTG9hZERlbGVnYXRlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCkBA
IC0yMTQ3LDcgKzIxNDYsNiBAQAogCQk5M0FGNEVDQTE1MDZGMDM1MDA3RkQ1N0UgLyogTmV3Rmly
c3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdl
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQUY0RUNEMTUwNkYwNjQwMDdG
RDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ld0ZpcnN0VmlzdWFsbHlO
b25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0FGNEVDRjE1MDZGMTIzMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb3RzLW9mLWltYWdlcy5odG1sIjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTNCNjIwNTMyMzRFQTMyQjAwRDQ5Qjk3IC8qIFN0b3Jh
Z2VRdW90YU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RvcmFnZVF1b3RhTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
Q0ZBODY2MUNFQjlERTEwMDA1NjVBOCAvKiBhdXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sIjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDRkE4NjgxQ0VCQ0ZFRDAwMDU2NUE4IC8q
IENhbmRpZGF0ZVRlc3RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gQ2FuZGlkYXRlVGVzdHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDEx
OUZCMjJDNTcxMTIwMDlCRTNDNyAvKiBsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5o
dG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImxvY2Fsc3RvcmFnZS1vcGVuLXdpbmRv
dy1wcml2YXRlLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzEyNCw3ICsz
MTIyLDYgQEAKIAkJCQk0MTk3M0I1QzFBRjIyODc1MDA2QzdCMzYgLyogU2hhcmVkQnVmZmVyLmNw
cCAqLywKIAkJCQlBMTc5OTE4OTFFMUNBMjQxMDBBNTA1RUQgLyogU2hhcmVkQnVmZmVyVGVzdC5j
cHAgKi8sCiAJCQkJQTE3OTkxOEExRTFDQTI0MTAwQTUwNUVEIC8qIFNoYXJlZEJ1ZmZlclRlc3Qu
aCAqLywKLQkJCQk5M0I2MjA1MzIzNEVBMzJCMDBENDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdl
ci5jcHAgKi8sCiAJCQkJRUNBNjgwQ0QxRTY4Q0MwOTAwNzMxRDIwIC8qIFN0cmluZ1V0aWxpdGll
cy5tbSAqLywKIAkJCQlDRTRENURFNTFGNjc0M0JBMDA3MkNGQzYgLyogU3RyaW5nV2l0aERpcmVj
dGlvbi5jcHAgKi8sCiAJCQkJOTNBMjU4OTgxRjkyRkYxNTAwM0U1MTBDIC8qIFRleHRDb2RlYy5j
cHAgKi8sCkBAIC0zODUyLDYgKzM4NDksNyBAQAogCQkJCTkzMEFENDAxMTUwNjk4QjMwMDY3OTcw
RiAvKiBsb3RzLW9mLXRleHQuaHRtbCAqLywKIAkJCQlBRDU3QUMxRDFEQTc0NjM4MDBGRjFCREUg
LyogbWFueS1pZnJhbWVzLmh0bWwgKi8sCiAJCQkJNzc3MkVDRTAyMkZFMDVFMTAwMDlBNzk5IC8q
IG1hbnktc2FtZS1vcmlnaW4taWZyYW1lcy5odG1sICovLAorCQkJCUNEODM5NERFMjMyQUYxNUUw
MDE0OTQ5NSAvKiBtZWRpYS1sb2FkaW5nLmh0bWwgKi8sCiAJCQkJQ0RDOTQ0MkIxRUYxRkJEMjAw
NTlDM0M0IC8qIG1lZGlhc3RyZWFtdHJhY2stZGV0YWNoZWQuaHRtbCAqLywKIAkJCQk1MUNEMUM3
MTFCMzhENDg0MDAxNDJDQTUgLyogbW9kYWwtYWxlcnRzLWluLW5ldy1hYm91dC1ibGFuay13aW5k
b3cuaHRtbCAqLywKIAkJCQk3QTE0NThGQjFBRDVDMDM1MDBFMDY3NzIgLyogbW91c2UtYnV0dG9u
LWxpc3RlbmVyLmh0bWwgKi8sCkBAIC0zODgzLDcgKzM4ODEsNiBAQAogCQkJCTA3Q0QzMkY3MjA2
NUI3MkEwMDY0QTRCRSAvKiB2aWRlby5odG1sICovLAogCQkJCTFDMkI4MTg0MUM4OTI0QTIwMEE1
NTI5RiAvKiB3ZWJmb250Lmh0bWwgKi8sCiAJCQkJNDY4RjJGOTMyMzY4REFBNzAwRjRCODY0IC8q
IHdpbmRvdy1vcGVuLXRoZW4tZG9jdW1lbnQtb3Blbi5odG1sICovLAotCQkJCUNEODM5NERFMjMy
QUYxNUUwMDE0OTQ5NSAvKiBtZWRpYS1sb2FkaW5nLmh0bWwgKi8sCiAJCQkpOwogCQkJbmFtZSA9
IFJlc291cmNlczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00ODY0LDcgKzQ4NjEs
NiBAQAogCQkJCTdDQ0U3RUNGMUE0MTFBN0UwMDQ0N0M0QyAvKiBTdG9wTG9hZGluZ0Zyb21EaWRS
ZWNlaXZlUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLywKIAkJCQlDREMwOTMyRTIxQzk5MzQ0MDAz
MEM0QjAgLyogU3RvcFN1c3BlbmRSZXN1bWVBbGxNZWRpYS5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTQxNEFENjg2MjI4NUQxQzAwMDc3N0YyRCAvKiBTdG9yYWdlUXVvdGEubW0gaW4gU291cmNlcyAq
LywKLQkJCQk5M0I2MjA1NDIzNEVBNjJDMDBENDlCOTcgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTVCRTE3MTFENDI4RTRCMDBERDdDNjggLyogU3RvcmVC
bG9iVGhlbkRlbGV0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUQwMUE0MTFBN0UwMDQ0
N0M0QyAvKiBTdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDQ0U3RUQxMUE0MTFBN0UwMDQ0N0M0QyAvKiBTdHJpbmdUcnVuY2F0b3Iu
bW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYWQxYzY3YmYwNTJmN2IwYTM0NTNkMDU0ZjI1MjkxOTFlZWYzZjE3Mi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMDMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0
OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1N0b3JhZ2VRdW90YVVzZXIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLW5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKLQotc3RhdGljIGNvbnN0IGludCBkZWZhdWx0
UXVvdGEgPSAxICogS0I7Ci0KLWNsYXNzIE1vY2tRdW90YVVzZXIgZmluYWwgOiBwdWJsaWMgV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhVXNlciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgTW9ja1F1b3Rh
VXNlcihTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5hZ2VyKQotICAgICAgICA6IG1fbWFuYWdlcigm
bWFuYWdlcikKLSAgICB7Ci0gICAgICAgIG1hbmFnZXIuYWRkVXNlcigqdGhpcyk7Ci0gICAgfQot
Ci0gICAgdm9pZCBzZXRTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKSB7IG1fc3BhY2VVc2Vk
ID0gc3BhY2VVc2VkOyB9Ci0KLXByaXZhdGU6Ci0gICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29u
c3QgZmluYWwKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NwYWNlVXNlZDsKLSAgICB9Ci0KLSAg
ICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJh
Y2spIGZpbmFsCi0gICAgewotICAgICAgICBpZiAoIW1fc3BhY2VVc2VkKQotICAgICAgICAgICAg
QVNTRVJUX0VRKG1fbWFuYWdlci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6
OlVuaW5pdGlhbGl6ZWQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlRfRVEobV9t
YW5hZ2VyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6Q29tcHV0aW5nU3Bh
Y2VVc2VkKTsKLQotICAgICAgICAvLyBSZXNldCB1c2FnZSB0byBtb2NrIGRlbGV0aW9uLgotICAg
ICAgICBtX3NwYWNlVXNlZCA9IDA7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgfQotCi0gICAg
dWludDY0X3QgbV9zcGFjZVVzZWQgeyAwIH07Ci0gICAgU3RvcmFnZVF1b3RhTWFuYWdlciogbV9t
YW5hZ2VyOwotfTsKLSAgICAKLVRFU1QoU3RvcmFnZVF1b3RhTWFuYWdlclRlc3QsIEJhc2ljKQot
ewotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIHN0b3JhZ2VRdW90YU1hbmFnZXJQdHIgPSBudWxs
cHRyOwotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIgc3RvcmFnZVF1b3RhTWFuYWdlcihkZWZhdWx0
UXVvdGEsIFsmc3RvcmFnZVF1b3RhTWFuYWdlclB0cl0odWludDY0X3QgcXVvdGEsIHVpbnQ2NF90
IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmIGNvbXBsZXRpb25IYW5sZGVyKSB7Ci0gICAgICAg
IEFTU0VSVF9UUlVFKHN0b3JhZ2VRdW90YU1hbmFnZXJQdHIpOwotICAgICAgICBBU1NFUlRfRVEo
c3RvcmFnZVF1b3RhTWFuYWdlclB0ci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3Rh
dGU6OldhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UpOwotCi0gICAgICAgIC8vIEFsbG93
IGFsbCBzcGFjZSBpbmNyZWFzZSByZXF1ZXN0cy4KLSAgICAgICAgY29tcGxldGlvbkhhbmxkZXIo
c3BhY2VJbmNyZWFzZSArIGN1cnJlbnRTcGFjZSk7Ci0gICAgfSk7Ci0gICAgc3RvcmFnZVF1b3Rh
TWFuYWdlclB0ciA9ICZzdG9yYWdlUXVvdGFNYW5hZ2VyOwotCi0KLSAgICBNb2NrUXVvdGFVc2Vy
IG1vY2tVc2VyKHN0b3JhZ2VRdW90YU1hbmFnZXIpOwotCi0gICAgLy8gR3JhbnQgZGlyZWN0bHku
Ci0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2UoMC4xICogS0IsIFsmXShXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNpc2lvbikgewotICAgICAgICBB
U1NFUlRfRVEoZGVjaXNpb24sIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
OjpHcmFudCk7Ci0gICAgICAgIG1vY2tVc2VyLnNldFNwYWNlVXNlZCgwLjEgKiBLQik7Ci0gICAg
fSk7Ci0KLSAgICAvLyBHcmFudCBhZnRlciBjb21wdXRpbmcgYWNjdXJhdGUgdXNhZ2UuCi0gICAg
c3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2UoMS4wICogS0IsIFsmXShXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNpc2lvbikgewotICAgICAgICBBU1NFUlRf
RVEoZGVjaXNpb24sIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFu
dCk7Ci0gICAgICAgIG1vY2tVc2VyLnNldFNwYWNlVXNlZCgxLjAgKiBLQik7Ci0gICAgfSk7Ci0K
LSAgICAvLyBHcmFudCBhZnRlciBjb21wdXRpbmcgYWNjdXJhdGUgdXNhZ2UgYW5kIHJlcXVlc3Rp
bmcgc3BhY2UgaW5jcmVhc2UuCi0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2Uo
MTAgKiBLQiwgWyZdKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIGRlY2lz
aW9uKSB7Ci0gICAgICAgIEFTU0VSVF9FUShzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyLT5zdGF0ZSgp
LCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0KTsK
LSAgICAgICAgQVNTRVJUX0VRKGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpEZWNpc2lvbjo6R3JhbnQpOwotICAgIH0pOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDNh
MDdjMTM5ODFkZGMzMDU1OWZlYTg0YmQyOGZhMmZiYWRkZTU2ZGMuLjI5MjE0YmZlM2ZhYWJkNjg0
NWUzYTkxMjk0ZWEwYmRjYWQ3MmE1NDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwCkBAIC05ODEsNiArOTgxLDggQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVz
ZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUK
ICAgICBjbGVhclNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zKCk7CiAgICAgY2xlYXJET01DYWNo
ZXMoKTsKIAorICAgIHJlc2V0UXVvdGEoKTsKKwogICAgIFdLQ29udGV4dFNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3RpbmcocGxhdGZvcm1Db250ZXh0KCksIHRy
dWUpOwogCiAgICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3Rpbmco
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSk7CkBAIC0zMTQyLDYgKzMxNDQs
MTMgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCiAgICAgcnVuVW50
aWwoY29udGV4dC5kb25lLCBub1RpbWVvdXQpOwogfQogCit2b2lkIFRlc3RDb250cm9sbGVyOjpy
ZXNldFF1b3RhKCkKK3sKKyAgICBTdG9yYWdlVm9pZENhbGxiYWNrQ29udGV4dCBjb250ZXh0KCp0
aGlzKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVSZXNldFF1b3RhKFRlc3RDb250cm9sbGVyOjp3
ZWJzaXRlRGF0YVN0b3JlKCksICZjb250ZXh0LCBTdG9yYWdlVm9pZENhbGxiYWNrKTsKKyAgICBy
dW5VbnRpbChjb250ZXh0LmRvbmUsIG5vVGltZW91dCk7Cit9CisKIHN0cnVjdCBGZXRjaENhY2hl
T3JpZ2luc0NhbGxiYWNrQ29udGV4dCB7CiAgICAgRmV0Y2hDYWNoZU9yaWdpbnNDYWxsYmFja0Nv
bnRleHQoVGVzdENvbnRyb2xsZXImIGNvbnRyb2xsZXIsIFdLU3RyaW5nUmVmIG9yaWdpbikKICAg
ICAgICAgOiB0ZXN0Q29udHJvbGxlcihjb250cm9sbGVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oCmluZGV4IDFiMjYxYmNkYTFiYTBmMjFmMTc4NDkwOTJhMDI2YzYwZWFi
YTk4NDQuLmFkNzFjODY4YzAyZmU1OGJiOWE4MzkyNzhmMGZkYjNmMWFkZWJlM2YgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKQEAgLTI2OSw2ICsyNjksOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCB0ZXJtaW5hdGVOZXR3b3JrUHJvY2VzcygpOwogICAgIHZvaWQgdGVybWlu
YXRlU2VydmljZVdvcmtlclByb2Nlc3MoKTsKIAorICAgIHZvaWQgcmVzZXRRdW90YSgpOworCiAg
ICAgdm9pZCByZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlhbHMoKTsKIAogICAgIHZvaWQgY2xlYXJJ
bmRleGVkRGF0YWJhc2VzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384192</attachid>
            <date>2019-11-22 14:03:14 -0800</date>
            <delta_ts>2019-12-02 16:03:02 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-203971-20191122140313.patch</filename>
            <type>text/plain</type>
            <size>166283</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGFkYjk2ZmNmYzE2OWE1
ZWRhYTFlZjg2Y2UzZjMwZjc1YjkwNmVlYi4uZjMwNTMyYjZmM2U5NDYxOGUxNzRjOTI1OGQyMmQ0
MjFiYTZlZGNmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MyBAQAorMjAxOS0xMS0yMiAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVy
c2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3MjkwMzQ5
PgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIEltcGxlbWVu
dCBhIGxvY2stYmFzZWQgU3RvcmFnZVF1b3RhTWFuYWdlciBzbyB0aGF0IHF1b3RhIGNoZWNrIGNh
biBiZSBkb25lIG9uIGRpZmZlcmVudCB0aHJlYWRzLgorICAgICAgICBJZiBzcGFjZSByZXF1ZXN0
IGlzIG1hZGUgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCwgaXQgbmVlZHMgdG8gaG9sZCBhIGxvY2sg
dW50aWwgaXQgaXMgZmluaXNoZWQsIHNvIG5vIHJlcXVlc3QKKyAgICAgICAgZnJvbSBkaWZmZXJl
bnQgdGhyZWFkcyBjYW4gYmUgcGVyZm9ybWVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgIElm
IHNwYWNlIHJlcXVlc3QgaXMgbWFkZSBvbiB0aGUgbWFpbiB0aHJlYWQsIHdlIHdpbGwgZGlzcGF0
Y2ggaXQgdG8gYSBiYWNrZ3JvdW5kIHRocmVhZCBhbmQgc2NoZWR1bGUgYSBjYWxsbGJhY2sKKyAg
ICAgICAgdG8gdGhlIG1haW4gdGhyZWFkIHdoZW4gcmVzdWx0IGlzIGF2YWlsYWJsZSwgc28gdGhl
IG1haW4gdGhyZWFkIHdpbGwgbm90IGJlIGJsb2NrZWQuCisKKyAgICAgICAgQ292ZXJlZCBieSBl
eGlzdGluZyBxdW90YSByZWxhdGVkIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpyZXF1ZXN0U3BhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRpc2tVc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90YVVz
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1
b3RhVXNlcjo6flF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRlU3Bh
Y2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVy
OjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3BhY2VVc2VkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVz
ZXI6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjplbnN1cmVRdW90YVVzZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnN0YXJ0
Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5pc2hDb21wdXRp
bmdTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGVjcmVhc2VTcGFjZVVzZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluY3Jl
YXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluaXRpYWxpemVRdW90YVVzZXIpOiBEZWxl
dGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
T3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNy
ZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OnJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1
dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmdldENv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRl
bGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZXF1ZXN0U3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpmaW5pc2hTcGFjZUluY3JlYXNlVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFD
aGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RT
dG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6Z2V0UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hl
Y2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0Q291bnRBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNo
ZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6Om9wZW5DdXJzb3JBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvckFmdGVyUXVv
dGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
Q29ubmVjdGlvbjo6YWJvcnRUcmFuc2FjdGlvbldpdGhvdXRDYWxsYmFjayk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jk
cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb246OmdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0
ZXJhdGVDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nl
c3NJREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpx
dW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6c3RvcmFnZVF1b3RhTWFuYWdlclNwYWNl
UmVxdWVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6SW5Qcm9j
ZXNzSURCU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0
ZXIpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nl
c3NJREJTZXJ2ZXIuaDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbkJhY2tn
cm91bmRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dHJ5
R3JhbnRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVw
ZGF0ZVF1b3RhQmFzZWRPblVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXNldFF1b3RhRm9yVGVzdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp+U3RvcmFnZVF1b3RhTWFuYWdl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzcGFj
ZVVzYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRv
SW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjphZGRVc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vz
c1BlbmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVv
dGFNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZh
dWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3RhKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90YSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzdGF0ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmg6IFJlbW92ZWQuCisK
IDIwMTktMTEtMjIgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAg
SW5kZXhlZERCOiBsb2NrLWJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHN1c3BlbnNpb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
aW5kZXggYjZkMGE0NWViOWRkMGUwMzUyNDYzOTJlMmU1MTI1OTc0ZjIxMDM5NS4uMmY3N2NjZWI3
MWQwY2ZhOTQ0ZWZiMjI2OTY0MWQ1YTg4NTY1NDk3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4OCBA
QAorMjAxOS0xMS0yMiAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAg
ICBDcm9zcy10aHJlYWQgdmVyc2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzU3MjkwMzQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6Lgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOiBJbnRyb2R1Y2Ug
Y2xhc3MgU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgdG8gbWFuYWdlIGFsbCAKKyAgICAgICAg
U3RvcmFnZVF1b3RhTWFuYWdlcnMgb2YgdGhlIHNhbWUgc2Vzc2lvbi4gCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0ZURhdGFTdG9yZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZXN0cm95U2Vzc2lv
bik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9y
aWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlSURCU2VydmVy
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVNl
c3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0U2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXJJREJSb290UGF0aCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpyZXNldFF1b3RhKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OnN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVN0b3JhZ2VRdW90YSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjbGVhclN0b3JhZ2VRdW90YSk6IERlbGV0ZWQuCisgICAg
ICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlh
bGl6ZVF1b3RhVXNlcnMpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1
bHRRdW90YSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZW5zdXJlT3JpZ2luU3RvcmFnZVF1b3RhTWFuYWdlcik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cjo6ZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2Vycyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6Y2FjaGVSb290UGF0aCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6c2V0SURCUm9vdFBhdGgpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OmlkYlJvb3RQYXRoIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlN0b3JhZ2VRdW90YU1hbmFnZXJzOjpkZWZhdWx0
UXVvdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
U3RvcmFnZVF1b3RhTWFuYWdlcnM6OnNldERlZmF1bHRRdW90YXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U3RvcmFnZVF1b3RhTWFuYWdlcnM6Om1hbmFnZXJz
UGVyT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OmdldERpcmVj
dG9yeVNpemUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6ZGlza1Vz
YWdlKTogc3RhdGljIGZ1bmN0aW9uIHRvIGdldCB0aGUgZGlzayB1c2FnZSBvZiBDYWNoZVN0b3Jh
Z2UgZ2l2ZW4gCisgICAgICAgIENhY2hlU3RvcmFnZSByb290IGRpcmVjdG9yeS4KKyAgICAgICAg
KFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJlcXVlc3RTcGFjZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpyZWFkQ2FjaGVzRnJvbURpc2spOgorICAgICAg
ICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6d3JpdGVTaXplRmlsZSk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpyZWFkU2l6ZUZpbGUpOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6aW5pdGlhbGl6ZVF1b3RhVXNlcik6IERlbGV0
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmg6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpwdXQpOgorICAgICAg
ICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmUpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlczo6Q2FjaGVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZXM6On5DYWNoZXMpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlczo6dXBkYXRlU2l6ZUZpbGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlczo6aW5pdGlhbGl6ZVNpemUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNh
Y2hlczo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVx
dWVzdFNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OndyaXRl
UmVjb3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlbW92ZVJl
Y29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjp3aGVuSW5pdGlh
bGl6ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6
cmVzZXRTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oOgorICAgICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQ
YXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuaDogQWRkIGEgY2FjaGVTdG9yYWdlRGlyZWN0b3J5IHBhcmFtZXRlciBzbyB3
ZSBrbm93IHRoZSBkaXJlY290cnkgb2YgCisgICAgICAgIENhY2hlU3RvcmFnZSB3aGVuIHdlIHN0
YXJ0IHVzaW5nIFdlYnNpdGVEYXRhU3RvcmUuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dL
V2Vic2l0ZURhdGFTdG9yZVJlZi5jcHA6CisgICAgICAgIChXS1dlYnNpdGVEYXRhU3RvcmVSZXNl
dFF1b3RhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVm
Lmg6IEFkZCBhIEMgQVBJIGZvciByZXNldGluZyBxdW90YSBpbiBUZXN0UnVubmVyLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZXNldFF1b3RhKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmVu
c3VyZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29j
b2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0
YVN0b3JlOjpwYXJhbWV0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBh
cmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3Rh
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgor
CiAyMDE5LTExLTIyICBDb25yYWQgU2h1bHR6ICA8Y29ucmFkX3NodWx0ekBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVtb3ZlIC1bX1dLVGh1bWJuYWlsVmlldyB1c2VzU25hcHNob3Qvc2V0VXNlc1Nu
YXBzaG90Ol0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGVmYzI3NWY2ZGE4YzJjMTA1NmJmMDBkNTlj
ZjVhNWY5YjlmNWVmOTEuLjBlYzgwNTExMzM4YWY0MjdlMGI1ODhjNGExYzNlMjRhMWNmNjU2Yzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTM4MSw3ICsxMzgxLDYgQEAgc2V0KFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHN0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5oCiAg
ICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaAogICAgIHN0b3JhZ2UvU3RvcmFn
ZVF1b3RhTWFuYWdlci5oCi0gICAgc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmgKICAgICBzdG9y
YWdlL1N0b3JhZ2VUeXBlLmgKIAogICAgIHN0eWxlL1N0eWxlQ2hhbmdlLmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5k
ZXggNjMxYzRjZTQ1ZDc1ZjdhNzkyM2EzMTlkOWYyN2YzNDgxMjU1NmU4ZS4uYmJhNjYyMzQ2ZGRh
M2JlMjM1ZmQ1NzU3MDY1ZGI4Y2NmN2U3NWY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTQ2LDI4ICs0Niwy
OCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKLVJlZjxJ
REJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgUXVv
dGFNYW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorUmVmPElEQlNlcnZlcj4gSURC
U2VydmVyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5h
Z2VyU3BhY2VSZXF1ZXN0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCiB7CiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSURCU2VydmVyKHNlc3Npb25JRCwgV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0
ZXIpKSk7CiB9CiAKLVJlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3Rh
TWFuYWdlckdldHRlciYmIHF1b3RhTWFuYWdlckdldHRlcikKK1JlZjxJREJTZXJ2ZXI+IElEQlNl
cnZlcjo6Y3JlYXRlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZURpcmVjdG9yeVBhdGgsIFN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciYmIHF1
b3RhTWFuYWdlckdldHRlcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJTZXJ2ZXIo
c2Vzc2lvbklELCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFdURk1vdmUocXVvdGFNYW5hZ2VyR2V0
dGVyKSkpOwogfQogCi1JREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIFF1b3RhTWFuYWdlckdldHRlciYmIHF1b3RhTWFuYWdlckdldHRlcikKK0lEQlNlcnZlcjo6
SURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RvcmFnZVF1b3RhTWFuYWdlclNw
YWNlUmVxdWVzdGVyJiYgc3BhY2VSZXF1ZXN0ZXIpCiAgICAgOiBDcm9zc1RocmVhZFRhc2tIYW5k
bGVyKCJJbmRleGVkRGF0YWJhc2UgU2VydmVyIiwgQXV0b2RyYWluZWRQb29sRm9yUnVuTG9vcDo6
VXNlKQogICAgICwgbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQotICAgICwgbV9xdW90YU1hbmFnZXJH
ZXR0ZXIoV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKQorICAgICwgbV9zcGFjZVJlcXVlc3Rl
cihXVEZNb3ZlKHNwYWNlUmVxdWVzdGVyKSkKIHsKIH0KIAotSURCU2VydmVyOjpJREJTZXJ2ZXIo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5
UGF0aCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorSURCU2VydmVy
OjpJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlRGlyZWN0b3J5UGF0aCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYgc3Bh
Y2VSZXF1ZXN0ZXIpCiAgICAgOiBDcm9zc1RocmVhZFRhc2tIYW5kbGVyKCJJbmRleGVkRGF0YWJh
c2UgU2VydmVyIiwgQXV0b2RyYWluZWRQb29sRm9yUnVuTG9vcDo6VXNlKQogICAgICwgbV9zZXNz
aW9uSUQoc2Vzc2lvbklEKQogICAgICwgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgoZGF0YWJhc2VE
aXJlY3RvcnlQYXRoKQotICAgICwgbV9xdW90YU1hbmFnZXJHZXR0ZXIoV1RGTW92ZShxdW90YU1h
bmFnZXJHZXR0ZXIpKQorICAgICwgbV9zcGFjZVJlcXVlc3RlcihXVEZNb3ZlKHNwYWNlUmVxdWVz
dGVyKSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCU2VydmVyIGNyZWF0ZWQgYXQgcGF0aCAl
cyIsIGRhdGFiYXNlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICBwb3N0RGF0YWJh
c2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJklEQlNlcnZlcjo6dXBncmFkZUZp
bGVzSWZOZWNlc3NhcnkpKTsKQEAgLTY4MywxNTcgKzY4MywyNCBAQCB2b2lkIElEQlNlcnZlcjo6
cGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2Vj
dXJpdHlPcgogCiB2b2lkIElEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJh
c2VzKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgZm9yIChhdXRvJiB1c2VyIDogbV9xdW90
YVVzZXJzLnZhbHVlcygpKQotICAgICAgICB1c2VyLT5yZXNldFNwYWNlVXNlZCgpOwotCiAgICAg
YXV0byBjYWxsYmFjayA9IG1fZGVsZXRlRGF0YWJhc2VDb21wbGV0aW9uSGFuZGxlcnMudGFrZShj
YWxsYmFja0lEKTsKICAgICBBU1NFUlQoY2FsbGJhY2spOwogICAgIGNhbGxiYWNrKCk7CiB9CiAK
LUlEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90YVVzZXIoSURCU2VydmVyJiBzZXJ2ZXIsIFN0b3Jh
Z2VRdW90YU1hbmFnZXIqIG1hbmFnZXIsIENsaWVudE9yaWdpbiYmIG9yaWdpbikKLSAgICA6IG1f
c2VydmVyKHNlcnZlcikKLSAgICAsIG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKLSAg
ICAsIG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAsIG1faXNJbml0aWFsaXplZChtX3Nl
cnZlci5tX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotewotICAgIGlmIChtYW5hZ2VyKQotICAg
ICAgICBtYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKLX0KLQotSURCU2VydmVyOjpRdW90YVVzZXI6
On5RdW90YVVzZXIoKQotewotICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgIG1fbWFuYWdlci0+
cmVtb3ZlVXNlcigqdGhpcyk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0
U3BhY2VVc2VkKCkKLXsKLSAgICBtX3NwYWNlVXNlZCA9IDA7Ci0KLSAgICBpZiAoIW1fbWFuYWdl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2VydmVyLm1fc2Vzc2lvbklELmlzRXBo
ZW1lcmFsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1faW5pdGlhbGl6YXRpb25DYWxsYmFjayk7
Ci0KLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIC8vIERvIGFkZC9yZW1vdmUg
dG8gdHJpZ2dlciBjYWxsIHRvIHdoZW5Jbml0aWFsaXplZC4KLSAgICBtX21hbmFnZXItPnJlbW92
ZVVzZXIoKnRoaXMpOwotICAgIG1fbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7Ci19Ci0KLXZvaWQg
SURCU2VydmVyOjpRdW90YVVzZXI6OmNvbXB1dGVTcGFjZVVzZWQoKQotewotICAgIHJlc2V0U3Bh
Y2VVc2VkKCk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VV
c2VkKHVpbnQ2NF90IHNpemUpCi17Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0gICAgICAg
IHJldHVybjsKLSAgICBBU1NFUlQobV9zcGFjZVVzZWQgKyBzaXplID4gbV9zcGFjZVVzZWQpOwot
ICAgIG1fc3BhY2VVc2VkICs9IHNpemU7Ci19Ci12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpk
ZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKQotewotICAgIGlmICghbV9pc0luaXRpYWxp
emVkKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fc3BhY2VVc2VkID49IHNpemUpOwot
ICAgIG1fc3BhY2VVc2VkIC09IHNpemU7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6
OndoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCi17
Ci0gICAgaWYgKG1faXNJbml0aWFsaXplZCkgewotICAgICAgICBjYWxsYmFjaygpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIG1faW5pdGlhbGl6YXRpb25DYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spOwotICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2lu
KG1fb3JpZ2luKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5pdGlhbGl6ZVNw
YWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgQVNTRVJUKG1faXNJbml0aWFsaXpl
ZCB8fCAhbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlKTsKLSAgICBtX3NwYWNlVXNlZCA9IHNwYWNl
VXNlZDsKLSAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgaWYgKGF1dG8gY2FsbGJh
Y2sgPSBXVEZNb3ZlKG1faW5pdGlhbGl6YXRpb25DYWxsYmFjaykpCi0gICAgICAgIGNhbGxiYWNr
KCk7Ci19Ci0KLUlEQlNlcnZlcjo6UXVvdGFVc2VyJiBJREJTZXJ2ZXI6OmVuc3VyZVF1b3RhVXNl
cihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKLXsKLSAgICByZXR1cm4gKm1fcXVvdGFVc2Vy
cy5lbnN1cmUob3JpZ2luLCBbdGhpcywgJm9yaWdpbl0gewotICAgICAgICByZXR1cm4gbWFrZVVu
aXF1ZTxRdW90YVVzZXI+KCp0aGlzLCBtX3F1b3RhTWFuYWdlckdldHRlcihtX3Nlc3Npb25JRCwg
b3JpZ2luKSwgQ2xpZW50T3JpZ2luIHsgb3JpZ2luIH0pOwotICAgIH0pLml0ZXJhdG9yLT52YWx1
ZTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2lu
KGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQotewotICAgIEFTU0VSVCghbV9zZXNzaW9uSUQu
aXNFcGhlbWVyYWwoKSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZJREJTZXJ2ZXI6OmNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4sIG9yaWdpbikp
OwotfQotCi12b2lkIElEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbihjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbikKK1N0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIElEQlNl
cnZlcjo6cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0
YXNrU2l6ZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGF1dG8gZGF0
YWJhc2VEaXJlY3RvcnlQYXRoID0gdGhpcy0+ZGF0YWJhc2VEaXJlY3RvcnlQYXRoSXNvbGF0ZWRD
b3B5KCk7Ci0gICAgYXV0byBvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5ID0gSURCRGF0YWJhc2VJ
ZGVudGlmaWVyOjpkYXRhYmFzZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290KG9yaWdpbi50b3BPcmln
aW4sIG9yaWdpbi5jbGllbnRPcmlnaW4sIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgInYwIik7Ci0g
ICAgYXV0byBuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5ID0gSURCRGF0YWJhc2VJZGVudGlmaWVy
OjpkYXRhYmFzZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290KG9yaWdpbi50b3BPcmlnaW4sIG9yaWdp
bi5jbGllbnRPcmlnaW4sIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgInYxIik7Ci0gICAgYXV0byBz
aXplID0gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZXNTaXplRm9yRGlyZWN0b3J5KG9s
ZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkpICsgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFz
ZXNTaXplRm9yRGlyZWN0b3J5KG5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkpOwotCi0gICAgcG9z
dERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJklEQlNlcnZl
cjo6ZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luLCBvcmlnaW4sIHNpemUpKTsKLX0K
LQotdm9pZCBJREJTZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25z
dCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VVc2VkKQotewotICAgIGVuc3Vy
ZVF1b3RhVXNlcihvcmlnaW4pLmluaXRpYWxpemVTcGFjZVVzZWQoc3BhY2VVc2VkKTsKLX0KLQot
dm9pZCBJREJTZXJ2ZXI6OnJlcXVlc3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwg
dWludDY0X3QgdGFza1NpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFu
YWdlcjo6RGVjaXNpb24pPiYmIGNhbGxiYWNrKQotewotICAgIGF1dG8qIHF1b3RhTWFuYWdlciA9
IGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLm1hbmFnZXIoKTsKLSAgICBpZiAoIXF1b3RhTWFuYWdl
cikgewotICAgICAgICBjYWxsYmFjayhTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVu
eSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBxdW90YU1hbmFnZXItPnJlcXVlc3RT
cGFjZSh0YXNrU2l6ZSwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIHJldHVybiBtX3NwYWNlUmVx
dWVzdGVyKG9yaWdpbiwgdGFza1NpemUpOwogfQogCi12b2lkIElEQlNlcnZlcjo6cmVzZXRTcGFj
ZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCit1aW50NjRfdCBJREJTZXJ2ZXI6OmRp
c2tVc2FnZShjb25zdCBTdHJpbmcmIHJvb3REaXJlY3RvcnksIGNvbnN0IENsaWVudE9yaWdpbiYg
b3JpZ2luKQogewotICAgIGlmIChhdXRvKiB1c2VyID0gbV9xdW90YVVzZXJzLmdldChvcmlnaW4p
KQotICAgICAgICB1c2VyLT5yZXNldFNwYWNlVXNlZCgpOwotfQotCi12b2lkIElEQlNlcnZlcjo6
aW5jcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNp
emUpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuaW5jcmVhc2VTcGFjZVVzZWQoc2l6
ZSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjpkZWNyZWFzZVNwYWNlVXNlZChjb25zdCBDbGllbnRP
cmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc2l6ZSkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3Jp
Z2luKS5kZWNyZWFzZVNwYWNlVXNlZChzaXplKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OmluY3Jl
YXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRf
dCB0YXNrU2l6ZSkKLXsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbmNyZWFzZVBvdGVu
dGlhbFNwYWNlVXNlZCh0YXNrU2l6ZSk7Ci19CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
CiAKLXZvaWQgSURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VVc2VkKQotewotICAgIGVuc3VyZVF1b3Rh
VXNlcihvcmlnaW4pLmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKHNwYWNlVXNlZCk7CisgICAg
YXV0byBvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5ID0gSURCRGF0YWJhc2VJZGVudGlmaWVyOjpk
YXRhYmFzZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290KG9yaWdpbi50b3BPcmlnaW4sIG9yaWdpbi5j
bGllbnRPcmlnaW4sIHJvb3REaXJlY3RvcnksICJ2MCJfc3RyKTsKKyAgICBhdXRvIG5ld1ZlcnNp
b25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZpZXI6OmRhdGFiYXNlRGlyZWN0
b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3JpZ2luLmNsaWVudE9yaWdpbiwg
cm9vdERpcmVjdG9yeSwgInYxIl9zdHIpOworICAgIHJldHVybiBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmRhdGFiYXNlc1NpemVGb3JEaXJlY3Rvcnkob2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeSkg
KyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JEaXJlY3RvcnkobmV3VmVy
c2lvbk9yaWdpbkRpcmVjdG9yeSk7CiB9CiAKIHZvaWQgSURCU2VydmVyOjp1cGdyYWRlRmlsZXNJ
Zk5lY2Vzc2FyeSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VydmVyLmgKaW5kZXggMzg3N2EwNTMyYTRkZGJmZTg4MDE1NzJhNmNiZDFkNDQ2
NGRmZWRhZS4uZmMxNjA0Zjc2NWFlMjVjNjNhMDlhNGE5MzFkNTAwNGNlYzA1MGFjMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
aApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIklEQkNvbm5lY3Rpb25Ub0NsaWVudC5oIgog
I2luY2x1ZGUgIklEQkRhdGFiYXNlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlN0b3JhZ2VRdW90
YU1hbmFnZXIuaCIKLSNpbmNsdWRlICJTdG9yYWdlUXVvdGFVc2VyLmgiCiAjaW5jbHVkZSAiVW5p
cXVlSURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24u
aCIKICNpbmNsdWRlIDxwYWwvSHlzdGVyZXNpc0FjdGl2aXR5Lmg+CkBAIC01OCw5ICs1Nyw5IEBA
IGVudW0gY2xhc3MgU2hvdWxkRm9yY2VTdG9wIDogYm9vbCB7IE5vLCBZZXMgfTsKIAogY2xhc3Mg
SURCU2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8SURCU2VydmVyPiwgcHVibGljIENyb3NzVGhy
ZWFkVGFza0hhbmRsZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxJREJTZXJ2ZXI+IHsKIHB1Ymxp
YzoKLSAgICB1c2luZyBRdW90YU1hbmFnZXJHZXR0ZXIgPSBXVEY6OkZ1bmN0aW9uPFN0b3JhZ2VR
dW90YU1hbmFnZXIqKFBBTDo6U2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mKT47Ci0gICAg
c3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgUXVvdGFNYW5hZ2Vy
R2V0dGVyJiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SURCU2VydmVyPiBjcmVh
dGUoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBR
dW90YU1hbmFnZXJHZXR0ZXImJik7CisgICAgdXNpbmcgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNl
UmVxdWVzdGVyID0gRnVuY3Rpb248U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24oY29uc3Qg
Q2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQpPjsKKyAgICBzdGF0aWMgUmVm
PElEQlNlcnZlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2VyU3Bh
Y2VSZXF1ZXN0ZXImJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+
IGNyZWF0ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBh
dGgsIFN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciYmKTsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdW5yZWdpc3RlckNvbm5lY3Rpb24oSURCQ29ubmVjdGlv
blRvQ2xpZW50Jik7CkBAIC0xMTEsMTQgKzExMCw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZShXYWxsVGltZSwg
RnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFNl
Y3VyaXR5T3JpZ2luRGF0YT4mLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KTsKIAotICAgIHZvaWQgcmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90
IHRhc2tTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRl
Y2lzaW9uKT4mJik7Ci0gICAgdm9pZCBpbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBD
bGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7Ci0gICAgdm9pZCBkZWNyZWFzZVBvdGVu
dGlhbFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7Ci0g
ICAgdm9pZCBpbmNyZWFzZVNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBz
aXplKTsKLSAgICB2b2lkIGRlY3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVp
bnQ2NF90IHNpemUpOwotICAgIHZvaWQgcmVzZXRTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2lu
Jik7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVRdW90YVVzZXIoY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4pIHsgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbik7IH0KKyAgICBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpEZWNpc2lvbiByZXF1ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qg
dGFza1NpemUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB1aW50NjRfdCBkaXNrVXNhZ2Uo
Y29uc3QgU3RyaW5nJiByb290RGlyZWN0b3J5LCBjb25zdCBDbGllbnRPcmlnaW4mKTsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJ5U3RvcChTaG91bGRGb3JjZVN0b3ApOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVzdW1lKCk7CkBAIC0xMjcsOCArMTIwLDggQEAgcHVibGljOgogICAg
IHZvaWQgcmVtb3ZlRGF0YWJhc2UoVW5pcXVlSURCRGF0YWJhc2UmIGRhdGFiYXNlKSB7IG1fYWxs
VW5pcXVlSURCRGF0YWJhc2VzLnJlbW92ZShkYXRhYmFzZSk7IH0KIAogcHJpdmF0ZToKLSAgICBJ
REJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKLSAgICBJREJT
ZXJ2ZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRo
LCBRdW90YU1hbmFnZXJHZXR0ZXImJik7CisgICAgSURCU2VydmVyKFBBTDo6U2Vzc2lvbklELCBT
dG9yYWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXImJik7CisgICAgSURCU2VydmVyKFBBTDo6
U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgU3RvcmFnZVF1
b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYpOwogCiAgICAgVW5pcXVlSURCRGF0YWJhc2UmIGdl
dE9yQ3JlYXRlVW5pcXVlSURCRGF0YWJhc2UoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7
CiAgICAgCkBAIC0xNDUsNTEgKzEzOCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVEYXRh
YmFzZXNNb2RpZmllZFNpbmNlRm9yVmVyc2lvbihXYWxsVGltZSwgY29uc3QgU3RyaW5nJik7CiAg
ICAgdm9pZCByZW1vdmVEYXRhYmFzZXNXaXRoT3JpZ2luc0ZvclZlcnNpb24oY29uc3QgVmVjdG9y
PFNlY3VyaXR5T3JpZ2luRGF0YT4mLCBjb25zdCBTdHJpbmcmKTsKIAotICAgIGNsYXNzIFF1b3Rh
VXNlciBmaW5hbCA6IHB1YmxpYyBTdG9yYWdlUXVvdGFVc2VyIHsKLSAgICAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBRdW90YVVzZXIoSURCU2VydmVy
JiwgU3RvcmFnZVF1b3RhTWFuYWdlciosIENsaWVudE9yaWdpbiYmKTsKLSAgICAgICAgflF1b3Rh
VXNlcigpOwotCi0gICAgICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1hbmFnZXIoKSB7IHJldHVy
biBtX21hbmFnZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIHNldFNwYWNlVXNlZCh1aW50NjRf
dCBzcGFjZVVzZWQpIHsgbV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7IH0KLSAgICAgICAgdm9pZCBy
ZXNldFNwYWNlVXNlZCgpOwotCi0gICAgICAgIHZvaWQgaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVz
ZWQodWludDY0X3QgaW5jcmVhc2UpIHsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlICs9IGluY3Jl
YXNlOyB9Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodWludDY0X3Qg
ZGVjcmVhc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2VzdGltYXRlZFNwYWNl
SW5jcmVhc2UgPj0gZGVjcmVhc2UpOwotICAgICAgICAgICAgbV9lc3RpbWF0ZWRTcGFjZUluY3Jl
YXNlIC09IGRlY3JlYXNlOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VTcGFjZVVz
ZWQodWludDY0X3Qgc2l6ZSk7Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VTcGFjZVVzZWQodWludDY0
X3Qgc2l6ZSk7Ci0KLSAgICAgICAgdm9pZCBpbml0aWFsaXplU3BhY2VVc2VkKHVpbnQ2NF90IHNw
YWNlVXNlZCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBj
b25zdCBmaW5hbAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9pc0luaXRpYWxpemVk
KTsKLSAgICAgICAgICAgIHJldHVybiBtX3NwYWNlVXNlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNy
ZWFzZTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGNvbXB1dGVTcGFjZVVzZWQoKSBmaW5hbDsK
LSAgICAgICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KSBmaW5hbDsKLQotICAgICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwotICAgICAgICBXZWFrUHRy
PFN0b3JhZ2VRdW90YU1hbmFnZXI+IG1fbWFuYWdlcjsKLSAgICAgICAgQ2xpZW50T3JpZ2luIG1f
b3JpZ2luOwotICAgICAgICBib29sIG1faXNJbml0aWFsaXplZCB7IGZhbHNlIH07Ci0gICAgICAg
IHVpbnQ2NF90IG1fc3BhY2VVc2VkIHsgMCB9OwotICAgICAgICB1aW50NjRfdCBtX2VzdGltYXRl
ZFNwYWNlSW5jcmVhc2UgeyAwIH07Ci0gICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4g
bV9pbml0aWFsaXphdGlvbkNhbGxiYWNrOwotICAgIH07Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBR
dW90YVVzZXImIGVuc3VyZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mKTsKLSAgICB2b2lk
IHN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYpOwot
ICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mKTsK
LSAgICB2b2lkIGZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRP
cmlnaW4mLCB1aW50NjRfdCBzcGFjZVVzZWQpOwotCiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNz
aW9uSUQ7CiAgICAgSGFzaE1hcDxJREJDb25uZWN0aW9uSWRlbnRpZmllciwgUmVmUHRyPElEQkNv
bm5lY3Rpb25Ub0NsaWVudD4+IG1fY29ubmVjdGlvbk1hcDsKICAgICBIYXNoTWFwPElEQkRhdGFi
YXNlSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFVuaXF1ZUlEQkRhdGFiYXNlPj4gbV91bmlx
dWVJREJEYXRhYmFzZU1hcDsKQEAgLTIwMiw4ICsxNTAsNyBAQCBwcml2YXRlOgogCiAgICAgU3Ry
aW5nIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoOwogCi0gICAgSGFzaE1hcDxDbGllbnRPcmlnaW4s
IHN0ZDo6dW5pcXVlX3B0cjxRdW90YVVzZXI+PiBtX3F1b3RhVXNlcnM7Ci0gICAgUXVvdGFNYW5h
Z2VyR2V0dGVyIG1fcXVvdGFNYW5hZ2VyR2V0dGVyOworICAgIFN0b3JhZ2VRdW90YU1hbmFnZXJT
cGFjZVJlcXVlc3RlciBtX3NwYWNlUmVxdWVzdGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSURC
U2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCA4MjQzNDIyOTBlYWQ4YzNlM2M1
NzFmNjk1YzI4MzU3N2QzN2MyZTZjLi5mZjhhZDhhODA2MDM2MTA5MDNjYjgxZjQ3ZTI3ZGYwNTY3
OTUxZWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTE4OSw1NiArMTg5LDYgQEAg
c3RhdGljIGlubGluZSBTdHJpbmcgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKGNvbnN0IGNoYXIqIHRh
c2tOYW1lKQogICAgIHJldHVybiBtYWtlU3RyaW5nKCJGYWlsZWQgdG8gIiwgdGFza05hbWUsICIg
aW4gZGF0YWJhc2UgYmVjYXVzZSBub3QgZW5vdWdoIHNwYWNlIGZvciBkb21haW4iKTsKIH0KIAot
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVxdWVzdFNwYWNlKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgY2hhciogdGFz
a05hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYgY2FsbGJhY2spCi17
Ci0gICAgbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tT
aXplLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgdGhpcywgd2Vha1RyYW5zYWN0aW9u
ID0gbWFrZVdlYWtQdHIodHJhbnNhY3Rpb24pLCB0YXNrTmFtZSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghd2Vha1Ro
aXMpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgVW5rbm93bkVycm9yIH0pOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF3ZWFrVHJhbnNh
Y3Rpb24pIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgVW5rbm93bkVycm9yIH0p
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX293bmluZ1Bv
aW50ZXJGb3JDbG9zZSkgewotICAgICAgICAgICAgLy8gV2UgYXJlIGNsb3NpbmcgdGhlIGRhdGFi
YXNlLCB0aGVyZSBpcyBubyBwb2ludCBpbiB0cnlpbmcgdG8gbW9kaWZ5IHRoZSBkYXRhYmFzZSBh
dCB0aGF0IHBvaW50LgotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3duRXJy
b3IgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2gg
KGRlY2lzaW9uKSB7Ci0gICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246
OkRlbnk6Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJv
ciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKHRhc2tOYW1lKSB9KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQ6Ci0g
ICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IH0pOwotICAgICAgICB9OwotICAgIH0pOwot
fQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjp3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlv
bihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChJREJFcnJvciYmKT4mJiBjYWxsYmFjaykKLXsKLSAgICByZXF1ZXN0U3BhY2Uo
dHJhbnNhY3Rpb24sIDAsICIiLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwg
dWludDY0X3QgdGFza1NpemUpCi17Ci0gICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3Bh
Y2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUpOwotICAgIEFTU0VSVCghbV9w
ZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKLSAgICBtX3Bl
bmRpbmdTcGFjZUluY3JlYXNlVGFza3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKLX0KLQot
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3Qg
aWRlbnRpZmllciwgYm9vbCBpc1Rhc2tTdWNjZXNzZnVsKQotewotICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZmluZChpZGVudGlmaWVyKTsKLSAgICBBU1NF
UlQoaXRlcmF0b3IgIT0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmVuZCgpKTsKLSAgICBt
X3NlcnZlci0+ZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigp
LCBpdGVyYXRvci0+dmFsdWUpOwotICAgIGlmIChpc1Rhc2tTdWNjZXNzZnVsKQotICAgICAgICBt
X3NlcnZlci0+aW5jcmVhc2VTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRv
ci0+dmFsdWUpOwotICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5yZW1vdmUoaXRlcmF0
b3IpOwotfQotCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVy
YXRpb24oKQogewogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbiAoJXApIiwgdGhpcyk7CkBAIC0yNDksMjkgKzE5
OSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlv
bigpCiAgICAgaWYgKCFtX2RhdGFiYXNlSW5mbykgewogICAgICAgICBpZiAoIW1faXNPcGVuaW5n
QmFja2luZ1N0b3JlKSB7CiAgICAgICAgICAgICBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSA9IHRy
dWU7Ci0gICAgICAgICAgICAvLyBXZSBkbyBub3Qga25vdyB3aGV0aGVyIHRoaXMgaXMgYW4gZXhp
c3Rpbmcgb3IgYSBuZXcgZGF0YWJhc2UuCi0gICAgICAgICAgICAvLyBXZSBzZXQgYSBzbWFsbCBj
b3N0IHNvIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIG9wZW4gYW4gaW5maW5pdGUgbnVtYmVy
IG9mIGRhdGFiYXNlLgotICAgICAgICAgICAgbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX2lkZW50
aWZpZXIub3JpZ2luKCksIGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QsIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKHRoaXMpXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgICAgICAgICBpZiAobV9vd25pbmdQb2ludGVyRm9yQ2xvc2UpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIHN3aXRjaCAoZGVjaXNpb24pIHsKLSAg
ICAgICAgICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OiB7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gSURCUmVzdWx0RGF0YTo6ZXJyb3Io
bV9jdXJyZW50T3BlbkRCUmVxdWVzdC0+cmVxdWVzdERhdGEoKS5yZXF1ZXN0SWRlbnRpZmllcigp
LCBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJv
cGVuRGF0YWJhc2UiKSB9KTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVx
dWVzdC0+Y29ubmVjdGlvbigpLmRpZE9wZW5EYXRhYmFzZShyZXN1bHQpOwotICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAg
ICAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50OgotICAgICAgICAgICAgICAgICAgICBhdXRv
IGNhbGxiYWNrSUQgPSB0aGlzLT5nZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpOwot
ICAgICAgICAgICAgICAgICAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIGRl
ZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLT5wb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIsIGNhbGxiYWNrSUQpKTsKLSAgICAg
ICAgICAgICAgICB9OwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBwb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVu
QmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtODM1LDE0ICs3NjMsMjEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWRk
T3BlbkRhdGFiYXNlQ29ubmVjdGlvbihSZWY8VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW8KICAg
ICBtX29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmFkZChhZG9wdFJlZihjb25uZWN0aW9uLmxlYWtS
ZWYoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNv
bnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50
aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6b3Bl
bkJhY2tpbmdTdG9yZSAoJXApIiwgdGhpcyk7CiAKLSAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3Jl
KTsKLQogICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CisgICAgbV9vcmlnaW4gPSBp
ZGVudGlmaWVyLm9yaWdpbigpOworICAgIC8vIFF1b3RhIGNoZWNrLgorICAgIGF1dG8gZGVjaXNp
b24gPSBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCBkZWZhdWx0V3JpdGVPcGVyYXRp
b25Db3N0KTsKKyAgICBpZiAoZGVjaXNpb24gPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBk
YXRhYmFzZUluZm8sIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3Nh
Z2VOYW1lKCJPcGVuQmFja2luZ1N0b3JlIikpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlKTsKICAgICBJREJFcnJvciBlcnJvcjsKICAgICB7
CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CkBAIC04NTIs
MTAgKzc4NywxMCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNv
bnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcgogICAgICAgICBlcnJvciA9IG1f
YmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8sIGxv
Y2tlcik7CiAgICAgfQogCi0gICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBk
YXRhYmFzZUluZm8sIGVycm9yLCAgdGFza0lkZW50aWZpZXIpKTsKKyAgICBwb3N0RGF0YWJhc2VU
YXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5mbywgZXJyb3IpKTsKIH0KIAotdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlu
Zm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBlcnJvciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIp
Cit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRh
dGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSIpOwpAQCAtODY2LDggKzgwMSw2IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZv
JiBpbmZvLCBjb25zdCBJCiAgICAgQVNTRVJUKG1faXNPcGVuaW5nQmFja2luZ1N0b3JlKTsKICAg
ICBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSA9IGZhbHNlOwogCi0gICAgZmluaXNoU3BhY2VJbmNy
ZWFzZVRhc2sodGFza0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKLQogICAgIGlmIChtX2hh
cmRDbG9zZWRGb3JVc2VyRGVsZXRlKQogICAgICAgICByZXR1cm47CiAKQEAgLTg3OSwzMyArODEy
LDIyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVP
YmplY3RTdG9yZSIpOwogCi0gICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlv
bkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5mbyk7Ci0gICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9u
LCB0YXNrU2l6ZSwgImNyZWF0ZU9iamVjdFN0b3JlIiwgW3RoaXMsIHRhc2tTaXplLCAmdHJhbnNh
Y3Rpb24sIGluZm8sIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11
dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0g
UXVvdGFFeGNlZWRlZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9y
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Y3JlYXRl
T2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0aW9uLCBpbmZvLCBX
VEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6
ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9i
amVjdFN0b3JlSW5mbyYgaW5mbywgRXJyb3JDYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJy
b3ImIHF1b3RhRXJyb3IpCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJh
Y2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQs
IHRhc2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxi
YWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8sICBxdW90YUVycm9y
KSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lELCB0
cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvKSk7CiB9CiAKLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBxdW90
YUVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3Jl
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbykK
IHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRi
KSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlIik7CiAKLSAgICBp
ZiAoIXF1b3RhRXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgcXVvdGFFcnJvciwgaW5m
bykpOworICAgIC8vIFF1b3RhIGNoZWNrLgorICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3Jp
dGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGluZm8pOworICAgIGlmIChtX3NlcnZlci0+
cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCB0YXNrU2l6ZSkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6
RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRl
T2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVy
cm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIkNyZWF0ZU9iamVjdFN0b3JlIikpLCBpbmZvKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTkyNCw3ICs4NDYsNiBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0
b3JlIik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIs
IGVycm9yLmlzTnVsbCgpKTsKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fZGF0
YWJhc2VJbmZvLT5hZGRFeGlzdGluZ09iamVjdFN0b3JlKGluZm8pOwogCkBAIC05MzYsMTcgKzg1
Nyw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVP
YmplY3RTdG9yZSIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNh
Y3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTmFtZSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFl
cnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZU9iamVj
dFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU5hbWUsIFdURk1v
dmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVs
ZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtOTkxLDI4ICs5MDEsMTUgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cmVuYW1lT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFp
bikgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlIik7CiAKLSAgICBhdXRvIHRh
c2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMo
KTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicmVuYW1lT2JqZWN0
U3RvcmUiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBuZXdOYW1lLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9
IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJv
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPnJlbmFt
ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwotICAg
IH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVy
UXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVv
dGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIElEQkVycm9yIGVycm9yID0gcXVvdGFFcnJvcjsKKyAgICBJREJFcnJv
ciBlcnJvcjsKICAgICBhdXRvKiBpbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGlu
Z09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgaWYgKCFpbmZvKQogICAg
ICAgICBlcnJvciA9IElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQXR0ZW1wdCB0byByZW5hbWUg
bm9uLWV4aXN0YW50IG9iamVjdCBzdG9yZSJfcyB9OwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNl
VGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9i
amVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIGVycm9yKSk7CiB9CiAKQEAgLTEwMjEsOCAr
OTE4LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9y
ZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvCiAgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAg
ICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7CisgICAg
Ly8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlv
bkNvc3QgKyBuZXdOYW1lLnNpemVJbkJ5dGVzKCk7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0
U3BhY2UobV9vcmlnaW4sIHRhc2tTaXplKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lv
bjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RT
dG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1
b3RhRXJyb3JNZXNzYWdlTmFtZSgiUmVuYW1lT2JqZWN0U3RvcmUiKSksIG9iamVjdFN0b3JlSWRl
bnRpZmllciwgbmV3TmFtZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDQwLDcg
KzkzOSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RT
dG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsCiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNr
KGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwogICAgIGlmIChlcnJvci5pc051
bGwoKSkKICAgICAgICAgbV9kYXRhYmFzZUluZm8tPnJlbmFtZU9iamVjdFN0b3JlKG9iamVjdFN0
b3JlSWRlbnRpZmllciwgbmV3TmFtZSk7CiAKQEAgLTEwNTIsMTcgKzk1MCw2IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3RpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5k
ZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlIik7CiAK
LSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0
cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Y2xlYXJPYmplY3RTdG9yZUFmZXRR
dW90YUNoZWNrKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIFdURk1vdmUoY2Fs
bGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmpl
Y3RTdG9yZUFmZXRRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIEVycm9yQ2FsbGJhY2sgY2Fs
bGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMDk3LDMzICs5ODQsMjEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3Jl
YXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGMKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4Iik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVm
YXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsKLSAgICByZXF1ZXN0
U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAiY3JlYXRlSW5kZXgiLCBbdGhpcywgdGFza1Np
emUsICZ0cmFuc2FjdGlvbiwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0
byBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9y
LmNvZGUoKSAhPSBRdW90YUV4Y2VlZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdU
Rk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0
aGlzLT5jcmVhdGVJbmRleEFmdGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIGlu
Zm8sIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXpl
LCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCSW5k
ZXhJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVv
dGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1Np
emUpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJhY2tJRCwgdHJhbnNh
Y3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbywgcXVvdGFFcnJvcikpOworICAgIHBvc3RE
YXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlk
ZW50aWZpZXIoKSwgaW5mbykpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
Q3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiBp
bmZvLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRl
eEluZm8mIGluZm8pCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCIpOwog
Ci0gICAgaWYgKCFxdW90YUVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRh
c2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIHF1b3RhRXJyb3IsIGlu
Zm8pKTsKKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVz
dGltYXRlU2l6ZShpbmZvKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29yaWdp
biwgdGFza1NpemUpID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7Cisg
ICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lkZW50
aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1l
KCJDcmVhdGVJbmRleCIpKSwgaW5mbykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
MTQ4LDggKzEwMjMsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRl
SW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4Iik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFz
ayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKLQogICAgIGlmIChlcnJvci5p
c051bGwoKSkgewogICAgICAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOwogICAgICAgICBhdXRv
KiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0
U3RvcmUoaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CkBAIC0xMTY1LDE3ICsxMDM4LDYg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUluZGV4
Iik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3Ro
aXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAg
IGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJy
b3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5kZWxl
dGVJbmRleEFmdGVyUXVvdGFDaGVjayh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleE5hbWUsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAg
ICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3Zl
KGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0x
MjI5LDIzICsxMDkxLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4KFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFi
YXNlOjpyZW5hbWVJbmRleCIpOwogCi0gICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9w
ZXJhdGlvbkNvc3QgKyBuZXdOYW1lLnNpemVJbkJ5dGVzKCk7Ci0gICAgcmVxdWVzdFNwYWNlKHRy
YW5zYWN0aW9uLCB0YXNrU2l6ZSwgInJlbmFtZUluZGV4IiwgW3RoaXMsIHRhc2tTaXplLCAmdHJh
bnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1l
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9IFF1b3RhRXhjZWVk
ZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPnJlbmFtZUluZGV4QWZ0ZXJR
dW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBp
bmRleElkZW50aWZpZXIsIG5ld05hbWUsIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4QWZ0ZXJRdW90YUNo
ZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaywg
Y29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9
IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFj
YWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAKLSAgICBJREJFcnJvciBlcnJvciA9IHF1b3Rh
RXJyb3I7CisgICAgSURCRXJyb3IgZXJyb3I7CiAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0g
bV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRl
bnRpZmllcik7CiAgICAgaWYgKCFvYmplY3RTdG9yZUluZm8pCiAgICAgICAgIGVycm9yID0gSURC
RXJyb3IgeyBVbmtub3duRXJyb3IsICJBdHRlbXB0IHRvIHJlbmFtZSBpbmRleCBpbiBub24tZXhp
c3RhbnQgb2JqZWN0IHN0b3JlIl9zIH07CkBAIC0xMjU0LDcgKzExMDQsNiBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6
ZSwgVW5pcXVlSURCRAogICAgIGlmICghaW5kZXhJbmZvKQogICAgICAgICBlcnJvciA9IElEQkVy
cm9yIHsgVW5rbm93bkVycm9yLCAiQXR0ZW1wdCB0byByZW5hbWUgbm9uLWV4aXN0YW50IGluZGV4
Il9zIH07CiAKLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXpl
KTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0
aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVu
dGlmaWVyLCBuZXdOYW1lLCBlcnJvcikpOwogfQogCkBAIC0xMjYzLDggKzExMTIsMTAgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSUQKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4
Iik7CiAKLSAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRh
c2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkpOworICAgIC8vIFF1b3Rh
IGNoZWNrLgorICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsg
bmV3TmFtZS5zaXplSW5CeXRlcygpOworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1f
b3JpZ2luLCB0YXNrU2l6ZSkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkp
IHsKKyAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgsIGNhbGxiYWNr
SWRlbnRpZmllciwgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2Fn
ZU5hbWUoIlJlbmFtZUluZGV4IikpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRp
ZmllciwgbmV3TmFtZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMjgyLDcgKzEx
MzMsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgodWlu
dDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybVJlbmFtZUluZGV4Iik7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsK
ICAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JF
eGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgICAgIEFTU0VS
VChvYmplY3RTdG9yZUluZm8pOwpAQCAtMTI5Niw1MiArMTE0NiwzOSBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdAogICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZChVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJl
cXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgdmFs
dWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIEtl
eURhdGFDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRk
KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5
RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zlcndy
aXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwdXRPckFkZCIpOwogCi0gICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRX
cml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUoa2V5RGF0YSkgKyBlc3RpbWF0ZVNpemUo
dmFsdWUpOwotICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7Ci0gICAgYXV0byogb2JqZWN0U3Rv
cmUgPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUocmVxdWVzdERh
dGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCkpOwotICAgIGlmIChvYmplY3RTdG9yZSkKLSAgICAg
ICAgdGFza1NpemUgKz0gb2JqZWN0U3RvcmUtPmluZGV4TmFtZXMoKS5zaXplKCkgKiB0YXNrU2l6
ZTsKLQotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2FjdGlvbiwgdGFza1NpemUsICJwdXRPckFkZCIs
IFt0aGlzLCB0YXNrU2l6ZSwgcmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBvdmVyd3JpdGVNb2RlXShhdXRvIGVycm9yKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9IFF1b3RhRXhj
ZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+cHV0T3JBZGRB
ZnRlclF1b3RhQ2hlY2sodGFza1NpemUsIHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgb3Zl
cndyaXRlTW9kZSwgV1RGTW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFz
a1NpemUsIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0
YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3Jl
T3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2ssIGNv
bnN0IElEQkVycm9yJiBxdW90YUVycm9yKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBz
dG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2Fs
bGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhj
YWxsYmFja0lELCB0YXNrU2l6ZSk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkLCBjYWxs
YmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEu
b2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBx
dW90YUVycm9yKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lELCBy
ZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3Rv
cmVJZGVudGlmaWVyKCksIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlKSk7CiB9CiAKLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmIGtl
eURhdGEsIGNvbnN0IElEQlZhbHVlJiBvcmlnaW5hbFJlY29yZFZhbHVlLCBJbmRleGVkREI6Ok9i
amVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBjb25zdCBJREJFcnJvciYgcXVv
dGFFcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElE
QktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiBvcmlnaW5hbFJlY29yZFZhbHVlLCBJ
bmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlKQogewogICAg
IEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQiKTsKIAotICAgIEFTU0VSVChtX2JhY2tpbmdT
dG9yZSk7Ci0gICAgQVNTRVJUKG9iamVjdFN0b3JlSWRlbnRpZmllcik7Ci0KICAgICBJREJLZXlE
YXRhIHVzZWRLZXk7CiAgICAgSURCRXJyb3IgZXJyb3I7CiAKLSAgICBpZiAoIXF1b3RhRXJyb3Iu
aXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNh
bGxiYWNrSWRlbnRpZmllciwgcXVvdGFFcnJvciwgdXNlZEtleSkpOworICAgIC8vIFF1b3RhIGNo
ZWNrLgorICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0
aW1hdGVTaXplKGtleURhdGEpICsgZXN0aW1hdGVTaXplKG9yaWdpbmFsUmVjb3JkVmFsdWUpOwor
ICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7CisgICAgYXV0byogb2JqZWN0U3RvcmUgPSBtX2Rh
dGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlm
aWVyKTsKKyAgICBpZiAob2JqZWN0U3RvcmUpCisgICAgICAgIHRhc2tTaXplICs9IG9iamVjdFN0
b3JlLT5pbmRleE5hbWVzKCkuc2l6ZSgpICogdGFza1NpemU7CisgICAgaWYgKG1fc2VydmVyLT5y
ZXF1ZXN0U3BhY2UobV9vcmlnaW4sIHRhc2tTaXplKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFk
ZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3Rh
RXJyb3JNZXNzYWdlTmFtZSgiUHV0T3JBZGQiKSksIHVzZWRLZXkpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAorICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CisgICAgQVNTRVJUKG9iamVj
dFN0b3JlSWRlbnRpZmllcik7CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2Jh
Y2tpbmdTdG9yZUxvY2spOwogICAgICAgICBpZiAoIW1fYmFja2luZ1N0b3JlKSB7CkBAIC0xNDE4
LDI2ICsxMjU1LDE0IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFk
ZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElECiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUHV0T3JBZGQiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNh
bGxiYWNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwogICAgIHBlcmZvcm1LZXlEYXRhQ2Fs
bGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0S2V5KTsKIH0KIAotdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElE
QkdldFJlY29yZERhdGEmIGdldFJlY29yZERhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNr
KQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRh
JiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYgZ2V0UmVjb3JkRGF0YSwgR2V0
UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQi
KTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhp
cywgcmVxdWVzdERhdGEsIGdldFJlY29yZERhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkp
IHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmdldFJlY29yZEFmdGVyUXVvdGFD
aGVjayhyZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAg
IH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmRBZnRlclF1b3RhQ2hl
Y2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRSZWNvcmRE
YXRhJiBnZXRSZWNvcmREYXRhLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1
aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2Fs
bGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTE0NDgs
MjIgKzEyNzMsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkQWZ0ZXJRdW90
YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGEKICAgICAgICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUdldFJlY29yZCwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVu
dGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBnZXRSZWNvcmRE
YXRhLmtleVJhbmdlRGF0YSwgZ2V0UmVjb3JkRGF0YS50eXBlKSk7CiB9CiAKLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHMoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURC
R2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBHZXRBbGxSZXN1bHRzQ2FsbGJh
Y2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzKGNvbnN0
IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEm
IGdldEFsbFJlY29yZHNEYXRhLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNw
YWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBnZXRBbGxSZWNv
cmRzRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRh
YmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJh
Y2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgdGhpcy0+Z2V0QWxsUmVjb3Jkc0FmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwg
Z2V0QWxsUmVjb3Jkc0RhdGEsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3Jkc0FmdGVyUXVvdGFDaGVjayhjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBn
ZXRBbGxSZWNvcmRzRGF0YSwgR2V0QWxsUmVzdWx0c0NhbGxiYWNrIGNhbGxiYWNrKQotewogICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShj
YWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ3
Nyw3ICsxMjkxLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlIKICAgICBMT0coSW5kZXhlZERC
LCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCIpOwogCiAgICAgQVNT
RVJUKG1fYmFja2luZ1N0b3JlKTsKLQogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7CiAgICAgSURC
RXJyb3IgZXJyb3I7CiAgICAgewpAQCAtMTUxOCw3ICsxMzMxLDYgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUdldEFsbFJlY29yZHModWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdAogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtR2V0QWxsUmVjb3JkcyIpOwogCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLQogICAg
IElEQkdldEFsbFJlc3VsdCByZXN1bHQ7CiAgICAgSURCRXJyb3IgZXJyb3I7CiAgICAgewpAQCAt
MTUzNywyMiArMTM0OSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0
QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbgogICAgIHBlcmZvcm1H
ZXRBbGxSZXN1bHRzQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0
YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgQ291bnRDYWxsYmFjayBjYWxsYmFjaykK
K3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldENvdW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgQ291bnRDYWxsYmFjayBj
YWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmdldENvdW50Iik7CiAKLSAgICB3YWl0Rm9y
UmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHJlcXVlc3REYXRhLCBy
YW5nZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2so
V1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgdGhpcy0+Z2V0Q291bnRBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIHJhbmdlLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmdldENvdW50QWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0
YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgQ291bnRDYWxsYmFjayBjYWxsYmFjaykK
LXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdU
Rk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsK
QEAgLTE1ODUsMjIgKzEzODYsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bUdldENvdW50KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSUQKICAgICBwZXJm
b3JtQ291bnRDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBjb3VudCk7CiB9CiAK
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgRXJyb3JDYWxsYmFjayBjYWxs
YmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZChjb25zdCBJREJSZXF1
ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRh
LCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVj
b3JkIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwg
W3RoaXMsIHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxs
KCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5kZWxldGVSZWNvcmRBZnRlclF1b3Rh
Q2hlY2socmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAg
IH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmRBZnRlclF1b3Rh
Q2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmIGtleVJhbmdlRGF0YSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50
NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJh
Y2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTE2MjksMjIg
KzE0MTksMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29y
ZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnMKICAgICBwZXJmb3JtRXJyb3JDYWxs
YmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6b3BlbkN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJDdXJzb3JJbmZv
JiBpbmZvLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6Om9wZW5DdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJ
REJDdXJzb3JJbmZvJiBpbmZvLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVl
SURCRGF0YWJhc2U6Om9wZW5DdXJzb3IiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21w
bGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGluZm8sIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICgh
ZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7
IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPm9wZW5D
dXJzb3JBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGluZm8sIFdURk1vdmUoY2FsbGJhY2sp
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvckFmdGVy
UXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkN1
cnNvckluZm8mIGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2
NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFj
aykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY3NCwyMiAr
MTQ1MywxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtT3BlbkN1cnNvcih1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgcGVyZm9ybUdldFJlc3VsdENh
bGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCk7CiB9CiAKLXZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3Qg
SURCSXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQor
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0
YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhLCBHZXRSZXN1
bHRDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3Ii
KTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhp
cywgcmVxdWVzdERhdGEsIGRhdGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8m
JiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAg
ICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpLCB7IH0pOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPml0ZXJhdGVDdXJzb3JBZnRlclF1b3RhQ2hlY2so
cmVxdWVzdERhdGEsIGRhdGEsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayhjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBk
YXRhLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRfdCBjYWxsYmFj
a0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBp
ZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NjcsMTcgKzE1MzUsNiBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmRhdGFiYXNl
Q29ubmVjdGlvbigpLmRhdGFiYXNlKCkgPT0gdGhpcyk7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNw
YWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYg
KCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNvbW1pdFRy
YW5zYWN0aW9uQWZ0ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9uLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9u
QWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
LCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBz
dG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2Fs
bGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTgzNSwyNCArMTU5MiwxMyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLAogICAgIHRyYW5zYWN0aW9uQ29tcGxldGVkKG1fZmluaXNoaW5nVHJh
bnNhY3Rpb25zLnRha2UodHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiB9CiAKLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIFdhaXRGb3JQZW5kaW5nVGFza3Mgd2FpdEZvclBlbmRpbmdUYXNrcywg
RXJyb3JDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJh
bnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIEVycm9y
Q2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5zYWN0aW9u
IC0gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKIAogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rp
b24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwogCi0gICAgaWYgKHdhaXRGb3JQZW5kaW5nVGFza3Mg
PT0gV2FpdEZvclBlbmRpbmdUYXNrczo6WWVzKSB7Ci0gICAgICAgIHdhaXRGb3JSZXF1ZXN0U3Bh
Y2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICAgICAg
aWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUo
ZXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB0aGlzLT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBXYWl0Rm9yUGVuZGluZ1Rh
c2tzOjpObywgV1RGTW92ZShjYWxsYmFjaykpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJl
RXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCBjMzU4ZGU0OTM0NzZiNDQxM2RlNDJj
YTY0MTE2MjM0NTc2ZWU2YTU1Li5lYmZjMWM1MGY3YTg4MDg5ZWU2YmYyNGNiNjk1NzQ0OTk4ODA5
MzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAtNDQsNiArNDQsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBDbGllbnRPcmlnaW47CiBjbGFzcyBJREJFcnJvcjsKIGNs
YXNzIElEQkdldEFsbFJlc3VsdDsKIHN0cnVjdCBJREJHZXRSZWNvcmREYXRhOwpAQCAtODksMTcg
KzkwLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mLCBjb25zdCBJREJJbmRleEluZm8mLCBFcnJvckNhbGxiYWNrKTsKICAgICB2
b2lkIGRlbGV0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBFcnJvckNhbGxi
YWNrKTsKICAgICB2b2lkIHJlbmFtZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrKTsKLSAgICB2b2lkIHB1dE9y
QWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYs
IGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3Rv
cmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0UmVjb3JkKFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0
IElEQkdldFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRBbGxS
ZWNvcmRzKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0
YSYsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgR2V0QWxsUmVzdWx0c0NhbGxiYWNrKTsK
LSAgICB2b2lkIGdldENvdW50KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJ
REJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIENvdW50Q2FsbGJhY2spOwot
ICAgIHZvaWQgZGVsZXRlUmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25z
dCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEVycm9yQ2FsbGJhY2sp
OwotICAgIHZvaWQgb3BlbkN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29u
c3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJDdXJzb3JJbmZvJiwgR2V0UmVzdWx0Q2FsbGJh
Y2spOwotICAgIHZvaWQgaXRlcmF0ZUN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYsIEdl
dFJlc3VsdENhbGxiYWNrKTsKKyAgICB2b2lkIHB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRh
JiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RT
dG9yZU92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayk7CisgICAgdm9pZCBnZXRSZWNvcmQo
Y29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiwgR2V0UmVzdWx0
Q2FsbGJhY2spOworICAgIHZvaWQgZ2V0QWxsUmVjb3Jkcyhjb25zdCBJREJSZXF1ZXN0RGF0YSYs
IGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgR2V0QWxsUmVzdWx0c0NhbGxiYWNrKTsKKyAg
ICB2b2lkIGdldENvdW50KGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJiwgQ291bnRDYWxsYmFjayk7CisgICAgdm9pZCBkZWxldGVSZWNvcmQoY29uc3QgSURCUmVx
dWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFcnJvckNhbGxiYWNrKTsKKyAgICB2
b2lkIG9wZW5DdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJDdXJzb3JJbmZv
JiwgR2V0UmVzdWx0Q2FsbGJhY2spOworICAgIHZvaWQgaXRlcmF0ZUN1cnNvcihjb25zdCBJREJS
ZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwgR2V0UmVzdWx0Q2FsbGJh
Y2spOwogICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYsIEVycm9yQ2FsbGJhY2spOwotCi0gICAgZW51bSBjbGFzcyBXYWl0Rm9yUGVuZGluZ1Rh
c2tzIHsgTm8sIFllcyB9OwotICAgIHZvaWQgYWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiwgV2FpdEZvclBlbmRpbmdUYXNrcywgRXJyb3JDYWxsYmFjayk7Cisg
ICAgdm9pZCBhYm9ydFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBF
cnJvckNhbGxiYWNrKTsKIAogICAgIHZvaWQgZGlkRmluaXNoSGFuZGxpbmdWZXJzaW9uQ2hhbmdl
KFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uRGVzdHJveWVk
KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mKTsKQEAgLTE0MCwzNyArMTM5LDIwIEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHNjaGVkdWxlU2h1dGRvd25Gb3JDbG9zZSgpOwogCi0gICAgdm9p
ZCBjcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIEVy
cm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCByZW5hbWVPYmplY3RTdG9y
ZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBu
ZXdOYW1lLCBFcnJvckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgY3JlYXRl
SW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mLCBjb25zdCBJREJJbmRleEluZm8mLCBFcnJvckNhbGxiYWNrLCBjb25zdCBJ
REJFcnJvciYpOwotICAgIHZvaWQgcmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3Qg
dGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBu
ZXdOYW1lLCBFcnJvckNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgcHV0T3JB
ZGRBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIGNvbnN0IElEQlJlcXVlc3REYXRh
JiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RT
dG9yZU92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjaywgY29uc3QgSURCRXJyb3ImKTsKLSAg
ICB2b2lkIGRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEVycm9yQ2FsbGJhY2spOwotCi0gICAgdm9pZCBkZWxl
dGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIEVycm9yQ2FsbGJhY2spOwotICAgIHZv
aWQgY2xlYXJPYmplY3RTdG9yZUFmZXRRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIEVycm9yQ2FsbGJhY2spOwot
ICAgIHZvaWQgZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiwg
RXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiwgR2V0UmVzdWx0Q2FsbGJh
Y2spOwotICAgIHZvaWQgZ2V0QWxsUmVjb3Jkc0FmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1
ZXN0RGF0YSYsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgR2V0QWxsUmVzdWx0c0NhbGxi
YWNrKTsKLSAgICB2b2lkIGdldENvdW50QWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgQ291bnRDYWxsYmFjayk7Ci0gICAgdm9pZCBv
cGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURC
Q3Vyc29ySW5mbyYsIEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGl0ZXJhdGVDdXJzb3JB
ZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJdGVyYXRlQ3Vy
c29yRGF0YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9u
QWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBFcnJvckNhbGxi
YWNrKTsKLQogICAgIC8vIERhdGFiYXNlIHRocmVhZCBvcGVyYXRpb25zCiAgICAgdm9pZCBkZWxl
dGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7Ci0gICAgdm9pZCBv
cGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIHVpbnQ2NF90IHRh
c2tJZGVudGlmaWVyKTsKKyAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJh
c2VJZGVudGlmaWVyJik7CiAgICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24odWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCBwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbih1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIGJlZ2luVHJhbnNhY3Rpb25JbkJhY2tpbmdT
dG9yZShjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKLSAgICB2b2lkIHBlcmZvcm1DcmVhdGVP
YmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUlu
Zm8mLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgcGVyZm9ybUNyZWF0ZU9iamVjdFN0b3Jl
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOwogICAg
IHZvaWQgcGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9pZCBwZXJmb3JtUmVuYW1lT2Jq
ZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElEQkVycm9yJik7CiAgICAgdm9p
ZCBwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwotICAgIHZvaWQgcGVyZm9ybUNyZWF0ZUluZGV4KHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYsIGNvbnN0IElEQkVycm9y
Jik7CisgICAgdm9pZCBwZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCSW5kZXhJbmZvJik7CiAgICAgdm9pZCBwZXJmb3JtRGVsZXRlSW5kZXgodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRf
dCBpbmRleElkZW50aWZpZXIpOwogICAgIHZvaWQgcGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3Qg
aW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IElEQkVycm9yJik7
Ci0gICAgdm9pZCBwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFs
dWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgY29uc3QgSURCRXJyb3Im
KTsKKyAgICB2b2lkIHBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJW
YWx1ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKTsKICAgICB2b2lkIHBl
cmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJREJHZXRSZWNvcmREYXRhVHlw
ZSk7CiAgICAgdm9pZCBwZXJmb3JtR2V0QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYpOwogICAgIHZvaWQgcGVyZm9ybUdldEluZGV4
UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlw
ZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CkBAIC0xODcsNyArMTY5LDcgQEAgcHJpdmF0ZToK
IAogICAgIC8vIE1haW4gdGhyZWFkIGNhbGxiYWNrcwogICAgIHZvaWQgZGlkRGVsZXRlQmFja2lu
Z1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKTsKLSAgICB2b2lkIGRpZE9wZW5CYWNraW5n
U3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCB0
YXNrSWRlbnRpZmllcik7CisgICAgdm9pZCBkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRh
dGFiYXNlSW5mbyYsIGNvbnN0IElEQkVycm9yJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtQ3JlYXRl
T2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYs
IGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOwogICAgIHZvaWQgZGlkUGVyZm9ybURlbGV0ZU9i
amVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkUGVyZm9ybVJlbmFt
ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3Im
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSk7
CkBAIC0yNDYsMTEgKzIyOCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXliZUZpbmlzaEhhcmRD
bG9zZSgpOwogICAgIGJvb2wgaXNEb25lV2l0aEhhcmRDbG9zZSgpOwogCi0gICAgdm9pZCByZXF1
ZXN0U3BhY2UoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IHRhc2tTaXpl
LCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSURCRXJy
b3ImJik+JiYpOwotICAgIHZvaWQgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24oVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSURCRXJyb3Im
Jik+JiYpOwotICAgIHZvaWQgc3RhcnRTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlm
aWVyLCB1aW50NjRfdCB0YXNrU2l6ZSk7Ci0gICAgdm9pZCBmaW5pc2hTcGFjZUluY3JlYXNlVGFz
ayh1aW50NjRfdCBpZGVudGlmaWVyLCBib29sIGlzVGFza1N1Y2Nlc3NmdWwpOwotCiAgICAgdm9p
ZCBjbGVhclRyYW5zYWN0aW9uc09uQ29ubmVjdGlvbihVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rp
b24mKTsKIAogICAgIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRp
ZmllcigpOwpAQCAtMzExLDkgKzI4OCw5IEBAIHByaXZhdGU6CiAKICAgICBIYXNoU2V0PElEQlJl
c291cmNlSWRlbnRpZmllcj4gbV9jdXJzb3JQcmVmZXRjaGVzOwogCi0gICAgSGFzaE1hcDx1aW50
NjRfdCwgdWludDY0X3Q+IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrczsKLQogICAgIGJvb2wg
bV9pc1N1c3BlbmRlZCB7IGZhbHNlIH07CisKKyAgICBDbGllbnRPcmlnaW4gbV9vcmlnaW47CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFi
YXNlQ29ubmVjdGlvbi5jcHAKaW5kZXggZmU5MTBmYWY5ODQ5ZGMyYjA0N2ViYTk3YWU1NjY1Nzlm
ZDEzZDIxMC4uODAwNjA2OTg4MzQ0ZjFiMzliOGI5ZmJjMTk5OTgyMWQ4MjYyMWI4NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAKQEAgLTc2LDcgKzc2LDcg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmFib3J0VHJhbnNhY3Rpb25XaXRo
b3V0Q2FsbGJhY2soVW5pcXVlSURCRGF0YWIKICAgICBpZiAoIW1fZGF0YWJhc2UpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBtX2RhdGFiYXNlLT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uLCBVbmlxdWVJREJEYXRhYmFzZTo6V2FpdEZvclBlbmRpbmdUYXNrczo6Tm8sIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzLCB0cmFuc2FjdGlvbklkZW50aWZpZXJdKGNvbnN0IElEQkVycm9yJikgewor
ICAgIG1fZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzLCB0cmFuc2FjdGlvbklkZW50aWZpZXJdKGNvbnN0IElEQkVycm9yJikgewogICAg
ICAgICBBU1NFUlQobV90cmFuc2FjdGlvbk1hcC5jb250YWlucyh0cmFuc2FjdGlvbklkZW50aWZp
ZXIpKTsKICAgICAgICAgbV90cmFuc2FjdGlvbk1hcC5yZW1vdmUodHJhbnNhY3Rpb25JZGVudGlm
aWVyKTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
LmNwcAppbmRleCBhOGQyYmRjNzQwYzg5NzFhNWE3YzA0ZTc2YzAzMjliNDc2YWRjNDI2Li43NmVk
ZGM0NWIwNzZiZTNlNjk3Mjg0NWQxMWUyMTUwYjZmMDdkODY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6YWJvcnQoKQogICAgIGF1dG8gZGF0YWJhc2UgPSBt
X2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwog
Ci0gICAgZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24oKnRoaXMsIFVuaXF1ZUlEQkRhdGFiYXNl
OjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpZZXMsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKV0oYXV0byYgZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+YWJvcnRUcmFuc2FjdGlvbigq
dGhpcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShhdXRvJiBlcnJvcikg
ewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
YWJvcnQgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjCiAgICAg
YXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFT
U0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPnB1dE9yQWRkKCp0aGlzLCByZXF1
ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJL
ZXlEYXRhJiBrZXkpIHsKKyAgICBkYXRhYmFzZS0+cHV0T3JBZGQocmVxdWVzdERhdGEsIGtleURh
dGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigq
dGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCS2V5RGF0YSYga2V5KSB7
CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpw
dXRPckFkZCAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0zMDcsNyArMzA3LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uOjpnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLAogICAg
IGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBB
U1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5nZXRSZWNvcmQoKnRoaXMsIHJl
cXVlc3REYXRhLCBnZXRSZWNvcmREYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigq
dGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1
bHQpIHsKKyAgICBkYXRhYmFzZS0+Z2V0UmVjb3JkKHJlcXVlc3REYXRhLCBnZXRSZWNvcmREYXRh
LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRv
JiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKICAgICAgICAgTE9HKEluZGV4
ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldFJlY29yZCAoY2FsbGJhY2sp
Iik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMjgs
NyArMzI4LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNv
cmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGEKICAgICBhdXRvIGRhdGFiYXNlID0g
bV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsK
ICAgICAKLSAgICBkYXRhYmFzZS0+Z2V0QWxsUmVjb3JkcygqdGhpcywgcmVxdWVzdERhdGEsIGdl
dEFsbFJlY29yZHNEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJl
cXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0QWxsUmVzdWx0JiByZXN1bHQpIHsK
KyAgICBkYXRhYmFzZS0+Z2V0QWxsUmVjb3JkcyhyZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jkc0Rh
dGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1
dG8mIGVycm9yLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0co
SW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3JkcyAo
Y2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC0zNDksNyArMzQ5LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpn
ZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGMKICAgICBhdXRvIGRh
dGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRh
dGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+Z2V0Q291bnQoKnRoaXMsIHJlcXVlc3REYXRh
LCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVx
dWVzdERhdGFdKGF1dG8mIGVycm9yLCB1aW50NjRfdCBjb3VudCkgeworICAgIGRhdGFiYXNlLT5n
ZXRDb3VudChyZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgdWludDY0X3QgY291bnQp
IHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
OmdldENvdW50IChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTM3MCw3ICszNzAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb246OmRlbGV0ZVJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdAog
ICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAg
ICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5kZWxldGVSZWNvcmQoKnRo
aXMsIHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yKSB7CisgICAgZGF0YWJhc2UtPmRl
bGV0ZVJlY29yZChyZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvcikgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3Jk
IChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
Om9wZW5DdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLAogICAgIGF1dG8g
ZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQo
ZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5vcGVuQ3Vyc29yKCp0aGlzLCByZXF1ZXN0
RGF0YSwgaW5mbywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0
RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0KSB7CisgICAgZGF0
YWJhc2UtPm9wZW5DdXJzb3IocmVxdWVzdERhdGEsIGluZm8sIFt0aGlzLCB3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRS
ZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvciAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmICghd2Vh
a1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00MTIsNyArNDEyLDcgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZXN0RGEKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24t
PmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+
aXRlcmF0ZUN1cnNvcigqdGhpcywgcmVxdWVzdERhdGEsIGRhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJH
ZXRSZXN1bHQmIHJlc3VsdCkgeworICAgIGRhdGFiYXNlLT5pdGVyYXRlQ3Vyc29yKHJlcXVlc3RE
YXRhLCBkYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3RE
YXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKICAgICAgICAg
TE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJz
b3IgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0
dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0luUHJvY2Vzc0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAppbmRleCA5MTExZjU5NzhlM2I4MDYxODU1
YzIwZjVhZmFhNWI2NTVkY2NlYTIxLi5kNjViZDVhNzY3MmEzODA1NjcxNmQzNmE1Y2NiMTM4Zjkx
YjMxYTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFy
ZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcApAQCAtNjQsMzAgKzY0LDM1IEBA
IEluUHJvY2Vzc0lEQlNlcnZlcjo6fkluUHJvY2Vzc0lEQlNlcnZlcigpID0gZGVmYXVsdDsKIFN0
b3JhZ2VRdW90YU1hbmFnZXIqIEluUHJvY2Vzc0lEQlNlcnZlcjo6cXVvdGFNYW5hZ2VyKGNvbnN0
IENsaWVudE9yaWdpbiYgb3JpZ2luKQogewogICAgIHJldHVybiBtX3F1b3RhTWFuYWdlcnMuZW5z
dXJlKG9yaWdpbiwgW10gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTdG9yYWdlUXVvdGFN
YW5hZ2VyPihTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSwgW10odWludDY0X3Qg
cXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgYXV0
byBjYWxsYmFjaykgeworICAgICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6Y3JlYXRl
KFN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpLCBbXSB7CisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgfSwgW10odWludDY0X3QgcXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRT
cGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgYXV0byBjYWxsYmFjaykgewogICAgICAgICAg
ICAgY2FsbGJhY2socXVvdGEgKyBjdXJyZW50U3BhY2UgKyBzcGFjZUluY3JlYXNlKTsKICAgICAg
ICAgfSk7CiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5l
IElEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YU1hbmFnZXJHZXR0ZXIgc3RvcmFnZVF1b3RhTWFu
YWdlckdldHRlcihJblByb2Nlc3NJREJTZXJ2ZXImIHNlcnZlcikKK3N0YXRpYyBpbmxpbmUgSURC
U2VydmVyOjpJREJTZXJ2ZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciBzdG9y
YWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXIoSW5Qcm9jZXNzSURCU2VydmVyJiBzZXJ2ZXIp
CiB7Ci0gICAgcmV0dXJuIFt3ZWFrU2VydmVyID0gbWFrZVdlYWtQdHIoc2VydmVyKV0oUEFMOjpT
ZXNzaW9uSUQsIGNvbnN0IGF1dG8mIG9yaWdpbikgewotICAgICAgICByZXR1cm4gd2Vha1NlcnZl
ciA/IHdlYWtTZXJ2ZXItPnF1b3RhTWFuYWdlcihvcmlnaW4pIDogbnVsbHB0cjsKKyAgICByZXR1
cm4gW3NlcnZlciA9ICZzZXJ2ZXIsIHdlYWtTZXJ2ZXIgPSBtYWtlV2Vha1B0cihzZXJ2ZXIpXShj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQpIG11dGFi
bGUgeworICAgICAgICBhdXRvKiBzdG9yYWdlUXVvdGFNYW5hZ2VyID0gd2Vha1NlcnZlciA/IHNl
cnZlci0+cXVvdGFNYW5hZ2VyKG9yaWdpbikgOiBudWxscHRyOworICAgICAgICByZXR1cm4gc3Rv
cmFnZVF1b3RhTWFuYWdlciA/IHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9uQmFj
a2dyb3VuZFRocmVhZChzcGFjZVJlcXVlc3RlZCkgOiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNp
c2lvbjo6RGVueTsKICAgICB9OwogfQogCiBJblByb2Nlc3NJREJTZXJ2ZXI6OkluUHJvY2Vzc0lE
QlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCi0gICAgOiBtX3NlcnZlcihJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgc3RvcmFnZVF1b3RhTWFuYWdlckdldHRl
cigqdGhpcykpKQorICAgIDogbV9zZXJ2ZXIoSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShz
ZXNzaW9uSUQsIHN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlcigqdGhpcykpKQogewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50
KCk7CiAgICAgbV9jb25uZWN0aW9uVG9TZXJ2ZXIgPSBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25U
b1NlcnZlcjo6Y3JlYXRlKCp0aGlzKTsKICAgICBtX2Nvbm5lY3Rpb25Ub0NsaWVudCA9IElEQlNl
cnZlcjo6SURCQ29ubmVjdGlvblRvQ2xpZW50OjpjcmVhdGUoKnRoaXMpOwogfQogCiBJblByb2Nl
c3NJREJTZXJ2ZXI6OkluUHJvY2Vzc0lEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoKQotICAgIDogbV9zZXJ2ZXIoSURC
U2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIGRhdGFiYXNlRGlyZWN0b3J5UGF0
aCwgc3RvcmFnZVF1b3RhTWFuYWdlckdldHRlcigqdGhpcykpKQorICAgIDogbV9zZXJ2ZXIoSURC
U2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIGRhdGFiYXNlRGlyZWN0b3J5UGF0
aCwgc3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyKCp0aGlzKSkpCiB7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKICAg
ICBtX2Nvbm5lY3Rpb25Ub1NlcnZlciA9IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVy
OjpjcmVhdGUoKnRoaXMpOwogICAgIG1fY29ubmVjdGlvblRvQ2xpZW50ID0gSURCU2VydmVyOjpJ
REJDb25uZWN0aW9uVG9DbGllbnQ6OmNyZWF0ZSgqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVy
LmgKaW5kZXggYzdiNTMyMWNhMzYxYzc0MWU1MmQ0NWVjMThhODMxOGZhZDA4MjljMC4uOGU3MzZh
NzgwOTE5MWU0MzdiODYzYzNkYmRkYTJhYjQ4ZWUwNjVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2
ZXIuaApAQCAtNjQsNyArNjQsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgSURCQ2xp
ZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb25Ub1NlcnZlcigpIGNvbnN0Owog
ICAgIElEQlNlcnZlcjo6SURCQ29ubmVjdGlvblRvQ2xpZW50JiBjb25uZWN0aW9uVG9DbGllbnQo
KSBjb25zdDsKICAgICBJREJTZXJ2ZXI6OklEQlNlcnZlciYgc2VydmVyKCkgeyByZXR1cm4gbV9z
ZXJ2ZXIuZ2V0KCk7IH0KLQogICAgIElEQlNlcnZlcjo6SURCU2VydmVyJiBpZGJTZXJ2ZXIoKSB7
IHJldHVybiBtX3NlcnZlci5nZXQoKTsgfQogCiAgICAgLy8gSURCQ29ubmVjdGlvblRvU2VydmVy
CkBAIC0xMzUsNyArMTM0LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQ2xpZW50OjpJREJD
b25uZWN0aW9uVG9TZXJ2ZXI+IG1fY29ubmVjdGlvblRvU2VydmVyOwogICAgIFJlZlB0cjxJREJT
ZXJ2ZXI6OklEQkNvbm5lY3Rpb25Ub0NsaWVudD4gbV9jb25uZWN0aW9uVG9DbGllbnQ7CiAKLSAg
ICBIYXNoTWFwPENsaWVudE9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2VRdW90YU1hbmFn
ZXI+PiBtX3F1b3RhTWFuYWdlcnM7CisgICAgSGFzaE1hcDxDbGllbnRPcmlnaW4sIFJlZlB0cjxT
dG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9xdW90YU1hbmFnZXJzOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDBmNDhjZjBmNzM4ZTczMDczM2M2YzQzM2IwODlmMGM5OGIzNTRjMGYu
LjNkMDJlZDE0Y2MyOGQ0MTQ0ZmU4ZWE3NzBkZTZiMjg4MmIwOWU4OGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMjksNyAr
MTEyOSw2IEBACiAJCTQxRDI4RDBEMjEzOUUwNTgwMEY0MjA2RiAvKiBMaWJXZWJSVENTdGF0c0Nv
bGxlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MUQyOEQwQjIxMzlFMDFEMDBGNDIwNkYgLyogTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuY3Bw
ICovOyB9OwogCQk0MUQ0MUM2NzIyNTY4NzRGMDA2OTc5NDIgLyogU2VydmljZVdvcmtlckludGVy
bmFscy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
RDQxQzY1MjI1Njg1OTIwMDY5Nzk0MiAvKiBTZXJ2aWNlV29ya2VySW50ZXJuYWxzLm1tICovOyB9
OwogCQk0MURFN0M3QzIyMkRBMTQzMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFERTdDN0IyMjJE
QTEzRTAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk0MURFN0M3RDIyMkRBMTQ4MDA1MzJCNjUg
LyogU3RvcmFnZVF1b3RhVXNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDFERTdDNzgyMjJEQTEzQzAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YVVzZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MURF
RkNCNjFFNTZDMUJEMDAwRDlFNUYgLyogSlNET01NYXBMaWtlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MURFRkNCNDFFNTZDMUI5MDAwRDlFNUYgLyog
SlNET01NYXBMaWtlLmggKi87IH07CiAJCTQxRTFCMUQxMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0
cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDFFMUIxQ0IwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggKi87IH07CiAJ
CTQxRTlEQ0U3MjMxOTc0QkYwMEYzNTk0OSAvKiBCbG9iTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUU5RENFNDIzMTk3M0ZFMDBGMzU5NDkg
LyogQmxvYkxvYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC03NDY2LDcgKzc0NjUsNiBAQAogCQk0MUQyOEQwQzIxMzlFMDFFMDBGNDIwNkYg
LyogTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gTGliV2ViUlRDU3RhdHNDb2xsZWN0b3IuaDsgcGF0aCA9IGxpYndlYnJ0Yy9MaWJXZWJS
VENTdGF0c0NvbGxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUQ0MUM2
NTIyNTY4NTkyMDA2OTc5NDIgLyogU2VydmljZVdvcmtlckludGVybmFscy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRDUxQkIyMUU0RTJFODEwMDEzMUE1QiAv
KiBMaWJXZWJSVENBdWRpb0Zvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBMaWJXZWJSVENBdWRpb0Zvcm1hdC5oOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJUQ0F1ZGlv
Rm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQxREU3Qzc4MjIyREExM0Mw
MDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFVc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0b3JhZ2VRdW90YVVzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDFERTdDN0EyMjJEQTEzRDAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVF1b3RhTWFuYWdlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxREU3QzdCMjIyREExM0UwMDUzMkI2NSAv
KiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0b3JhZ2VRdW90YU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFE
RUZDQjIxRTU2QzFCOTAwMEQ5RTVGIC8qIEpTRE9NQmluZGluZ0ludGVybmFscy5qcyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEpTRE9NQmluZGluZ0ludGVybmFscy5q
czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MTA0LDcgKzE3MTAyLDYgQEAKIAkJ
CQkxQTM3NjM2QTFBMkU2OEJCMDA5QTdFRTIgLyogU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgg
Ki8sCiAJCQkJNDFERTdDN0EyMjJEQTEzRDAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIu
Y3BwICovLAogCQkJCTQxREU3QzdCMjIyREExM0UwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5h
Z2VyLmggKi8sCi0JCQkJNDFERTdDNzgyMjJEQTEzQzAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YVVz
ZXIuaCAqLywKIAkJCQk1MTY2RDNDQzFFOEVENDExMDBBRDYyRTMgLyogU3RvcmFnZVR5cGUuaCAq
LywKIAkJCSk7CiAJCQlpbmRlbnRXaWR0aCA9IDQ7CkBAIC0zMjIyNSw3ICszMjIyMiw2IEBACiAJ
CQkJQzUwRDBFODMwRkY0MjcyOTAwQUMyNjQ0IC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBMzc2MzZDMUEyRTY4QkIwMDlBN0VFMiAvKiBTdG9yYWdlTmFtZXNwYWNl
UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxREU3QzdDMjIyREExNDMwMDUzMkI2NSAv
KiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0MURFN0M3RDIyMkRB
MTQ4MDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhVXNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM5
RUYyRjMyMUYwNjE5MDAwM0JEQzU2IC8qIFN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxNjZEM0NEMUU4RUQ0OEYwMEFENjJFMyAvKiBTdG9yYWdlVHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDY4MkQyMDAxRjc5NzgzMDAwQzg2M0RCIC8qIFN0b3JlZENyZWRl
bnRpYWxzUG9saWN5LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCmluZGV4IDg1MjU3NTJlNjMzNDc5NTMwZWYxNGVjYjc0
Zjg1YmFmNjhkOWM1NWIuLjBjNjEzZDFhNzJkZmVhNjU5Y2IyZTcxYTgyMGFhYWI2MDlhYTk2MTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcApA
QCAtMjcsMjEzICsyNywxMjAgQEAKICNpbmNsdWRlICJTdG9yYWdlUXVvdGFNYW5hZ2VyLmgiCiAK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU3RvcmFnZVF1b3RhVXNlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVN0b3JhZ2VRdW90YU1hbmFnZXI6On5TdG9yYWdlUXVvdGFNYW5hZ2VyKCkKK1JlZjxTdG9yYWdl
UXVvdGFNYW5hZ2VyPiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUodWludDY0X3QgcXVvdGEs
IFVzYWdlR2V0dGVyJiYgdXNhZ2VHZXR0ZXIsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiBxdW90
YUluY3JlYXNlUmVxdWVzdGVyKQogewotICAgIHdoaWxlICghbV9wZW5kaW5nUmVxdWVzdHMuaXNF
bXB0eSgpKQotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy50YWtlRmlyc3QoKS5jYWxsYmFjayhE
ZWNpc2lvbjo6RGVueSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZVF1b3RhTWFu
YWdlcihxdW90YSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdURk1vdmUocXVvdGFJbmNyZWFzZVJl
cXVlc3RlcikpKTsKIH0KIAotdWludDY0X3QgU3RvcmFnZVF1b3RhTWFuYWdlcjo6c3BhY2VVc2Fn
ZSgpIGNvbnN0CitTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyKHVpbnQ2
NF90IHF1b3RhLCBVc2FnZUdldHRlciYmIHVzYWdlR2V0dGVyLCBRdW90YUluY3JlYXNlUmVxdWVz
dGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3RlcikKKyAgICA6IG1fcXVvdGEocXVvdGEpCisgICAg
LCBtX3VzYWdlR2V0dGVyKFdURk1vdmUodXNhZ2VHZXR0ZXIpKQorICAgICwgbV9xdW90YUluY3Jl
YXNlUmVxdWVzdGVyKFdURk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3RlcikpCisgICAgLCBtX3dv
cmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiU3RvcmFnZVF1b3RhTWFuYWdlciBCYWNrZ3JvdW5k
IFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJpYWwpKQorICAgICwgbV9pbml0aWFsUXVvdGEo
cXVvdGEpCiB7Ci0gICAgdWludDY0X3QgdXNhZ2UgPSAwOwotICAgIGZvciAoYXV0byYgdXNlciA6
IG1fdXNlcnMpCi0gICAgICAgIHVzYWdlICs9IHVzZXItPnNwYWNlVXNlZCgpOwotICAgIHJldHVy
biB1c2FnZTsKIH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVRdW90YUJhc2Vk
T25TcGFjZVVzYWdlKCkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25N
YWluVGhyZWFkKHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkLCBSZXF1ZXN0Q2FsbGJhY2smJiBjYWxs
YmFjaykKIHsKLSAgICBpZiAoIW1fcXVvdGEpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCi0gICAgYXV0byBkZWZhdWx0UXVvdGFTdGVwID0gbV9xdW90YSAv
IDEwOwotICAgIG1fcXVvdGEgPSBzdGQ6Om1heChtX3F1b3RhLCBkZWZhdWx0UXVvdGFTdGVwICog
KChzcGFjZVVzYWdlKCkgLyBkZWZhdWx0UXVvdGFTdGVwKSArIDEpKTsKLX0KLQotdm9pZCBTdG9y
YWdlUXVvdGFNYW5hZ2VyOjppbml0aWFsaXplVXNlcnNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1f
cGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBWZWN0b3I8U3RvcmFnZVF1b3RhVXNlcio+IHVzZXJzVG9Jbml0aWFsaXplOwotICAgIGZv
ciAoYXV0byYga2V5VmFsdWUgOiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzKSB7Ci0gICAg
ICAgIGlmIChrZXlWYWx1ZS52YWx1ZSA9PSBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ6Ok5vKSB7Ci0g
ICAgICAgICAgICBrZXlWYWx1ZS52YWx1ZSA9IFdoZW5Jbml0aWFsaXplZENhbGxlZDo6WWVzOwot
ICAgICAgICAgICAgdXNlcnNUb0luaXRpYWxpemUuYXBwZW5kKGtleVZhbHVlLmtleSk7CisgICAg
Ly8gRmFzdCBwYXRoLgorICAgIGlmIChtX3F1b3RhQ291bnREb3duTG9jay50cnlMb2NrKCkpIHsK
KyAgICAgICAgaWYgKHRyeUdyYW50UmVxdWVzdChzcGFjZVJlcXVlc3RlZCkpIHsKKyAgICAgICAg
ICAgIG1fcXVvdGFDb3VudERvd25Mb2NrLnVubG9jaygpOworICAgICAgICAgICAgY2FsbGJhY2so
RGVjaXNpb246OkdyYW50KTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAg
ICBtX3F1b3RhQ291bnREb3duTG9jay51bmxvY2soKTsKICAgICB9Ci0gICAgZm9yIChhdXRvKiB1
c2VyIDogdXNlcnNUb0luaXRpYWxpemUpIHsKLSAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxp
emF0aW9uVXNlcnMuY29udGFpbnModXNlcikpCi0gICAgICAgICAgICBhc2tVc2VyVG9Jbml0aWFs
aXplKCp1c2VyKTsKLSAgICB9CisKKyAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc3BhY2VSZXF1ZXN0ZWQsIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gZGVjaXNpb24gPSBy
ZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQoc3BhY2VSZXF1ZXN0ZWQpOworICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBkZWNpc2lvbl0o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKGRlY2lzaW9uKTsKKyAgICAgICAgfSk7
CisgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5pdGlh
bGl6ZShTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQorU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNp
b24gU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHVp
bnQ2NF90IHNwYWNlUmVxdWVzdGVkKQogewotICAgIHVzZXIud2hlbkluaXRpYWxpemVkKFt0aGlz
LCAmdXNlciwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oKSB7Ci0gICAgICAgIGlmICgh
d2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CiAKLSAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMucmVtb3ZlKCZ1
c2VyKSkKLSAgICAgICAgICAgIG1fdXNlcnMuYWRkKCZ1c2VyKTsKKyAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX3F1b3RhQ291bnREb3duTG9jayk7CiAKLSAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0
aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAo
dHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkKKyAgICAgICAgcmV0dXJuIERlY2lzaW9u
OjpHcmFudDsKIAotICAgICAgICAvLyBNYWtlIHN1cmUgcXVvdGEgaXMgc2V0IGJlZm9yZSBoYW5k
bGluZyBmaXJzdCByZXF1ZXN0LgotICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6VW5pbml0
aWFsaXplZCkgewotICAgICAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOwot
ICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3Q7Ci0g
ICAgICAgIH0KKyAgICBtX3VzYWdlID0gbV91c2FnZUdldHRlcigpOworICAgIHVwZGF0ZVF1b3Rh
QmFzZWRPblVzYWdlKCk7CisgICAgbV9xdW90YUNvdW50RG93biA9IG1fdXNhZ2UgPCBtX3F1b3Rh
ID8gbV9xdW90YSAtIG1fdXNhZ2UgOiAwOworICAgIGlmICh0cnlHcmFudFJlcXVlc3Qoc3BhY2VS
ZXF1ZXN0ZWQpKQorICAgICAgICByZXR1cm4gRGVjaXNpb246OkdyYW50OwogCi0gICAgICAgIHBy
b2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKLSAgICB9KTsKLX0KKyAgICAvLyBCbG9jayB0aGlz
IHRocmVhZCB1bnRpbCBnZXR0aW5nIGRlY3Npb24gZm9yIHF1b3RhIGluY3JlYXNlLgorICAgIEJp
bmFyeVNlbWFwaG9yZSBzZW1hcGhvcmU7CisgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzcGFjZVJlcXVlc3RlZCwgJnNlbWFwaG9yZV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1
b3RhTWFuYWdlciBhc2tzIGZvciBxdW90YSBpbmNyZWFzZSAlIiBQUkl1NjQsIHRoaXMsIHNwYWNl
UmVxdWVzdGVkKTsKKyAgICAgICAgbV9xdW90YUluY3JlYXNlUmVxdWVzdGVyKG1fcXVvdGEsIG1f
dXNhZ2UsIHNwYWNlUmVxdWVzdGVkLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJv
dGVjdGVkVGhpcyksICZzZW1hcGhvcmVdKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkgbXV0
YWJsZSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVv
dGFNYW5hZ2VyIHJlY2VpdmVzIHF1b3RhIGluY3JlYXNlIHJlc3BvbnNlICUiIFBSSXU2NCwgdGhp
cywgbmV3UXVvdGEgPyAqbmV3UXVvdGEgOiAwKTsKKyAgICAgICAgICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YWRkVXNlcihTdG9yYWdlUXVv
dGFVc2VyJiB1c2VyKQotewotICAgIEFTU0VSVCghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vy
cy5jb250YWlucygmdXNlcikpOwotICAgIEFTU0VSVCghbV91c2Vycy5jb250YWlucygmdXNlcikp
OwotICAgIG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuYWRkKCZ1c2VyLCBXaGVuSW5pdGlh
bGl6ZWRDYWxsZWQ6Ok5vKTsKKyAgICAgICAgICAgIGlmIChuZXdRdW90YSkKKyAgICAgICAgICAg
ICAgICBtX3F1b3RhID0gKm5ld1F1b3RhOwogCi0gICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5p
c0VtcHR5KCkpCi0gICAgICAgIGFza1VzZXJUb0luaXRpYWxpemUodXNlcik7Ci19CisgICAgICAg
ICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CisgICAgICAgIH0pOworICAgIH0pOwogCi1ib29sIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSh1aW50NjRfdCBzcGFjZUlu
Y3JlYXNlKSBjb25zdAotewotICAgIGlmICghc3BhY2VJbmNyZWFzZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHNlbWFwaG9yZS53YWl0KCk7CiAKLSAgICByZXR1cm4gc3BhY2VVc2FnZSgp
ICsgc3BhY2VJbmNyZWFzZSA+IG1fcXVvdGE7CisgICAgbV91c2FnZSA9IG1fdXNhZ2VHZXR0ZXIo
KTsKKyAgICBtX3F1b3RhQ291bnREb3duID0gbV91c2FnZSA8IG1fcXVvdGEgPyBtX3F1b3RhIC0g
bV91c2FnZSA6IDA7CisgICAgcmV0dXJuIHRyeUdyYW50UmVxdWVzdChzcGFjZVJlcXVlc3RlZCkg
PyBEZWNpc2lvbjo6R3JhbnQgOiBEZWNpc2lvbjo6RGVueTsKIH0KIAotdm9pZCBTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpyZW1vdmVVc2VyKFN0b3JhZ2VRdW90YVVzZXImIHVzZXIpCitib29sIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OnRyeUdyYW50UmVxdWVzdCh1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCkK
IHsKLSAgICBBU1NFUlQobV91c2Vycy5jb250YWlucygmdXNlcikgfHwgbV9wZW5kaW5nSW5pdGlh
bGl6YXRpb25Vc2Vycy5jb250YWlucygmdXNlcikpOwotICAgIG1fdXNlcnMucmVtb3ZlKCZ1c2Vy
KTsKLSAgICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5yZW1vdmUoJnVzZXIpICYm
IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFdo
ZW4gYmVpbmcgY2xlYXJlZCwgcXVvdGEgdXNlcnMgbWF5IHJlbW92ZSB0aGVtc2VsdmVzIGFuZCBh
ZGQgdGhlbXNlbHZlcyB0byB0cmlnZ2VyIHJlaW5pdGlhbGl6YXRpb24uCi0gICAgICAgIC8vIExl
dCdzIHdhaXQgZm9yIGFkZFVzZXIgdG8gYmUgY2FsbGVkIGJlZm9yZSBwcm9jZXNzaW5nIHBlbmRp
bmcgcmVxdWVzdHMuCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIodGhpcyldIHsKLSAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRp
b25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdGhpcy0+cHJvY2Vzc1BlbmRpbmdS
ZXF1ZXN0cyh7IH0pOwotICAgICAgICB9KTsKKyAgICBBU1NFUlQobV9xdW90YUNvdW50RG93bkxv
Y2suaXNMb2NrZWQoKSk7CisgICAgaWYgKHNwYWNlUmVxdWVzdGVkIDw9IG1fcXVvdGFDb3VudERv
d24pIHsKKyAgICAgICAgbV9xdW90YUNvdW50RG93biAtPSBzcGFjZVJlcXVlc3RlZDsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KLQotdm9pZCBTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgUmVx
dWVzdENhbGxiYWNrJiYgY2FsbGJhY2spCisgICAgCit2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6
OnVwZGF0ZVF1b3RhQmFzZWRPblVzYWdlKCkKIHsKLSAgICBpZiAoIW1fcGVuZGluZ1JlcXVlc3Rz
LmlzRW1wdHkoKSkgewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUlu
Y3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghc3BhY2VJbmNyZWFzZSkgewotICAgICAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3Jh
bnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW5pdGlhbGl6ZVVzZXJzSWZOZWVk
ZWQoKTsKLQotICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RG
TW92ZShjYWxsYmFjaykgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc2hv
dWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpKSB7Ci0gICAgICAgIG1fcGVuZGluZ1Jl
cXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spIH0pOwotCi0g
ICAgICAgIC8vIFRyeSBwcm9jZXNzaW5nIHJlcXVlc3QgYWdhaW4gYWZ0ZXIgbWFraW5nIHN1cmUg
dXNhZ2UgaXMgYWNjdXJhdGUuCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q29tcHV0aW5nU3Bh
Y2VVc2VkOwotICAgICAgICBmb3IgKGF1dG8mIHVzZXIgOiBjb3B5VG9WZWN0b3IobV91c2Vycykp
Ci0gICAgICAgICAgICB1c2VyLT5jb21wdXRlU3BhY2VVc2VkKCk7Ci0KLSAgICAgICAgaWYgKCFt
X3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZTsKLSAgICAg
ICAgYXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwotICAgICAgICByZXR1cm47CisgICAg
Ly8gV2hlbiBTdG9yYWdlUXVvdGFNYW5hZ2VyIGlzIHVzZWQgZm9yIHRoZSBmaXJzdCB0aW1lLCB3
ZSB3YW50IHRvIG1ha2Ugc3VyZSBpdHMgaW5pdGlhbCBxdW90YSBpcyBiaWdnZXIgdGhhbiBjdXJy
ZW50IGRpc2sgdXNhZ2UsCisgICAgLy8gYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUg
cXVvdGEgd2FzIGluY3JlYXNlZCB0byBhdCBsZWFzdCB0aGUgZGlzayB1c2FnZSB1bmRlciB1c2Vy
J3MgcGVybWlzc2lvbiBiZWZvcmUuCisgICAgQVNTRVJUKG1fcXVvdGFDb3VudERvd25Mb2NrLmlz
TG9ja2VkKCkpOworICAgIGlmICghbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UpIHsKKyAgICAg
ICAgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgPSB0cnVlOworICAgICAgICBhdXRvIGRlZmF1
bHRRdW90YVN0ZXAgPSBtX3F1b3RhIC8gMTA7CisgICAgICAgIG1fcXVvdGEgPSBzdGQ6Om1heCht
X3F1b3RhLCBkZWZhdWx0UXVvdGFTdGVwICogKChtX3VzYWdlIC8gZGVmYXVsdFF1b3RhU3RlcCkg
KyAxKSk7CiAgICAgfQotCi0gICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJl
cXVlc3Q7Ci0gICAgY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKIH0KIAotdm9pZCBTdG9yYWdl
UXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkKK3Zv
aWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2VGb3JU
ZXN0aW5nKCkKIHsKLSAgICBBU1NFUlQoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVh
c2UpKTsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlKTsK
LQotICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFz
a0Zvck1vcmVTcGFjZSAlIiBQUkl1NjQsIHRoaXMsIHNwYWNlSW5jcmVhc2UpOwotICAgIG1fc3Rh
dGUgPSBTdGF0ZTo6V2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZTsKLSAgICBtX3NwYWNl
SW5jcmVhc2VSZXF1ZXN0ZXIobV9xdW90YSwgc3BhY2VVc2FnZSgpLCBzcGFjZUluY3JlYXNlLCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKE9wdGlvbmFsPHVpbnQ2NF90PiBu
ZXdRdW90YSkgewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6
OmFza0Zvck1vcmVTcGFjZSByZWNlaXZlZCByZXNwb25zZSAlIiBQUkl1NjQsIHRoaXMsIG5ld1F1
b3RhID8gKm5ld1F1b3RhIDogMCk7Ci0KLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpBc2tpbmdG
b3JNb3JlU3BhY2U7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMobmV3UXVvdGEpOwot
ICAgIH0pOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcXVvdGFDb3VudERvd25Mb2NrKTsKKyAg
ICBtX3F1b3RhID0gbV9pbml0aWFsUXVvdGE7CisgICAgbV9xdW90YUNvdW50RG93biA9IDA7Cisg
ICAgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgPSBmYWxzZTsKIH0KIAotdm9pZCBTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBu
ZXdRdW90YSkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90YUZvclRlc3Rpbmco
KQogewotICAgIGlmIChtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChuZXdRdW90YSkKLSAgICAgICAgbV9xdW90YSA9ICpuZXdRdW90YTsKLQot
ICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNl
cnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBTdGF0
ZTo6QXNraW5nRm9yTW9yZVNwYWNlKSB7Ci0gICAgICAgIGF1dG8gcmVxdWVzdCA9IG1fcGVuZGlu
Z1JlcXVlc3RzLnRha2VGaXJzdCgpOwotICAgICAgICBib29sIHNob3VsZEFsbG93UmVxdWVzdCA9
ICFzaG91bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNlKTsKLQotICAgICAg
ICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNz
UGVuZGluZ1JlcXVlc3RzIGZpcnN0IHJlcXVlc3QgZGVjaXNpb24gaXMgJWQiLCB0aGlzLCBzaG91
bGRBbGxvd1JlcXVlc3QpOwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNp
b25Gb3JSZXF1ZXN0OwotICAgICAgICByZXF1ZXN0LmNhbGxiYWNrKHNob3VsZEFsbG93UmVxdWVz
dCA/IERlY2lzaW9uOjpHcmFudCA6IERlY2lzaW9uOjpEZW55KTsKLSAgICB9Ci0KLSAgICB3aGls
ZSAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvJiByZXF1ZXN0
ID0gbV9wZW5kaW5nUmVxdWVzdHMuZmlyc3QoKTsKLQotICAgICAgICBpZiAoc2hvdWxkQXNrRm9y
TW9yZVNwYWNlKHJlcXVlc3Quc3BhY2VJbmNyZWFzZSkpIHsKLSAgICAgICAgICAgIGlmIChtX3N0
YXRlID09IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3QpIHsKLSAgICAgICAgICAgICAg
ICBtX3N0YXRlID0gU3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKLSAgICAgICAgICAgICAgICBm
b3IgKGF1dG8mIHVzZXIgOiBjb3B5VG9WZWN0b3IobV91c2VycykpCi0gICAgICAgICAgICAgICAg
ICAgIHVzZXItPmNvbXB1dGVTcGFjZVVzZWQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9w
ZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpB
c2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgICAgICB1aW50NjRfdCBzcGFjZUluY3JlYXNlID0g
MDsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcGVuZGluZ1JlcXVlc3QgOiBtX3BlbmRpbmdSZXF1
ZXN0cykKLSAgICAgICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9IHBlbmRpbmdSZXF1ZXN0LnNw
YWNlSW5jcmVhc2U7Ci0gICAgICAgICAgICBhc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX3N0YXRlID0gU3Rh
dGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMu
dGFrZUZpcnN0KCkuY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKLSAgICB9CisgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9xdW90YUNvdW50RG93bkxvY2spOworICAgIG1fcXVvdGEgPSBtX2luaXRp
YWxRdW90YTsKKyAgICBtX3F1b3RhQ291bnREb3duID0gMDsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaApp
bmRleCAwOTU2NjMwNmY1NTkxYWJiNTlkMGFmZDhlZWE0ODY3OWE1ZjZjNjNjLi45YmRmZGQ0N2Ex
OGExNzZjNWJjMzNmNGI4NjI4OTIyMzRhZDI5YWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaApAQCAtMjUsNzcgKzI1LDU0IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSAiQ2xpZW50T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRp
b25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIFN0b3JhZ2VRdW90YVVzZXI7Ci0KLWNsYXNzIFN0b3JhZ2VRdW90YU1hbmFnZXIgOiBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4geworY2xhc3MgU3RvcmFnZVF1
b3RhTWFuYWdlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTdG9yYWdlUXVvdGFNYW5h
Z2VyPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB1c2luZyBTcGFjZUluY3JlYXNl
UmVxdWVzdGVyID0gV1RGOjpGdW5jdGlvbjx2b2lkKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBj
dXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoT3B0aW9uYWw8dWludDY0X3Q+KT4mJik+OwotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIodWlu
dDY0X3QgcXVvdGEsIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXImJiBzcGFjZUluY3JlYXNlUmVxdWVz
dGVyKQotICAgICAgICA6IG1fcXVvdGEocXVvdGEpCi0gICAgICAgICwgbV9zcGFjZUluY3JlYXNl
UmVxdWVzdGVyKFdURk1vdmUoc3BhY2VJbmNyZWFzZVJlcXVlc3RlcikpCi0gICAgewotICAgIH0K
LSAgICBXRUJDT1JFX0VYUE9SVCB+U3RvcmFnZVF1b3RhTWFuYWdlcigpOworICAgIHVzaW5nIFVz
YWdlR2V0dGVyID0gRnVuY3Rpb248dWludDY0X3QoKT47CisgICAgdXNpbmcgUXVvdGFJbmNyZWFz
ZVJlcXVlc3RlciA9IEZ1bmN0aW9uPHZvaWQodWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRf
dCBjdXJyZW50VXNhZ2UsIHVpbnQ2NF90IHJlcXVlc3RlZEluY3JlYXNlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKE9wdGlvbmFsPHVpbnQ2NF90Pik+JiYpPjsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+IGNyZWF0ZSh1aW50NjRfdCBxdW90YSwgVXNh
Z2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmKTsKIAogICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YSh1
aW50NjRfdCBxdW90YSkgeyByZXR1cm4gcXVvdGEgLyAxMDsgfQotCiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50NjRfdCBkZWZhdWx0UXVvdGEoKSB7IHJldHVybiAxMDAwICogTUI7IH0KICAgICBz
dGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEoKSB7IHJldHVy
biBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3RhKGRlZmF1bHRRdW90YSgp
KTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyKFN0b3JhZ2VRdW90YVVzZXIm
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXIoU3RvcmFnZVF1b3RhVXNlciYp
OwotCiAgICAgZW51bSBjbGFzcyBEZWNpc2lvbiB7IERlbnksIEdyYW50IH07CiAgICAgdXNpbmcg
UmVxdWVzdENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNpc2lvbik+OwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdFNwYWNlKHVpbnQ2NF90LCBSZXF1ZXN0Q2FsbGJh
Y2smJik7Ci0gICAgdm9pZCByZXNldFF1b3RhKHVpbnQ2NF90IG5ld1F1b3RhKSB7IG1fcXVvdGEg
PSBuZXdRdW90YTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdFNwYWNlT25NYWlu
VGhyZWFkKHVpbnQ2NF90LCBSZXF1ZXN0Q2FsbGJhY2smJik7CisgICAgV0VCQ09SRV9FWFBPUlQg
RGVjaXNpb24gcmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHVpbnQ2NF90KTsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOwotCi0g
ICAgZW51bSBjbGFzcyBTdGF0ZSB7Ci0gICAgICAgIFVuaW5pdGlhbGl6ZWQsCi0gICAgICAgIENv
bXB1dGluZ1NwYWNlVXNlZCwKLSAgICAgICAgV2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25z
ZSwKLSAgICAgICAgQXNraW5nRm9yTW9yZVNwYWNlLAotICAgICAgICBNYWtpbmdEZWNpc2lvbkZv
clJlcXVlc3QsCi0gICAgfTsKLSAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVz
YWdlRm9yVGVzdGluZygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRRdW90YUZvclRl
c3RpbmcoKTsKIAogcHJpdmF0ZToKLSAgICB1aW50NjRfdCBzcGFjZVVzYWdlKCkgY29uc3Q7Ci0g
ICAgYm9vbCBzaG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29u
c3Q7Ci0gICAgdm9pZCBhc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSk7Ci0K
LSAgICB2b2lkIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBhc2tVc2VyVG9J
bml0aWFsaXplKFN0b3JhZ2VRdW90YVVzZXImKTsKKyAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKHVp
bnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmLCBRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYpOwor
ICAgIGJvb2wgdHJ5R3JhbnRSZXF1ZXN0KHVpbnQ2NF90KTsKIAotICAgIHZvaWQgcHJvY2Vzc1Bl
bmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4pOworICAgIHZvaWQgdXBkYXRlUXVvdGFC
YXNlZE9uVXNhZ2UoKTsKIAorICAgIExvY2sgbV9xdW90YUNvdW50RG93bkxvY2s7CisgICAgdWlu
dDY0X3QgbV9xdW90YUNvdW50RG93biB7IDAgfTsKICAgICB1aW50NjRfdCBtX3F1b3RhIHsgMCB9
OworICAgIHVpbnQ2NF90IG1fdXNhZ2UgeyAwIH07CiAKLSAgICBTcGFjZUluY3JlYXNlUmVxdWVz
dGVyIG1fc3BhY2VJbmNyZWFzZVJlcXVlc3RlcjsKKyAgICBVc2FnZUdldHRlciBtX3VzYWdlR2V0
dGVyOworICAgIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgbV9xdW90YUluY3JlYXNlUmVxdWVzdGVy
OwogCi0gICAgZW51bSBjbGFzcyBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQgeyBObywgWWVzIH07Ci0g
ICAgSGFzaE1hcDxTdG9yYWdlUXVvdGFVc2VyKiwgV2hlbkluaXRpYWxpemVkQ2FsbGVkPiBtX3Bl
bmRpbmdJbml0aWFsaXphdGlvblVzZXJzOwotICAgIEhhc2hTZXQ8U3RvcmFnZVF1b3RhVXNlcio+
IG1fdXNlcnM7CisgICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CiAKLSAgICBzdHJ1Y3Qg
UGVuZGluZ1JlcXVlc3QgewotICAgICAgICB1aW50NjRfdCBzcGFjZUluY3JlYXNlOwotICAgICAg
ICBSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2s7Ci0gICAgfTsKLSAgICBEZXF1ZTxQZW5kaW5nUmVx
dWVzdD4gbV9wZW5kaW5nUmVxdWVzdHM7CisgICAgYm9vbCBtX3F1b3RhVXBkYXRlZEJhc2VkT25V
c2FnZSB7IGZhbHNlIH07CiAKLSAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlVuaW5pdGlhbGl6
ZWQgfTsKKyAgICAvLyBUZXN0IG9ubHkuCisgICAgdWludDY0X3QgbV9pbml0aWFsUXVvdGEgeyAw
IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZVF1b3RhVXNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzEwY2Vl
YzYwYzVkZTUwYzYwOWQyMzFiMGYwZGY5Njc0OTQ5NDIwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1
b3RhVXNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
U3RvcmFnZVF1b3RhVXNlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U3RvcmFnZVF1b3RhVXNl
cigpID0gZGVmYXVsdDsKLQotICAgIHZpcnR1YWwgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlU3BhY2VVc2VkKCkgeyB9OwotICAgIHZpcnR1
YWwgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxi
YWNrKSB7IGNhbGxiYWNrKCk7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggNWYy
M2NjNjZhYTExZjdkMjhlNzYxNWNjYjg1MTM2N2MyMDMxNWJlMy4uYjVhM2UwNjRkOTA3NTM5Y2Ey
YzZhNjFlNTIwNTE3YzAxZjI1OTk4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlICJXZWJz
aXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIK
ICNpbmNsdWRlICJXZWJzaXRlRGF0YVR5cGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9y
aWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9ETlMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oPgpA
QCAtMzE2LDYgKzMxNyw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3Jr
UHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAgICAgYXV0byBzZXNz
aW9uSUQgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CiAgICAgc2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiAKKyAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworICAgIGFk
ZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgcGFyYW1ldGVycy5kZWZhdWx0
RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuZGVm
YXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSwg
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
ICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwogI2VuZGlmCkBAIC0zMjYsNyArMzMwLDYgQEAgdm9pZCBOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJiYKICAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSwgc2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5
RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJl
Y3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwogICAgIH0KICNlbmRpZgotICAgIGluaXRpYWxpemVTdG9yYWdlUXVvdGEo
cGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICAgICBtX3N0b3JhZ2VN
YW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJh
bWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3Jl
UGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCkBAIC00
MzQsMjggKzQzNywzOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlZENyZWRlbnRp
YWxzKCkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiB7CisgICAgYXV0byBzZXNzaW9uSUQg
PSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CisKKyAgICBh
ZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFtZXRlcnMucGVyT3Jp
Z2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVv
dGEsIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNhY2hlU3Rv
cmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHBhcmFtZXRlcnMubmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKKyAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5p
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQogICAgIGlmIChwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50KCkpCi0g
ICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25Q
YXJhbWV0ZXJzLnNlc3Npb25JRCwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1p
bmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9u
KHNlc3Npb25JRCwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVs
YXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRp
cmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChw
YXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQsIHBhcmFtZXRlcnMu
bG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBpbml0aWFsaXplU3RvcmFnZVF1b3RhKHBhcmFtZXRlcnMp
OworICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBhcmFtZXRlcnMubG9j
YWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CiAKICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlV2Vic2l0
ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycykpOwogfQogCi12b2lk
IE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplU3RvcmFnZVF1b3RhKGNvbnN0IFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQordm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW50NjRf
dCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0
cmluZyYgY2FjaGVSb290UGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBjYWNoZVJvb3RQ
YXRoSGFuZGxlKQogewotICAgIGF1dG8mIG1hbmFnZXJzID0gIG1fc3RvcmFnZVF1b3RhTWFuYWdl
cnMuZW5zdXJlKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwg
W10gewotICAgICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcnMgeyB9OwotICAgIH0pLml0
ZXJhdG9yLT52YWx1ZTsKLSAgICBtYW5hZ2Vycy5zZXREZWZhdWx0UXVvdGFzKHBhcmFtZXRlcnMu
cGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9y
YWdlUXVvdGEpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1h
bmFnZXJzTG9jayk7CisgICAgYXV0byBbaXRlciwgaXNOZXdFbnRyeV0gPSBtX3Nlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbZGVmYXVsdFF1b3RhLCBkZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhLCAmY2FjaGVSb290UGF0aF0geworICAgICAgICByZXR1cm4gbWFrZVVu
aXF1ZTxTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcj4oY2FjaGVSb290UGF0aCwgZGVmYXVsdFF1
b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKTsKKyAgICB9KTsKKyAgICBpZiAoaXNOZXdFbnRy
eSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGNhY2hlUm9v
dFBhdGhIYW5kbGUpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1vdmVTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKKyAgICBBU1NF
UlQobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuY29udGFpbnMoc2Vzc2lvbklEKSk7Cisg
ICAgbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Npb25JRCk7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbihjb25zdCBGdW5jdGlv
bjx2b2lkKE5ldHdvcmtTZXNzaW9uJik+JiBmdW5jdG9yKQpAQCAtNTc2LDggKzU5MCw2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCkKICNlbmRpZgogCiAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+cmVtb3ZlKHNlc3Npb25JRCk7
Ci0KLSAgICBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLnJlbW92ZShzZXNzaW9uSUQpOwogfQogCiAj
aWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTE0NjgsOSArMTQ4MCw2IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpCiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KSkKICAgICAgICAgY2xlYXJEaXNrQ2FjaGUobW9kaWZpZWRTaW5jZSwgW2NsZWFyVGFza3NIYW5k
bGVyID0gV1RGTW92ZShjbGVhclRhc2tzSGFuZGxlcildIHsgfSk7CiAKLSAgICBpZiAod2Vic2l0
ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykg
fHwgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRPTUNhY2hlKSkK
LSAgICAgICAgY2xlYXJTdG9yYWdlUXVvdGEoc2Vzc2lvbklEKTsKLQogICAgIGlmICh3ZWJzaXRl
RGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6QWRDbGlja0F0dHJpYnV0aW9ucykp
IHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+bmV0d29ya1Nlc3Np
b24oc2Vzc2lvbklEKSkKICAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5jbGVhckFkQ2xpY2tB
dHRyaWJ1dGlvbigpOwpAQCAtMTU2MywxOSArMTU3Miw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9w
dGlvCiAgICAgICAgIH0KICAgICAgICAgV2ViQ29yZTo6Q3JlZGVudGlhbFN0b3JhZ2U6OnJlbW92
ZVNlc3Npb25DcmVkZW50aWFsc1dpdGhPcmlnaW5zKG9yaWdpbkRhdGFzKTsKICAgICB9Ci0KLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHN0b3JhZ2UgcXVvdGEgY2xlYXJpbmcgZm9yIHRoZXNlIG9y
aWdpbnMuCi19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyU3RvcmFnZVF1b3RhKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCkKLXsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9zdG9yYWdlUXVv
dGFNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7Ci0gICAgaWYgKGl0ZXJhdG9yID09IG1fc3RvcmFn
ZVF1b3RhTWFuYWdlcnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIG1hbmFn
ZXJzID0gaXRlcmF0b3ItPnZhbHVlOwotICAgIGZvciAoYXV0byYgbWFuYWdlciA6IG1hbmFnZXJz
Lm1hbmFnZXJzUGVyT3JpZ2luKCkpCi0gICAgICAgIG1hbmFnZXIudmFsdWUtPnJlc2V0UXVvdGEo
bWFuYWdlcnMuZGVmYXVsdFF1b3RhKG1hbmFnZXIua2V5KSk7CiB9CiAKICNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjIxNywxMCArMjIxMyw5IEBAIFJlZjxJREJTZXJ2
ZXI6OklEQlNlcnZlcj4gTmV0d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZlcihQQUw6OlNlc3Np
b25JRCBzZXNzaW9uCiAgICAgICAgIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0aHMuZ2V0KHNlc3Np
b25JRCk7CiAgICAgfQogCi0gICAgcmV0dXJuIElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUo
c2Vzc2lvbklELCBwYXRoLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBhdXRvJiBvcmlnaW4pIC0+IFN0b3JhZ2VRdW90
YU1hbmFnZXIqIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICByZXR1cm4gJnRoaXMtPnN0b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lv
bklELCBvcmlnaW4pOworICAgIHJldHVybiBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNl
c3Npb25JRCwgcGF0aCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Np
b25JRF0oY29uc3QgYXV0byYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCkgeworICAg
ICAgICBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlciA9IHdl
YWtUaGlzID8gdGhpcy0+c3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbikgOiBu
dWxscHRyOworICAgICAgICByZXR1cm4gc3RvcmFnZVF1b3RhTWFuYWdlciA/IHN0b3JhZ2VRdW90
YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZChzcGFjZVJlcXVlc3RlZCkg
OiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueTsKICAgICB9KTsKIH0KIApAQCAt
MjMwNyw4ICsyMzAyLDE4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFz
ZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmCiAgICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShoYW5kbGUpOwogICAgICAgICBpZiAoIWlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBwb3N0U3RvcmFn
ZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTmV0d29ya1Byb2Nlc3M6OmVuc3Vy
ZVBhdGhFeGlzdHMsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSkpOworICAgICAgICBzZXRTZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKHNlc3Npb25JRCwgaW5kZXhlZERhdGFi
YXNlRGlyZWN0b3J5KTsKICAgICB9CiB9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldFNlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
c2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jayk7CisgICAgYXV0byogc2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXIgPSBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5nZXQoc2Vzc2lv
bklEKTsKKyAgICBBU1NFUlQoc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpOworICAgIHNlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5zZXRJREJSb290UGF0aChpZGJSb290UGF0aCk7Cit9CisK
ICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogdm9pZCBOZXR3b3JrUHJvY2Vz
czo6c3luY0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0yMzI1LDkgKzIzMzAsMTggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xl
YXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoKQogCiB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQogewotICAgIGF1dG8mIG1h
bmFnZXIgPSBzdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsKLSAgICBtYW5h
Z2VyLnJlc2V0UXVvdGEobV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCktPnZh
bHVlLmRlZmF1bHRRdW90YShvcmlnaW4pKTsKLSAgICBtYW5hZ2VyLnVwZGF0ZVF1b3RhQmFzZWRP
blNwYWNlVXNhZ2UoKTsKKyAgICBhdXRvIHN0b3JhZ2VRdW90YU1hbmFnZXIgPSB0aGlzLT5zdG9y
YWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsKKyAgICBzdG9yYWdlUXVvdGFNYW5h
Z2VyLT5yZXNldFF1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZUZvclRlc3RpbmcoKTsKK30KKwordm9p
ZCBOZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIGlm
IChhdXRvKiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fc2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXJzLmdldChzZXNzaW9uSUQpKSB7CisgICAgICAgIGZvciAoYXV0byBzdG9yYWdlUXVv
dGFNYW5hZ2VyIDogc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPmV4aXN0aW5nU3RvcmFnZVF1
b3RhTWFuYWdlcnMoKSkKKyAgICAgICAgICAgIHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlc2V0UXVv
dGFGb3JUZXN0aW5nKCk7CisgICAgfQorICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKICNp
ZiBFTkFCTEUoU0FOREJPWF9FWFRFTlNJT05TKQpAQCAtMjQwNCw2MiArMjQxOCwzNSBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpyZXF1ZXN0U3RvcmFnZVNwYWNlKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgQ2xpZW50TwogICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6UmVxdWVzdFN0b3Jh
Z2VTcGFjZSB7IHNlc3Npb25JRCwgb3JpZ2luLCBxdW90YSwgY3VycmVudFNpemUsIHNwYWNlUmVx
dWlyZWQgfSwgV1RGTW92ZShjYWxsYmFjayksIDApOwogfQogCi1jbGFzcyBRdW90YVVzZXJJbml0
aWFsaXplciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBRdW90YVVzZXJJ
bml0aWFsaXplcihTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5hZ2VyKQotICAgICAgICA6IG1fbWFu
YWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKLSAgICB7Ci0gICAgICAgIG1hbmFnZXIuYWRkVXNl
cigqdGhpcyk7Ci0gICAgfQotCi0gICAgflF1b3RhVXNlckluaXRpYWxpemVyKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgICAgICBtX21hbmFnZXItPnJlbW92ZVVzZXIo
KnRoaXMpOwotICAgICAgICBpZiAobV9jYWxsYmFjaykKLSAgICAgICAgICAgIG1fY2FsbGJhY2so
KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gU3RvcmFnZVF1b3RhVXNlciBBUEkuCi0gICAg
dWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CitSZWZQdHI8U3RvcmFnZVF1
b3RhTWFuYWdlcj4gTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2spOworICAgIGF1
dG8qIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlcnMuZ2V0KHNlc3Npb25JRCk7CisgICAgaWYgKCFzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIGZpbmFsCi0gICAgewotICAgICAg
ICBtX2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7Ci0gICAgfQorICAgIFN0cmluZyBpZGJS
b290UGF0aDsKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICBpZGJSb290UGF0aCA9
IHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5pZGJSb290UGF0aCgpOworI2VuZGlmCisgICAg
U3RvcmFnZVF1b3RhTWFuYWdlcjo6VXNhZ2VHZXR0ZXIgdXNhZ2VHZXR0ZXIgPSBbY2FjaGVSb290
UGF0aCA9IHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5jYWNoZVJvb3RQYXRoKCkuaXNvbGF0
ZWRDb3B5KCksIGlkYlJvb3RQYXRoID0gaWRiUm9vdFBhdGguaXNvbGF0ZWRDb3B5KCksIG9yaWdp
biA9IG9yaWdpbi5pc29sYXRlZENvcHkoKV0oKSB7CisgICAgICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOyAgICAKIAotICAgIFdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gbV9tYW5hZ2Vy
OwotICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gbV9jYWxsYmFjazsKLX07CisgICAgICAg
IHVpbnQ2NF90IHVzYWdlID0gQ2FjaGVTdG9yYWdlOjpFbmdpbmU6OmRpc2tVc2FnZShjYWNoZVJv
b3RQYXRoLCBvcmlnaW4pOworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgICAgICB1
c2FnZSArPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlza1VzYWdlKGlkYlJvb3RQYXRoLCBvcmln
aW4pOworI2VuZGlmCiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVRdW90YVVzZXJz
KFN0b3JhZ2VRdW90YU1hbmFnZXImIG1hbmFnZXIsIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Y29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIG9yaWdp
biwgdXNlciA9IG1ha2VVbmlxdWU8UXVvdGFVc2VySW5pdGlhbGl6ZXI+KG1hbmFnZXIpXSgpIG11
dGFibGUgeworICAgICAgICByZXR1cm4gdXNhZ2U7CisgICAgfTsKKyAgICBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpRdW90YUluY3JlYXNlUmVxdWVzdGVyIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHNlc3Npb25JRCwgb3JpZ2luXSAo
dWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHJl
cXVlc3RlZEluY3JlYXNlLCBhdXRvJiYgY2FsbGJhY2spIHsKKyAgICAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgdGhpcy0+aWRiU2VydmVyKHNlc3Npb25JRCkuaW5pdGlhbGl6ZVF1b3RhVXNlcihv
cmlnaW4pOwotICAgICAgICBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6aW5pdGlhbGl6ZVF1b3RhVXNl
cigqdGhpcywgc2Vzc2lvbklELCBvcmlnaW4sIFt1c2VyID0gV1RGTW92ZSh1c2VyKV0geyB9KTsK
LSAgICB9KTsKLX0KKyAgICAgICAgICAgIGNhbGxiYWNrKHsgfSk7CisgICAgICAgIHJlcXVlc3RT
dG9yYWdlU3BhY2Uoc2Vzc2lvbklELCBvcmlnaW4sIGN1cnJlbnRRdW90YSwgY3VycmVudFNwYWNl
LCByZXF1ZXN0ZWRJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIH07CiAKLVN0b3Jh
Z2VRdW90YU1hbmFnZXImIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAg
YXV0byYgc3RvcmFnZVF1b3RhTWFuYWdlcnMgPSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmVuc3Vy
ZShzZXNzaW9uSUQsIFtdIHsKLSAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1hbmFnZXJzIHsg
fTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgcmV0dXJuICpzdG9yYWdlUXVvdGFNYW5h
Z2Vycy5tYW5hZ2Vyc1Blck9yaWdpbigpLmVuc3VyZShvcmlnaW4sIFt0aGlzLCAmc3RvcmFnZVF1
b3RhTWFuYWdlcnMsIHNlc3Npb25JRCwgJm9yaWdpbl0gewotICAgICAgICBhdXRvIG1hbmFnZXIg
PSBtYWtlVW5pcXVlPFN0b3JhZ2VRdW90YU1hbmFnZXI+KHN0b3JhZ2VRdW90YU1hbmFnZXJzLmRl
ZmF1bHRRdW90YShvcmlnaW4pLCBbdGhpcywgc2Vzc2lvbklELCBvcmlnaW5dKHVpbnQ2NF90IHF1
b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8g
Y2FsbGJhY2spIHsKLSAgICAgICAgICAgIHRoaXMtPnJlcXVlc3RTdG9yYWdlU3BhY2Uoc2Vzc2lv
bklELCBvcmlnaW4sIHF1b3RhLCBjdXJyZW50U3BhY2UsIHNwYWNlSW5jcmVhc2UsIFdURk1vdmUo
Y2FsbGJhY2spKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGluaXRpYWxpemVRdW90YVVzZXJzKCpt
YW5hZ2VyLCBzZXNzaW9uSUQsIG9yaWdpbik7Ci0gICAgICAgIHJldHVybiBtYW5hZ2VyOwotICAg
IH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXItPmVuc3VyZU9yaWdpblN0b3JhZ2VRdW90YU1hbmFnZXIob3JpZ2luLCBzZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlci0+ZGVmYXVsdFF1b3RhKG9yaWdpbiksIFdURk1vdmUodXNhZ2VHZXR0ZXIp
LCBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKS5wdHIoKTsKIH0KIAogI2lmICFQTEFU
Rk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuaAppbmRleCBmNjJmMDFkMzgwZjQwMTA1NTJhYWQzODg5YTQ5N2Q1MTI2ZjhhMzUzLi5kM2Fk
ZmMxYzQyOGU0MjhjZmM5YWMwYTJlNDY3Y2JhNmQ3Njk4Zjk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0yODQsNiArMjg0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoKTsK
IAogICAgIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcoUEFMOjpT
ZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIHZvaWQgcmVzZXRR
dW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogI2lm
IEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCiAgICAgdm9pZCBnZXRTYW5kYm94RXh0ZW5zaW9u
c0ZvckJsb2JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiYpPiYmKTsKQEAgLTMy
Nyw3ICszMjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBZENsaWNrQXR0cmlidXRpb25Db252
ZXJzaW9uVVJMRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgVVJMJiYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBtYXJrQWRDbGlja0F0dHJpYnV0aW9uc0FzRXhwaXJl
ZEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CiAKLSAgICBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJiBzdG9yYWdlUXVvdGFNYW5hZ2Vy
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6
OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CiAKICAgICB2b2lkIGFk
ZEtlcHRBbGl2ZUxvYWQoUmVmPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4mJik7CiAgICAgdm9pZCBy
ZW1vdmVLZXB0QWxpdmVMb2FkKE5ldHdvcmtSZXNvdXJjZUxvYWRlciYpOwpAQCAtNDQyLDYgKzQ0
Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb2xsZWN0SW5kZXhlZERhdGFiYXNlT3JpZ2luc0Zv
clZlcnNpb24oY29uc3QgU3RyaW5nJiwgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+Jik7CiAgICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IGluZGV4ZWRE
YXRhYmFzZU9yaWdpbnMoY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICBSZWY8V2ViQ29yZTo6SURC
U2VydmVyOjpJREJTZXJ2ZXI+IGNyZWF0ZUlEQlNlcnZlcihQQUw6OlNlc3Npb25JRCk7CisgICAg
dm9pZCBzZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKFBBTDo6U2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQpAQCAtNDYxLDggKzQ2Myw0NCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGVy
Zm9ybU5leHRTdG9yYWdlVGFzaygpOwogICAgIHZvaWQgZW5zdXJlUGF0aEV4aXN0cyhjb25zdCBT
dHJpbmcmIHBhdGgpOwogCi0gICAgdm9pZCBjbGVhclN0b3JhZ2VRdW90YShQQUw6OlNlc3Npb25J
RCk7Ci0gICAgdm9pZCBpbml0aWFsaXplU3RvcmFnZVF1b3RhKGNvbnN0IFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzJik7CisgICAgY2xhc3MgU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgewor
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFNl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0aCwgdWlu
dDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKQorICAg
ICAgICAgICAgOiBtX2NhY2hlUm9vdFBhdGgoY2FjaGVSb290UGF0aCkKKyAgICAgICAgICAgICwg
bV9kZWZhdWx0UXVvdGEoZGVmYXVsdFF1b3RhKQorICAgICAgICAgICAgLCBtX2RlZmF1bHRUaGly
ZFBhcnR5UXVvdGEoZGVmYXVsdFRoaXJkUGFydHlRdW90YSkKKyAgICAgICAgeworICAgICAgICB9
CisgICAgICAgIHVpbnQ2NF90IGRlZmF1bHRRdW90YShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mIG9yaWdpbikgY29uc3QgeyByZXR1cm4gb3JpZ2luLnRvcE9yaWdpbiA9PSBvcmlnaW4uY2xp
ZW50T3JpZ2luID8gbV9kZWZhdWx0UXVvdGEgOiBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGE7IH0K
KworICAgICAgICBSZWY8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gZW5zdXJlT3JpZ2lu
U3RvcmFnZVF1b3RhTWFuYWdlcihXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luLCB1aW50NjRf
dCBxdW90YSwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6VXNhZ2VHZXR0ZXImJiB1c2Fn
ZUdldHRlciwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6UXVvdGFJbmNyZWFzZVJlcXVl
c3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8gW2l0ZXIsIGlzTmV3RW50cnldID0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUob3Jp
Z2luLCBbcXVvdGEsIHVzYWdlR2V0dGVyID0gV1RGTW92ZSh1c2FnZUdldHRlciksIHF1b3RhSW5j
cmVhc2VSZXF1ZXN0ZXIgPSBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpXSgpIG11dGFi
bGUgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpjcmVhdGUocXVvdGEsIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5jcmVh
c2VSZXF1ZXN0ZXIpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIG1ha2VS
ZWYoKml0ZXItPnZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gZXhpc3RpbmdTdG9y
YWdlUXVvdGFNYW5hZ2VycygpIHsgcmV0dXJuIG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMudmFsdWVz
KCk7IH0KKworICAgICAgICBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgoKSBjb25zdCB7IHJl
dHVybiBtX2NhY2hlUm9vdFBhdGg7IH0KKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAg
ICAgICAgdm9pZCBzZXRJREJSb290UGF0aChjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKSB7IG1f
aWRiUm9vdFBhdGggPSBpZGJSb290UGF0aDsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIGlkYlJv
b3RQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9pZGJSb290UGF0aDsgfQorI2VuZGlmCisKKyAgICBw
cml2YXRlOgorICAgICAgICBTdHJpbmcgbV9jYWNoZVJvb3RQYXRoOworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorICAgICAgICBTdHJpbmcgbV9pZGJSb290UGF0aDsKKyNlbmRpZgorICAg
ICAgICB1aW50NjRfdCBtX2RlZmF1bHRRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OmRlZmF1bHRRdW90YSgpIH07CisgICAgICAgIHVpbnQ2NF90IG1fZGVmYXVsdFRoaXJkUGFy
dHlRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRUaGlyZFBhcnR5
UXVvdGEoKSB9OworICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdpbiwgUmVmUHRy
PFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzOwor
ICAgIH07CisgICAgdm9pZCBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Np
b25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1
b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNz
aW9uSUQpOwogCiAgICAgLy8gQ29ubmVjdGlvbnMgdG8gV2ViUHJvY2Vzc2VzLgogICAgIEhhc2hN
YXA8V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIFJlZjxOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcz4+IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zOwpAQCAtNTMzLDIzICs1NzEsOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCB7IGZhbHNlIH07CiAjZW5k
aWYKICAgICAKLSAgICBjbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VycyB7Ci0gICAgcHVibGljOgot
ICAgICAgICB1aW50NjRfdCBkZWZhdWx0UXVvdGEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiBvcmlnaW4pIGNvbnN0IHsgcmV0dXJuIG9yaWdpbi50b3BPcmlnaW4gPT0gb3JpZ2luLmNsaWVu
dE9yaWdpbiA/IG1fZGVmYXVsdFF1b3RhIDogbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhOyB9Ci0g
ICAgICAgIHZvaWQgc2V0RGVmYXVsdFF1b3Rhcyh1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2
NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZGVm
YXVsdFF1b3RhID0gZGVmYXVsdFF1b3RhOwotICAgICAgICAgICAgbV9kZWZhdWx0VGhpcmRQYXJ0
eVF1b3RhID0gZGVmYXVsdFRoaXJkUGFydHlRdW90YTsKLSAgICAgICAgfQotCi0gICAgICAgIEhh
c2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcj4+JiBtYW5hZ2Vyc1Blck9yaWdpbigpIHsgcmV0dXJuIG1fbWFuYWdl
cnNQZXJPcmlnaW47IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2NF90IG1fZGVmYXVs
dFF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCkgfTsK
LSAgICAgICAgdWludDY0X3QgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhIHsgV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgpIH07Ci0gICAgICAgIEhh
c2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcj4+IG1fbWFuYWdlcnNQZXJPcmlnaW47Ci0gICAgfTsKLSAgICBIYXNo
TWFwPFBBTDo6U2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2Vycz4gbV9zdG9yYWdlUXVvdGFN
YW5hZ2VyczsKKyAgICBMb2NrIG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jazsKKyAg
ICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lvblN0b3JhZ2VR
dW90YU1hbmFnZXI+PiBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyczsKIAogICAgIE9wdGlv
blNldDxOZXR3b3JrQ2FjaGU6OkNhY2hlT3B0aW9uPiBtX2NhY2hlT3B0aW9uczsKICAgICBXZWJD
b3JlOjpNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeSBtX21lc3NhZ2VQb3J0Q2hhbm5lbFJlZ2lz
dHJ5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggMzY3NzY3NzQ4MGI4MmE0NDMzZjg1ZDI4MmIzZTVmYjgw
NmE5MWU2My4uMzYxZTkwNzAxMDlkZTVjYmY0NTE4MjE0ZmY4YTg5MDhkYmQ5NThlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluCkBAIC0xNjMsNCArMTYzLDYgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3Mg
TGVnYWN5UmVjZWl2ZXIgewogCiAgICAgU2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRl
c3RpbmcoU2Vjb25kcyBzZWNvbmRzKSAtPiAoKSBTeW5jaHJvbm91cwogICAgIFJlc2V0U2Vydmlj
ZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSAtPiAoKSBTeW5jaHJvbm91cworCisgICAg
UmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+ICgpIEFzeW5jCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZS5jcHAKaW5kZXggZWZlN2UxNWIwNWY3ZDI1NjEwOWU4NjMyZTJmMzA1ZTIxYzM2ODRi
Ni4uM2Q2NTk0NzExYjUwMjlkYzE3M2Y3OTAwNGU1NjAzYTNiZWJjYjk2NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lLmNwcApAQCAtMTk2LDEzICsxOTYsNjggQEAgdm9pZCBFbmdpbmU6OmNsZWFyQ2FjaGVzRm9y
T3JpZ2luKE5ldHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgUEFMOjpTZXNzaW9uSUQKICAg
ICB9KTsKIH0KIAotdm9pZCBFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIoTmV0d29ya1Byb2Nl
c3MmIG5ldHdvcmtQcm9jZXNzLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFdlYkNv
cmU6OkNsaWVudE9yaWdpbiYgY2xpZW50T3JpZ2luLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCitzdGF0aWMgdWludDY0X3QgZ2V0RGlyZWN0b3J5U2l6ZShj
b25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CisKKyAgICB1aW50NjRfdCBkaXJlY3RvcnlTaXplID0gMDsKKyAgICBEZXF1ZTxTdHJpbmc+
IHBhdGhzOworICAgIHBhdGhzLmFwcGVuZChkaXJlY3RvcnlQYXRoKTsKKyAgICB3aGlsZSAoIXBh
dGhzLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIHBhdGggPSBwYXRocy50YWtlRmlyc3QoKTsK
KyAgICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShwYXRoLCBGaWxlU3lzdGVt
OjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpIHsKKyAgICAgICAgICAgIGF1dG8gbmV3
UGF0aHMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgsICIqIl9zKTsKKyAgICAgICAg
ICAgIGZvciAoYXV0byYgbmV3UGF0aCA6IG5ld1BhdGhzKSB7CisgICAgICAgICAgICAgICAgLy8g
RmlsZXMgaW4gL0Jsb2JzIGRpcmVjdG9yeSBhcmUgaGFyZCBsaW5rLgorICAgICAgICAgICAgICAg
IGF1dG8gZmlsZU5hbWUgPSBGaWxlU3lzdGVtOjpsYXN0Q29tcG9uZW50T2ZQYXRoSWdub3JpbmdU
cmFpbGluZ1NsYXNoKG5ld1BhdGgpOworICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZSA9PSAi
QmxvYnMiKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBw
YXRocy5hcHBlbmQobmV3UGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgICAg
IEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHBhdGgsIGZpbGVTaXplKTsKKyAgICAgICAgZGlyZWN0
b3J5U2l6ZSArPSBmaWxlU2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIGRpcmVjdG9yeVNpemU7Cit9
CisKK3VpbnQ2NF90IEVuZ2luZTo6ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNv
bnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQogewotICAgIGZyb20obmV0d29ya1By
b2Nlc3MsIHNlc3Npb25JRCwgW2NsaWVudE9yaWdpbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYgZW5naW5lKSBtdXRhYmxlIHsKLSAgICAgICAg
ZW5naW5lLnJlYWRDYWNoZXNGcm9tRGlzayhjbGllbnRPcmlnaW4sIFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgY2FjaGVzT3JFcnJvcikgbXV0
YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICB9KTsKLSAg
ICB9KTsKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChyb290UGF0aC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgU3RyaW5nIHNhbHRQYXRoID0gRmls
ZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJvb3RQYXRoLCAic2FsdCJfcyk7Cisg
ICAgYXV0byBzYWx0ID0gcmVhZE9yTWFrZVNhbHQoc2FsdFBhdGgpOworICAgIGlmICghc2FsdCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBLZXkga2V5KG9yaWdpbi50b3BPcmlnaW4udG9TdHJp
bmcoKSwgb3JpZ2luLmNsaWVudE9yaWdpbi50b1N0cmluZygpLCB7IH0sIHsgfSwgKnNhbHQpOwor
ICAgIFN0cmluZyBkaXJlY3RvcnlQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KHJvb3RQYXRoLCBrZXkuaGFzaEFzU3RyaW5nKCkpOworCisgICAgU3RyaW5nIHNpemVG
aWxlUGF0aCA9IENhY2hlczo6Y2FjaGVzU2l6ZUZpbGVuYW1lKGRpcmVjdG9yeVBhdGgpOworICAg
IGlmIChhdXRvIHJlY29yZGVkU2l6ZSA9IHJlYWRTaXplRmlsZShzaXplRmlsZVBhdGgpKQorICAg
ICAgICByZXR1cm4gKnJlY29yZGVkU2l6ZTsKKworICAgIHJldHVybiBnZXREaXJlY3RvcnlTaXpl
KGRpcmVjdG9yeVBhdGgpOworfQorCit2b2lkIEVuZ2luZTo6cmVxdWVzdFNwYWNlKGNvbnN0IENs
aWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYgY2Fs
bGJhY2spCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghbV9uZXR3
b3JrUHJvY2VzcykKKyAgICAgICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
cjo6RGVjaXNpb246OkRlbnkpOworCisgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIgPSBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVv
dGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmlnaW4pOworICAgIGlmICghc3RvcmFnZVF1b3RhTWFu
YWdlcikKKyAgICAgICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVj
aXNpb246OkRlbnkpOworCisgICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlT25N
YWluVGhyZWFkKHNwYWNlUmVxdWVzdGVkLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIEVuZ2lu
ZTo6RW5naW5lKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgTmV0d29ya1Byb2Nlc3MmIHByb2Nl
c3MsIFN0cmluZyYmIHJvb3RQYXRoKQpAQCAtMzQxLDcgKzM5Niw3IEBAIHZvaWQgRW5naW5lOjpy
ZWFkQ2FjaGVzRnJvbURpc2soY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIENh
Y2hlc0NhbGxiCiAKICAgICAgICAgYXV0byYgY2FjaGVzID0gbV9jYWNoZXMuZW5zdXJlKG9yaWdp
biwgWyZvcmlnaW4sIHRoaXNdIHsKICAgICAgICAgICAgIGF1dG8gcGF0aCA9IGNhY2hlc1Jvb3RQ
YXRoKG9yaWdpbik7Ci0gICAgICAgICAgICByZXR1cm4gQ2FjaGVzOjpjcmVhdGUoKnRoaXMsIFdl
YkNvcmU6OkNsaWVudE9yaWdpbiB7IG9yaWdpbiB9LCBXVEZNb3ZlKHBhdGgpLCBtX25ldHdvcmtQ
cm9jZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmlnaW4pKTsKKyAgICAg
ICAgICAgIHJldHVybiBDYWNoZXM6OmNyZWF0ZSgqdGhpcywgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
IHsgb3JpZ2luIH0sIFdURk1vdmUocGF0aCkpOwogICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7
CiAKICAgICAgICAgaWYgKGNhY2hlcy0+aXNJbml0aWFsaXplZCgpKSB7CkBAIC00NzMsMTIgKzUy
OCwxMyBAQCB2b2lkIEVuZ2luZTo6cmVtb3ZlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQog
ICAgIH0pOwogfQogCi12b2lkIEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgsIHVpbnQ2NF90IHNpemUpCit2b2lkIEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25zdCBTdHJp
bmcmIHBhdGgsIHVpbnQ2NF90IHNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKKyAgICBDb21wbGV0aW9uSGFuZGxlckNhbGxpbmdTY29wZSBjb21w
bGV0aW9uSGFuZGxlckNhbGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgaWYg
KCFzaG91bGRQZXJzaXN0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faW9RdWV1ZS0+ZGlz
cGF0Y2goW3BhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpLCBzaXplXSgpIHsKKyAgICBtX2lvUXVl
dWUtPmRpc3BhdGNoKFtwYXRoID0gcGF0aC5pc29sYXRlZENvcHkoKSwgc2l6ZSwgY29tcGxldGlv
bkhhbmRsZXJDYWxsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyKV0oKSBtdXRh
YmxlIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsU2l6ZUZpbGVMb2NrKTsKICAg
ICAgICAgYXV0byBmaWxlSGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUocGF0aCwgRmlsZVN5
c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7CiAgICAgICAgIGF1dG8gY2xvc2VGaWxlSGFuZGxl
ciA9IG1ha2VTY29wZUV4aXQoWyZdIHsKQEAgLTQ4OSw2ICs1NDUsOCBAQCB2b2lkIEVuZ2luZTo6
d3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90IHNpemUpCiAKICAgICAg
ICAgRmlsZVN5c3RlbTo6dHJ1bmNhdGVGaWxlKGZpbGVIYW5kbGUsIDApOwogICAgICAgICBGaWxl
U3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlSGFuZGxlLCBTdHJpbmc6Om51bWJlcihzaXplKS51dGY4
KCkuZGF0YSgpLCBTdHJpbmc6Om51bWJlcihzaXplKS51dGY4KCkubGVuZ3RoKCkpOworCisgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXJDYWxsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyKV0oKSBtdXRhYmxlIHsgfSk7CiAgICAgfSk7
CiB9CiAKQEAgLTUxMyw4ICs1NzEsOCBAQCBPcHRpb25hbDx1aW50NjRfdD4gRW5naW5lOjpyZWFk
U2l6ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIGlmICghV1RGOjpjb252ZXJ0U2FmZWx5
KGZpbGVTaXplLCBieXRlc1RvUmVhZCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyKGJ5dGVzVG9SZWFkKTsKLSAgICBzaXplX3QgdG90YWxC
eXRlc1JlYWQgPSBGaWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRh
dGEoKSwgYnVmZmVyLnNpemUoKSk7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IGJ1ZmZlcihi
eXRlc1RvUmVhZCk7CisgICAgc2l6ZV90IHRvdGFsQnl0ZXNSZWFkID0gRmlsZVN5c3RlbTo6cmVh
ZEZyb21GaWxlKGZpbGVIYW5kbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlci5kYXRh
KCkpLCBidWZmZXIuc2l6ZSgpKTsKICAgICBpZiAodG90YWxCeXRlc1JlYWQgIT0gYnl0ZXNUb1Jl
YWQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmggYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oCmluZGV4IGEz
YWFhZjA5MDFjOTVlNjE1MDUyMTlkZDJjMWViN2Y2NTcyMGYwNTYuLjIyZWU2NmJjYTQ3NmJjZTJi
Y2E0YjJkNTFkYWNlOTU0N2FkNzE3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmgKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaApAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
dG9yYWdlUXVvdGFNYW5hZ2VyLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTc5LDEy
ICs4MCwxNSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplUXVvdGFVc2Vy
KE5ldHdvcmtQcm9jZXNzJiwgUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICBzdGF0aWMgdWludDY0
X3QgZGlza1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYpOworICAgIHZvaWQgcmVxdWVzdFNwYWNlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9y
aWdpbiYsIHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJik7CisKICAgICBib29sIHNo
b3VsZFBlcnNpc3QoKSBjb25zdCB7IHJldHVybiAhIW1faW9RdWV1ZTt9CiAKICAgICB2b2lkIHdy
aXRlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBOZXR3b3JrQ2FjaGU6OkRhdGEmJiwgV2Vi
Q29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKICAgICB2b2lkIHJl
YWRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgTmV0d29ya0NhY2hlOjpEYXRhJiwgaW50IGVycm9yKT4mJik7CiAgICAgdm9pZCByZW1vdmVG
aWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwotICAgIHZvaWQgd3JpdGVTaXplRmlsZShjb25z
dCBTdHJpbmcmLCB1aW50NjRfdCBzaXplKTsKKyAgICB2b2lkIHdyaXRlU2l6ZUZpbGUoY29uc3Qg
U3RyaW5nJiwgdWludDY0X3Qgc2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAg
ICBzdGF0aWMgT3B0aW9uYWw8dWludDY0X3Q+IHJlYWRTaXplRmlsZShjb25zdCBTdHJpbmcmKTsK
IAogICAgIGNvbnN0IFN0cmluZyYgcm9vdFBhdGgoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RQYXRo
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCmluZGV4IDZmYzUzZTAzYzRkNjdhMDBmYTkx
ZjJiM2ZjZmJkZDdlMTE5NjhjZTMuLmJhMTM0Y2Y0Y2FiMDA1ZjM0MjEzODlkNTU5MDE2OWVjNDdh
ZDRlOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCkBAIC00MTQsOCArNDE0LDExIEBA
IHZvaWQgQ2FjaGU6OnB1dChWZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIFJlY29yZElkZW50aWZp
ZXJzQ2FsbGJhY2smJiBjYWxsYmFjaykKICAgICAgICAgYXV0byBwb3NpdGlvbiA9IChzYW1lVVJM
UmVjb3JkcyAmJiAhbWF0Y2hpbmdSZWNvcmRzLmlzRW1wdHkoKSkgPyBzYW1lVVJMUmVjb3Jkcy0+
ZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZp
ZXIgPT0gbWF0Y2hpbmdSZWNvcmRzWzBdOyB9KSA6IG5vdEZvdW5kOwogCiAgICAgICAgIHNwYWNl
UmVxdWlyZWQgKz0gcmVjb3JkLnJlc3BvbnNlQm9keVNpemU7Ci0gICAgICAgIGlmIChwb3NpdGlv
biAhPSBub3RGb3VuZCkKLSAgICAgICAgICAgIHNwYWNlUmVxdWlyZWQgLT0gc2FtZVVSTFJlY29y
ZHMtPmF0KHBvc2l0aW9uKS5zaXplOworICAgICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQp
IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHNwYWNlRGVjcmVhc2VkID0gc2FtZVVSTFJlY29yZHMt
PmF0KHBvc2l0aW9uKS5zaXplOworICAgICAgICAgICAgaWYgKHNwYWNlUmVxdWlyZWQgPj0gc3Bh
Y2VEZWNyZWFzZWQpCisgICAgICAgICAgICAgICAgc3BhY2VSZXF1aXJlZCAtPSBzcGFjZURlY3Jl
YXNlZDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1fY2FjaGVzLnJlcXVlc3RTcGFjZShzcGFj
ZVJlcXVpcmVkLCBbY2FjaGVzID0gbWFrZVJlZihtX2NhY2hlcyksIGlkZW50aWZpZXIgPSBtX2lk
ZW50aWZpZXIsIHJlY29yZHMgPSBXVEZNb3ZlKHJlY29yZHMpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXShPcHRpb25hbDxET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYgZXJyb3IpIG11dGFi
bGUgewpAQCAtNDUwLDcgKzQ1MywxMCBAQCB2b2lkIENhY2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgV2ViQ29yZTo6Q2FjaGVRdWVyeU9wdGlvbgogICAgICAg
ICByZXR1cm4gc2hvdWxkUmVtb3ZlOwogICAgIH0pOwogCi0gICAgY2FsbGJhY2soV1RGTW92ZShy
ZWNvcmRJZGVudGlmaWVycykpOworICAgIC8vIFRoaXMgb3BlcmF0aW9uIHdvdWxkIGNoYW5nZSBj
YWNoZXMgc2l6ZSwgc28gbWFrZSBzdXJlIGNhbGxiYWNrIGZpbmlzaGVzIGFmdGVyIHNpemUgZmls
ZSBpcyB1cGRhdGVkLgorICAgIG1fY2FjaGVzLnVwZGF0ZVNpemVGaWxlKFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCByZWNvcmRJZGVudGlmaWVycyA9IFdURk1vdmUocmVjb3JkSWRlbnRp
ZmllcnMpXSgpIG11dGFibGUgeworICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKHJlY29yZElkZW50
aWZpZXJzKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgQ2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0
KGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIHJlY29yZElkZW50aWZpZXJzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNo
ZXMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VF
bmdpbmVDYWNoZXMuY3BwCmluZGV4IDAzYTA2MGNlZjJiYzY3MjAxNGI3NTk2YmM1ZGE0ZWU5NDM4
NjFhN2MuLmYyMzc0NTE4M2ZmNzE3NTkyN2E1MDBhNWQwNmY3YzdiMjNjMWNkMjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKQEAgLTU2LDM2ICs1NiwyMSBAQCBTdHJpbmcgQ2FjaGVz
OjpjYWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBjYWNoZXNSb290c1BhdGgpCiAgICAg
cmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZXNSb290c1Bh
dGgsICJlc3RpbWF0ZWRzaXplIl9zKTsKIH0KIAotUmVmPENhY2hlcz4gQ2FjaGVzOjpjcmVhdGUo
RW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYg
cm9vdFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXImIHF1b3RhTWFuYWdlcikKK1Jl
ZjxDYWNoZXM+IENhY2hlczo6Y3JlYXRlKEVuZ2luZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRP
cmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQYXRoKQogewotICAgIGF1dG8gY2FjaGVzID0g
YWRvcHRSZWYoKm5ldyBDYWNoZXMgeyBlbmdpbmUsIFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShy
b290UGF0aCksIHF1b3RhTWFuYWdlciB9KTsKLSAgICBxdW90YU1hbmFnZXIuYWRkVXNlcihjYWNo
ZXMuZ2V0KCkpOwotICAgIHJldHVybiBjYWNoZXM7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q2FjaGVzIHsgZW5naW5lLCBXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUocm9vdFBhdGgpIH0pOwog
fQogCi1DYWNoZXM6OkNhY2hlcyhFbmdpbmUmIGVuZ2luZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
ciYgcXVvdGFNYW5hZ2VyKQorQ2FjaGVzOjpDYWNoZXMoRW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6
OkNsaWVudE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgpCiAgICAgOiBtX2VuZ2lu
ZSgmZW5naW5lKQogICAgICwgbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICwgbV9yb290
UGF0aChXVEZNb3ZlKHJvb3RQYXRoKSkKLSAgICAsIG1fcXVvdGFNYW5hZ2VyKG1ha2VXZWFrUHRy
KHF1b3RhTWFuYWdlcikpCiB7CiB9CiAKIENhY2hlczo6fkNhY2hlcygpCiB7CiAgICAgQVNTRVJU
KG1fcGVuZGluZ1dyaXRpbmdDYWNoZXNUb0Rpc2tDYWxsYmFja3MuaXNFbXB0eSgpKTsKLQotICAg
IGlmIChtX3F1b3RhTWFuYWdlcikKLSAgICAgICAgbV9xdW90YU1hbmFnZXItPnJlbW92ZVVzZXIo
KnRoaXMpOwotfQotCi12b2lkIENhY2hlczo6d2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKLXsKLSAgICBpbml0aWFsaXplKFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoZXJy
b3IpCi0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihDYWNoZVN0b3JhZ2UsICJDYWNoZXM6
OmluaXRpYWxpemUgZmFpbGVkLCByZXBvcnRlZCBzcGFjZSB1c2VkIHdpbGwgYmUgemVybyIpOwot
ICAgICAgICBjYWxsYmFjaygpOwotICAgIH0pOwogfQogCiB2b2lkIENhY2hlczo6cmV0cmlldmVP
cmlnaW5Gcm9tRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZm9sZGVyUGF0aCwgV29ya1F1ZXVlJiBx
dWV1ZSwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkNsaWVu
dE9yaWdpbj4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yMDgsMTAgKzE5MywxNCBAQCB2
b2lkIENhY2hlczo6aW5pdGlhbGl6ZShXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlv
bkNhbGxiYWNrJiYgY2FsbGJhY2spCiAgICAgfSk7CiB9CiAKLXZvaWQgQ2FjaGVzOjp1cGRhdGVT
aXplRmlsZSgpCit2b2lkIENhY2hlczo6dXBkYXRlU2l6ZUZpbGUoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmIChtX2VuZ2luZSkKLSAgICAg
ICAgbV9lbmdpbmUtPndyaXRlU2l6ZUZpbGUoY2FjaGVzU2l6ZUZpbGVuYW1lKG1fcm9vdFBhdGgp
LCBtX3NpemUpOworICAgIGlmICghbV9lbmdpbmUpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZW5naW5lLT53cml0ZVNpemVG
aWxlKGNhY2hlc1NpemVGaWxlbmFtZShtX3Jvb3RQYXRoKSwgbV9zaXplLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgQ2FjaGVzOjppbml0aWFsaXplU2l6ZSgpCkBAIC0y
MzIsMTMgKzIyMSwxMiBAQCB2b2lkIENhY2hlczo6aW5pdGlhbGl6ZVNpemUoKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fc2l6ZSA9IHNpemU7
Ci0gICAgICAgICAgICB1cGRhdGVTaXplRmlsZSgpOwotCi0gICAgICAgICAgICBtX2lzSW5pdGlh
bGl6ZWQgPSB0cnVlOwotICAgICAgICAgICAgYXV0byBwZW5kaW5nQ2FsbGJhY2tzID0gV1RGTW92
ZShtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNrcyk7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIGNhbGxiYWNrIDogcGVuZGluZ0NhbGxiYWNrcykKLSAgICAgICAgICAgICAgICBjYWxsYmFj
ayhXVEY6Om51bGxvcHQpOwotCisgICAgICAgICAgICB1cGRhdGVTaXplRmlsZShbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyldKCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICAgICAgbV9pc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhdXRvIHBl
bmRpbmdDYWxsYmFja3MgPSBXVEZNb3ZlKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uQ2FsbGJhY2tz
KTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogcGVuZGluZ0NhbGxiYWNr
cykKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGOjpudWxsb3B0KTsKKyAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gZGVj
b2RlZCA9IENhY2hlOjpkZWNvZGVSZWNvcmRIZWFkZXIoKnN0b3JhZ2UpOwpAQCAtMjczLDEzICsy
NjEsMTEgQEAgdm9pZCBDYWNoZXM6OmNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgbV9zdG9yYWdlLT5jbGVhcihTdHJpbmcgeyB9LCAt
V2FsbFRpbWU6OmluZmluaXR5KCksIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
CiAgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgICAgICAgICAgcHJv
dGVjdGVkVGhpcy0+Y2xlYXJNZW1vcnlSZXByZXNlbnRhdGlvbigpOwotICAgICAgICAgICAgcHJv
dGVjdGVkVGhpcy0+cmVzZXRTcGFjZVVzZWQoKTsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNsZWFyTWVt
b3J5UmVwcmVzZW50YXRpb24oKTsKLSAgICByZXNldFNwYWNlVXNlZCgpOwogICAgIGNsZWFyUGVu
ZGluZ1dyaXRpbmdDYWNoZXNUb0Rpc2tDYWxsYmFja3MoKTsKICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwogfQpAQCAtNTI1LDEyICs1MTEsMTIgQEAgdm9pZCBDYWNoZXM6OnJlYWRSZWNvcmRzTGlz
dChDYWNoZSYgY2FjaGUsIE5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6VHJhdmVyc2VIYW5kbGUKIAog
dm9pZCBDYWNoZXM6OnJlcXVlc3RTcGFjZSh1aW50NjRfdCBzcGFjZVJlcXVpcmVkLCBXZWJDb3Jl
OjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAg
aWYgKCFtX3F1b3RhTWFuYWdlcikgeworICAgIGlmICghbV9lbmdpbmUpIHsKICAgICAgICAgY2Fs
bGJhY2soRXJyb3I6OlF1b3RhRXhjZWVkZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbV9xdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZShzcGFjZVJlcXVpcmVkLCBbY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CisgICAgbV9lbmdp
bmUtPnJlcXVlc3RTcGFjZShtX29yaWdpbiwgc3BhY2VSZXF1aXJlZCwgW2NhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgewogICAgICAgICBzd2l0Y2gg
KGRlY2lzaW9uKSB7CiAgICAgICAgIGNhc2UgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6
RGVjaXNpb246OkRlbnk6CiAgICAgICAgICAgICBjYWxsYmFjayhFcnJvcjo6UXVvdGFFeGNlZWRl
ZCk7CkBAIC01NDgsNyArNTM0LDYgQEAgdm9pZCBDYWNoZXM6OndyaXRlUmVjb3JkKGNvbnN0IENh
Y2hlJiBjYWNoZSwgY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZEluZm8KICAgICBBU1NF
UlQobV9zaXplID49IHByZXZpb3VzUmVjb3JkU2l6ZSk7CiAgICAgbV9zaXplICs9IHJlY29yZElu
Zm9ybWF0aW9uLnNpemU7CiAgICAgbV9zaXplIC09IHByZXZpb3VzUmVjb3JkU2l6ZTsKLSAgICB1
cGRhdGVTaXplRmlsZSgpOwogCiAgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpIHsKICAgICAgICAg
bV92b2xhdGlsZVN0b3JhZ2Uuc2V0KHJlY29yZEluZm9ybWF0aW9uLmtleSwgV1RGTW92ZShyZWNv
cmQpKTsKQEAgLTU1NiwxMyArNTQxLDE1IEBAIHZvaWQgQ2FjaGVzOjp3cml0ZVJlY29yZChjb25z
dCBDYWNoZSYgY2FjaGUsIGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmRJbmZvCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3N0b3JhZ2UtPnN0b3JlKENhY2hlOjplbmNvZGUo
cmVjb3JkSW5mb3JtYXRpb24sIHJlY29yZCksIHsgfSwgW3Byb3RlY3RlZFN0b3JhZ2UgPSBtYWtl
UmVmKCptX3N0b3JhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShpbnQgZXJyb3Ip
IG11dGFibGUgeworICAgIG1fc3RvcmFnZS0+c3RvcmUoQ2FjaGU6OmVuY29kZShyZWNvcmRJbmZv
cm1hdGlvbiwgcmVjb3JkKSwgeyB9LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBwcm90ZWN0ZWRTdG9yYWdlID0gbWFrZVJlZigqbV9zdG9yYWdlKSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0oaW50IGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGVycm9y
KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihDYWNoZVN0b3JhZ2UsICJDYWNoZXM6
OndyaXRlUmVjb3JkIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgZXJyb3IpOwogICAgICAgICAgICAg
Y2FsbGJhY2soRXJyb3I6OldyaXRlRGlzayk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgY2FsbGJhY2soV1RGOjpudWxsb3B0KTsKKyAgICAgICAgdXBkYXRlU2l6ZUZp
bGUoW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICBjYWxsYmFjayhXVEY6Om51bGxvcHQpOworICAgICAgICB9KTsKICAgICB9KTsKIH0KIApAQCAt
NjA1LDcgKzU5Miw3IEBAIHZvaWQgQ2FjaGVzOjpyZW1vdmVSZWNvcmQoY29uc3QgUmVjb3JkSW5m
b3JtYXRpb24mIHJlY29yZCkKIAogICAgIEFTU0VSVChtX3NpemUgPj0gcmVjb3JkLnNpemUpOwog
ICAgIG1fc2l6ZSAtPSByZWNvcmQuc2l6ZTsKLSAgICB1cGRhdGVTaXplRmlsZSgpOworICAgIHVw
ZGF0ZVNpemVGaWxlKFtdIHsgfSk7CiAKICAgICByZW1vdmVDYWNoZUVudHJ5KHJlY29yZC5rZXkp
OwogfQpAQCAtNjIxLDE3ICs2MDgsNiBAQCB2b2lkIENhY2hlczo6cmVtb3ZlQ2FjaGVFbnRyeShj
b25zdCBOZXR3b3JrQ2FjaGU6OktleSYga2V5KQogICAgIG1fc3RvcmFnZS0+cmVtb3ZlKGtleSk7
CiB9CiAKLXZvaWQgQ2FjaGVzOjpyZXNldFNwYWNlVXNlZCgpCi17Ci0gICAgbV9zaXplID0gMDsK
LSAgICB1cGRhdGVTaXplRmlsZSgpOwotCi0gICAgaWYgKG1fcXVvdGFNYW5hZ2VyKSB7Ci0gICAg
ICAgIG1fcXVvdGFNYW5hZ2VyLT5yZW1vdmVVc2VyKCp0aGlzKTsKLSAgICAgICAgbV9xdW90YU1h
bmFnZXItPmFkZFVzZXIoKnRoaXMpOwotICAgIH0KLX0KLQogdm9pZCBDYWNoZXM6OmNsZWFyTWVt
b3J5UmVwcmVzZW50YXRpb24oKQogewogICAgIG1ha2VEaXJ0eSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMu
aCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmgKaW5kZXggMDMyMzFmM2E5YjA1NzY3MmQ2MzFiYjk2ZTY3YTZlYjk5ZTFkN2NiYi4u
NWQzOTRhMGU0ODg1N2IwMjVjYWE0ODM0YWQyNmJlODQ3ZGQ5ZjU1NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlcy5oCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGUuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VRdW90YVVz
ZXIuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYv
RGVxdWUuaD4KIApAQCAtNDIsMTAgKzQxLDEwIEBAIG5hbWVzcGFjZSBDYWNoZVN0b3JhZ2Ugewog
CiBjbGFzcyBFbmdpbmU7CiAKLWNsYXNzIENhY2hlcyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVk
PENhY2hlcz4sIHByaXZhdGUgV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlciB7CitjbGFzcyBDYWNo
ZXMgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWNoZXM+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgU3RyaW5nIGNhY2hlc1NpemVGaWxlbmFtZShjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMg
UmVmPENhY2hlcz4gY3JlYXRlKEVuZ2luZSYsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmLCBTdHJp
bmcmJiByb290UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYpOworICAgIHN0YXRp
YyBTdHJpbmcgY2FjaGVzU2l6ZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgY2FjaGVzUm9vdHNQYXRo
KTsKKyAgICBzdGF0aWMgUmVmPENhY2hlcz4gY3JlYXRlKEVuZ2luZSYsIFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYmLCBTdHJpbmcmJiByb290UGF0aCk7CiAgICAgfkNhY2hlcygpOwogCiAgICAgc3Rh
dGljIHZvaWQgcmV0cmlldmVPcmlnaW5Gcm9tRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZm9sZGVy
UGF0aCwgV29ya1F1ZXVlJiwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdl
YkNvcmU6OkNsaWVudE9yaWdpbj4mJik+JiYpOwpAQCAtNzksMjIgKzc4LDE3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgY2xlYXIoV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAg
IHZvaWQgY2xlYXJNZW1vcnlSZXByZXNlbnRhdGlvbigpOwotICAgIHZvaWQgcmVzZXRTcGFjZVVz
ZWQoKTsKIAogICAgIHVpbnQ2NF90IHN0b3JhZ2VTaXplKCkgY29uc3Q7CisgICAgdm9pZCB1cGRh
dGVTaXplRmlsZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiBwcml2YXRlOgotICAg
IENhY2hlcyhFbmdpbmUmLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBh
dGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXImKTsKLQotICAgIC8vIFN0b3JhZ2VRdW90
YVVzZXIgQVBJLgotICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fc2l6ZTsgfQorICAgIENhY2hlcyhFbmdpbmUmLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiwg
U3RyaW5nJiYgcm9vdFBhdGgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplU2l6ZSgpOwogICAgIHZv
aWQgcmVhZENhY2hlc0Zyb21EaXNrKFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxWZWN0b3I8
Q2FjaGU+LCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYpPiYmKTsKICAgICB2b2lk
IHdyaXRlQ2FjaGVzVG9EaXNrKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2Fs
bGJhY2smJik7CiAKLSAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpIGZpbmFsOwotCiAgICAgdm9pZCBzdG9yZU9yaWdpbihXZWJDb3JlOjpET01DYWNo
ZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwogICAgIHN0YXRpYyBPcHRpb25hbDxXZWJD
b3JlOjpDbGllbnRPcmlnaW4+IHJlYWRPcmlnaW4oY29uc3QgTmV0d29ya0NhY2hlOjpEYXRhJik7
CiAKQEAgLTEwNiw4ICsxMDAsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBoYXNBY3RpdmVDYWNo
ZSgpIGNvbnN0OwogCi0gICAgdm9pZCB1cGRhdGVTaXplRmlsZSgpOwotCiAgICAgYm9vbCBtX2lz
SW5pdGlhbGl6ZWQgeyBmYWxzZSB9OwogICAgIEVuZ2luZSogbV9lbmdpbmUgeyBudWxscHRyIH07
CiAgICAgdWludDY0X3QgbV91cGRhdGVDb3VudGVyIHsgMCB9OwpAQCAtMTIyLDcgKzExNCw2IEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9u
Q2FsbGJhY2s+IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uQ2FsbGJhY2tzOwogICAgIGJvb2wgbV9p
c1dyaXRpbmdDYWNoZXNUb0Rpc2sgeyBmYWxzZSB9OwogICAgIERlcXVlPENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoT3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPik+PiBtX3Bl
bmRpbmdXcml0aW5nQ2FjaGVzVG9EaXNrQ2FsbGJhY2tzOwotICAgIFdlYWtQdHI8V2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcj4gbV9xdW90YU1hbmFnZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBDYWNoZVN0b3JhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVE
YXRhU3RvcmVQYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzLmNwcAppbmRleCBjMGZjZjljNWY2MDBhYTVhYzExNjNlNDdhNGIyNmRh
YzQyMDY1YWE5Li42ZDBjMTI5YTc0MDUxMGQzODY5NzM3MDVhZDA5MmVmMTMyY2MwNzVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMu
Y3BwCkBAIC01NSw2ICs1NSw4IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVu
Y29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAKICAgICBlbmNvZGVyIDw8IGxvY2Fs
U3RvcmFnZURpcmVjdG9yeSA8PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7
CiAKKyAgICBlbmNvZGVyIDw8IGNhY2hlU3RvcmFnZURpcmVjdG9yeSA8PCBjYWNoZVN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisKICAgICBlbmNvZGVyIDw8IHBlck9yaWdpblN0b3Jh
Z2VRdW90YTsKICAgICBlbmNvZGVyIDw8IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGE7
CiB9CkBAIC0xNDEsNiArMTQzLDE4IEBAIE9wdGlvbmFsPFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzPiBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpsb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOwogCisgICAgT3B0aW9uYWw8U3RyaW5nPiBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7
CisgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgaWYgKCFjYWNoZVN0
b3JhZ2VEaXJlY3RvcnkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZNb3ZlKCpjYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkpOworCisgICAgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiBjYWNoZVN0b3Jh
Z2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgZGVjb2RlciA+PiBjYWNoZVN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGU7CisgICAgaWYgKCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpjYWNo
ZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworCiAgICAgT3B0aW9uYWw8dWludDY0
X3Q+IHBlck9yaWdpblN0b3JhZ2VRdW90YTsKICAgICBkZWNvZGVyID4+IHBlck9yaWdpblN0b3Jh
Z2VRdW90YTsKICAgICBpZiAoIXBlck9yaWdpblN0b3JhZ2VRdW90YSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCmluZGV4IDA5NWYwOWQ2
YWY5M2Y5MTNlYmIyOWY3MDI2N2FlOWMxYjc0YmU4OGUuLmYyN2RmNDg5ODA5ZjMxOTYwOGI2ODBj
YjJhOGExYzE0YjcwMTg0MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGFTdG9yZVBhcmFtZXRlcnMuaApAQCAtNzEsNiArNzEsOSBAQCBzdHJ1Y3QgV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMgewogICAgIFN0cmluZyBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lv
bkhhbmRsZTsKIAorICAgIFN0cmluZyBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIGNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsK
KwogICAgIHVpbnQ2NF90IHBlck9yaWdpblN0b3JhZ2VRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpIH07CiAgICAgdWludDY0X3QgcGVyVGhpcmRQYXJ0
eU9yaWdpblN0b3JhZ2VRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1
bHRUaGlyZFBhcnR5UXVvdGEoKSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCmluZGV4IDdlYjc1Nzc2NGU5
NDhmNWE0ZGQ1NzdlYWJiYzYyMzFhMjczOGNhYTYuLjk5YTQwODZlMjNmZDYwMTYxZGMwNDFiMDg4
ZjcxZDBjMDc1ZjVjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcApAQCAtNjg2LDMgKzY4NiwxMSBAQCB2b2lk
IFdLV2Vic2l0ZURhdGFTdG9yZVNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhX
S1dlYnNpdGVEYXRhU3RvcmVSZQogewogICAgIFdlYktpdDo6dG9JbXBsKGRhdGFTdG9yZVJlZikt
PnNldENhY2hlTW9kZWxTeW5jaHJvbm91c2x5Rm9yVGVzdGluZyhXZWJLaXQ6OnRvQ2FjaGVNb2Rl
bChjYWNoZU1vZGVsKSk7CiB9CisKK3ZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlUmVzZXRRdW90YShX
S1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCB2b2lkKiBjb250ZXh0LCBXS1dlYnNp
dGVEYXRhU3RvcmVSZXNldFF1b3RhQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgV2ViS2l0Ojp0
b0ltcGwoZGF0YVN0b3JlUmVmKS0+cmVzZXRRdW90YShbY29udGV4dCwgY2FsbGJhY2tdIHsKKyAg
ICAgICAgaWYgKGNhbGxiYWNrKQorICAgICAgICAgICAgY2FsbGJhY2soY29udGV4dCk7CisgICAg
fSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNp
dGVEYXRhU3RvcmVSZWYuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0
ZURhdGFTdG9yZVJlZi5oCmluZGV4IDk1MjM5YTNiMGIzYWQ2MGMyZjc4MzdmZTZmNWExMDc3MzYx
YWZkZTAuLjIzZmMyZTcyNmY5MjBmMWFiM2RmOWVkMGQyN2ZkMDYxYWMyOTcxNGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJl
Zi5oCkBAIC0xNTUsNiArMTU1LDkgQEAgV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3Jl
Q2xlYXJBZENsaWNrQXR0cmlidXRpb25zVGhyb3VnaFdlYnNpdGVEYXRhUmVtb3YKIAogV0tfRVhQ
T1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3JlU2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JU
ZXN0aW5nKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIFdLQ2FjaGVNb2RlbCBj
YWNoZU1vZGVsKTsKIAordHlwZWRlZiB2b2lkICgqV0tXZWJzaXRlRGF0YVN0b3JlUmVzZXRRdW90
YUNhbGxiYWNrKSh2b2lkKiBmdW5jdGlvbkNvbnRleHQpOworV0tfRVhQT1JUIHZvaWQgV0tXZWJz
aXRlRGF0YVN0b3JlUmVzZXRRdW90YShXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVm
LCB2b2lkKiBjb250ZXh0LCBXS1dlYnNpdGVEYXRhU3RvcmVSZXNldFF1b3RhQ2FsbGJhY2sgY2Fs
bGJhY2spOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5k
ZXggYWQ1Nzk5MWUzY2FjN2M1YWZiZWZjOGE2NWY5YWZmOWI0MDljYTkyNC4uNGM0MWM5MzhhODY3
ZGFjNjAyMjdlZTQwZDY3NWM5NmY0ZDRmMTgzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0xMzY3LDYg
KzEzNjcsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzQXNzZXJ0
aW9uKCkKICAgICBtX2FjdGl2aXR5RnJvbVdlYlByb2Nlc3NlcyA9IG51bGxwdHI7CiB9CiAKK3Zv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZXNldFF1b3Rh
KHNlc3Npb25JRCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CiAKICN1bmRlZiBNRVNTQUdFX0NIRUNLCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IDcyY2U0
MjU2YmFhZTA3YzkyZWZjZDQ5OGUxMzIwNmJhMjk5NDNiNWEuLmI3N2NlN2QzZTZhZmVlMTFhZTYy
MDA5Y2Y2OWVjZjRiNzAwY2Q1N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC01Niw2ICs1Niw3IEBAIGVudW0g
Y2xhc3MgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIDogYm9vbDsKIGVudW0gY2xhc3MgU3Rv
cmFnZUFjY2Vzc1dhc0dyYW50ZWQgOiBib29sOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBzdHJ1
Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOworc3RydWN0IENsaWVudE9yaWdpbjsKIH0KIAogbmFtZXNw
YWNlIFdlYktpdCB7CkBAIC0xOTYsNiArMTk3LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0
ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lk
IHVucmVnaXN0ZXJTY2hlbWVGb3JMZWdhY3lDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmKTsK
IAorICAgIHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKKwogcHJpdmF0ZToKICAgICAvLyBBdXhpbGlhcnlQcm9jZXNzUHJveHkKICAg
ICB2b2lkIGdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJikg
b3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5k
ZXggNDA2OGVlNDFmZmNkNmRmOTVhM2QzYjUxNmJiYzI1MzBlMmM5OTg5MS4uN2VlY2EzZDNjYjQz
YjNiMjY3MDYyOWQwZmFjZGY1MTE5ODgwYWIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmNwcApAQCAtNTUxLDYgKzU1MSwxMiBAQCBOZXR3b3JrUHJvY2Vzc1By
b3h5JiBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9y
ZSogd2l0aAogICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxT
dG9yYWdlRGlyZWN0b3J5ID0gbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwogICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubG9jYWxTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKIAorICAgIGF1dG8gY2FjaGVTdG9yYWdlRGlyZWN0
b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlID8gbV93ZWJzaXRlRGF0YVN0b3JlLT5jYWNoZVN0b3Jh
Z2VEaXJlY3RvcnkoKSA6IG51bGxTdHJpbmcoKTsKKyAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVj
dG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hlU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGUpOworICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNh
Y2hlU3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoY2FjaGVTdG9yYWdlRGlyZWN0b3J5KTsKKyAg
ICB9CisKICAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQogICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gbV93ZWJzaXRlRGF0YVN0b3JlLT5yZXNvbHZlZFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsKICAgICBpZiAocGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0
b3JlQ29jb2EubW0KaW5kZXggMGZmM2VhMDk2MzFiNTc3ZDFlYTc5MDgyNWUzMDVlZTkzMjNmYmRj
Ny4uMDcxOTllY2FjZGNiNDc2NDkwNzQzMzI4ZTk4OWNiYWM1YmFiNGNhYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9y
ZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29h
L1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpAQCAtMTkxLDYgKzE5MSwxMCBAQCBXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpwYXJhbWV0ZXJzKCkKICAgICBpZiAo
IXBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKICAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRl
cnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CiAKKyAgICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eSA9IGNhY2hlU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGlmICghcGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
KwogICAgIHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gcGVyT3JpZ2luU3RvcmFn
ZVF1b3RhKCk7CiAgICAgcGFyYW1ldGVycy5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3Rh
ID0gcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSgpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmlu
ZGV4IGJiOTg0MTY2NDU0YjU2YWVhNGM4ZGJkNDg1YjcyMTQwMGJiMTg2Y2EuLmFjMmYzOGQ3ZWRi
NTRmN2EyNGFiYWQzZGE0NGU1NmQ4ZWQzNjE3OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0yMDgz
LDYgKzIwODMsMTIgQEAgV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9y
ZTo6cGFyYW1ldGVycygpCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZv
clJlYWRXcml0ZURpcmVjdG9yeShsb2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9j
YWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICAgICB9CiAKKyAgICBhdXRvIGNh
Y2hlU3RvcmFnZURpcmVjdG9yeSA9IHRoaXMtPmNhY2hlU3RvcmFnZURpcmVjdG9yeSgpOworICAg
IGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkgeworICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7CisgICAgICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gY2FjaGVTdG9y
YWdlRGlyZWN0b3J5OworICAgIH0KKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAg
IHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gcmVzb2x2ZWRJbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnkoKTsKICAgICBpZiAoIXBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5LmlzRW1wdHkoKSkKQEAgLTIxNjksNiArMjE3NSwxNSBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmdldExvY2FsU3RvcmFnZURldGFpbHMoRnVuY3Rpb248dm9pZChWZWN0b3I8TG9jYWxT
dG9yYWdlRAogICAgIEFTU0VSVCghY29tcGxldGlvbkhhbmRsZXIpOwogfQogCit2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGZvciAo
YXV0byYgcHJvY2Vzc1Bvb2wgOiBwcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBpZiAoYXV0byog
cHJvY2VzcyA9IHByb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQorICAgICAgICAgICAgcHJv
Y2Vzcy0+cmVzZXRRdW90YShtX3Nlc3Npb25JRCwgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxi
YWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CisgICAgfQorfQorCiAjaWYgIVBMQVRGT1JN
KENPQ09BKQogV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdE1lZGlhQ2FjaGVE
aXJlY3RvcnkoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDI3ODRmZTM3ZTNlYTRhOGExOGU1NTUxZDM5
YjJjYTM5OTIwN2ZhYWEuLmY1ZWU0MjIwN2RhMjBmOTI3NjFhZGIxMDI1Mzk2Y2QxY2E4MWVmOTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmgKQEAgLTI5MSw3ICsyOTEsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFdU
Rjo6U3RyaW5nIGRlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCk7CiAgICAgc3RhdGlj
IFdURjo6U3RyaW5nIGRlZmF1bHREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoKTsK
ICAgICBzdGF0aWMgV1RGOjpTdHJpbmcgZGVmYXVsdEphdmFTY3JpcHRDb25maWd1cmF0aW9uRGly
ZWN0b3J5KCk7Ci0gICAgCisKKyAgICB2b2lkIHJlc2V0UXVvdGEoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIGZldGNoRGF0YUFuZEFwcGx5KE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4s
IFJlZlB0cjxXb3JrUXVldWU+JiYsIEZ1bmN0aW9uPHZvaWQoVmVjdG9yPFdlYnNpdGVEYXRhUmVj
b3JkPik+JiYgYXBwbHkpOwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggZWI3Mjc5Y2Q3ZjhkNDI4M2ZkMjlmODI5NWY0MzU0OGM4YzU2NTMxYi4u
NjY1ODU3NTFjZDcxOTQzNmMyYjgyZTYwYTA2MzhkNzk1NDY3M2YwOSAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE5
LTExLTIyICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENyb3Nz
LXRocmVhZCB2ZXJzaW9uIFN0b3JhZ2VRdW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzk3MQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNTcyOTAzNDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFu
YWdlci5jcHA6IFJlbW92ZWQgYXMgd2UgaGF2ZSBhIGRpZmZlcmVudCBTdG9yYWdlUXVvdGFNYW5h
Z2VyIAorICAgICAgICBpbXBsZW1lbnRhdGlvbiBub3cuCisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHA6IHJlc2V0IFN0b3JhZ2VRdW90YU1hbmFnZXIncyBxdW90
YSBiZXR3ZWVuIHRlc3RzLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNl
dFF1b3RhKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisK
IDIwMTktMTEtMjIgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtld3NdIEFkZCBLaWxsT2xkUHJvY2Vzc2VzIHN0ZXAgYmVmb3JlIHJ1bm5pbmcgSlNDIHRl
c3RzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDczMTlkMmZjNDk3MGVjNGVlYmNkMDExNGEz
NDA3MGY1YWRkZDFhMDQuLmIzYmE5YTJjYWRlZmExYjVhNTk4YTZlNDIwNjQyMTY3ZjY2MTRlMGUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MzcsNyArNzM3LDYgQEAKIAkJOTM5OUJBMDYy
MzcxMTE0RjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdEluUGFnZUNhY2hlLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5OUJBMDMyMzcx
MTBCRjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdEluUGFnZUNhY2hlLmh0bWwgKi87IH07CiAJCTkz
QUY0RUNFMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRG
b3JJbWFnZXNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzQUY0RUNEMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCAqLzsgfTsKIAkJOTNBRjRFRDExNTA2RjEz
MDAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBRjRFQ0YxNTA2RjEyMzAwN0ZENTdFIC8q
IGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi87IH07Ci0JCTkzQjYyMDU0MjM0RUE2MkMwMEQ0OUI5NyAv
KiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzQjYyMDUzMjM0RUEzMkIwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFN
YW5hZ2VyLmNwcCAqLzsgfTsKIAkJOTNDRkE4NjcxQ0VCOUUzODAwMDU2NUE4IC8qIGF1dG9mb2N1
c2VkLXRleHQtaW5wdXQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0NGQTg2NjFDRUI5REUxMDAwNTY1QTggLyogYXV0b2ZvY3VzZWQt
dGV4dC1pbnB1dC5odG1sICovOyB9OwogCQk5M0QxMTlGQzIyQzY4MEY3MDA5QkUzQzcgLyogbG9j
YWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0QxMTlGQjIyQzU3MTEyMDA5QkUzQzcg
LyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCAqLzsgfTsKIAkJOTNFMkM1
NTUxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMkM1NTQxRkQzMjA0MTAwRTFERjZBIC8qIExp
bmVFbmRpbmcuY3BwICovOyB9OwpAQCAtMTE0Miw3ICsxMTQxLDYgQEAKIAkJCWRzdFBhdGggPSBU
ZXN0V2ViS2l0QVBJLnJlc291cmNlczsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSA3OwogCQkJZmls
ZXMgPSAoCi0JCQkJQ0Q4Mzk0REYyMzJBRjdDMDAwMTQ5NDk1IC8qIG1lZGlhLWxvYWRpbmcuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NUE4MTdGRjIxODEwMjFBMDAwNEEzOUEgLyog
MTAweDEwMC1yZWQudGdhIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTFBOUU1MkM5MTNFNjVF
RjQwMDY5MTdGNSAvKiAxOC1jaGFyYWN0ZXJzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJ
CQkJNTVBODE4MDAyMTgxMDIyMTAwMDRBMzlBIC8qIDQwMHg0MDAtZ3JlZW4ucG5nIGluIENvcHkg
UmVzb3VyY2VzICovLApAQCAtMTM3NSw2ICsxMzczLDcgQEAKIAkJCQk5MzBBRDQwMjE1MDY5OEQw
MDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJ
QUQ1N0FDMjIxREE3NDY2RTAwRkYxQkRFIC8qIG1hbnktaWZyYW1lcy5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovLAogCQkJCTc3NzJFQ0UxMjJGRTA2QzYwMDA5QTc5OSAvKiBtYW55LXNhbWUtb3Jp
Z2luLWlmcmFtZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKKwkJCQlDRDgzOTRERjIzMkFG
N0MwMDAxNDk0OTUgLyogbWVkaWEtbG9hZGluZy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAog
CQkJCUNEQTMxNTlBMUVENTQ4RjEwMDlGNjBEMyAvKiBNZWRpYVBsYXliYWNrU2xlZXBBc3NlcnRp
b24uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlDREM5NDQyRjFFRjIwNUQ2MDA1OUMz
QzQgLyogbWVkaWFzdHJlYW10cmFjay1kZXRhY2hlZC5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
LAogCQkJCUUxMjIwRENBMTU1QjI4QUEwMDEzRTJGQyAvKiBNZW1vcnlDYWNoZURpc2FibGVXaXRo
aW5SZXNvdXJjZUxvYWREZWxlZ2F0ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLApAQCAtMjE0
Nyw3ICsyMTQ2LDYgQEAKIAkJOTNBRjRFQ0ExNTA2RjAzNTAwN0ZENTdFIC8qIE5ld0ZpcnN0Vmlz
dWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FGNEVDRDE1MDZGMDY0MDA3RkQ1N0Ug
LyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTNBRjRFQ0YxNTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibG90cy1vZi1pbWFnZXMuaHRtbCI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTkzQjYyMDUzMjM0RUEzMkIwMEQ0OUI5NyAvKiBTdG9yYWdlUXVv
dGFNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3Jh
Z2VRdW90YU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0NGQTg2
NjFDRUI5REUxMDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5odG1sOyBwYXRoID0gImF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0ZBODY4MUNFQkNGRUQwMDA1NjVBOCAvKiBDYW5k
aWRhdGVUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENh
bmRpZGF0ZVRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0QxMTlGQjIy
QzU3MTEyMDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJp
dmF0ZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMxMjQsNyArMzEyMiw2
IEBACiAJCQkJNDE5NzNCNUMxQUYyMjg3NTAwNkM3QjM2IC8qIFNoYXJlZEJ1ZmZlci5jcHAgKi8s
CiAJCQkJQTE3OTkxODkxRTFDQTI0MTAwQTUwNUVEIC8qIFNoYXJlZEJ1ZmZlclRlc3QuY3BwICov
LAogCQkJCUExNzk5MThBMUUxQ0EyNDEwMEE1MDVFRCAvKiBTaGFyZWRCdWZmZXJUZXN0LmggKi8s
Ci0JCQkJOTNCNjIwNTMyMzRFQTMyQjAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3Bw
ICovLAogCQkJCUVDQTY4MENEMUU2OENDMDkwMDczMUQyMCAvKiBTdHJpbmdVdGlsaXRpZXMubW0g
Ki8sCiAJCQkJQ0U0RDVERTUxRjY3NDNCQTAwNzJDRkM2IC8qIFN0cmluZ1dpdGhEaXJlY3Rpb24u
Y3BwICovLAogCQkJCTkzQTI1ODk4MUY5MkZGMTUwMDNFNTEwQyAvKiBUZXh0Q29kZWMuY3BwICov
LApAQCAtMzg1Miw2ICszODQ5LDcgQEAKIAkJCQk5MzBBRDQwMTE1MDY5OEIzMDA2Nzk3MEYgLyog
bG90cy1vZi10ZXh0Lmh0bWwgKi8sCiAJCQkJQUQ1N0FDMUQxREE3NDYzODAwRkYxQkRFIC8qIG1h
bnktaWZyYW1lcy5odG1sICovLAogCQkJCTc3NzJFQ0UwMjJGRTA1RTEwMDA5QTc5OSAvKiBtYW55
LXNhbWUtb3JpZ2luLWlmcmFtZXMuaHRtbCAqLywKKwkJCQlDRDgzOTRERTIzMkFGMTVFMDAxNDk0
OTUgLyogbWVkaWEtbG9hZGluZy5odG1sICovLAogCQkJCUNEQzk0NDJCMUVGMUZCRDIwMDU5QzND
NCAvKiBtZWRpYXN0cmVhbXRyYWNrLWRldGFjaGVkLmh0bWwgKi8sCiAJCQkJNTFDRDFDNzExQjM4
RDQ4NDAwMTQyQ0E1IC8qIG1vZGFsLWFsZXJ0cy1pbi1uZXctYWJvdXQtYmxhbmstd2luZG93Lmh0
bWwgKi8sCiAJCQkJN0ExNDU4RkIxQUQ1QzAzNTAwRTA2NzcyIC8qIG1vdXNlLWJ1dHRvbi1saXN0
ZW5lci5odG1sICovLApAQCAtMzg4Myw3ICszODgxLDYgQEAKIAkJCQkwN0NEMzJGNzIwNjVCNzJB
MDA2NEE0QkUgLyogdmlkZW8uaHRtbCAqLywKIAkJCQkxQzJCODE4NDFDODkyNEEyMDBBNTUyOUYg
Lyogd2ViZm9udC5odG1sICovLAogCQkJCTQ2OEYyRjkzMjM2OERBQTcwMEY0Qjg2NCAvKiB3aW5k
b3ctb3Blbi10aGVuLWRvY3VtZW50LW9wZW4uaHRtbCAqLywKLQkJCQlDRDgzOTRERTIzMkFGMTVF
MDAxNDk0OTUgLyogbWVkaWEtbG9hZGluZy5odG1sICovLAogCQkJKTsKIAkJCW5hbWUgPSBSZXNv
dXJjZXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNDg2NCw3ICs0ODYxLDYgQEAK
IAkJCQk3Q0NFN0VDRjFBNDExQTdFMDA0NDdDNEMgLyogU3RvcExvYWRpbmdGcm9tRGlkUmVjZWl2
ZVJlc3BvbnNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDMDkzMkUyMUM5OTM0NDAwMzBDNEIw
IC8qIFN0b3BTdXNwZW5kUmVzdW1lQWxsTWVkaWEubW0gaW4gU291cmNlcyAqLywKIAkJCQk0MTRB
RDY4NjIyODVEMUMwMDA3NzdGMkQgLyogU3RvcmFnZVF1b3RhLm1tIGluIFNvdXJjZXMgKi8sCi0J
CQkJOTNCNjIwNTQyMzRFQTYyQzAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTE1QkUxNzExRDQyOEU0QjAwREQ3QzY4IC8qIFN0b3JlQmxvYlRo
ZW5EZWxldGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VEMDFBNDExQTdFMDA0NDdDNEMg
LyogU3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmcubW0gaW4gU291cmNlcyAq
LywKIAkJCQk3Q0NFN0VEMTFBNDExQTdFMDA0NDdDNEMgLyogU3RyaW5nVHJ1bmNhdG9yLm1tIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGFkMWM2N2JmMDUyZjdiMGEzNDUzZDA1NGYyNTI5MTkxZWVmM2YxNzIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTAzICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0q
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9TdG9yYWdlUXVvdGFVc2VyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1u
YW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KLXN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFF1b3Rh
ID0gMSAqIEtCOwotCi1jbGFzcyBNb2NrUXVvdGFVc2VyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6
OlN0b3JhZ2VRdW90YVVzZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IE1vY2tRdW90YVVzZXIo
U3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlcikKLSAgICAgICAgOiBtX21hbmFnZXIoJm1hbmFn
ZXIpCi0gICAgewotICAgICAgICBtYW5hZ2VyLmFkZFVzZXIoKnRoaXMpOwotICAgIH0KLQotICAg
IHZvaWQgc2V0U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCkgeyBtX3NwYWNlVXNlZCA9IHNw
YWNlVXNlZDsgfQotCi1wcml2YXRlOgotICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZp
bmFsCi0gICAgewotICAgICAgICByZXR1cm4gbV9zcGFjZVVzZWQ7Ci0gICAgfQotCi0gICAgdm9p
ZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSBm
aW5hbAotICAgIHsKLSAgICAgICAgaWYgKCFtX3NwYWNlVXNlZCkKLSAgICAgICAgICAgIEFTU0VS
VF9FUShtX21hbmFnZXItPnN0YXRlKCksIFN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0YXRlOjpVbmlu
aXRpYWxpemVkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUX0VRKG1fbWFuYWdl
ci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNl
ZCk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdXNhZ2UgdG8gbW9jayBkZWxldGlvbi4KLSAgICAgICAg
bV9zcGFjZVVzZWQgPSAwOwotICAgICAgICBjYWxsYmFjaygpOwotICAgIH0KLQotICAgIHVpbnQ2
NF90IG1fc3BhY2VVc2VkIHsgMCB9OwotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1fbWFuYWdl
cjsKLX07Ci0gICAgCi1URVNUKFN0b3JhZ2VRdW90YU1hbmFnZXJUZXN0LCBCYXNpYykKLXsKLSAg
ICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyID0gbnVsbHB0cjsK
LSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyIHN0b3JhZ2VRdW90YU1hbmFnZXIoZGVmYXVsdFF1b3Rh
LCBbJnN0b3JhZ2VRdW90YU1hbmFnZXJQdHJdKHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJy
ZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
T3B0aW9uYWw8dWludDY0X3Q+KT4mJiBjb21wbGV0aW9uSGFubGRlcikgewotICAgICAgICBBU1NF
UlRfVFJVRShzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyKTsKLSAgICAgICAgQVNTRVJUX0VRKHN0b3Jh
Z2VRdW90YU1hbmFnZXJQdHItPnN0YXRlKCksIFN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0YXRlOjpX
YWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlKTsKLQotICAgICAgICAvLyBBbGxvdyBhbGwg
c3BhY2UgaW5jcmVhc2UgcmVxdWVzdHMuCi0gICAgICAgIGNvbXBsZXRpb25IYW5sZGVyKHNwYWNl
SW5jcmVhc2UgKyBjdXJyZW50U3BhY2UpOwotICAgIH0pOwotICAgIHN0b3JhZ2VRdW90YU1hbmFn
ZXJQdHIgPSAmc3RvcmFnZVF1b3RhTWFuYWdlcjsKLQotCi0gICAgTW9ja1F1b3RhVXNlciBtb2Nr
VXNlcihzdG9yYWdlUXVvdGFNYW5hZ2VyKTsKLQotICAgIC8vIEdyYW50IGRpcmVjdGx5LgotICAg
IHN0b3JhZ2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDAuMSAqIEtCLCBbJl0oV2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNpb24pIHsKLSAgICAgICAgQVNTRVJU
X0VRKGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3Jh
bnQpOwotICAgICAgICBtb2NrVXNlci5zZXRTcGFjZVVzZWQoMC4xICogS0IpOwotICAgIH0pOwot
Ci0gICAgLy8gR3JhbnQgYWZ0ZXIgY29tcHV0aW5nIGFjY3VyYXRlIHVzYWdlLgotICAgIHN0b3Jh
Z2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDEuMCAqIEtCLCBbJl0oV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNpb24pIHsKLSAgICAgICAgQVNTRVJUX0VRKGRl
Y2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQpOwot
ICAgICAgICBtb2NrVXNlci5zZXRTcGFjZVVzZWQoMS4wICogS0IpOwotICAgIH0pOwotCi0gICAg
Ly8gR3JhbnQgYWZ0ZXIgY29tcHV0aW5nIGFjY3VyYXRlIHVzYWdlIGFuZCByZXF1ZXN0aW5nIHNw
YWNlIGluY3JlYXNlLgotICAgIHN0b3JhZ2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDEwICog
S0IsIFsmXShXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNpc2lvbikg
ewotICAgICAgICBBU1NFUlRfRVEoc3RvcmFnZVF1b3RhTWFuYWdlclB0ci0+c3RhdGUoKSwgU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdCk7Ci0gICAg
ICAgIEFTU0VSVF9FUShkZWNpc2lvbiwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVj
aXNpb246OkdyYW50KTsKLSAgICB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCAzYTA3YzEz
OTgxZGRjMzA1NTlmZWE4NGJkMjhmYTJmYmFkZGU1NmRjLi4yOTIxNGJmZTNmYWFiZDY4NDVlM2E5
MTI5NGVhMGJkY2FkNzJhNTQyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcApAQCAtOTgxLDYgKzk4MSw4IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3Rh
dGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAgICAg
Y2xlYXJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucygpOwogICAgIGNsZWFyRE9NQ2FjaGVzKCk7
CiAKKyAgICByZXNldFF1b3RhKCk7CisKICAgICBXS0NvbnRleHRTZXRBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKHBsYXRmb3JtQ29udGV4dCgpLCB0cnVlKTsK
IAogICAgIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwpAQCAtMzE0Miw2ICszMTQ0LDEzIEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQogICAgIHJ1blVudGlsKGNv
bnRleHQuZG9uZSwgbm9UaW1lb3V0KTsKIH0KIAordm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRR
dW90YSgpCit7CisgICAgU3RvcmFnZVZvaWRDYWxsYmFja0NvbnRleHQgY29udGV4dCgqdGhpcyk7
CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlUmVzZXRRdW90YShUZXN0Q29udHJvbGxlcjo6d2Vic2l0
ZURhdGFTdG9yZSgpLCAmY29udGV4dCwgU3RvcmFnZVZvaWRDYWxsYmFjayk7CisgICAgcnVuVW50
aWwoY29udGV4dC5kb25lLCBub1RpbWVvdXQpOworfQorCiBzdHJ1Y3QgRmV0Y2hDYWNoZU9yaWdp
bnNDYWxsYmFja0NvbnRleHQgewogICAgIEZldGNoQ2FjaGVPcmlnaW5zQ2FsbGJhY2tDb250ZXh0
KFRlc3RDb250cm9sbGVyJiBjb250cm9sbGVyLCBXS1N0cmluZ1JlZiBvcmlnaW4pCiAgICAgICAg
IDogdGVzdENvbnRyb2xsZXIoY29udHJvbGxlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaAppbmRleCAxYjI2MWJjZGExYmEwZjIxZjE3ODQ5MDkyYTAyNmM2MGVhYmE5ODQ0
Li5hZDcxYzg2OGMwMmZlNThiYjlhODM5Mjc4ZjBmZGIzZjFhZGViZTNmIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCkBAIC0yNjksNiArMjY5LDggQEAgcHVibGljOgog
ICAgIHZvaWQgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKICAgICB2b2lkIHRlcm1pbmF0ZVNl
cnZpY2VXb3JrZXJQcm9jZXNzKCk7CiAKKyAgICB2b2lkIHJlc2V0UXVvdGEoKTsKKwogICAgIHZv
aWQgcmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzKCk7CiAKICAgICB2b2lkIGNsZWFySW5kZXhl
ZERhdGFiYXNlcygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384667</attachid>
            <date>2019-12-02 16:03:04 -0800</date>
            <delta_ts>2019-12-02 16:35:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203971-20191202160303.patch</filename>
            <type>text/plain</type>
            <size>171784</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGM0OTUzZTM0ZDI1MTg1
YzExMjc2YTQ1ZDA5M2NmN2ZjNjlmODFmYy4uYTYzMjFjZjZiN2IxYWI2YmNjOTMzOWU3NjUxMmQ5
ODBjOTlkODkzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MyBAQAorMjAxOS0xMi0wMiAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVy
c2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3MjkwMzQ5
PgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIEltcGxlbWVu
dCBhIGxvY2stYmFzZWQgU3RvcmFnZVF1b3RhTWFuYWdlciBzbyB0aGF0IHF1b3RhIGNoZWNrIGNh
biBiZSBkb25lIG9uIGRpZmZlcmVudCB0aHJlYWRzLgorICAgICAgICBJZiBzcGFjZSByZXF1ZXN0
IGlzIG1hZGUgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCwgaXQgbmVlZHMgdG8gaG9sZCBhIGxvY2sg
dW50aWwgaXQgaXMgZmluaXNoZWQsIHNvIG5vIHJlcXVlc3QKKyAgICAgICAgZnJvbSBkaWZmZXJl
bnQgdGhyZWFkcyBjYW4gYmUgcGVyZm9ybWVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgIElm
IHNwYWNlIHJlcXVlc3QgaXMgbWFkZSBvbiB0aGUgbWFpbiB0aHJlYWQsIHdlIHdpbGwgZGlzcGF0
Y2ggaXQgdG8gYSBiYWNrZ3JvdW5kIHRocmVhZCBhbmQgc2NoZWR1bGUgYSBjYWxsbGJhY2sKKyAg
ICAgICAgdG8gdGhlIG1haW4gdGhyZWFkIHdoZW4gcmVzdWx0IGlzIGF2YWlsYWJsZSwgc28gdGhl
IG1haW4gdGhyZWFkIHdpbGwgbm90IGJlIGJsb2NrZWQuCisKKyAgICAgICAgQ292ZXJlZCBieSBl
eGlzdGluZyBxdW90YSByZWxhdGVkIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpyZXF1ZXN0U3BhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRpc2tVc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90YVVz
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1
b3RhVXNlcjo6flF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRlU3Bh
Y2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVy
OjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3BhY2VVc2VkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVz
ZXI6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjplbnN1cmVRdW90YVVzZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnN0YXJ0
Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5pc2hDb21wdXRp
bmdTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGVjcmVhc2VTcGFjZVVzZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluY3Jl
YXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluaXRpYWxpemVRdW90YVVzZXIpOiBEZWxl
dGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
T3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNy
ZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OnJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1
dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmdldENv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRl
bGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZXF1ZXN0U3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpmaW5pc2hTcGFjZUluY3JlYXNlVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFD
aGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RT
dG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6Z2V0UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hl
Y2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0Q291bnRBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNo
ZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6Om9wZW5DdXJzb3JBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvckFmdGVyUXVv
dGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
Q29ubmVjdGlvbjo6YWJvcnRUcmFuc2FjdGlvbldpdGhvdXRDYWxsYmFjayk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jk
cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb246OmdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0
ZXJhdGVDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nl
c3NJREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpx
dW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6c3RvcmFnZVF1b3RhTWFuYWdlclNwYWNl
UmVxdWVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6SW5Qcm9j
ZXNzSURCU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0
ZXIpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nl
c3NJREJTZXJ2ZXIuaDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbkJhY2tn
cm91bmRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dHJ5
R3JhbnRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVw
ZGF0ZVF1b3RhQmFzZWRPblVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXNldFF1b3RhRm9yVGVzdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp+U3RvcmFnZVF1b3RhTWFuYWdl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzcGFj
ZVVzYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRv
SW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjphZGRVc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vz
c1BlbmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVv
dGFNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZh
dWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3RhKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90YSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzdGF0ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmg6IFJlbW92ZWQuCisK
IDIwMTktMTItMDIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBEb2N1bWVudDo6c2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lciBzaG91bGQgY2hlY2sg
YG1fZG9tV2luZG93OjpmcmFtZSgpYApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkM2UwYzY4Y2M2MDI2YzJhMTFmMjhl
YTAwNjg5ODNkZTNlMjM3NTgyLi5mZTAwZTMyNGE1M2I1YTVmNzAxOTBkNjg2ZTMwMjBiMDI1NmFk
NzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDE5LTEyLTAyICBTaWh1aSBMaXUgIDxz
aWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENyb3NzLXRocmVhZCB2ZXJzaW9uIFN0b3Jh
Z2VRdW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMzk3MQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTcyOTAzNDk+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHA6IEludHJvZHVjZSBjbGFzcyBTZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlciB0byBtYW5hZ2UgYWxsIAorICAgICAgICBTdG9yYWdlUXVvdGFNYW5hZ2VycyBvZiB0aGUg
c2FtZSBzZXNzaW9uLiAKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRX
ZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFNl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OnJlbW92ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpjcmVhdGVJREJTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6YWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNl
VXNhZ2VGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlc2V0
UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVF1b3RhTWFu
YWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplU3RvcmFn
ZVF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFy
U3RvcmFnZVF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplUXVvdGFVc2Vycyk6IERlbGV0ZWQuCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjpTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjplbnN1cmVP
cmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjpleGlzdGluZ1N0b3JhZ2VRdW90YU1hbmFn
ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVv
dGFNYW5hZ2VyOjpjYWNoZVJvb3RQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjpzZXRJREJSb290UGF0aCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cjo6aWRiUm9vdFBhdGggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
U3RvcmFnZVF1b3RhTWFuYWdlcnM6OmRlZmF1bHRRdW90YSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yYWdlUXVvdGFNYW5hZ2Vyczo6c2V0RGVm
YXVsdFF1b3Rhcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpT
dG9yYWdlUXVvdGFNYW5hZ2Vyczo6bWFuYWdlcnNQZXJPcmlnaW4pOiBEZWxldGVkLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Z2V0RGlyZWN0b3J5U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpkaXNrVXNhZ2UpOiBzdGF0aWMgZnVuY3Rpb24gdG8gZ2V0
IHRoZSBkaXNrIHVzYWdlIG9mIENhY2hlU3RvcmFnZSBnaXZlbiAKKyAgICAgICAgQ2FjaGVTdG9y
YWdlIHJvb3QgZGlyZWN0b3J5LgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2lu
ZTo6cmVxdWVzdFNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6
OnJlYWRDYWNoZXNGcm9tRGlzayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5n
aW5lOjp3cml0ZVNpemVGaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdp
bmU6OnJlYWRTaXplRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5l
Ojppbml0aWFsaXplUXVvdGFVc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6Q2FjaGU6OnB1dCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2Fj
aGU6OnJlbW92ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpDYWNoZXMp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6fkNhY2hlcyk6CisgICAg
ICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjp1cGRhdGVTaXplRmlsZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjppbml0aWFsaXplU2l6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpjbGVhcik6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZXF1ZXN0U3BhY2UpOgorICAgICAgICAoV2ViS2l0
OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6d3JpdGVSZWNvcmQpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVtb3ZlUmVjb3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2Fj
aGVTdG9yYWdlOjpDYWNoZXM6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmg6
CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oOiBBZGQgYSBjYWNoZVN0
b3JhZ2VEaXJlY3RvcnkgcGFyYW1ldGVyIHNvIHdlIGtub3cgdGhlIGRpcmVjb3RyeSBvZiAKKyAg
ICAgICAgQ2FjaGVTdG9yYWdlIHdoZW4gd2Ugc3RhcnQgdXNpbmcgV2Vic2l0ZURhdGFTdG9yZS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAg
ICAgICAgKFdLV2Vic2l0ZURhdGFTdG9yZVJlc2V0UXVvdGEpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaDogQWRkIGEgQyBBUEkgZm9yIHJlc2V0aW5n
IHF1b3RhIGluIFRlc3RSdW5uZXIuCisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OnJlc2V0UXVvdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW06
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMTktMTItMDIgIExvdWllIExpdm9uLUJl
bWVsICA8bGxpdm9uYmVtZWxAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBoZWxwZXIgbWV0aG9k
cyBmb3IgZGVzY3JpcHRpb24gYW5kIGVxdWFsaXR5IHRvIHRleHQgbWFuaXB1bGF0aW9uIFNQSQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKaW5kZXggYTE1MGEzNzM4MjJjYzI2NjJlMDk3NjJlNWY2YzBhZjYyNTAx
MTYwOS4uY2I0ZmUxYWNlZGQ4Nzc3M2Q4YTVkMGZmMmNhZTU0MzY0MmU5ODcyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCkBAIC0xMzg0LDcgKzEzODQsNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgKICAgICBzdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oCiAgICAgc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5h
Z2VyLmgKLSAgICBzdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaAogICAgIHN0b3JhZ2UvU3RvcmFn
ZVR5cGUuaAogCiAgICAgc3R5bGUvU3R5bGVDaGFuZ2UuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCA2MzFjNGNl
NDVkNzVmN2E3OTIzYTMxOWQ5ZjI3ZjM0ODEyNTU2ZThlLi5iYmE2NjIzNDZkZGEzYmUyMzVmZDU3
NTcwNjVkYjhjY2Y3ZTc1ZjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtNDYsMjggKzQ2LDI4IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIAotUmVmPElEQlNlcnZlcj4g
SURCU2VydmVyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBRdW90YU1hbmFnZXJH
ZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitSZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6OmNy
ZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJl
cXVlc3RlciYmIHF1b3RhTWFuYWdlckdldHRlcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBJREJTZXJ2ZXIoc2Vzc2lvbklELCBXVEZNb3ZlKHF1b3RhTWFuYWdlckdldHRlcikpKTsKIH0K
IAotUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgUXVvdGFNYW5hZ2VyR2V0
dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVh
dGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0
b3J5UGF0aCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYgcXVvdGFNYW5hZ2Vy
R2V0dGVyKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlNlcnZlcihzZXNzaW9uSUQs
IGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKSk7CiB9
CiAKLUlEQlNlcnZlcjo6SURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgUXVvdGFN
YW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorSURCU2VydmVyOjpJREJTZXJ2ZXIo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0
ZXImJiBzcGFjZVJlcXVlc3RlcikKICAgICA6IENyb3NzVGhyZWFkVGFza0hhbmRsZXIoIkluZGV4
ZWREYXRhYmFzZSBTZXJ2ZXIiLCBBdXRvZHJhaW5lZFBvb2xGb3JSdW5Mb29wOjpVc2UpCiAgICAg
LCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCi0gICAgLCBtX3F1b3RhTWFuYWdlckdldHRlcihXVEZN
b3ZlKHF1b3RhTWFuYWdlckdldHRlcikpCisgICAgLCBtX3NwYWNlUmVxdWVzdGVyKFdURk1vdmUo
c3BhY2VSZXF1ZXN0ZXIpKQogewogfQogCi1JREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBRdW90
YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitJREJTZXJ2ZXI6OklEQlNlcnZl
cihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3Rv
cnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXImJiBzcGFjZVJlcXVlc3Rl
cikKICAgICA6IENyb3NzVGhyZWFkVGFza0hhbmRsZXIoIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIi
LCBBdXRvZHJhaW5lZFBvb2xGb3JSdW5Mb29wOjpVc2UpCiAgICAgLCBtX3Nlc3Npb25JRChzZXNz
aW9uSUQpCiAgICAgLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aChkYXRhYmFzZURpcmVjdG9yeVBh
dGgpCi0gICAgLCBtX3F1b3RhTWFuYWdlckdldHRlcihXVEZNb3ZlKHF1b3RhTWFuYWdlckdldHRl
cikpCisgICAgLCBtX3NwYWNlUmVxdWVzdGVyKFdURk1vdmUoc3BhY2VSZXF1ZXN0ZXIpKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJTZXJ2ZXIgY3JlYXRlZCBhdCBwYXRoICVzIiwgZGF0YWJh
c2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjp1cGdyYWRlRmlsZXNJZk5lY2Vz
c2FyeSkpOwpAQCAtNjgzLDE1NyArNjgzLDI0IEBAIHZvaWQgSURCU2VydmVyOjpwZXJmb3JtQ2xv
c2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yCiAK
IHZvaWQgSURCU2VydmVyOjpkaWRQZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRhYmFzZXModWludDY0
X3QgY2FsbGJhY2tJRCkKIHsKLSAgICBmb3IgKGF1dG8mIHVzZXIgOiBtX3F1b3RhVXNlcnMudmFs
dWVzKCkpCi0gICAgICAgIHVzZXItPnJlc2V0U3BhY2VVc2VkKCk7Ci0KICAgICBhdXRvIGNhbGxi
YWNrID0gbV9kZWxldGVEYXRhYmFzZUNvbXBsZXRpb25IYW5kbGVycy50YWtlKGNhbGxiYWNrSUQp
OwogICAgIEFTU0VSVChjYWxsYmFjayk7CiAgICAgY2FsbGJhY2soKTsKIH0KIAotSURCU2VydmVy
OjpRdW90YVVzZXI6OlF1b3RhVXNlcihJREJTZXJ2ZXImIHNlcnZlciwgU3RvcmFnZVF1b3RhTWFu
YWdlciogbWFuYWdlciwgQ2xpZW50T3JpZ2luJiYgb3JpZ2luKQotICAgIDogbV9zZXJ2ZXIoc2Vy
dmVyKQotICAgICwgbV9tYW5hZ2VyKG1ha2VXZWFrUHRyKG1hbmFnZXIpKQotICAgICwgbV9vcmln
aW4oV1RGTW92ZShvcmlnaW4pKQotICAgICwgbV9pc0luaXRpYWxpemVkKG1fc2VydmVyLm1fc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCkpCi17Ci0gICAgaWYgKG1hbmFnZXIpCi0gICAgICAgIG1hbmFn
ZXItPmFkZFVzZXIoKnRoaXMpOwotfQotCi1JREJTZXJ2ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNl
cigpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5yZW1vdmVVc2Vy
KCp0aGlzKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6cmVzZXRTcGFjZVVzZWQo
KQotewotICAgIG1fc3BhY2VVc2VkID0gMDsKLQotICAgIGlmICghbV9tYW5hZ2VyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9zZXJ2ZXIubV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVCghbV9pbml0aWFsaXphdGlvbkNhbGxiYWNrKTsKLQotICAgIG1f
aXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgLy8gRG8gYWRkL3JlbW92ZSB0byB0cmlnZ2Vy
IGNhbGwgdG8gd2hlbkluaXRpYWxpemVkLgotICAgIG1fbWFuYWdlci0+cmVtb3ZlVXNlcigqdGhp
cyk7Ci0gICAgbV9tYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6
OlF1b3RhVXNlcjo6Y29tcHV0ZVNwYWNlVXNlZCgpCi17Ci0gICAgcmVzZXRTcGFjZVVzZWQoKTsK
LX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5jcmVhc2VTcGFjZVVzZWQodWludDY0
X3Qgc2l6ZSkKLXsKLSAgICBpZiAoIW1faXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVChtX3NwYWNlVXNlZCArIHNpemUgPiBtX3NwYWNlVXNlZCk7Ci0gICAgbV9zcGFj
ZVVzZWQgKz0gc2l6ZTsKLX0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3Bh
Y2VVc2VkKHVpbnQ2NF90IHNpemUpCi17Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0gICAg
ICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9zcGFjZVVzZWQgPj0gc2l6ZSk7Ci0gICAgbV9zcGFj
ZVVzZWQgLT0gc2l6ZTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6d2hlbkluaXRp
YWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKLXsKLSAgICBpZiAo
bV9pc0luaXRpYWxpemVkKSB7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgbV9pbml0aWFsaXphdGlvbkNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7
Ci0gICAgbV9zZXJ2ZXIuc3RhcnRDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4obV9vcmlnaW4p
OwotfQotCi12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKHVp
bnQ2NF90IHNwYWNlVXNlZCkKLXsKLSAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkIHx8ICFtX2Vz
dGltYXRlZFNwYWNlSW5jcmVhc2UpOwotICAgIG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOwotICAg
IG1faXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBpZiAoYXV0byBjYWxsYmFjayA9IFdURk1v
dmUobV9pbml0aWFsaXphdGlvbkNhbGxiYWNrKSkKLSAgICAgICAgY2FsbGJhY2soKTsKLX0KLQot
SURCU2VydmVyOjpRdW90YVVzZXImIElEQlNlcnZlcjo6ZW5zdXJlUXVvdGFVc2VyKGNvbnN0IENs
aWVudE9yaWdpbiYgb3JpZ2luKQotewotICAgIHJldHVybiAqbV9xdW90YVVzZXJzLmVuc3VyZShv
cmlnaW4sIFt0aGlzLCAmb3JpZ2luXSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFF1b3Rh
VXNlcj4oKnRoaXMsIG1fcXVvdGFNYW5hZ2VyR2V0dGVyKG1fc2Vzc2lvbklELCBvcmlnaW4pLCBD
bGllbnRPcmlnaW4geyBvcmlnaW4gfSk7Ci0gICAgfSkuaXRlcmF0b3ItPnZhbHVlOwotfQotCi12
b2lkIElEQlNlcnZlcjo6c3RhcnRDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xp
ZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAgQVNTRVJUKCFtX3Nlc3Npb25JRC5pc0VwaGVtZXJh
bCgpKTsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JklEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbiwgb3JpZ2luKSk7Ci19Ci0KLXZv
aWQgSURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdp
biYgb3JpZ2luKQorU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gSURCU2VydmVyOjpyZXF1
ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplKQog
ewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgYXV0byBkYXRhYmFzZURpcmVj
dG9yeVBhdGggPSB0aGlzLT5kYXRhYmFzZURpcmVjdG9yeVBhdGhJc29sYXRlZENvcHkoKTsKLSAg
ICBhdXRvIG9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZpZXI6
OmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3JpZ2lu
LmNsaWVudE9yaWdpbiwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCAidjAiKTsKLSAgICBhdXRvIG5l
d1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZpZXI6OmRhdGFiYXNl
RGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3JpZ2luLmNsaWVudE9y
aWdpbiwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCAidjEiKTsKLSAgICBhdXRvIHNpemUgPSBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JEaXJlY3Rvcnkob2xkVmVyc2lvbk9y
aWdpbkRpcmVjdG9yeSkgKyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JE
aXJlY3RvcnkobmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSk7Ci0KLSAgICBwb3N0RGF0YWJhc2VU
YXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpmaW5pc2hD
b21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4sIG9yaWdpbiwgc2l6ZSkpOwotfQotCi12b2lkIElE
QlNlcnZlcjo6ZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9y
aWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2Vy
KG9yaWdpbikuaW5pdGlhbGl6ZVNwYWNlVXNlZChzcGFjZVVzZWQpOwotfQotCi12b2lkIElEQlNl
cnZlcjo6cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0
YXNrU2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNp
c2lvbik+JiYgY2FsbGJhY2spCi17Ci0gICAgYXV0byogcXVvdGFNYW5hZ2VyID0gZW5zdXJlUXVv
dGFVc2VyKG9yaWdpbikubWFuYWdlcigpOwotICAgIGlmICghcXVvdGFNYW5hZ2VyKSB7Ci0gICAg
ICAgIGNhbGxiYWNrKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHRhc2tT
aXplLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgcmV0dXJuIG1fc3BhY2VSZXF1ZXN0ZXIob3Jp
Z2luLCB0YXNrU2l6ZSk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpyZXNldFNwYWNlVXNlZChjb25z
dCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK3VpbnQ2NF90IElEQlNlcnZlcjo6ZGlza1VzYWdlKGNv
bnN0IFN0cmluZyYgcm9vdERpcmVjdG9yeSwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7
Ci0gICAgaWYgKGF1dG8qIHVzZXIgPSBtX3F1b3RhVXNlcnMuZ2V0KG9yaWdpbikpCi0gICAgICAg
IHVzZXItPnJlc2V0U3BhY2VVc2VkKCk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjppbmNyZWFzZVNw
YWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc2l6ZSkKLXsKLSAg
ICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbmNyZWFzZVNwYWNlVXNlZChzaXplKTsKLX0KLQot
dm9pZCBJREJTZXJ2ZXI6OmRlY3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3Jp
Z2luLCB1aW50NjRfdCBzaXplKQotewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmRlY3Jl
YXNlU3BhY2VVc2VkKHNpemUpOwotfQotCi12b2lkIElEQlNlcnZlcjo6aW5jcmVhc2VQb3RlbnRp
YWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXpl
KQotewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmluY3JlYXNlUG90ZW50aWFsU3BhY2VV
c2VkKHRhc2tTaXplKTsKLX0KKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotdm9pZCBJ
REJTZXJ2ZXI6OmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYg
b3JpZ2luLCB1aW50NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdp
bikuZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoc3BhY2VVc2VkKTsKKyAgICBhdXRvIG9sZFZl
cnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZpZXI6OmRhdGFiYXNlRGly
ZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3JpZ2luLmNsaWVudE9yaWdp
biwgcm9vdERpcmVjdG9yeSwgInYwIl9zdHIpOworICAgIGF1dG8gbmV3VmVyc2lvbk9yaWdpbkRp
cmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2
ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCByb290RGlyZWN0
b3J5LCAidjEiX3N0cik7CisgICAgcmV0dXJuIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJh
c2VzU2l6ZUZvckRpcmVjdG9yeShvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KSArIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9uT3JpZ2lu
RGlyZWN0b3J5KTsKIH0KIAogdm9pZCBJREJTZXJ2ZXI6OnVwZ3JhZGVGaWxlc0lmTmVjZXNzYXJ5
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJ2ZXIuaAppbmRleCAzODc3YTA1MzJhNGRkYmZlODgwMTU3MmE2Y2JkMWQ0NDY0ZGZlZGFlLi5m
YzE2MDRmNzY1YWUyNWM2M2EwOWE0YTkzMWQ1MDA0Y2VjMDUwYWMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0zMCw3
ICszMCw2IEBACiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvQ2xpZW50LmgiCiAjaW5jbHVkZSAi
SURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU3RvcmFnZVF1b3RhTWFuYWdlci5o
IgotI2luY2x1ZGUgIlN0b3JhZ2VRdW90YVVzZXIuaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRh
YmFzZS5oIgogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oIgogI2luY2x1
ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0aXZpdHkuaD4KQEAgLTU4LDkgKzU3LDkgQEAgZW51bSBjbGFz
cyBTaG91bGRGb3JjZVN0b3AgOiBib29sIHsgTm8sIFllcyB9OwogCiBjbGFzcyBJREJTZXJ2ZXIg
OiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2ZXI+LCBwdWJsaWMgQ3Jvc3NUaHJlYWRUYXNrSGFu
ZGxlciwgcHVibGljIENhbk1ha2VXZWFrUHRyPElEQlNlcnZlcj4gewogcHVibGljOgotICAgIHVz
aW5nIFF1b3RhTWFuYWdlckdldHRlciA9IFdURjo6RnVuY3Rpb248U3RvcmFnZVF1b3RhTWFuYWdl
ciooUEFMOjpTZXNzaW9uSUQsIGNvbnN0IENsaWVudE9yaWdpbiYpPjsKLSAgICBzdGF0aWMgUmVm
PElEQlNlcnZlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6OlNl
c3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdl
ckdldHRlciYmKTsKKyAgICB1c2luZyBTdG9yYWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXIg
PSBGdW5jdGlvbjxTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbihjb25zdCBDbGllbnRPcmln
aW4mLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCk+OworICAgIHN0YXRpYyBSZWY8SURCU2VydmVy
PiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3Rl
ciYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKFBB
TDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgU3RvcmFn
ZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZWdpc3RlckNvbm5lY3Rpb24oSURCQ29ubmVjdGlvblRvQ2xpZW50Jik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCB1bnJlZ2lzdGVyQ29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQm
KTsKQEAgLTExMSwxNCArMTEwLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2xvc2VBbmREZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2
b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNs
b3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmln
aW5EYXRhPiYsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAg
dm9pZCByZXF1ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYm
KTsKLSAgICB2b2lkIGluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdp
biYsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VV
c2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGlu
Y3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNpemUpOwotICAg
IHZvaWQgZGVjcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6
ZSk7Ci0gICAgdm9pZCByZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mKTsKLQotICAg
IHZvaWQgaW5pdGlhbGl6ZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikgeyBl
bnN1cmVRdW90YVVzZXIob3JpZ2luKTsgfQorICAgIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uIHJlcXVlc3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHVpbnQ2NF90IGRpc2tVc2FnZShjb25zdCBTdHJp
bmcmIHJvb3REaXJlY3RvcnksIGNvbnN0IENsaWVudE9yaWdpbiYpOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB0cnlTdG9wKFNob3VsZEZvcmNlU3RvcCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZXN1bWUoKTsKQEAgLTEyNyw4ICsxMjAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmVEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZSYgZGF0YWJhc2UpIHsgbV9hbGxVbmlxdWVJREJE
YXRhYmFzZXMucmVtb3ZlKGRhdGFiYXNlKTsgfQogCiBwcml2YXRlOgotICAgIElEQlNlcnZlcihQ
QUw6OlNlc3Npb25JRCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOwotICAgIElEQlNlcnZlcihQQUw6
OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFu
YWdlckdldHRlciYmKTsKKyAgICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQsIFN0b3JhZ2VRdW90
YU1hbmFnZXJTcGFjZVJlcXVlc3RlciYmKTsKKyAgICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQs
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
U3BhY2VSZXF1ZXN0ZXImJik7CiAKICAgICBVbmlxdWVJREJEYXRhYmFzZSYgZ2V0T3JDcmVhdGVV
bmlxdWVJREJEYXRhYmFzZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKICAgICAKQEAg
LTE0NSw1MSArMTM4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZURhdGFiYXNlc01vZGlm
aWVkU2luY2VGb3JWZXJzaW9uKFdhbGxUaW1lLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHJl
bW92ZURhdGFiYXNlc1dpdGhPcmlnaW5zRm9yVmVyc2lvbihjb25zdCBWZWN0b3I8U2VjdXJpdHlP
cmlnaW5EYXRhPiYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgY2xhc3MgUXVvdGFVc2VyIGZpbmFs
IDogcHVibGljIFN0b3JhZ2VRdW90YVVzZXIgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFF1b3RhVXNlcihJREJTZXJ2ZXImLCBTdG9yYWdl
UXVvdGFNYW5hZ2VyKiwgQ2xpZW50T3JpZ2luJiYpOwotICAgICAgICB+UXVvdGFVc2VyKCk7Ci0K
LSAgICAgICAgU3RvcmFnZVF1b3RhTWFuYWdlciogbWFuYWdlcigpIHsgcmV0dXJuIG1fbWFuYWdl
ci5nZXQoKTsgfQotCi0gICAgICAgIHZvaWQgc2V0U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNl
ZCkgeyBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsgfQotICAgICAgICB2b2lkIHJlc2V0U3BhY2VV
c2VkKCk7Ci0KLSAgICAgICAgdm9pZCBpbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRf
dCBpbmNyZWFzZSkgeyBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgKz0gaW5jcmVhc2U7IH0KLSAg
ICAgICAgdm9pZCBkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRfdCBkZWNyZWFzZSkK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSA+
PSBkZWNyZWFzZSk7Ci0gICAgICAgICAgICBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgLT0gZGVj
cmVhc2U7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBpbmNyZWFzZVNwYWNlVXNlZCh1aW50NjRf
dCBzaXplKTsKLSAgICAgICAgdm9pZCBkZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKTsK
LQotICAgICAgICB2b2lkIGluaXRpYWxpemVTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKTsK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFs
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOwotICAgICAg
ICAgICAgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlOwotICAg
ICAgICB9Ci0gICAgICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgpIGZpbmFsOwotICAgICAgICB2
b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwot
Ci0gICAgICAgIElEQlNlcnZlciYgbV9zZXJ2ZXI7Ci0gICAgICAgIFdlYWtQdHI8U3RvcmFnZVF1
b3RhTWFuYWdlcj4gbV9tYW5hZ2VyOwotICAgICAgICBDbGllbnRPcmlnaW4gbV9vcmlnaW47Ci0g
ICAgICAgIGJvb2wgbV9pc0luaXRpYWxpemVkIHsgZmFsc2UgfTsKLSAgICAgICAgdWludDY0X3Qg
bV9zcGFjZVVzZWQgeyAwIH07Ci0gICAgICAgIHVpbnQ2NF90IG1fZXN0aW1hdGVkU3BhY2VJbmNy
ZWFzZSB7IDAgfTsKLSAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2luaXRpYWxp
emF0aW9uQ2FsbGJhY2s7Ci0gICAgfTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIFF1b3RhVXNlciYg
ZW5zdXJlUXVvdGFVc2VyKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZvaWQgc3RhcnRDb21w
dXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJik7Ci0gICAgdm9pZCBj
b21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZvaWQg
ZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYsIHVp
bnQ2NF90IHNwYWNlVXNlZCk7Ci0KICAgICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKICAg
ICBIYXNoTWFwPElEQkNvbm5lY3Rpb25JZGVudGlmaWVyLCBSZWZQdHI8SURCQ29ubmVjdGlvblRv
Q2xpZW50Pj4gbV9jb25uZWN0aW9uTWFwOwogICAgIEhhc2hNYXA8SURCRGF0YWJhc2VJZGVudGlm
aWVyLCBzdGQ6OnVuaXF1ZV9wdHI8VW5pcXVlSURCRGF0YWJhc2U+PiBtX3VuaXF1ZUlEQkRhdGFi
YXNlTWFwOwpAQCAtMjAyLDggKzE1MCw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgbV9kYXRh
YmFzZURpcmVjdG9yeVBhdGg7CiAKLSAgICBIYXNoTWFwPENsaWVudE9yaWdpbiwgc3RkOjp1bmlx
dWVfcHRyPFF1b3RhVXNlcj4+IG1fcXVvdGFVc2VyczsKLSAgICBRdW90YU1hbmFnZXJHZXR0ZXIg
bV9xdW90YU1hbmFnZXJHZXR0ZXI7CisgICAgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVz
dGVyIG1fc3BhY2VSZXF1ZXN0ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IDgyNDM0MjI5MGVhZDhjM2UzYzU3MWY2OTVjMjgz
NTc3ZDM3YzJlNmMuLmZmOGFkOGE4MDYwMzYxMDkwM2NiODFmNDdlMjdkZjA1Njc5NTFlYjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMTg5LDU2ICsxODksNiBAQCBzdGF0aWMgaW5s
aW5lIFN0cmluZyBxdW90YUVycm9yTWVzc2FnZU5hbWUoY29uc3QgY2hhciogdGFza05hbWUpCiAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoIkZhaWxlZCB0byAiLCB0YXNrTmFtZSwgIiBpbiBkYXRhYmFz
ZSBiZWNhdXNlIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiIpOwogfQogCi12b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpyZXF1ZXN0U3BhY2UoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24sIHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBjaGFyKiB0YXNrTmFtZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJiBjYWxsYmFjaykKLXsKLSAgICBtX3Nl
cnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUsIFt3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCB0aGlzLCB3ZWFrVHJhbnNhY3Rpb24gPSBtYWtlV2Vh
a1B0cih0cmFuc2FjdGlvbiksIHRhc2tOYW1lLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykgewotICAg
ICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3duRXJyb3IgfSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXdlYWtUcmFuc2FjdGlvbikgewot
ICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3duRXJyb3IgfSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fb3duaW5nUG9pbnRlckZvckNs
b3NlKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgY2xvc2luZyB0aGUgZGF0YWJhc2UsIHRoZXJl
IGlzIG5vIHBvaW50IGluIHRyeWluZyB0byBtb2RpZnkgdGhlIGRhdGFiYXNlIGF0IHRoYXQgcG9p
bnQuCi0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJvciB9KTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZGVjaXNpb24p
IHsKLSAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueToKLSAg
ICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVy
cm9yTWVzc2FnZU5hbWUodGFza05hbWUpIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudDoKLSAgICAgICAgICAg
IGNhbGxiYWNrKElEQkVycm9yIHsgfSk7Ci0gICAgICAgIH07Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OndhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KElEQkVycm9yJiYpPiYmIGNhbGxiYWNrKQotewotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2FjdGlv
biwgMCwgIiIsIFdURk1vdmUoY2FsbGJhY2spKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCB0
YXNrU2l6ZSkKLXsKLSAgICBtX3NlcnZlci0+aW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9p
ZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6ZSk7Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdTcGFj
ZUluY3JlYXNlVGFza3MuY29udGFpbnMoaWRlbnRpZmllcikpOwotICAgIG1fcGVuZGluZ1NwYWNl
SW5jcmVhc2VUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOwotfQotCi12b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlmaWVy
LCBib29sIGlzVGFza1N1Y2Nlc3NmdWwpCi17Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGlu
Z1NwYWNlSW5jcmVhc2VUYXNrcy5maW5kKGlkZW50aWZpZXIpOwotICAgIEFTU0VSVChpdGVyYXRv
ciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZW5kKCkpOwotICAgIG1fc2VydmVyLT5k
ZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGl0ZXJhdG9y
LT52YWx1ZSk7Ci0gICAgaWYgKGlzVGFza1N1Y2Nlc3NmdWwpCi0gICAgICAgIG1fc2VydmVyLT5p
bmNyZWFzZVNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGl0ZXJhdG9yLT52YWx1ZSk7
Ci0gICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLnJlbW92ZShpdGVyYXRvcik7Ci19Ci0K
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiB7
CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1
cnJlbnRPcGVuT3BlcmF0aW9uICglcCkiLCB0aGlzKTsKQEAgLTI0OSwyOSArMTk5LDcgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkKICAgICBp
ZiAoIW1fZGF0YWJhc2VJbmZvKSB7CiAgICAgICAgIGlmICghbV9pc09wZW5pbmdCYWNraW5nU3Rv
cmUpIHsKICAgICAgICAgICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIC8vIFdlIGRvIG5vdCBrbm93IHdoZXRoZXIgdGhpcyBpcyBhbiBleGlzdGluZyBvciBh
IG5ldyBkYXRhYmFzZS4KLSAgICAgICAgICAgIC8vIFdlIHNldCBhIHNtYWxsIGNvc3Qgc28gdGhh
dCBpdCBpcyBub3QgcG9zc2libGUgdG8gb3BlbiBhbiBpbmZpbml0ZSBudW1iZXIgb2YgZGF0YWJh
c2UuCi0gICAgICAgICAgICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmln
aW4oKSwgZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIodGhpcyldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgewotICAgICAgICAgICAgICAgIGlm
ICghd2Vha1RoaXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAg
ICAgIGlmIChtX293bmluZ1BvaW50ZXJGb3JDbG9zZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgICAgICAgICAgc3dpdGNoIChkZWNpc2lvbikgewotICAgICAgICAgICAg
ICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk6IHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBJREJSZXN1bHREYXRhOjplcnJvcihtX2N1cnJlbnRP
cGVuREJSZXF1ZXN0LT5yZXF1ZXN0RGF0YSgpLnJlcXVlc3RJZGVudGlmaWVyKCksIElEQkVycm9y
IHsgUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIm9wZW5EYXRhYmFz
ZSIpIH0pOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0LT5jb25u
ZWN0aW9uKCkuZGlkT3BlbkRhdGFiYXNlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudE9wZW5EQlJlcXVlc3QgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBtX2lz
T3BlbmluZ0JhY2tpbmdTdG9yZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpEZWNpc2lvbjo6R3JhbnQ6Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY2FsbGJhY2tJ
RCA9IHRoaXMtPmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgZGVmYXVsdFdyaXRl
T3BlcmF0aW9uQ29zdCk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMtPnBvc3REYXRhYmFzZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5C
YWNraW5nU3RvcmUsIG1faWRlbnRpZmllciwgY2FsbGJhY2tJRCkpOwotICAgICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3Rv
cmUsIG1faWRlbnRpZmllcikpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC04MzUsMTQgKzc2MywyMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphZGRPcGVuRGF0YWJh
c2VDb25uZWN0aW9uKFJlZjxVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3RpbwogICAgIG1fb3BlbkRh
dGFiYXNlQ29ubmVjdGlvbnMuYWRkKGFkb3B0UmVmKGNvbm5lY3Rpb24ubGVha1JlZigpKSk7CiB9
CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKK3Zv
aWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0
b3JlICglcCkiLCB0aGlzKTsKIAotICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmUpOwotCiAgICAg
SURCRGF0YWJhc2VJbmZvIGRhdGFiYXNlSW5mbzsKKyAgICBtX29yaWdpbiA9IGlkZW50aWZpZXIu
b3JpZ2luKCk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2Vy
dmVyLT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4sIGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QpOwor
ICAgIGlmIChkZWNpc2lvbiA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkg
eworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5m
bywgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIk9w
ZW5CYWNraW5nU3RvcmUiKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VCghbV9iYWNraW5nU3RvcmUpOwogICAgIElEQkVycm9yIGVycm9yOwogICAgIHsKICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKQEAgLTg1MiwxMCArNzg3LDEw
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyCiAgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3Rv
cmUtPmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbywgbG9ja2VyKTsKICAg
ICB9CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5m
bywgZXJyb3IsICB0YXNrSWRlbnRpZmllcikpOworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJh
Y2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywg
Y29uc3QgSURCRXJyb3ImIGVycm9yLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKK3ZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZv
JiBpbmZvLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQmFja2luZ1N0b3JlIik7CkBAIC04NjYsOCArODAxLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNv
bnN0IEkKICAgICBBU1NFUlQobV9pc09wZW5pbmdCYWNraW5nU3RvcmUpOwogICAgIG1faXNPcGVu
aW5nQmFja2luZ1N0b3JlID0gZmFsc2U7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh0
YXNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwotCiAgICAgaWYgKG1faGFyZENsb3NlZEZv
clVzZXJEZWxldGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtODc5LDMzICs4MTIsMjIgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3Jl
Iik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVz
dGltYXRlU2l6ZShpbmZvKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXpl
LCAiY3JlYXRlT2JqZWN0U3RvcmUiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgaW5m
bywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0g
ICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2Vl
ZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5jcmVhdGVPYmplY3RTdG9y
ZUFmdGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIGluZm8sIFdURk1vdmUoY2Fs
bGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNy
ZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVJ
bmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFF
cnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVy
cm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUp
OwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJh
bnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbywgIHF1b3RhRXJyb3IpKTsKKyAgICBw
b3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9u
LmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0
IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCit2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKQogewogICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUiKTsKIAotICAgIGlmICghcXVvdGFF
cnJvci5pc051bGwoKSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVP
YmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBxdW90YUVycm9yLCBpbmZvKSk7CisgICAg
Ly8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlv
bkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5mbyk7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3Bh
Y2UobV9vcmlnaW4sIHRhc2tTaXplKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6
RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9y
ZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3Rh
RXJyb3JNZXNzYWdlTmFtZSgiQ3JlYXRlT2JqZWN0U3RvcmUiKSksIGluZm8pKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtOTI0LDcgKzg0Niw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1h
aW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUiKTsKIAot
ICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IuaXNO
dWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkKICAgICAgICAgbV9kYXRhYmFzZUluZm8t
PmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAKQEAgLTkzNiwxNyArODU3LDYgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3Jl
Iik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3Ro
aXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVOYW1lLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+ZGVsZXRlT2JqZWN0U3RvcmVBZnRl
clF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTmFtZSwgV1RGTW92ZShjYWxsYmFj
aykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RT
dG9yZUFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJh
Y2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1
cm47CkBAIC05OTEsMjggKzkwMSwxNSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVP
YmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmUiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBk
ZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgbmV3TmFtZS5zaXplSW5CeXRlcygpOwotICAgIHJl
cXVlc3RTcGFjZSh0cmFuc2FjdGlvbiwgdGFza1NpemUsICJyZW5hbWVPYmplY3RTdG9yZSIsIFt0
aGlzLCB0YXNrU2l6ZSwgJnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05h
bWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewot
ICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNl
ZWRlZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+cmVuYW1lT2JqZWN0U3Rv
cmVBZnRlclF1b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIG5ld05hbWUsIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNr
KHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05h
bWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQot
ewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RG
TW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSURCRXJyb3IgZXJyb3IgPSBxdW90YUVycm9yOworICAgIElEQkVycm9yIGVycm9yOwog
ICAgIGF1dG8qIGluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3Rv
cmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICBpZiAoIWluZm8pCiAgICAgICAgIGVycm9y
ID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJBdHRlbXB0IHRvIHJlbmFtZSBub24tZXhpc3Rh
bnQgb2JqZWN0IHN0b3JlIl9zIH07CiAKLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxi
YWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUs
IGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKIH0KIApAQCAtMTAyMSw4ICs5MTgsMTAgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY28KICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9i
amVjdFN0b3JlIik7CiAKLSAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3RE
YXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIs
IGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKKyAgICAvLyBRdW90YSBj
aGVjay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5l
d05hbWUuc2l6ZUluQnl0ZXMoKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29y
aWdpbiwgdGFza1NpemUpID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7
CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxs
YmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1l
c3NhZ2VOYW1lKCJSZW5hbWVPYmplY3RTdG9yZSIpKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBu
ZXdOYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwNDAsNyArOTM5LDYgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5h
bWVPYmplY3RTdG9yZSIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJ
ZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAg
ICAgICBtX2RhdGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBuZXdOYW1lKTsKIApAQCAtMTA1MiwxNyArOTUwLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6Y2xlYXJPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIo
bWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUiKTsKIAotICAgIHdhaXRG
b3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9u
LCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1
dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICB0aGlzLT5jbGVhck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2so
dHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgV1RGTW92ZShjYWxsYmFjaykpOwot
ICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlQWZl
dFF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKLXsK
ICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1v
dmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAg
LTEwOTcsMzMgKzk4NCwyMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleChV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgYwogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRh
YmFzZTo6Y3JlYXRlSW5kZXgiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVP
cGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGluZm8pOwotICAgIHJlcXVlc3RTcGFjZSh0cmFu
c2FjdGlvbiwgdGFza1NpemUsICJjcmVhdGVJbmRleCIsIFt0aGlzLCB0YXNrU2l6ZSwgJnRyYW5z
YWN0aW9uLCBpbmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9
IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJv
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNyZWF0
ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgaW5mbywgV1RGTW92
ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJJbmRleEluZm8mIGlu
Zm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQot
ewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RG
TW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7Ci0gICAg
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZv
KCkuaWRlbnRpZmllcigpLCBpbmZvLCBxdW90YUVycm9yKSk7CisgICAgcG9zdERhdGFiYXNlVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUNyZWF0ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigp
LCBpbmZvKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRl
eCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8sIGNvbnN0
IElEQkVycm9yJiBxdW90YUVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNy
ZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5m
bykKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAi
KGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4Iik7CiAKLSAgICBpZiAo
IXF1b3RhRXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
Q3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgcXVvdGFFcnJvciwgaW5mbykpOworICAg
IGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXpl
KGluZm8pOworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCB0YXNrU2l6
ZSkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9z
dERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgSURC
RXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIkNyZWF0ZUlu
ZGV4IikpLCBpbmZvKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTExNDgsOCArMTAy
Myw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtQ3JlYXRlSW5kZXgiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNr
SWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwotCiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7
CiAgICAgICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7CiAgICAgICAgIGF1dG8qIG9iamVjdFN0
b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShpbmZv
Lm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKQEAgLTExNjUsMTcgKzEwMzgsNiBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgdQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXgiKTsKIAotICAg
IHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJv
ci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZUluZGV4QWZ0
ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFt
ZSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpkZWxldGVJbmRleEFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIGluZGV4TmFtZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRf
dCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2sp
KTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTEyMjksMjMgKzEw
OTEsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFt
ZUluZGV4Iik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29z
dCArIG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24s
IHRhc2tTaXplLCAicmVuYW1lSW5kZXgiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAo
IWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7
Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2so
dGFza1NpemUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRp
ZmllciwgbmV3TmFtZSwgV1RGTW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0
X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJF
cnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIElEQkVycm9yIGVycm9yID0gcXVvdGFFcnJvcjsKKyAg
ICBJREJFcnJvciBlcnJvcjsKICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNl
SW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsK
ICAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykKICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVu
a25vd25FcnJvciwgIkF0dGVtcHQgdG8gcmVuYW1lIGluZGV4IGluIG5vbi1leGlzdGFudCBvYmpl
Y3Qgc3RvcmUiX3MgfTsKQEAgLTEyNTQsNyArMTEwNCw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnJlbmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJ
REJECiAgICAgaWYgKCFpbmRleEluZm8pCiAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IsICJBdHRlbXB0IHRvIHJlbmFtZSBub24tZXhpc3RhbnQgaW5kZXgiX3MgfTsKIAot
ICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBv
c3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygp
LmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5l
d05hbWUsIGVycm9yKSk7CiB9CiAKQEAgLTEyNjMsOCArMTExMiwxMCBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJRAogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAotICAg
IGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
UmVuYW1lSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisg
ICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBuZXdOYW1lLnNp
emVJbkJ5dGVzKCk7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4sIHRh
c2tTaXplKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAg
ICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVy
LCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiUmVu
YW1lSW5kZXgiKSksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdO
YW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyODIsNyArMTEzMyw2IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1l
SW5kZXgiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmll
ciwgZXJyb3IuaXNOdWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAgICAgICBh
dXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2Jq
ZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICAgICAgQVNTRVJUKG9iamVjdFN0
b3JlSW5mbyk7CkBAIC0xMjk2LDUyICsxMTQ2LDM5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
CiAgICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CiB9
CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEs
IGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhl
ZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxi
YWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoY29uc3QgSURC
UmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25z
dCBJREJWYWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92
ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJh
c2U6OnB1dE9yQWRkIik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0
aW9uQ29zdCArIGVzdGltYXRlU2l6ZShrZXlEYXRhKSArIGVzdGltYXRlU2l6ZSh2YWx1ZSk7Ci0g
ICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKLSAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0
YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShyZXF1ZXN0RGF0YS5vYmplY3RT
dG9yZUlkZW50aWZpZXIoKSk7Ci0gICAgaWYgKG9iamVjdFN0b3JlKQotICAgICAgICB0YXNrU2l6
ZSArPSBvYmplY3RTdG9yZS0+aW5kZXhOYW1lcygpLnNpemUoKSAqIHRhc2tTaXplOwotCi0gICAg
cmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNrU2l6ZSwgInB1dE9yQWRkIiwgW3RoaXMsIHRh
c2tTaXplLCByZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayksIG92ZXJ3cml0ZU1vZGVdKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBp
ZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9y
KSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5wdXRPckFkZEFmdGVyUXVvdGFD
aGVjayh0YXNrU2l6ZSwgcmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2Rl
LCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwdXRPckFkZEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgY29u
c3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRh
LCBjb25zdCBJREJWYWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVN
b2RlIG92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJy
b3ImIHF1b3RhRXJyb3IpCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJh
Y2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQs
IHRhc2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJl
cXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9y
ZUlkZW50aWZpZXIoKSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIHF1b3RhRXJyb3Ip
KTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRh
LnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZp
ZXIoKSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUpKTsKIH0KIAotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29u
c3QgSURCVmFsdWUmIG9yaWdpbmFsUmVjb3JkVmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVP
dmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQor
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYg
a2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIG9yaWdpbmFsUmVjb3JkVmFsdWUsIEluZGV4ZWREQjo6
T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1QdXRPckFkZCIpOwogCi0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAg
ICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKLQogICAgIElEQktleURhdGEgdXNlZEtl
eTsKICAgICBJREJFcnJvciBlcnJvcjsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwoKSkg
ewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVu
dGlmaWVyLCBxdW90YUVycm9yLCB1c2VkS2V5KSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAg
YXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUo
a2V5RGF0YSkgKyBlc3RpbWF0ZVNpemUob3JpZ2luYWxSZWNvcmRWYWx1ZSk7CisgICAgQVNTRVJU
KG1fZGF0YWJhc2VJbmZvKTsKKyAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZv
LT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAg
IGlmIChvYmplY3RTdG9yZSkKKyAgICAgICAgdGFza1NpemUgKz0gb2JqZWN0U3RvcmUtPmluZGV4
TmFtZXMoKS5zaXplKCkgKiB0YXNrU2l6ZTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFj
ZShtX29yaWdpbiwgdGFza1NpemUpID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpE
ZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFj
a0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3Nh
Z2VOYW1lKCJQdXRPckFkZCIpKSwgdXNlZEtleSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVu
dGlmaWVyKTsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3Jl
TG9jayk7CiAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKQEAgLTE0MTgsMjYgKzEyNTUs
MTQgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSUQKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1QdXRPckFkZCIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVu
dGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgcGVyZm9ybUtleURhdGFDYWxsYmFjayhjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHRLZXkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpnZXRSZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0UmVjb3Jk
RGF0YSYgZ2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3RE
YXRhLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiBnZXRSZWNvcmREYXRhLCBHZXRSZXN1bHRDYWxs
YmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJ
bmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZCIpOwogCi0gICAg
d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0
RGF0YSwgZ2V0UmVjb3JkRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYm
IGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAg
ICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Z2V0UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKHJlcXVl
c3REYXRhLCBnZXRSZWNvcmREYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldFJlY29yZERhdGEmIGdldFJl
Y29yZERhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNh
bGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwog
ICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ0OCwyMiArMTI3Mywx
MSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29u
c3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYQogICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0
UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwg
cmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGdldFJlY29yZERhdGEua2V5UmFu
Z2VEYXRhLCBnZXRSZWNvcmREYXRhLnR5cGUpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6Z2V0QWxsUmVjb3JkcyhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRBbGxSZWNv
cmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIEdldEFsbFJlc3VsdHNDYWxsYmFjayBjYWxsYmFj
aykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHMoY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVj
b3Jkc0RhdGEsIEdldEFsbFJlc3VsdHNDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0
YWJhc2U6OmdldEFsbFJlY29yZHMiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0
aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAg
ICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3Zl
KGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0
aGlzLT5nZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCBnZXRBbGxSZWNv
cmRzRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29y
ZHNEYXRhLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3Qg
Y2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7
CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xNDc3LDcgKzEyOTEs
NiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUgogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkIik7CiAKICAgICBBU1NFUlQobV9iYWNr
aW5nU3RvcmUpOwotCiAgICAgSURCR2V0UmVzdWx0IHJlc3VsdDsKICAgICBJREJFcnJvciBlcnJv
cjsKICAgICB7CkBAIC0xNTE4LDcgKzEzMzEsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtR2V0QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxS
ZWNvcmRzIik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotCiAgICAgSURCR2V0QWxs
UmVzdWx0IHJlc3VsdDsKICAgICBJREJFcnJvciBlcnJvcjsKICAgICB7CkBAIC0xNTM3LDIyICsx
MzQ5LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRBbGxSZWNvcmRz
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uCiAgICAgcGVyZm9ybUdldEFsbFJlc3Vs
dHNDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpOwogfQogCi12b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJ
REJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Z2V0Q291bnQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxiYWNrIGNhbGxiYWNrKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWlu
KSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3Bh
Y2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIHJhbmdlLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAg
ICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVy
cm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlz
LT5nZXRDb3VudEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgcmFuZ2UsIFdURk1vdmUoY2Fs
bGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnRB
ZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJ
REJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxs
YmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU4NSwy
MiArMTM4NiwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0Q291bnQo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIHBlcmZvcm1Db3VudENh
bGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGNvdW50KTsKIH0KIAotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQordm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEsIEVycm9yQ2Fs
bGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0co
SW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQiKTsKIAot
ICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVx
dWVzdERhdGEsIGtleVJhbmdlRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0
byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAg
ICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhyZXF1
ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25z
dCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5
UmFuZ2VEYXRhLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAg
IGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTYyOSwyMiArMTQxOSwxMSBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29ucwogICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxi
YWNrSWRlbnRpZmllciwgZXJyb3IpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVu
Q3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8sIEdl
dFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1
cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkN1cnNvcklu
Zm8mIGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6b3BlbkN1cnNvciIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJh
bnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051
bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+b3BlbkN1cnNvckFmdGVy
UXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgaW5mbywgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0p
OwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNr
KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCQ3Vyc29ySW5mbyYg
aW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJh
Y2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAg
aWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xNjc0LDIyICsxNDUzLDExIEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1PcGVuQ3Vyc29yKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBwZXJmb3JtR2V0UmVzdWx0Q2FsbGJhY2soY2Fs
bGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6aXRlcmF0ZUN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJJdGVyYXRl
Q3Vyc29yRGF0YSYgZGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0
RGF0YSwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEsIEdldFJlc3VsdENhbGxiYWNr
IGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvciIpOwogCi0gICAg
d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0
RGF0YSwgZGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2Fs
bGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy0+aXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0
YSwgZGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEsIEdldFJl
c3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9y
ZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJh
Y2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc2NywxNyArMTUzNSw2IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0CiAKICAgICBBU1NFUlQodHJhbnNhY3Rpb24uZGF0YWJhc2VDb25uZWN0aW9u
KCkuZGF0YWJhc2UoKSA9PSB0aGlzKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0
aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Y29tbWl0VHJhbnNhY3Rpb25B
ZnRlclF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3Rh
Q2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIEVycm9yQ2Fs
bGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJh
Y2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQog
ICAgICAgICByZXR1cm47CkBAIC0xODM1LDI0ICsxNTkyLDEzIEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsCiAgICAgdHJhbnNhY3Rpb25Db21wbGV0ZWQobV9maW5pc2hpbmdUcmFuc2FjdGlvbnMu
dGFrZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6YWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgV2FpdEZvclBlbmRpbmdUYXNrcyB3YWl0Rm9yUGVuZGluZ1Rhc2tzLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbihV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgRXJyb3JDYWxsYmFjayBj
YWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24gLSAlcyIsIHRy
YW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwogCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigpLmRhdGFi
YXNlKCkgPT0gdGhpcyk7CiAKLSAgICBpZiAod2FpdEZvclBlbmRpbmdUYXNrcyA9PSBXYWl0Rm9y
UGVuZGluZ1Rhc2tzOjpZZXMpIHsKLSAgICAgICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRp
b24odHJhbnNhY3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rpb24sIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBpZiAoIWVycm9y
LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMt
PmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIFdhaXRGb3JQZW5kaW5nVGFza3M6Ok5vLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZN
b3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IGMzNThkZTQ5MzQ3NmI0NDEzZGU0MmNhNjQxMTYyMzQ1
NzZlZTZhNTUuLmViZmMxYzUwZjdhODgwODllZTZiZjI0Y2I2OTU3NDQ5OTg4MDkzODAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oCkBAIC00NCw2ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorc3RydWN0IENsaWVudE9yaWdpbjsKIGNsYXNzIElEQkVycm9yOwogY2xhc3MgSURCR2V0
QWxsUmVzdWx0Owogc3RydWN0IElEQkdldFJlY29yZERhdGE7CkBAIC04OSwxNyArOTAsMTUgQEAg
cHVibGljOgogICAgIHZvaWQgY3JlYXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYsIGNvbnN0IElEQkluZGV4SW5mbyYsIEVycm9yQ2FsbGJhY2spOwogICAgIHZvaWQgZGVsZXRl
SW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIEVycm9yQ2FsbGJhY2spOwogICAg
IHZvaWQgcmVuYW1lSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2spOwotICAgIHZvaWQgcHV0T3JBZGQoVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURC
S2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0
ZU1vZGUsIEtleURhdGFDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRSZWNvcmQoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVj
b3JkRGF0YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGdldEFsbFJlY29yZHMoVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3Qg
SURCR2V0QWxsUmVjb3Jkc0RhdGEmLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOwotICAgIHZvaWQg
Z2V0Q291bnQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3RE
YXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgQ291bnRDYWxsYmFjayk7Ci0gICAgdm9pZCBk
ZWxldGVSZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVl
c3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9p
ZCBvcGVuQ3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1
ZXN0RGF0YSYsIGNvbnN0IElEQkN1cnNvckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAg
dm9pZCBpdGVyYXRlQ3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJ
REJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwgR2V0UmVzdWx0Q2Fs
bGJhY2spOworICAgIHZvaWQgcHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJ
REJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zlcndy
aXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrKTsKKyAgICB2b2lkIGdldFJlY29yZChjb25zdCBJREJS
ZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdldFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7
CisgICAgdm9pZCBnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURC
R2V0QWxsUmVjb3Jkc0RhdGEmLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOworICAgIHZvaWQgZ2V0
Q291bnQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBDb3Vu
dENhbGxiYWNrKTsKKyAgICB2b2lkIGRlbGV0ZVJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEVycm9yQ2FsbGJhY2spOworICAgIHZvaWQgb3BlbkN1
cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkN1cnNvckluZm8mLCBHZXRSZXN1
bHRDYWxsYmFjayk7CisgICAgdm9pZCBpdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRh
JiwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CiAgICAg
dm9pZCBjb21taXRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgRXJy
b3JDYWxsYmFjayk7Ci0KLSAgICBlbnVtIGNsYXNzIFdhaXRGb3JQZW5kaW5nVGFza3MgeyBObywg
WWVzIH07Ci0gICAgdm9pZCBhYm9ydFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24mLCBXYWl0Rm9yUGVuZGluZ1Rhc2tzLCBFcnJvckNhbGxiYWNrKTsKKyAgICB2b2lkIGFi
b3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJh
Y2spOwogCiAgICAgdm9pZCBkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoVW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uJiwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIpOwogICAgIHZvaWQgdHJhbnNhY3Rpb25EZXN0cm95ZWQoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYpOwpAQCAtMTQwLDM3ICsxMzksMjAgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgc2NoZWR1bGVTaHV0ZG93bkZvckNsb3NlKCk7CiAKLSAgICB2b2lkIGNyZWF0ZU9i
amVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgRXJyb3JDYWxsYmFj
aywgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90
YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVy
cm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBjcmVhdGVJbmRleEFmdGVy
UXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYsIGNvbnN0IElEQkluZGV4SW5mbyYsIEVycm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJik7
Ci0gICAgdm9pZCByZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwg
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVy
cm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwdXRPckFkZEFmdGVyUXVv
dGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJ
REJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zlcndy
aXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgZGVs
ZXRlUmVjb3JkQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiwgRXJyb3JDYWxsYmFjayk7Ci0KLSAgICB2b2lkIGRlbGV0ZU9iamVjdFN0
b3JlQWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBT
dHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBjbGVhck9i
amVjdFN0b3JlQWZldFF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBk
ZWxldGVJbmRleEFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmLCBFcnJvckNhbGxi
YWNrKTsKLSAgICB2b2lkIGdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0
RGF0YSYsIGNvbnN0IElEQkdldFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAg
dm9pZCBnZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwg
Y29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOwotICAg
IHZvaWQgZ2V0Q291bnRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25z
dCBJREJLZXlSYW5nZURhdGEmLCBDb3VudENhbGxiYWNrKTsKLSAgICB2b2lkIG9wZW5DdXJzb3JB
ZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJDdXJzb3JJbmZv
JiwgR2V0UmVzdWx0Q2FsbGJhY2spOwotICAgIHZvaWQgaXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFD
aGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwg
R2V0UmVzdWx0Q2FsbGJhY2spOwotICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3Rh
Q2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwotCiAg
ICAgLy8gRGF0YWJhc2UgdGhyZWFkIG9wZXJhdGlvbnMKICAgICB2b2lkIGRlbGV0ZUJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKLSAgICB2b2lkIG9wZW5CYWNraW5n
U3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgdWludDY0X3QgdGFza0lkZW50aWZp
ZXIpOworICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZp
ZXImKTsKICAgICB2b2lkIHBlcmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyKTsKICAgICB2b2lkIHBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIpOwogICAgIHZvaWQgYmVnaW5UcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKGNvbnN0
IElEQlRyYW5zYWN0aW9uSW5mbyYpOwotICAgIHZvaWQgcGVyZm9ybUNyZWF0ZU9iamVjdFN0b3Jl
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIGNvbnN0
IElEQkVycm9yJik7CisgICAgdm9pZCBwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBwZXJm
b3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICB2b2lkIHBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIHBlcmZvcm1D
bGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKKyAgICB2
b2lkIHBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJ
bmRleEluZm8mKTsKICAgICB2b2lkIHBlcmZvcm1EZWxldGVJbmRleCh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRl
bnRpZmllcik7CiAgICAgdm9pZCBwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lk
IHBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIEluZGV4
ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBjb25zdCBJREJFcnJvciYpOworICAgIHZv
aWQgcGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5k
ZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOwogICAgIHZvaWQgcGVyZm9ybUdldFJl
Y29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElEQkdldFJlY29yZERhdGFUeXBlKTsKICAgICB2
b2lkIHBlcmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElE
QkdldEFsbFJlY29yZHNEYXRhJik7CiAgICAgdm9pZCBwZXJmb3JtR2V0SW5kZXhSZWNvcmQodWlu
dDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50
NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBjb25zdCBJ
REJLZXlSYW5nZURhdGEmKTsKQEAgLTE4Nyw3ICsxNjksNyBAQCBwcml2YXRlOgogCiAgICAgLy8g
TWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAgICAgdm9pZCBkaWREZWxldGVCYWNraW5nU3RvcmUodWlu
dDY0X3QgZGVsZXRlZFZlcnNpb24pOwotICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25z
dCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IHRhc2tJZGVudGlm
aWVyKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZv
JiwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIGRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9y
ZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURC
T2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3Rv
cmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsKQEAgLTI0Niwx
MSArMjI4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1heWJlRmluaXNoSGFyZENsb3NlKCk7CiAg
ICAgYm9vbCBpc0RvbmVXaXRoSGFyZENsb3NlKCk7CiAKLSAgICB2b2lkIHJlcXVlc3RTcGFjZShV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0IGNo
YXIqIGVycm9yTWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJik7
Ci0gICAgdm9pZCB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJik7Ci0g
ICAgdm9pZCBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2
NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90
IGlkZW50aWZpZXIsIGJvb2wgaXNUYXNrU3VjY2Vzc2Z1bCk7Ci0KICAgICB2b2lkIGNsZWFyVHJh
bnNhY3Rpb25zT25Db25uZWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYpOwogCiAg
ICAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7CkBA
IC0zMTEsOSArMjg4LDkgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8SURCUmVzb3VyY2VJZGVu
dGlmaWVyPiBtX2N1cnNvclByZWZldGNoZXM7CiAKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCB1aW50
NjRfdD4gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzOwotCiAgICAgYm9vbCBtX2lzU3VzcGVu
ZGVkIHsgZmFsc2UgfTsKKworICAgIENsaWVudE9yaWdpbiBtX29yaWdpbjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0
aW9uLmNwcAppbmRleCBmZTkxMGZhZjk4NDlkYzJiMDQ3ZWJhOTdhZTU2NjU3OWZkMTNkMjEwLi44
MDA2MDY5ODgzNDRmMWIzOWI4YjlmYmMxOTk5ODIxZDgyNjIxYjg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6YWJvcnRUcmFuc2FjdGlvbldpdGhvdXRDYWxsYmFj
ayhVbmlxdWVJREJEYXRhYgogICAgIGlmICghbV9kYXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIG1fZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIFVuaXF1
ZUlEQkRhdGFiYXNlOjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpObywgW3RoaXMsIHByb3RlY3RlZFRo
aXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7CisgICAgbV9kYXRh
YmFzZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHByb3RlY3RlZFRoaXMs
IHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7CiAgICAgICAgIEFTU0VS
VChtX3RyYW5zYWN0aW9uTWFwLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwogICAg
ICAgICBtX3RyYW5zYWN0aW9uTWFwLnJlbW92ZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAg
IH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCmluZGV4
IGE4ZDJiZGM3NDBjODk3MWE1YTdjMDRlNzZjMDMyOWI0NzZhZGM0MjYuLjc2ZWRkYzQ1YjA3NmJl
M2U2OTcyODQ1ZDExZTIxNTBiNmYwN2Q4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbi5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uOjphYm9ydCgpCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VD
b25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAKLSAgICBkYXRh
YmFzZS0+YWJvcnRUcmFuc2FjdGlvbigqdGhpcywgVW5pcXVlSURCRGF0YWJhc2U6OldhaXRGb3JQ
ZW5kaW5nVGFza3M6OlllcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShh
dXRvJiBlcnJvcikgeworICAgIGRhdGFiYXNlLT5hYm9ydFRyYW5zYWN0aW9uKCp0aGlzLCBbdGhp
cywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKGF1dG8mIGVycm9yKSB7CiAgICAgICAg
IExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCAoY2Fs
bGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0yODYsNyArMjg2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRP
ckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGMKICAgICBhdXRvIGRhdGFi
YXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFi
YXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+cHV0T3JBZGQoKnRoaXMsIHJlcXVlc3REYXRhLCBr
ZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIGtl
eSkgeworICAgIGRhdGFiYXNlLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUs
IG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVx
dWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsKICAgICAgICAg
TE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkIChj
YWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTMwNyw3ICszMDcsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Omdl
dFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAgYXV0byBkYXRh
YmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRh
YmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmdldFJlY29yZCgqdGhpcywgcmVxdWVzdERhdGEs
IGdldFJlY29yZERhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVx
dWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgeworICAg
IGRhdGFiYXNlLT5nZXRSZWNvcmQocmVxdWVzdERhdGEsIGdldFJlY29yZERhdGEsIFt0aGlzLCB3
ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBj
b25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkIChjYWxsYmFjaykiKTsKICAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMyOCw3ICszMjgsNyBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMoY29uc3Qg
SURCUmVxdWVzdERhdGEmIHJlcXVlc3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNl
Q29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAg
IGRhdGFiYXNlLT5nZXRBbGxSZWNvcmRzKCp0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jk
c0RhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFd
KGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgeworICAgIGRhdGFi
YXNlLT5nZXRBbGxSZWNvcmRzKHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3Is
IGNvbnN0IElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIs
ICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNvcmRzIChjYWxsYmFjayki
KTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM0OSw3
ICszNDksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50KGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgYwogICAgIGF1dG8gZGF0YWJhc2UgPSBt
X2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwog
ICAgIAotICAgIGRhdGFiYXNlLT5nZXRDb3VudCgqdGhpcywgcmVxdWVzdERhdGEsIGtleVJhbmdl
RGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0o
YXV0byYgZXJyb3IsIHVpbnQ2NF90IGNvdW50KSB7CisgICAgZGF0YWJhc2UtPmdldENvdW50KHJl
cXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCB1aW50NjRfdCBjb3VudCkgewogICAgICAg
ICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQg
KGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMzcwLDcgKzM3MCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
ZGVsZXRlUmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0CiAgICAgYXV0byBk
YXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChk
YXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmRlbGV0ZVJlY29yZCgqdGhpcywgcmVxdWVz
dERhdGEsIGtleVJhbmdlRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMp
LCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+ZGVsZXRlUmVjb3Jk
KHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRleGVk
REIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmQgKGNhbGxiYWNr
KSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzkx
LDcgKzM5MSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNv
cihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAgYXV0byBkYXRhYmFzZSA9
IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7
CiAgICAgCi0gICAgZGF0YWJhc2UtPm9wZW5DdXJzb3IoKnRoaXMsIHJlcXVlc3REYXRhLCBpbmZv
LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRv
JiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRhYmFzZS0+b3Bl
bkN1cnNvcihyZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVz
dWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpvcGVuQ3Vyc29yIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTQxMiw3ICs0MTIsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVl
c3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2Uo
KTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5pdGVyYXRlQ3Vy
c29yKCp0aGlzLCByZXF1ZXN0RGF0YSwgZGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYg
cmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPml0ZXJhdGVDdXJzb3IocmVxdWVzdERhdGEsIGRhdGEs
IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8m
IGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvciAoY2FsbGJh
Y2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNz
SURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
blByb2Nlc3NJREJTZXJ2ZXIuY3BwCmluZGV4IDkxMTFmNTk3OGUzYjgwNjE4NTVjMjBmNWFmYWE1
YjY1NWRjY2VhMjEuLmQ2NWJkNWE3NjcyYTM4MDU2NzE2ZDM2YTVjY2IxMzhmOTFiMzFhOTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nl
c3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC02NCwzMCArNjQsMzUgQEAgSW5Qcm9jZXNz
SURCU2VydmVyOjp+SW5Qcm9jZXNzSURCU2VydmVyKCkgPSBkZWZhdWx0OwogU3RvcmFnZVF1b3Rh
TWFuYWdlciogSW5Qcm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIoY29uc3QgQ2xpZW50T3Jp
Z2luJiBvcmlnaW4pCiB7CiAgICAgcmV0dXJuIG1fcXVvdGFNYW5hZ2Vycy5lbnN1cmUob3JpZ2lu
LCBbXSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFN0b3JhZ2VRdW90YU1hbmFnZXI+KFN0
b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpLCBbXSh1aW50NjRfdCBxdW90YSwgdWlu
dDY0X3QgY3VycmVudFNwYWNlLCB1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBhdXRvIGNhbGxiYWNr
KSB7CisgICAgICAgIHJldHVybiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUoU3RvcmFnZVF1
b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCksIFtdIHsKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9LCBbXSh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3VycmVudFNwYWNlLCB1aW50
NjRfdCBzcGFjZUluY3JlYXNlLCBhdXRvIGNhbGxiYWNrKSB7CiAgICAgICAgICAgICBjYWxsYmFj
ayhxdW90YSArIGN1cnJlbnRTcGFjZSArIHNwYWNlSW5jcmVhc2UpOwogICAgICAgICB9KTsKICAg
ICB9KS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSURCU2VydmVy
OjpJREJTZXJ2ZXI6OlF1b3RhTWFuYWdlckdldHRlciBzdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVy
KEluUHJvY2Vzc0lEQlNlcnZlciYgc2VydmVyKQorc3RhdGljIGlubGluZSBJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6U3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyIHN0b3JhZ2VRdW90YU1h
bmFnZXJTcGFjZVJlcXVlc3RlcihJblByb2Nlc3NJREJTZXJ2ZXImIHNlcnZlcikKIHsKLSAgICBy
ZXR1cm4gW3dlYWtTZXJ2ZXIgPSBtYWtlV2Vha1B0cihzZXJ2ZXIpXShQQUw6OlNlc3Npb25JRCwg
Y29uc3QgYXV0byYgb3JpZ2luKSB7Ci0gICAgICAgIHJldHVybiB3ZWFrU2VydmVyID8gd2Vha1Nl
cnZlci0+cXVvdGFNYW5hZ2VyKG9yaWdpbikgOiBudWxscHRyOworICAgIHJldHVybiBbc2VydmVy
ID0gJnNlcnZlciwgd2Vha1NlcnZlciA9IG1ha2VXZWFrUHRyKHNlcnZlcildKGNvbnN0IENsaWVu
dE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCkgbXV0YWJsZSB7CisgICAg
ICAgIGF1dG8qIHN0b3JhZ2VRdW90YU1hbmFnZXIgPSB3ZWFrU2VydmVyID8gc2VydmVyLT5xdW90
YU1hbmFnZXIob3JpZ2luKSA6IG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdG9yYWdlUXVvdGFN
YW5hZ2VyID8gc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhy
ZWFkKHNwYWNlUmVxdWVzdGVkKSA6IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55
OwogICAgIH07CiB9CiAKIEluUHJvY2Vzc0lEQlNlcnZlcjo6SW5Qcm9jZXNzSURCU2VydmVyKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKLSAgICA6IG1fc2VydmVyKElEQlNlcnZlcjo6SURCU2Vy
dmVyOjpjcmVhdGUoc2Vzc2lvbklELCBzdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyKCp0aGlzKSkp
CisgICAgOiBtX3NlcnZlcihJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwg
c3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyKCp0aGlzKSkpCiB7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKICAgICBt
X2Nvbm5lY3Rpb25Ub1NlcnZlciA9IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpj
cmVhdGUoKnRoaXMpOwogICAgIG1fY29ubmVjdGlvblRvQ2xpZW50ID0gSURCU2VydmVyOjpJREJD
b25uZWN0aW9uVG9DbGllbnQ6OmNyZWF0ZSgqdGhpcyk7CiB9CiAKIEluUHJvY2Vzc0lEQlNlcnZl
cjo6SW5Qcm9jZXNzSURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpCi0gICAgOiBtX3NlcnZlcihJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBzdG9yYWdl
UXVvdGFNYW5hZ2VyR2V0dGVyKCp0aGlzKSkpCisgICAgOiBtX3NlcnZlcihJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBzdG9yYWdl
UXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXIoKnRoaXMpKSkKIHsKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwogICAgIG1fY29ubmVj
dGlvblRvU2VydmVyID0gSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmNyZWF0ZSgq
dGhpcyk7CiAgICAgbV9jb25uZWN0aW9uVG9DbGllbnQgPSBJREJTZXJ2ZXI6OklEQkNvbm5lY3Rp
b25Ub0NsaWVudDo6Y3JlYXRlKCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAppbmRleCBj
N2I1MzIxY2EzNjFjNzQxZTUyZDQ1ZWMxOGE4MzE4ZmFkMDgyOWMwLi44ZTczNmE3ODA5MTkxZTQz
N2I4NjNjM2RiZGRhMmFiNDhlZTA2NWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCkBAIC02
NCw3ICs2NCw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBJREJDbGllbnQ6OklEQkNv
bm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvblRvU2VydmVyKCkgY29uc3Q7CiAgICAgSURCU2Vy
dmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQmIGNvbm5lY3Rpb25Ub0NsaWVudCgpIGNvbnN0Owog
ICAgIElEQlNlcnZlcjo6SURCU2VydmVyJiBzZXJ2ZXIoKSB7IHJldHVybiBtX3NlcnZlci5nZXQo
KTsgfQotCiAgICAgSURCU2VydmVyOjpJREJTZXJ2ZXImIGlkYlNlcnZlcigpIHsgcmV0dXJuIG1f
c2VydmVyLmdldCgpOyB9CiAKICAgICAvLyBJREJDb25uZWN0aW9uVG9TZXJ2ZXIKQEAgLTEzNSw3
ICsxMzQsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25U
b1NlcnZlcj4gbV9jb25uZWN0aW9uVG9TZXJ2ZXI7CiAgICAgUmVmUHRyPElEQlNlcnZlcjo6SURC
Q29ubmVjdGlvblRvQ2xpZW50PiBtX2Nvbm5lY3Rpb25Ub0NsaWVudDsKIAotICAgIEhhc2hNYXA8
Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fcXVv
dGFNYW5hZ2VyczsKKyAgICBIYXNoTWFwPENsaWVudE9yaWdpbiwgUmVmUHRyPFN0b3JhZ2VRdW90
YU1hbmFnZXI+PiBtX3F1b3RhTWFuYWdlcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggNmE0Nzg1YmZjZmYwN2ZhN2RkZGZkMzY3YzNlMGU3MGRiZDVlOGYwNy4uOTQ3NWQwNjE5
MzI5NWM1N2UzNzE2YmM0YWI2ZDE2YzU3MzFhOTJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEyOSw3ICsxMTI5LDYgQEAK
IAkJNDFEMjhEMEQyMTM5RTA1ODAwRjQyMDZGIC8qIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRDI4RDBC
MjEzOUUwMUQwMEY0MjA2RiAvKiBMaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5jcHAgKi87IH07CiAJ
CTQxRDQxQzY3MjI1Njg3NEYwMDY5Nzk0MiAvKiBTZXJ2aWNlV29ya2VySW50ZXJuYWxzLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFENDFDNjUyMjU2
ODU5MjAwNjk3OTQyIC8qIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMubW0gKi87IH07CiAJCTQxREU3
QzdDMjIyREExNDMwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MURFN0M3QjIyMkRBMTNFMDA1MzJC
NjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTQxREU3QzdEMjIyREExNDgwMDUzMkI2NSAvKiBTdG9yYWdl
UXVvdGFVc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MURFN0M3ODIyMkRBMTNDMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhVXNlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxREVGQ0I2MUU1NkMx
QkQwMDBEOUU1RiAvKiBKU0RPTU1hcExpa2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxREVGQ0I0MUU1NkMxQjkwMDBEOUU1RiAvKiBKU0RPTU1hcExp
a2UuaCAqLzsgfTsKIAkJNDFFMUIxRDEwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUUxQjFD
QjBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCAqLzsgfTsKIAkJNDFFOURDRTcy
MzE5NzRCRjAwRjM1OTQ5IC8qIEJsb2JMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRTlEQ0U0MjMxOTczRkUwMEYzNTk0OSAvKiBCbG9iTG9h
ZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTc0NzIsNyArNzQ3MSw2IEBACiAJCTQxRDI4RDBDMjEzOUUwMUUwMEY0MjA2RiAvKiBMaWJXZWJS
VENTdGF0c0NvbGxlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMaWJX
ZWJSVENTdGF0c0NvbGxlY3Rvci5oOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJUQ1N0YXRzQ29s
bGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRDQxQzY1MjI1Njg1OTIw
MDY5Nzk0MiAvKiBTZXJ2aWNlV29ya2VySW50ZXJuYWxzLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gU2VydmljZVdvcmtlckludGVybmFscy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFENTFCQjIxRTRFMkU4MTAwMTMxQTVCIC8qIExpYldlYlJU
Q0F1ZGlvRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpYldlYlJU
Q0F1ZGlvRm9ybWF0Lmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDQXVkaW9Gb3JtYXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDFERTdDNzgyMjJEQTEzQzAwNTMyQjY1IC8q
IFN0b3JhZ2VRdW90YVVzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rv
cmFnZVF1b3RhVXNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURFN0M3QTIy
MkRBMTNEMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFERTdDN0IyMjJEQTEzRTAwNTMyQjY1IC8qIFN0b3JhZ2VR
dW90YU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVF1
b3RhTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURFRkNCMjFFNTZD
MUI5MDAwRDlFNUYgLyogSlNET01CaW5kaW5nSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5qYXZhc2NyaXB0OyBwYXRoID0gSlNET01CaW5kaW5nSW50ZXJuYWxzLmpzOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcxMTgsNyArMTcxMTYsNiBAQAogCQkJCTFBMzc2MzZB
MUEyRTY4QkIwMDlBN0VFMiAvKiBTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCAqLywKIAkJCQk0
MURFN0M3QTIyMkRBMTNEMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8sCiAJ
CQkJNDFERTdDN0IyMjJEQTEzRTAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuaCAqLywK
LQkJCQk0MURFN0M3ODIyMkRBMTNDMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhVXNlci5oICovLAog
CQkJCTUxNjZEM0NDMUU4RUQ0MTEwMEFENjJFMyAvKiBTdG9yYWdlVHlwZS5oICovLAogCQkJKTsK
IAkJCWluZGVudFdpZHRoID0gNDsKQEAgLTI5NTM1LDYgKzI5NTMyLDcgQEAKIAkJCQlGNDdBMDlE
MTIwQTkzQTk3MDAyNDBGQUUgLyogRGlzYWJsZWRBZGFwdGF0aW9ucy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0VEQUFGQzkxOUEyQ0NEQzAwMzRERkQxIC8qIERpc2tDYWNoZU1vbml0b3JDb2NvYS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTE5OUZBNUIyMDhFM0M3RjAwMjM1OENDIC8qIERpc3BsYXlC
b3guaCBpbiBIZWFkZXJzICovLAorCQkJCUU0NTFDNjM0MjM5NDA1OEYwMDk5MzE5MCAvKiBEaXNw
bGF5SW5saW5lQ29udGVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDMxQzNERDUxRTAw
MDdBMkNBIC8qIERpc3BsYXlMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENTFDM0RE
NTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
NUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzAwNDgsNyArMzAwNDYsNiBAQAogCQkJCUE4NzFEQjJCMEExNTBCRDYwMEIxMkE2
OCAvKiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MURC
MkEwQTE1MEJENjAwQjEyQTY4IC8qIEhUTUxUYWJsZUNlbGxFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBODcxREIyRjBBMTUwQkQ2MDBCMTJBNjggLyogSFRNTFRhYmxlQ29sRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ1MUM2MjgyMzkyOTNFQzAwOTkzMTkwIC8qIExpbmVMYXlv
dXRUcmF2ZXJzYWxEaXNwbGF5UnVuUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MURCMjcw
QTE1MEJENjAwQjEyQTY4IC8qIEhUTUxUYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4NzFEQjJDMEExNTBCRDYwMEIxMkE2OCAvKiBIVE1MVGFibGVQYXJ0RWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTg3MURCMzEwQTE1MEJENjAwQjEyQTY4IC8qIEhUTUxUYWJsZVJvd0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzAxNjAsNyArMzAxNTcsNiBAQAogCQkJCUJDN0Y0
NEE4MEI5RTMyNEUwMEE5RDA4MSAvKiBJbWFnZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyRDVBNTkzMTE1MjUyNUQwMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzIyODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIEltYWdlUGFpbnRpbmdPcHRp
b25zLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDUxQzYzMjIzOTQwMzFBMDA5OTMxOTAgLyogTWFy
Z2luVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1MUEyRjNGMTdEN0QzQUUwMDcyNTE3QSAv
KiBJbWFnZVF1YWxpdHlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTI5MUU0QjEz
NDE3MkM4MDBFNzUzREUgLyogSW1hZ2VSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDRDI3QUU1MDIyQTk4Njg3MDA5NDdGRjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDU1Myw3ICszMDU0OSw2IEBACiAJCQkJODM3MDU2OTAxRjUwOTE1
QzAwRDkzNDI1IC8qIEpTRmlsZVN5c3RlbUVudHJ5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAog
CQkJCTgzM0I5RTM2MUY1MDhEODUwMEUwRTQyOCAvKiBKU0ZpbGVTeXN0ZW1GaWxlRW50cnkuaCBp
biBIZWFkZXJzICovLAogCQkJCTcxMkJFNDg4MUZFODY4NkEwMDIwMzFDQyAvKiBKU0ZpbGxNb2Rl
LmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDM0M0QyNTIzOTI3NzkwMDBFQkJCNjYgLyogTGluZUxh
eW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNkQ5RDI3QjE0
RUFDMDg2MDA5MEQ3NUUgLyogSlNGb2N1c0V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjgw
ODMzRjFDNkRDMjZGMDAxNDUxQjYgLyogSlNGb250RmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUMyNEVFQTkxQzcyQTdCNDAwODBGOEZDIC8qIEpTRm9udEZhY2VTZXQuaCBpbiBIZWFkZXJzICov
LApAQCAtMzExNzcsNiArMzExNzIsNyBAQAogCQkJCTZGN0NBM0M2MjA4QzI5NTcwMDJGMjlBQiAv
KiBMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTEzMTBDRjIyMEJBNEEzMjAwNjVB
OEQwIC8qIExheW91dFRyZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDFEQzA0ODE2
NDgzNDhGMDAzNzFFNUEgLyogTGF5b3V0VW5pdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ1MUM2
MzEyMzk0MDI3OTAwOTkzMTkwIC8qIExheW91dFVuaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
REU4QjVFRDFBNjk3NzczMDBCNEI2NkEgLyogTGVnYWN5Q0RNUHJpdmF0ZUNsZWFyS2V5LmggaW4g
SGVhZGVycyAqLywKIAkJCQlDREY0QjcxMjFFMDA4N0FFMDBFMjM1QTIgLyogTGVnYWN5Q0RNU2Vz
c2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RFOEI1RjExQTY5Nzc4QjAwQjRCNjZBIC8qIExl
Z2FjeUNETVNlc3Npb25DbGVhcktleS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTIwOCw2ICszMTIw
NCw5IEBACiAJCQkJNkYyNkVCNDgyMzQwMDRBNTAwNjkwNkUyIC8qIExpbmVMYXlvdXRDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRkVGQUIyQTE4MzgwREEwMDA1MTQ1MzQgLyogTGluZUxh
eW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDg0QTMzRTIzMDU1MzI1MDA5QURFNkEg
LyogTGluZUxheW91dFRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQzNDNEMjUyMzky
Nzc5MDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRTQ1MUM2MjgyMzkyOTNFQzAwOTkzMTkwIC8qIExpbmVMYXlvdXRUcmF2ZXJz
YWxEaXNwbGF5UnVuUGF0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQzNDNEMjMyMzkyNzc4NDAw
RUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRkRCQzA0NzE4M0QyN0I3MDA0MDcxMDkgLyogTGluZVdpZHRoLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDQkE5REMwQjFERjQ0REY0MDAwNTY3NUMgLyogTGlua0hlYWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE0M0IyNjMxREREMTUyMDAwMTRGQUM2IC8qIExpbmtJY29uLmggaW4gSGVh
ZGVycyAqLywKQEAgLTMxMjQxLDYgKzMxMjQwLDcgQEAKIAkJCQk0NkVGQUYxMjFFNUZCOUYxMDBF
N0YzNEIgLyogTG93UG93ZXJNb2RlTm90aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBRTZD
OTNDMUJFMEM2MDEwMEUxOUUwMyAvKiBNYWluVGhyZWFkU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBOEY2QkM2MERCNTVDREMwMDFEQjc5NCAvKiBNYW5pZmVzdFBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTQ1MUM2MzIyMzk0MDMxQTAwOTkzMTkwIC8qIE1hcmdpblR5cGVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTE4NjY0NTFGNzJFNUI0MDBBMENBQjYgLyogTWFya2Vk
VGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERjgwOTlFNjQ5MjAwNTZFNTgxIC8qIG1h
cmt1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcyOEMzMTQxMjY4RTQzOTAwNDFFODlCIC8qIE1h
cmt1cEFjY3VtdWxhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzAxLDcgKzMxNzAxLDYgQEAK
IAkJCQk1N0RDRUQ3NDIxNDMwNUYwMDAxNkI4NDcgLyogUHVibGljS2V5Q3JlZGVudGlhbERhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTU3MzAzQkVGMjAwOTgwQzYwMDM1NTk2NSAvKiBQdWJsaWNL
ZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTczMDNDMEEyMDA5
OUJBRDAwMzU1OTY1IC8qIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJRTQzNDNEMjMyMzkyNzc4NDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2
ZXJzYWxTaW1wbGVQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzMwM0JFQjIwMDk3RjQwMDAz
NTU5NjUgLyogUHVibGljS2V5Q3JlZGVudGlhbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTAw
ODFGRjAwMTZCMEEyRDMwMDhBQUE3QSAvKiBQdWJsaWNTdWZmaXguaCBpbiBIZWFkZXJzICovLAog
CQkJCTEwRkIwODRCMTRFMTVDN0UwMEEzREI5OCAvKiBQdWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLywKQEAgLTMyMjQ1LDcgKzMyMjQ0LDYgQEAKIAkJCQlDNTBEMEU4MzBGRjQyNzI5MDBB
QzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzNzYzNkMx
QTJFNjhCQjAwOUE3RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDFERTdDN0MyMjJEQTE0MzAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTQxREU3QzdEMjIyREExNDgwMDUzMkI2NSAvKiBTdG9yYWdl
UXVvdGFVc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzlFRjJGMzIxRjA2MTkwMDAzQkRDNTYg
LyogU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2NkQzQ0Qx
RThFRDQ4RjAwQUQ2MkUzIC8qIFN0b3JhZ2VUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0Njgy
RDIwMDFGNzk3ODMwMDBDODYzREIgLyogU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzI0OTYsNyArMzI0OTQsNiBAQAogCQkJCUIyMjI3QURBMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdUcmFuc2Zvcm1hYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FERDBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyMjI3QURGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1MaXN0LmggaW4gSGVh
ZGVycyAqLywKLQkJCQlFNDUxQzYzMTIzOTQwMjc5MDA5OTMxOTAgLyogTGF5b3V0VW5pdHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTdDRTU4RDU4MUREN0Q5NkQwMDEyODU1MiAvKiBTVkdUcmFuc2Zv
cm1WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBRTIwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1RSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FFNTBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHVFNwYW5FbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMyODI2LDcgKzMy
ODIzLDYgQEAKIAkJCQk0OUM3QjlFMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlEM0YzRDM2QTFBNjlCN0I5MDA1OUZDMkIgLyog
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkY5OTVBMjIx
QTcwNzhCMTAwQTczNUY0IC8qIFdlYkdMU2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ1
MUM2MzQyMzk0MDU4RjAwOTkzMTkwIC8qIERpc3BsYXlJbmxpbmVDb250ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0OUM3QjlFMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUEwN0QzMzU4MTUyQjYzMkQwMDFCNjM5MyAvKiBXZWJHTFNoYWRlclBy
ZWNpc2lvbkZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDFEM0NGODcxNEJEMEEzMDAwRkU5
OTcwIC8qIFdlYkdMU2hhcmVkT2JqZWN0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCmluZGV4IDg1MjU3NTJlNjMzNDc5
NTMwZWYxNGVjYjc0Zjg1YmFmNjhkOWM1NWIuLjBjNjEzZDFhNzJkZmVhNjU5Y2IyZTcxYTgyMGFh
YWI2MDlhYTk2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1
b3RhTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmNwcApAQCAtMjcsMjEzICsyNywxMjAgQEAKICNpbmNsdWRlICJTdG9yYWdlUXVvdGFN
YW5hZ2VyLmgiCiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU3RvcmFnZVF1b3Rh
VXNlci5oIgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVN0b3JhZ2VRdW90YU1hbmFnZXI6On5TdG9yYWdlUXVvdGFNYW5hZ2VyKCkK
K1JlZjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUodWlu
dDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYgdXNhZ2VHZXR0ZXIsIFF1b3RhSW5jcmVhc2VSZXF1
ZXN0ZXImJiBxdW90YUluY3JlYXNlUmVxdWVzdGVyKQogewotICAgIHdoaWxlICghbV9wZW5kaW5n
UmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy50YWtlRmlyc3Qo
KS5jYWxsYmFjayhEZWNpc2lvbjo6RGVueSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Rv
cmFnZVF1b3RhTWFuYWdlcihxdW90YSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdURk1vdmUocXVv
dGFJbmNyZWFzZVJlcXVlc3RlcikpKTsKIH0KIAotdWludDY0X3QgU3RvcmFnZVF1b3RhTWFuYWdl
cjo6c3BhY2VVc2FnZSgpIGNvbnN0CitTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmIHVzYWdlR2V0dGVyLCBRdW90YUlu
Y3JlYXNlUmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3RlcikKKyAgICA6IG1fcXVvdGEo
cXVvdGEpCisgICAgLCBtX3VzYWdlR2V0dGVyKFdURk1vdmUodXNhZ2VHZXR0ZXIpKQorICAgICwg
bV9xdW90YUluY3JlYXNlUmVxdWVzdGVyKFdURk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3Rlcikp
CisgICAgLCBtX3dvcmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiU3RvcmFnZVF1b3RhTWFuYWdl
ciBCYWNrZ3JvdW5kIFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJpYWwpKQorICAgICwgbV9p
bml0aWFsUXVvdGEocXVvdGEpCiB7Ci0gICAgdWludDY0X3QgdXNhZ2UgPSAwOwotICAgIGZvciAo
YXV0byYgdXNlciA6IG1fdXNlcnMpCi0gICAgICAgIHVzYWdlICs9IHVzZXItPnNwYWNlVXNlZCgp
OwotICAgIHJldHVybiB1c2FnZTsKIH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRh
dGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVx
dWVzdFNwYWNlT25NYWluVGhyZWFkKHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkLCBSZXF1ZXN0Q2Fs
bGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBpZiAoIW1fcXVvdGEpCi0gICAgICAgIHJldHVybjsK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgYXV0byBkZWZhdWx0UXVvdGFTdGVw
ID0gbV9xdW90YSAvIDEwOwotICAgIG1fcXVvdGEgPSBzdGQ6Om1heChtX3F1b3RhLCBkZWZhdWx0
UXVvdGFTdGVwICogKChzcGFjZVVzYWdlKCkgLyBkZWZhdWx0UXVvdGFTdGVwKSArIDEpKTsKLX0K
LQotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjppbml0aWFsaXplVXNlcnNJZk5lZWRlZCgpCi17
Ci0gICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBWZWN0b3I8U3RvcmFnZVF1b3RhVXNlcio+IHVzZXJzVG9Jbml0aWFs
aXplOwotICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVz
ZXJzKSB7Ci0gICAgICAgIGlmIChrZXlWYWx1ZS52YWx1ZSA9PSBXaGVuSW5pdGlhbGl6ZWRDYWxs
ZWQ6Ok5vKSB7Ci0gICAgICAgICAgICBrZXlWYWx1ZS52YWx1ZSA9IFdoZW5Jbml0aWFsaXplZENh
bGxlZDo6WWVzOwotICAgICAgICAgICAgdXNlcnNUb0luaXRpYWxpemUuYXBwZW5kKGtleVZhbHVl
LmtleSk7CisgICAgLy8gRmFzdCBwYXRoLgorICAgIGlmIChtX3F1b3RhQ291bnREb3duTG9jay50
cnlMb2NrKCkpIHsKKyAgICAgICAgaWYgKHRyeUdyYW50UmVxdWVzdChzcGFjZVJlcXVlc3RlZCkp
IHsKKyAgICAgICAgICAgIG1fcXVvdGFDb3VudERvd25Mb2NrLnVubG9jaygpOworICAgICAgICAg
ICAgY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQorICAgICAgICBtX3F1b3RhQ291bnREb3duTG9jay51bmxvY2soKTsKICAgICB9Ci0gICAg
Zm9yIChhdXRvKiB1c2VyIDogdXNlcnNUb0luaXRpYWxpemUpIHsKLSAgICAgICAgaWYgKG1fcGVu
ZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnModXNlcikpCi0gICAgICAgICAgICBhc2tV
c2VyVG9Jbml0aWFsaXplKCp1c2VyKTsKLSAgICB9CisKKyAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0
Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc3BhY2VSZXF1ZXN0ZWQs
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8g
ZGVjaXNpb24gPSByZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQoc3BhY2VSZXF1ZXN0ZWQp
OworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
LCBkZWNpc2lvbl0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKGRlY2lzaW9uKTsK
KyAgICAgICAgfSk7CisgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNr
VXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQorU3RvcmFnZVF1b3RhTWFu
YWdlcjo6RGVjaXNpb24gU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25CYWNrZ3Jv
dW5kVGhyZWFkKHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkKQogewotICAgIHVzZXIud2hlbkluaXRp
YWxpemVkKFt0aGlzLCAmdXNlciwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oKSB7Ci0g
ICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAKLSAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNl
cnMucmVtb3ZlKCZ1c2VyKSkKLSAgICAgICAgICAgIG1fdXNlcnMuYWRkKCZ1c2VyKTsKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3F1b3RhQ291bnREb3duTG9jayk7CiAKLSAgICAgICAgaWYgKCFt
X3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICBpZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkKKyAgICAgICAgcmV0
dXJuIERlY2lzaW9uOjpHcmFudDsKIAotICAgICAgICAvLyBNYWtlIHN1cmUgcXVvdGEgaXMgc2V0
IGJlZm9yZSBoYW5kbGluZyBmaXJzdCByZXF1ZXN0LgotICAgICAgICBpZiAobV9zdGF0ZSA9PSBT
dGF0ZTo6VW5pbml0aWFsaXplZCkgewotICAgICAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9uU3Bh
Y2VVc2FnZSgpOwotICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZv
clJlcXVlc3Q7Ci0gICAgICAgIH0KKyAgICBtX3VzYWdlID0gbV91c2FnZUdldHRlcigpOworICAg
IHVwZGF0ZVF1b3RhQmFzZWRPblVzYWdlKCk7CisgICAgbV9xdW90YUNvdW50RG93biA9IG1fdXNh
Z2UgPCBtX3F1b3RhID8gbV9xdW90YSAtIG1fdXNhZ2UgOiAwOworICAgIGlmICh0cnlHcmFudFJl
cXVlc3Qoc3BhY2VSZXF1ZXN0ZWQpKQorICAgICAgICByZXR1cm4gRGVjaXNpb246OkdyYW50Owog
Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKLSAgICB9KTsKLX0KKyAgICAv
LyBCbG9jayB0aGlzIHRocmVhZCB1bnRpbCBnZXR0aW5nIGRlY3Npb24gZm9yIHF1b3RhIGluY3Jl
YXNlLgorICAgIEJpbmFyeVNlbWFwaG9yZSBzZW1hcGhvcmU7CisgICAgY2FsbE9uTWFpblRocmVh
ZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzcGFjZVJlcXVlc3RlZCwg
JnNlbWFwaG9yZV0oKSBtdXRhYmxlIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVw
IC0gU3RvcmFnZVF1b3RhTWFuYWdlciBhc2tzIGZvciBxdW90YSBpbmNyZWFzZSAlIiBQUkl1NjQs
IHRoaXMsIHNwYWNlUmVxdWVzdGVkKTsKKyAgICAgICAgbV9xdW90YUluY3JlYXNlUmVxdWVzdGVy
KG1fcXVvdGEsIG1fdXNhZ2UsIHNwYWNlUmVxdWVzdGVkLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IFdURk1vdmUocHJvdGVjdGVkVGhpcyksICZzZW1hcGhvcmVdKE9wdGlvbmFsPHVpbnQ2NF90PiBu
ZXdRdW90YSkgbXV0YWJsZSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAg
LSBTdG9yYWdlUXVvdGFNYW5hZ2VyIHJlY2VpdmVzIHF1b3RhIGluY3JlYXNlIHJlc3BvbnNlICUi
IFBSSXU2NCwgdGhpcywgbmV3UXVvdGEgPyAqbmV3UXVvdGEgOiAwKTsKKyAgICAgICAgICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YWRkVXNl
cihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQotewotICAgIEFTU0VSVCghbV9wZW5kaW5nSW5pdGlh
bGl6YXRpb25Vc2Vycy5jb250YWlucygmdXNlcikpOwotICAgIEFTU0VSVCghbV91c2Vycy5jb250
YWlucygmdXNlcikpOwotICAgIG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuYWRkKCZ1c2Vy
LCBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ6Ok5vKTsKKyAgICAgICAgICAgIGlmIChuZXdRdW90YSkK
KyAgICAgICAgICAgICAgICBtX3F1b3RhID0gKm5ld1F1b3RhOwogCi0gICAgaWYgKCFtX3BlbmRp
bmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIGFza1VzZXJUb0luaXRpYWxpemUodXNlcik7
Ci19CisgICAgICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CisgICAgICAgIH0pOworICAgIH0p
OwogCi1ib29sIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSh1aW50
NjRfdCBzcGFjZUluY3JlYXNlKSBjb25zdAotewotICAgIGlmICghc3BhY2VJbmNyZWFzZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNlbWFwaG9yZS53YWl0KCk7CiAKLSAgICByZXR1cm4g
c3BhY2VVc2FnZSgpICsgc3BhY2VJbmNyZWFzZSA+IG1fcXVvdGE7CisgICAgbV91c2FnZSA9IG1f
dXNhZ2VHZXR0ZXIoKTsKKyAgICBtX3F1b3RhQ291bnREb3duID0gbV91c2FnZSA8IG1fcXVvdGEg
PyBtX3F1b3RhIC0gbV91c2FnZSA6IDA7CisgICAgcmV0dXJuIHRyeUdyYW50UmVxdWVzdChzcGFj
ZVJlcXVlc3RlZCkgPyBEZWNpc2lvbjo6R3JhbnQgOiBEZWNpc2lvbjo6RGVueTsKIH0KIAotdm9p
ZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKFN0b3JhZ2VRdW90YVVzZXImIHVzZXIp
Citib29sIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnRyeUdyYW50UmVxdWVzdCh1aW50NjRfdCBzcGFj
ZVJlcXVlc3RlZCkKIHsKLSAgICBBU1NFUlQobV91c2Vycy5jb250YWlucygmdXNlcikgfHwgbV9w
ZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5jb250YWlucygmdXNlcikpOwotICAgIG1fdXNlcnMu
cmVtb3ZlKCZ1c2VyKTsKLSAgICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5yZW1v
dmUoJnVzZXIpICYmIG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIC8vIFdoZW4gYmVpbmcgY2xlYXJlZCwgcXVvdGEgdXNlcnMgbWF5IHJlbW92ZSB0aGVt
c2VsdmVzIGFuZCBhZGQgdGhlbXNlbHZlcyB0byB0cmlnZ2VyIHJlaW5pdGlhbGl6YXRpb24uCi0g
ICAgICAgIC8vIExldCdzIHdhaXQgZm9yIGFkZFVzZXIgdG8gYmUgY2FsbGVkIGJlZm9yZSBwcm9j
ZXNzaW5nIHBlbmRpbmcgcmVxdWVzdHMuCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldIHsKLSAgICAgICAgICAgIGlmICghd2Vha1Ro
aXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAobV9wZW5kaW5n
SW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdGhpcy0+cHJv
Y2Vzc1BlbmRpbmdSZXF1ZXN0cyh7IH0pOwotICAgICAgICB9KTsKKyAgICBBU1NFUlQobV9xdW90
YUNvdW50RG93bkxvY2suaXNMb2NrZWQoKSk7CisgICAgaWYgKHNwYWNlUmVxdWVzdGVkIDw9IG1f
cXVvdGFDb3VudERvd24pIHsKKyAgICAgICAgbV9xdW90YUNvdW50RG93biAtPSBzcGFjZVJlcXVl
c3RlZDsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0K
LQotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSwgUmVxdWVzdENhbGxiYWNrJiYgY2FsbGJhY2spCisgICAgCit2b2lkIFN0b3JhZ2VR
dW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblVzYWdlKCkKIHsKLSAgICBpZiAoIW1fcGVu
ZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBl
bmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghc3BhY2VJbmNyZWFzZSkgewotICAgICAgICBjYWxsYmFjayhE
ZWNpc2lvbjo6R3JhbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW5pdGlhbGl6
ZVVzZXJzSWZOZWVkZWQoKTsKLQotICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vy
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJ
bmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpKSB7Ci0gICAgICAg
IG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJh
Y2spIH0pOwotCi0gICAgICAgIC8vIFRyeSBwcm9jZXNzaW5nIHJlcXVlc3QgYWdhaW4gYWZ0ZXIg
bWFraW5nIHN1cmUgdXNhZ2UgaXMgYWNjdXJhdGUuCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6
Q29tcHV0aW5nU3BhY2VVc2VkOwotICAgICAgICBmb3IgKGF1dG8mIHVzZXIgOiBjb3B5VG9WZWN0
b3IobV91c2VycykpCi0gICAgICAgICAgICB1c2VyLT5jb21wdXRlU3BhY2VVc2VkKCk7Ci0KLSAg
ICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkFza2luZ0Zvck1vcmVT
cGFjZTsKLSAgICAgICAgYXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwotICAgICAgICBy
ZXR1cm47CisgICAgLy8gV2hlbiBTdG9yYWdlUXVvdGFNYW5hZ2VyIGlzIHVzZWQgZm9yIHRoZSBm
aXJzdCB0aW1lLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBpdHMgaW5pdGlhbCBxdW90YSBpcyBiaWdn
ZXIgdGhhbiBjdXJyZW50IGRpc2sgdXNhZ2UsCisgICAgLy8gYmFzZWQgb24gdGhlIGFzc3VtcHRp
b24gdGhhdCB0aGUgcXVvdGEgd2FzIGluY3JlYXNlZCB0byBhdCBsZWFzdCB0aGUgZGlzayB1c2Fn
ZSB1bmRlciB1c2VyJ3MgcGVybWlzc2lvbiBiZWZvcmUuCisgICAgQVNTRVJUKG1fcXVvdGFDb3Vu
dERvd25Mb2NrLmlzTG9ja2VkKCkpOworICAgIGlmICghbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNh
Z2UpIHsKKyAgICAgICAgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgPSB0cnVlOworICAgICAg
ICBhdXRvIGRlZmF1bHRRdW90YVN0ZXAgPSBtX3F1b3RhIC8gMTA7CisgICAgICAgIG1fcXVvdGEg
PSBzdGQ6Om1heChtX3F1b3RhLCBkZWZhdWx0UXVvdGFTdGVwICogKChtX3VzYWdlIC8gZGVmYXVs
dFF1b3RhU3RlcCkgKyAxKSk7CiAgICAgfQotCi0gICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdE
ZWNpc2lvbkZvclJlcXVlc3Q7Ci0gICAgY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKIH0KIAot
dm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90YVVwZGF0ZWRCYXNl
ZE9uVXNhZ2VGb3JUZXN0aW5nKCkKIHsKLSAgICBBU1NFUlQoc2hvdWxkQXNrRm9yTW9yZVNwYWNl
KHNwYWNlSW5jcmVhc2UpKTsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9y
TW9yZVNwYWNlKTsKLQotICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90
YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSAlIiBQUkl1NjQsIHRoaXMsIHNwYWNlSW5jcmVhc2Up
OwotICAgIG1fc3RhdGUgPSBTdGF0ZTo6V2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZTsK
LSAgICBtX3NwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIobV9xdW90YSwgc3BhY2VVc2FnZSgpLCBzcGFj
ZUluY3JlYXNlLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKE9wdGlvbmFs
PHVpbnQ2NF90PiBuZXdRdW90YSkgewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VR
dW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSByZWNlaXZlZCByZXNwb25zZSAlIiBQUkl1NjQs
IHRoaXMsIG5ld1F1b3RhID8gKm5ld1F1b3RhIDogMCk7Ci0KLSAgICAgICAgbV9zdGF0ZSA9IFN0
YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMo
bmV3UXVvdGEpOwotICAgIH0pOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcXVvdGFDb3VudERv
d25Mb2NrKTsKKyAgICBtX3F1b3RhID0gbV9pbml0aWFsUXVvdGE7CisgICAgbV9xdW90YUNvdW50
RG93biA9IDA7CisgICAgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgPSBmYWxzZTsKIH0KIAot
dm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFs
PHVpbnQ2NF90PiBuZXdRdW90YSkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90
YUZvclRlc3RpbmcoKQogewotICAgIGlmIChtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChuZXdRdW90YSkKLSAgICAgICAgbV9xdW90YSA9ICpu
ZXdRdW90YTsKLQotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpXYWl0aW5nRm9yU3BhY2VJbmNy
ZWFzZVJlc3BvbnNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcGVuZGluZ0luaXRp
YWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9z
dGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlKSB7Ci0gICAgICAgIGF1dG8gcmVxdWVz
dCA9IG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpOwotICAgICAgICBib29sIHNob3VsZEFs
bG93UmVxdWVzdCA9ICFzaG91bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNl
KTsKLQotICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzIGZpcnN0IHJlcXVlc3QgZGVjaXNpb24gaXMgJWQi
LCB0aGlzLCBzaG91bGRBbGxvd1JlcXVlc3QpOwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6
TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgICAgICByZXF1ZXN0LmNhbGxiYWNrKHNob3Vs
ZEFsbG93UmVxdWVzdCA/IERlY2lzaW9uOjpHcmFudCA6IERlY2lzaW9uOjpEZW55KTsKLSAgICB9
Ci0KLSAgICB3aGlsZSAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAgICBh
dXRvJiByZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMuZmlyc3QoKTsKLQotICAgICAgICBpZiAo
c2hvdWxkQXNrRm9yTW9yZVNwYWNlKHJlcXVlc3Quc3BhY2VJbmNyZWFzZSkpIHsKLSAgICAgICAg
ICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3QpIHsKLSAg
ICAgICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKLSAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8mIHVzZXIgOiBjb3B5VG9WZWN0b3IobV91c2VycykpCi0gICAg
ICAgICAgICAgICAgICAgIHVzZXItPmNvbXB1dGVTcGFjZVVzZWQoKTsKLQotICAgICAgICAgICAg
ICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9zdGF0
ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgICAgICB1aW50NjRfdCBzcGFj
ZUluY3JlYXNlID0gMDsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcGVuZGluZ1JlcXVlc3QgOiBt
X3BlbmRpbmdSZXF1ZXN0cykKLSAgICAgICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9IHBlbmRp
bmdSZXF1ZXN0LnNwYWNlSW5jcmVhc2U7Ci0gICAgICAgICAgICBhc2tGb3JNb3JlU3BhY2Uoc3Bh
Y2VJbmNyZWFzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBt
X3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKLSAgICAgICAgbV9wZW5k
aW5nUmVxdWVzdHMudGFrZUZpcnN0KCkuY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKLSAgICB9
CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9xdW90YUNvdW50RG93bkxvY2spOworICAgIG1fcXVv
dGEgPSBtX2luaXRpYWxRdW90YTsKKyAgICBtX3F1b3RhQ291bnREb3duID0gMDsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlUXVvdGFNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90
YU1hbmFnZXIuaAppbmRleCAwOTU2NjMwNmY1NTkxYWJiNTlkMGFmZDhlZWE0ODY3OWE1ZjZjNjNj
Li45YmRmZGQ0N2ExOGExNzZjNWJjMzNmNGI4NjI4OTIyMzRhZDI5YWIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaApAQCAtMjUsNzcgKzI1LDU0IEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2xpZW50T3JpZ2luLmgiCiAjaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIFN0b3JhZ2VRdW90YVVzZXI7Ci0KLWNsYXNzIFN0b3JhZ2VRdW90YU1h
bmFnZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4geworY2xh
c3MgU3RvcmFnZVF1b3RhTWFuYWdlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTdG9y
YWdlUXVvdGFNYW5hZ2VyPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPFN0b3JhZ2VRdW90YU1hbmFn
ZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB1c2luZyBT
cGFjZUluY3JlYXNlUmVxdWVzdGVyID0gV1RGOjpGdW5jdGlvbjx2b2lkKHVpbnQ2NF90IHF1b3Rh
LCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8dWludDY0X3Q+KT4mJik+OwotICAgIFN0b3JhZ2VRdW90
YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXImJiBzcGFjZUlu
Y3JlYXNlUmVxdWVzdGVyKQotICAgICAgICA6IG1fcXVvdGEocXVvdGEpCi0gICAgICAgICwgbV9z
cGFjZUluY3JlYXNlUmVxdWVzdGVyKFdURk1vdmUoc3BhY2VJbmNyZWFzZVJlcXVlc3RlcikpCi0g
ICAgewotICAgIH0KLSAgICBXRUJDT1JFX0VYUE9SVCB+U3RvcmFnZVF1b3RhTWFuYWdlcigpOwor
ICAgIHVzaW5nIFVzYWdlR2V0dGVyID0gRnVuY3Rpb248dWludDY0X3QoKT47CisgICAgdXNpbmcg
UXVvdGFJbmNyZWFzZVJlcXVlc3RlciA9IEZ1bmN0aW9uPHZvaWQodWludDY0X3QgY3VycmVudFF1
b3RhLCB1aW50NjRfdCBjdXJyZW50VXNhZ2UsIHVpbnQ2NF90IHJlcXVlc3RlZEluY3JlYXNlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVpbnQ2NF90Pik+JiYpPjsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+IGNyZWF0ZSh1aW50NjRf
dCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmKTsKIAogICAg
IHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YUZyb21QZXJP
cmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkgeyByZXR1cm4gcXVvdGEgLyAxMDsgfQotCiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBkZWZhdWx0UXVvdGEoKSB7IHJldHVybiAxMDAwICog
TUI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVv
dGEoKSB7IHJldHVybiBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3RhKGRl
ZmF1bHRRdW90YSgpKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyKFN0b3Jh
Z2VRdW90YVVzZXImKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXIoU3RvcmFn
ZVF1b3RhVXNlciYpOwotCiAgICAgZW51bSBjbGFzcyBEZWNpc2lvbiB7IERlbnksIEdyYW50IH07
CiAgICAgdXNpbmcgUmVxdWVzdENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNp
c2lvbik+OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdFNwYWNlKHVpbnQ2NF90LCBS
ZXF1ZXN0Q2FsbGJhY2smJik7Ci0gICAgdm9pZCByZXNldFF1b3RhKHVpbnQ2NF90IG5ld1F1b3Rh
KSB7IG1fcXVvdGEgPSBuZXdRdW90YTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVz
dFNwYWNlT25NYWluVGhyZWFkKHVpbnQ2NF90LCBSZXF1ZXN0Q2FsbGJhY2smJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgRGVjaXNpb24gcmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHVpbnQ2
NF90KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VV
c2FnZSgpOwotCi0gICAgZW51bSBjbGFzcyBTdGF0ZSB7Ci0gICAgICAgIFVuaW5pdGlhbGl6ZWQs
Ci0gICAgICAgIENvbXB1dGluZ1NwYWNlVXNlZCwKLSAgICAgICAgV2FpdGluZ0ZvclNwYWNlSW5j
cmVhc2VSZXNwb25zZSwKLSAgICAgICAgQXNraW5nRm9yTW9yZVNwYWNlLAotICAgICAgICBNYWtp
bmdEZWNpc2lvbkZvclJlcXVlc3QsCi0gICAgfTsKLSAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGU7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0UXVvdGFVcGRh
dGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVz
ZXRRdW90YUZvclRlc3RpbmcoKTsKIAogcHJpdmF0ZToKLSAgICB1aW50NjRfdCBzcGFjZVVzYWdl
KCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSkgY29uc3Q7Ci0gICAgdm9pZCBhc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSk7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7Ci0gICAgdm9p
ZCBhc2tVc2VyVG9Jbml0aWFsaXplKFN0b3JhZ2VRdW90YVVzZXImKTsKKyAgICBTdG9yYWdlUXVv
dGFNYW5hZ2VyKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmLCBRdW90YUluY3JlYXNlUmVx
dWVzdGVyJiYpOworICAgIGJvb2wgdHJ5R3JhbnRSZXF1ZXN0KHVpbnQ2NF90KTsKIAotICAgIHZv
aWQgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4pOworICAgIHZvaWQg
dXBkYXRlUXVvdGFCYXNlZE9uVXNhZ2UoKTsKIAorICAgIExvY2sgbV9xdW90YUNvdW50RG93bkxv
Y2s7CisgICAgdWludDY0X3QgbV9xdW90YUNvdW50RG93biB7IDAgfTsKICAgICB1aW50NjRfdCBt
X3F1b3RhIHsgMCB9OworICAgIHVpbnQ2NF90IG1fdXNhZ2UgeyAwIH07CiAKLSAgICBTcGFjZUlu
Y3JlYXNlUmVxdWVzdGVyIG1fc3BhY2VJbmNyZWFzZVJlcXVlc3RlcjsKKyAgICBVc2FnZUdldHRl
ciBtX3VzYWdlR2V0dGVyOworICAgIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgbV9xdW90YUluY3Jl
YXNlUmVxdWVzdGVyOwogCi0gICAgZW51bSBjbGFzcyBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQgeyBO
bywgWWVzIH07Ci0gICAgSGFzaE1hcDxTdG9yYWdlUXVvdGFVc2VyKiwgV2hlbkluaXRpYWxpemVk
Q2FsbGVkPiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzOwotICAgIEhhc2hTZXQ8U3RvcmFn
ZVF1b3RhVXNlcio+IG1fdXNlcnM7CisgICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CiAK
LSAgICBzdHJ1Y3QgUGVuZGluZ1JlcXVlc3QgewotICAgICAgICB1aW50NjRfdCBzcGFjZUluY3Jl
YXNlOwotICAgICAgICBSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2s7Ci0gICAgfTsKLSAgICBEZXF1
ZTxQZW5kaW5nUmVxdWVzdD4gbV9wZW5kaW5nUmVxdWVzdHM7CisgICAgYm9vbCBtX3F1b3RhVXBk
YXRlZEJhc2VkT25Vc2FnZSB7IGZhbHNlIH07CiAKLSAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6
OlVuaW5pdGlhbGl6ZWQgfTsKKyAgICAvLyBUZXN0IG9ubHkuCisgICAgdWludDY0X3QgbV9pbml0
aWFsUXVvdGEgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiNzEwY2VlYzYwYzVkZTUwYzYwOWQyMzFiMGYwZGY5Njc0OTQ5NDIwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZVF1b3RhVXNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgU3RvcmFnZVF1b3RhVXNlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U3Rv
cmFnZVF1b3RhVXNlcigpID0gZGVmYXVsdDsKLQotICAgIHZpcnR1YWwgdWludDY0X3Qgc3BhY2VV
c2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlU3BhY2VVc2VkKCkgeyB9
OwotICAgIHZpcnR1YWwgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNhbGxiYWNrKSB7IGNhbGxiYWNrKCk7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHAKaW5kZXggMTNmY2UyZTdjNTljNGE0NDIzZmFmNzJhNjM1YzljOWRlNDlhNGUxZS4uNGU1YjNi
MDdlOTBlMTFlODBmMDQ5ODIyOGU5NWRmYzE2OGQwNTVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTY1LDYgKzY1LDcgQEAKICNp
bmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVR5cGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9ETlMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RlcHJlY2F0ZWRHbG9iYWxT
ZXR0aW5ncy5oPgpAQCAtMzE2LDYgKzMxNyw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRp
YWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAg
ICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CiAgICAgc2V0U2Vzc2lvbihzZXNz
aW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiAK
KyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOworICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0
b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKwogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCkBAIC0zMjYsNyArMzMwLDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzJiYKICAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc2VydmljZVdvcmtlclByb2Nlc3NUZXJt
aW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIH0KICNlbmRpZgotICAgIGluaXRpYWxpemVT
dG9yYWdlUXVvdGEocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogCkBAIC00MzQsMjggKzQzNywzOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNh
Y2hlZENyZWRlbnRpYWxzKCkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0ZURhdGFT
dG9yZShXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiB7CisgICAgYXV0
byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9u
SUQ7CisKKyAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFt
ZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmln
aW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgcGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKKyAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwg
cGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQogICAgIGlmIChwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0
bGVtZW50KCkpCi0gICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZFNlcnZpY2VX
b3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rl
cm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmFkZChwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQs
IHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBpbml0aWFsaXplU3RvcmFnZVF1b3Rh
KHBhcmFtZXRlcnMpOworICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBh
cmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6
ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycykp
OwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplU3RvcmFnZVF1b3RhKGNvbnN0
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQordm9pZCBOZXR3b3JrUHJv
Y2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVv
dGEsIGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JiBjYWNoZVJvb3RQYXRoSGFuZGxlKQogewotICAgIGF1dG8mIG1hbmFnZXJzID0gIG1fc3RvcmFn
ZVF1b3RhTWFuYWdlcnMuZW5zdXJlKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNlc3Npb25JRCwgW10gewotICAgICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcnMgeyB9
OwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBtYW5hZ2Vycy5zZXREZWZhdWx0UXVvdGFz
KHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBlclRoaXJkUGFy
dHlPcmlnaW5TdG9yYWdlUXVvdGEpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lvblN0
b3JhZ2VRdW90YU1hbmFnZXJzTG9jayk7CisgICAgYXV0byBbaXRlciwgaXNOZXdFbnRyeV0gPSBt
X3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbZGVmYXVsdFF1
b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCAmY2FjaGVSb290UGF0aF0geworICAgICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcj4oY2FjaGVSb290UGF0
aCwgZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKTsKKyAgICB9KTsKKyAgICBp
ZiAoaXNOZXdFbnRyeSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVu
dGx5KGNhY2hlUm9vdFBhdGhIYW5kbGUpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1v
dmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7
CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2Nr
KTsKKyAgICBBU1NFUlQobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuY29udGFpbnMoc2Vz
c2lvbklEKSk7CisgICAgbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Np
b25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbihj
b25zdCBGdW5jdGlvbjx2b2lkKE5ldHdvcmtTZXNzaW9uJik+JiBmdW5jdG9yKQpAQCAtNTc2LDgg
KzU5MCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCkKICNlbmRpZgogCiAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+cmVtb3Zl
KHNlc3Npb25JRCk7Ci0KLSAgICBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLnJlbW92ZShzZXNzaW9u
SUQpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTE0Njgs
OSArMTQ4MCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpCiAgICAgaWYgKHdlYnNpdGVEYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQu
aXNFcGhlbWVyYWwoKSkKICAgICAgICAgY2xlYXJEaXNrQ2FjaGUobW9kaWZpZWRTaW5jZSwgW2Ns
ZWFyVGFza3NIYW5kbGVyID0gV1RGTW92ZShjbGVhclRhc2tzSGFuZGxlcildIHsgfSk7CiAKLSAg
ICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWRE
QkRhdGFiYXNlcykgfHwgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
OkRPTUNhY2hlKSkKLSAgICAgICAgY2xlYXJTdG9yYWdlUXVvdGEoc2Vzc2lvbklEKTsKLQogICAg
IGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6QWRDbGlja0F0
dHJpYnV0aW9ucykpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+
bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKICAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5j
bGVhckFkQ2xpY2tBdHRyaWJ1dGlvbigpOwpAQCAtMTU2MywxOSArMTU3Miw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIE9wdGlvCiAgICAgICAgIH0KICAgICAgICAgV2ViQ29yZTo6Q3JlZGVudGlhbFN0
b3JhZ2U6OnJlbW92ZVNlc3Npb25DcmVkZW50aWFsc1dpdGhPcmlnaW5zKG9yaWdpbkRhdGFzKTsK
ICAgICB9Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHN0b3JhZ2UgcXVvdGEgY2xlYXJpbmcg
Zm9yIHRoZXNlIG9yaWdpbnMuCi19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyU3RvcmFn
ZVF1b3RhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKLXsKLSAgICBhdXRvIGl0ZXJhdG9yID0g
bV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7Ci0gICAgaWYgKGl0ZXJhdG9y
ID09IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8mIG1hbmFnZXJzID0gaXRlcmF0b3ItPnZhbHVlOwotICAgIGZvciAoYXV0byYgbWFuYWdl
ciA6IG1hbmFnZXJzLm1hbmFnZXJzUGVyT3JpZ2luKCkpCi0gICAgICAgIG1hbmFnZXIudmFsdWUt
PnJlc2V0UXVvdGEobWFuYWdlcnMuZGVmYXVsdFF1b3RhKG1hbmFnZXIua2V5KSk7CiB9CiAKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjIxNywxMCArMjIxMyw5IEBA
IFJlZjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gTmV0d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZl
cihQQUw6OlNlc3Npb25JRCBzZXNzaW9uCiAgICAgICAgIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0
aHMuZ2V0KHNlc3Npb25JRCk7CiAgICAgfQogCi0gICAgcmV0dXJuIElEQlNlcnZlcjo6SURCU2Vy
dmVyOjpjcmVhdGUoc2Vzc2lvbklELCBwYXRoLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cih0aGlzKV0oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBhdXRvJiBvcmlnaW4pIC0+
IFN0b3JhZ2VRdW90YU1hbmFnZXIqIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gJnRoaXMtPnN0b3JhZ2VRdW90YU1h
bmFnZXIoc2Vzc2lvbklELCBvcmlnaW4pOworICAgIHJldHVybiBJREJTZXJ2ZXI6OklEQlNlcnZl
cjo6Y3JlYXRlKHNlc3Npb25JRCwgcGF0aCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
dGhpcyksIHNlc3Npb25JRF0oY29uc3QgYXV0byYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcXVl
c3RlZCkgeworICAgICAgICBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3Rh
TWFuYWdlciA9IHdlYWtUaGlzID8gdGhpcy0+c3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQs
IG9yaWdpbikgOiBudWxscHRyOworICAgICAgICByZXR1cm4gc3RvcmFnZVF1b3RhTWFuYWdlciA/
IHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZChzcGFj
ZVJlcXVlc3RlZCkgOiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueTsKICAgICB9
KTsKIH0KIApAQCAtMjMwNyw4ICsyMzAyLDE4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZElu
ZGV4ZWREYXRhYmFzZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmCiAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShoYW5kbGUpOwogICAg
ICAgICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBwb3N0U3RvcmFnZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTmV0d29ya1By
b2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSkpOworICAg
ICAgICBzZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKHNlc3Npb25JRCwg
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKICAgICB9CiB9CisKK3ZvaWQgTmV0d29ya1Byb2Nl
c3M6OnNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKQoreworICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jayk7CisgICAgYXV0byog
c2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgPSBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vy
cy5nZXQoc2Vzc2lvbklEKTsKKyAgICBBU1NFUlQoc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIp
OworICAgIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5zZXRJREJSb290UGF0aChpZGJSb290
UGF0aCk7Cit9CisKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6c3luY0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yMzI1LDkgKzIzMzAsMTggQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoKQogCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQogewot
ICAgIGF1dG8mIG1hbmFnZXIgPSBzdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2lu
KTsKLSAgICBtYW5hZ2VyLnJlc2V0UXVvdGEobV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5maW5kKHNl
c3Npb25JRCktPnZhbHVlLmRlZmF1bHRRdW90YShvcmlnaW4pKTsKLSAgICBtYW5hZ2VyLnVwZGF0
ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKKyAgICBhdXRvIHN0b3JhZ2VRdW90YU1hbmFnZXIg
PSB0aGlzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsKKyAgICBzdG9y
YWdlUXVvdGFNYW5hZ2VyLT5yZXNldFF1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZUZvclRlc3Rpbmco
KTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xv
Y2spOworICAgIGlmIChhdXRvKiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fc2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXJzLmdldChzZXNzaW9uSUQpKSB7CisgICAgICAgIGZvciAoYXV0
byBzdG9yYWdlUXVvdGFNYW5hZ2VyIDogc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPmV4aXN0
aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMoKSkKKyAgICAgICAgICAgIHN0b3JhZ2VRdW90YU1hbmFn
ZXItPnJlc2V0UXVvdGFGb3JUZXN0aW5nKCk7CisgICAgfQorICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CiB9CiAKICNpZiBFTkFCTEUoU0FOREJPWF9FWFRFTlNJT05TKQpAQCAtMjQwNCw2MiArMjQx
OCwzNSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXF1ZXN0U3RvcmFnZVNwYWNlKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50TwogICAgIHBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
UmVxdWVzdFN0b3JhZ2VTcGFjZSB7IHNlc3Npb25JRCwgb3JpZ2luLCBxdW90YSwgY3VycmVudFNp
emUsIHNwYWNlUmVxdWlyZWQgfSwgV1RGTW92ZShjYWxsYmFjayksIDApOwogfQogCi1jbGFzcyBR
dW90YVVzZXJJbml0aWFsaXplciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFV
c2VyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNp
dCBRdW90YVVzZXJJbml0aWFsaXplcihTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5hZ2VyKQotICAg
ICAgICA6IG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKLSAgICB7Ci0gICAgICAgIG1h
bmFnZXIuYWRkVXNlcigqdGhpcyk7Ci0gICAgfQotCi0gICAgflF1b3RhVXNlckluaXRpYWxpemVy
KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgICAgICBtX21hbmFnZXIt
PnJlbW92ZVVzZXIoKnRoaXMpOwotICAgICAgICBpZiAobV9jYWxsYmFjaykKLSAgICAgICAgICAg
IG1fY2FsbGJhY2soKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gU3RvcmFnZVF1b3RhVXNl
ciBBUEkuCi0gICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CitSZWZQ
dHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VRdW90YU1hbmFn
ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikK
K3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xv
Y2spOworICAgIGF1dG8qIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyID0gbV9zZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7CisgICAgaWYgKCFzZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICB2b2lkIHdoZW5J
bml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIGZpbmFsCi0g
ICAgewotICAgICAgICBtX2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7Ci0gICAgfQorICAg
IFN0cmluZyBpZGJSb290UGF0aDsKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICBp
ZGJSb290UGF0aCA9IHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5pZGJSb290UGF0aCgpOwor
I2VuZGlmCisgICAgU3RvcmFnZVF1b3RhTWFuYWdlcjo6VXNhZ2VHZXR0ZXIgdXNhZ2VHZXR0ZXIg
PSBbY2FjaGVSb290UGF0aCA9IHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5jYWNoZVJvb3RQ
YXRoKCkuaXNvbGF0ZWRDb3B5KCksIGlkYlJvb3RQYXRoID0gaWRiUm9vdFBhdGguaXNvbGF0ZWRD
b3B5KCksIG9yaWdpbiA9IG9yaWdpbi5pc29sYXRlZENvcHkoKV0oKSB7CisgICAgICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOyAgICAKIAotICAgIFdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdl
cj4gbV9tYW5hZ2VyOwotICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gbV9jYWxsYmFjazsK
LX07CisgICAgICAgIHVpbnQ2NF90IHVzYWdlID0gQ2FjaGVTdG9yYWdlOjpFbmdpbmU6OmRpc2tV
c2FnZShjYWNoZVJvb3RQYXRoLCBvcmlnaW4pOworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQorICAgICAgICB1c2FnZSArPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlza1VzYWdlKGlkYlJv
b3RQYXRoLCBvcmlnaW4pOworI2VuZGlmCiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxp
emVRdW90YVVzZXJzKFN0b3JhZ2VRdW90YU1hbmFnZXImIG1hbmFnZXIsIFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNz
aW9uSUQsIG9yaWdpbiwgdXNlciA9IG1ha2VVbmlxdWU8UXVvdGFVc2VySW5pdGlhbGl6ZXI+KG1h
bmFnZXIpXSgpIG11dGFibGUgeworICAgICAgICByZXR1cm4gdXNhZ2U7CisgICAgfTsKKyAgICBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpRdW90YUluY3JlYXNlUmVxdWVzdGVyIHF1b3RhSW5jcmVhc2VS
ZXF1ZXN0ZXIgPSBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHNlc3Npb25J
RCwgb3JpZ2luXSAodWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2Us
IHVpbnQ2NF90IHJlcXVlc3RlZEluY3JlYXNlLCBhdXRvJiYgY2FsbGJhY2spIHsKKyAgICAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgdGhpcy0+aWRiU2VydmVyKHNlc3Npb25JRCkuaW5pdGlhbGl6
ZVF1b3RhVXNlcihvcmlnaW4pOwotICAgICAgICBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6aW5pdGlh
bGl6ZVF1b3RhVXNlcigqdGhpcywgc2Vzc2lvbklELCBvcmlnaW4sIFt1c2VyID0gV1RGTW92ZSh1
c2VyKV0geyB9KTsKLSAgICB9KTsKLX0KKyAgICAgICAgICAgIGNhbGxiYWNrKHsgfSk7CisgICAg
ICAgIHJlcXVlc3RTdG9yYWdlU3BhY2Uoc2Vzc2lvbklELCBvcmlnaW4sIGN1cnJlbnRRdW90YSwg
Y3VycmVudFNwYWNlLCByZXF1ZXN0ZWRJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykpOworICAg
IH07CiAKLVN0b3JhZ2VRdW90YU1hbmFnZXImIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFN
YW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmln
aW4pCi17Ci0gICAgYXV0byYgc3RvcmFnZVF1b3RhTWFuYWdlcnMgPSBtX3N0b3JhZ2VRdW90YU1h
bmFnZXJzLmVuc3VyZShzZXNzaW9uSUQsIFtdIHsKLSAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90
YU1hbmFnZXJzIHsgfTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgcmV0dXJuICpzdG9y
YWdlUXVvdGFNYW5hZ2Vycy5tYW5hZ2Vyc1Blck9yaWdpbigpLmVuc3VyZShvcmlnaW4sIFt0aGlz
LCAmc3RvcmFnZVF1b3RhTWFuYWdlcnMsIHNlc3Npb25JRCwgJm9yaWdpbl0gewotICAgICAgICBh
dXRvIG1hbmFnZXIgPSBtYWtlVW5pcXVlPFN0b3JhZ2VRdW90YU1hbmFnZXI+KHN0b3JhZ2VRdW90
YU1hbmFnZXJzLmRlZmF1bHRRdW90YShvcmlnaW4pLCBbdGhpcywgc2Vzc2lvbklELCBvcmlnaW5d
KHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5j
cmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKLSAgICAgICAgICAgIHRoaXMtPnJlcXVlc3RTdG9yYWdl
U3BhY2Uoc2Vzc2lvbklELCBvcmlnaW4sIHF1b3RhLCBjdXJyZW50U3BhY2UsIHNwYWNlSW5jcmVh
c2UsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGluaXRpYWxpemVR
dW90YVVzZXJzKCptYW5hZ2VyLCBzZXNzaW9uSUQsIG9yaWdpbik7Ci0gICAgICAgIHJldHVybiBt
YW5hZ2VyOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICByZXR1cm4gc2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXItPmVuc3VyZU9yaWdpblN0b3JhZ2VRdW90YU1hbmFnZXIob3JpZ2luLCBz
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+ZGVmYXVsdFF1b3RhKG9yaWdpbiksIFdURk1vdmUo
dXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKS5wdHIoKTsKIH0K
IAogI2lmICFQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAppbmRleCBmMDgwNmIyNzk4ZWY4OTM5MTBjYTc5NTM2YzRhYmIwMTZi
NTUyNzNlLi5kN2U0YTk1MjdlNDcxNTg1ZDhiZTc5M2YyMDRmNzk1ZGExMGQ2ZDA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0yODQsNiAr
Mjg0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2Nh
bFN0b3JhZ2UoKTsKIAogICAgIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRl
c3RpbmcoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAg
IHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKIAogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCiAgICAgdm9pZCBnZXRTYW5k
Ym94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVz
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiYp
PiYmKTsKQEAgLTMyNyw3ICszMjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBZENsaWNrQXR0
cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgVVJMJiYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBtYXJrQWRDbGlja0F0dHJpYnV0
aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CiAKLSAgICBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJiBzdG9yYWdl
UXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4m
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3Rh
TWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CiAK
ICAgICB2b2lkIGFkZEtlcHRBbGl2ZUxvYWQoUmVmPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4mJik7
CiAgICAgdm9pZCByZW1vdmVLZXB0QWxpdmVMb2FkKE5ldHdvcmtSZXNvdXJjZUxvYWRlciYpOwpA
QCAtNDQyLDYgKzQ0Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb2xsZWN0SW5kZXhlZERhdGFi
YXNlT3JpZ2luc0ZvclZlcnNpb24oY29uc3QgU3RyaW5nJiwgSGFzaFNldDxXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGE+Jik7CiAgICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+IGluZGV4ZWREYXRhYmFzZU9yaWdpbnMoY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICBSZWY8
V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI+IGNyZWF0ZUlEQlNlcnZlcihQQUw6OlNlc3Np
b25JRCk7CisgICAgdm9pZCBzZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRo
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtNDYxLDggKzQ2Myw0NCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcGVyZm9ybU5leHRTdG9yYWdlVGFzaygpOwogICAgIHZvaWQgZW5zdXJlUGF0aEV4
aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpOwogCi0gICAgdm9pZCBjbGVhclN0b3JhZ2VRdW90YShQ
QUw6OlNlc3Npb25JRCk7Ci0gICAgdm9pZCBpbml0aWFsaXplU3RvcmFnZVF1b3RhKGNvbnN0IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJik7CisgICAgY2xhc3MgU2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXIgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6
CisgICAgICAgIFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKGNvbnN0IFN0cmluZyYgY2FjaGVS
b290UGF0aCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0
eVF1b3RhKQorICAgICAgICAgICAgOiBtX2NhY2hlUm9vdFBhdGgoY2FjaGVSb290UGF0aCkKKyAg
ICAgICAgICAgICwgbV9kZWZhdWx0UXVvdGEoZGVmYXVsdFF1b3RhKQorICAgICAgICAgICAgLCBt
X2RlZmF1bHRUaGlyZFBhcnR5UXVvdGEoZGVmYXVsdFRoaXJkUGFydHlRdW90YSkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgICAgIHVpbnQ2NF90IGRlZmF1bHRRdW90YShjb25zdCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mIG9yaWdpbikgY29uc3QgeyByZXR1cm4gb3JpZ2luLnRvcE9yaWdpbiA9
PSBvcmlnaW4uY2xpZW50T3JpZ2luID8gbV9kZWZhdWx0UXVvdGEgOiBtX2RlZmF1bHRUaGlyZFBh
cnR5UXVvdGE7IH0KKworICAgICAgICBSZWY8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4g
ZW5zdXJlT3JpZ2luU3RvcmFnZVF1b3RhTWFuYWdlcihXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3Jp
Z2luLCB1aW50NjRfdCBxdW90YSwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6VXNhZ2VH
ZXR0ZXImJiB1c2FnZUdldHRlciwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6UXVvdGFJ
bmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8gW2l0ZXIsIGlzTmV3RW50cnldID0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vy
cy5lbnN1cmUob3JpZ2luLCBbcXVvdGEsIHVzYWdlR2V0dGVyID0gV1RGTW92ZSh1c2FnZUdldHRl
ciksIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0
ZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpjcmVhdGUocXVvdGEsIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3Zl
KHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
cmV0dXJuIG1ha2VSZWYoKml0ZXItPnZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8g
ZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2VycygpIHsgcmV0dXJuIG1fc3RvcmFnZVF1b3RhTWFu
YWdlcnMudmFsdWVzKCk7IH0KKworICAgICAgICBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgo
KSBjb25zdCB7IHJldHVybiBtX2NhY2hlUm9vdFBhdGg7IH0KKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKyAgICAgICAgdm9pZCBzZXRJREJSb290UGF0aChjb25zdCBTdHJpbmcmIGlkYlJv
b3RQYXRoKSB7IG1faWRiUm9vdFBhdGggPSBpZGJSb290UGF0aDsgfQorICAgICAgICBjb25zdCBT
dHJpbmcmIGlkYlJvb3RQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9pZGJSb290UGF0aDsgfQorI2Vu
ZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICBTdHJpbmcgbV9jYWNoZVJvb3RQYXRoOworI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgICAgICBTdHJpbmcgbV9pZGJSb290UGF0aDsK
KyNlbmRpZgorICAgICAgICB1aW50NjRfdCBtX2RlZmF1bHRRdW90YSB7IFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpIH07CisgICAgICAgIHVpbnQ2NF90IG1fZGVm
YXVsdFRoaXJkUGFydHlRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1
bHRUaGlyZFBhcnR5UXVvdGEoKSB9OworICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9y
aWdpbiwgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3N0b3JhZ2VRdW90
YU1hbmFnZXJzOworICAgIH07CisgICAgdm9pZCBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cihQQUw6OlNlc3Npb25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgsIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXIoUEFMOjpTZXNzaW9uSUQpOwogCiAgICAgLy8gQ29ubmVjdGlvbnMgdG8gV2ViUHJvY2Vzc2Vz
LgogICAgIEhhc2hNYXA8V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIFJlZjxOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcz4+IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zOwpAQCAtNTMzLDIz
ICs1NzEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCB7IGZh
bHNlIH07CiAjZW5kaWYKICAgICAKLSAgICBjbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VycyB7Ci0g
ICAgcHVibGljOgotICAgICAgICB1aW50NjRfdCBkZWZhdWx0UXVvdGEoY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJiBvcmlnaW4pIGNvbnN0IHsgcmV0dXJuIG9yaWdpbi50b3BPcmlnaW4gPT0g
b3JpZ2luLmNsaWVudE9yaWdpbiA/IG1fZGVmYXVsdFF1b3RhIDogbV9kZWZhdWx0VGhpcmRQYXJ0
eVF1b3RhOyB9Ci0gICAgICAgIHZvaWQgc2V0RGVmYXVsdFF1b3Rhcyh1aW50NjRfdCBkZWZhdWx0
UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1fZGVmYXVsdFF1b3RhID0gZGVmYXVsdFF1b3RhOwotICAgICAgICAgICAgbV9kZWZh
dWx0VGhpcmRQYXJ0eVF1b3RhID0gZGVmYXVsdFRoaXJkUGFydHlRdW90YTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+JiBtYW5hZ2Vyc1Blck9yaWdpbigpIHsgcmV0
dXJuIG1fbWFuYWdlcnNQZXJPcmlnaW47IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2
NF90IG1fZGVmYXVsdFF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVs
dFF1b3RhKCkgfTsKLSAgICAgICAgdWludDY0X3QgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhIHsg
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgpIH07
Ci0gICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fbWFuYWdlcnNQZXJPcmlnaW47Ci0gICAg
fTsKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2Vycz4gbV9z
dG9yYWdlUXVvdGFNYW5hZ2VyczsKKyAgICBMb2NrIG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXJzTG9jazsKKyAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyczsK
IAogICAgIE9wdGlvblNldDxOZXR3b3JrQ2FjaGU6OkNhY2hlT3B0aW9uPiBtX2NhY2hlT3B0aW9u
czsKICAgICBXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeSBtX21lc3NhZ2VQb3J0
Q2hhbm5lbFJlZ2lzdHJ5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggZTFlZTE3NDBmZDljZGY1OTEwZjhl
M2NmM2JhMDk3ZDI2ODE5ZDJhNS4uOWRiYWM2OGEzYmMyODMzNDNjMzVjMjhkNWNkNjJjZjllNzg0
ZGEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0xNjQsNCArMTY0LDYgQEAgbWVzc2FnZXMgLT4gTmV0
d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogCiAgICAgU2V0U2VydmljZVdvcmtlckZldGNo
VGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyBzZWNvbmRzKSAtPiAoKSBTeW5jaHJvbm91cwogICAg
IFJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSAtPiAoKSBTeW5jaHJv
bm91cworCisgICAgUmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+ICgpIEFz
eW5jCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKaW5kZXggZWZlN2UxNWIwNWY3ZDI1NjEwOWU4NjMyZTJm
MzA1ZTIxYzM2ODRiNi4uMDg4MzkxNWE2Y2Y3OGYwNWVjYWI5ZWQ1MzEyNTQ0Njc3NjY1ZjBiMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lLmNwcApAQCAtMTk2LDEzICsxOTYsNjggQEAgdm9pZCBFbmdpbmU6OmNs
ZWFyQ2FjaGVzRm9yT3JpZ2luKE5ldHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgUEFMOjpT
ZXNzaW9uSUQKICAgICB9KTsKIH0KIAotdm9pZCBFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIo
TmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgY2xpZW50T3JpZ2luLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCitzdGF0aWMgdWludDY0X3QgZ2V0RGly
ZWN0b3J5U2l6ZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpCit7CisgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CisKKyAgICB1aW50NjRfdCBkaXJlY3RvcnlTaXplID0gMDsKKyAgICBE
ZXF1ZTxTdHJpbmc+IHBhdGhzOworICAgIHBhdGhzLmFwcGVuZChkaXJlY3RvcnlQYXRoKTsKKyAg
ICB3aGlsZSAoIXBhdGhzLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIHBhdGggPSBwYXRocy50
YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShwYXRo
LCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpIHsKKyAgICAgICAg
ICAgIGF1dG8gbmV3UGF0aHMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgsICIqIl9z
KTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbmV3UGF0aCA6IG5ld1BhdGhzKSB7CisgICAgICAg
ICAgICAgICAgLy8gRmlsZXMgaW4gL0Jsb2JzIGRpcmVjdG9yeSBhcmUgaGFyZCBsaW5rLgorICAg
ICAgICAgICAgICAgIGF1dG8gZmlsZU5hbWUgPSBGaWxlU3lzdGVtOjpsYXN0Q29tcG9uZW50T2ZQ
YXRoSWdub3JpbmdUcmFpbGluZ1NsYXNoKG5ld1BhdGgpOworICAgICAgICAgICAgICAgIGlmIChm
aWxlTmFtZSA9PSAiQmxvYnMiKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBwYXRocy5hcHBlbmQobmV3UGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9
IDA7CisgICAgICAgIEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHBhdGgsIGZpbGVTaXplKTsKKyAg
ICAgICAgZGlyZWN0b3J5U2l6ZSArPSBmaWxlU2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIGRpcmVj
dG9yeVNpemU7Cit9CisKK3VpbnQ2NF90IEVuZ2luZTo6ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYg
cm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQogewotICAgIGZy
b20obmV0d29ya1Byb2Nlc3MsIHNlc3Npb25JRCwgW2NsaWVudE9yaWdpbiwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYgZW5naW5lKSBtdXRhYmxl
IHsKLSAgICAgICAgZW5naW5lLnJlYWRDYWNoZXNGcm9tRGlzayhjbGllbnRPcmlnaW4sIFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgY2FjaGVz
T3JFcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
ICAgICB9KTsKLSAgICB9KTsKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIGlm
IChyb290UGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgU3RyaW5nIHNh
bHRQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJvb3RQYXRoLCAi
c2FsdCJfcyk7CisgICAgYXV0byBzYWx0ID0gcmVhZE9yTWFrZVNhbHQoc2FsdFBhdGgpOworICAg
IGlmICghc2FsdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBLZXkga2V5KG9yaWdpbi50b3BP
cmlnaW4udG9TdHJpbmcoKSwgb3JpZ2luLmNsaWVudE9yaWdpbi50b1N0cmluZygpLCB7IH0sIHsg
fSwgKnNhbHQpOworICAgIFN0cmluZyBkaXJlY3RvcnlQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KHJvb3RQYXRoLCBrZXkuaGFzaEFzU3RyaW5nKCkpOworCisgICAg
U3RyaW5nIHNpemVGaWxlUGF0aCA9IENhY2hlczo6Y2FjaGVzU2l6ZUZpbGVuYW1lKGRpcmVjdG9y
eVBhdGgpOworICAgIGlmIChhdXRvIHJlY29yZGVkU2l6ZSA9IHJlYWRTaXplRmlsZShzaXplRmls
ZVBhdGgpKQorICAgICAgICByZXR1cm4gKnJlY29yZGVkU2l6ZTsKKworICAgIHJldHVybiBnZXRE
aXJlY3RvcnlTaXplKGRpcmVjdG9yeVBhdGgpOworfQorCit2b2lkIEVuZ2luZTo6cmVxdWVzdFNw
YWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNp
c2lvbik+JiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IGlmICghbV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpOworCisgICAgUmVmUHRyPFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIgPSBtX25ldHdvcmtQcm9jZXNz
LT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmlnaW4pOworICAgIGlmICghc3Rv
cmFnZVF1b3RhTWFuYWdlcikKKyAgICAgICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6RGVjaXNpb246OkRlbnkpOworCisgICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVx
dWVzdFNwYWNlT25NYWluVGhyZWFkKHNwYWNlUmVxdWVzdGVkLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
CiB9CiAKIEVuZ2luZTo6RW5naW5lKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgTmV0d29ya1By
b2Nlc3MmIHByb2Nlc3MsIFN0cmluZyYmIHJvb3RQYXRoKQpAQCAtMzQxLDcgKzM5Niw3IEBAIHZv
aWQgRW5naW5lOjpyZWFkQ2FjaGVzRnJvbURpc2soY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiBvcmlnaW4sIENhY2hlc0NhbGxiCiAKICAgICAgICAgYXV0byYgY2FjaGVzID0gbV9jYWNoZXMu
ZW5zdXJlKG9yaWdpbiwgWyZvcmlnaW4sIHRoaXNdIHsKICAgICAgICAgICAgIGF1dG8gcGF0aCA9
IGNhY2hlc1Jvb3RQYXRoKG9yaWdpbik7Ci0gICAgICAgICAgICByZXR1cm4gQ2FjaGVzOjpjcmVh
dGUoKnRoaXMsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IG9yaWdpbiB9LCBXVEZNb3ZlKHBhdGgp
LCBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmln
aW4pKTsKKyAgICAgICAgICAgIHJldHVybiBDYWNoZXM6OmNyZWF0ZSgqdGhpcywgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luIHsgb3JpZ2luIH0sIFdURk1vdmUocGF0aCkpOwogICAgICAgICB9KS5pdGVy
YXRvci0+dmFsdWU7CiAKICAgICAgICAgaWYgKGNhY2hlcy0+aXNJbml0aWFsaXplZCgpKSB7CkBA
IC00NzMsMTIgKzUyOCwxMyBAQCB2b2lkIEVuZ2luZTo6cmVtb3ZlRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lKQogICAgIH0pOwogfQogCi12b2lkIEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90IHNpemUpCit2b2lkIEVuZ2luZTo6d3JpdGVTaXplRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90IHNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBDb21wbGV0aW9uSGFuZGxlckNhbGxp
bmdTY29wZSBjb21wbGV0aW9uSGFuZGxlckNhbGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
aW9RdWV1ZS0+ZGlzcGF0Y2goW3BhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpLCBzaXplXSgpIHsK
KyAgICBtX2lvUXVldWUtPmRpc3BhdGNoKFtwYXRoID0gcGF0aC5pc29sYXRlZENvcHkoKSwgc2l6
ZSwgY29tcGxldGlvbkhhbmRsZXJDYWxsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyQ2Fs
bGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsU2l6ZUZp
bGVMb2NrKTsKICAgICAgICAgYXV0byBmaWxlSGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUo
cGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7CiAgICAgICAgIGF1dG8gY2xv
c2VGaWxlSGFuZGxlciA9IG1ha2VTY29wZUV4aXQoWyZdIHsKQEAgLTQ4OSw2ICs1NDUsOCBAQCB2
b2lkIEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90IHNp
emUpCiAKICAgICAgICAgRmlsZVN5c3RlbTo6dHJ1bmNhdGVGaWxlKGZpbGVIYW5kbGUsIDApOwog
ICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlSGFuZGxlLCBTdHJpbmc6Om51bWJl
cihzaXplKS51dGY4KCkuZGF0YSgpLCBTdHJpbmc6Om51bWJlcihzaXplKS51dGY4KCkubGVuZ3Ro
KCkpOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRs
ZXJDYWxsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyKV0oKSBtdXRhYmxlIHsg
fSk7CiAgICAgfSk7CiB9CiAKQEAgLTUxMywxMiArNTcxLDEyIEBAIE9wdGlvbmFsPHVpbnQ2NF90
PiBFbmdpbmU6OnJlYWRTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgaWYgKCFXVEY6
OmNvbnZlcnRTYWZlbHkoZmlsZVNpemUsIGJ5dGVzVG9SZWFkKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIFZlY3RvcjxjaGFyPiBidWZmZXIoYnl0ZXNUb1JlYWQpOwotICAg
IHNpemVfdCB0b3RhbEJ5dGVzUmVhZCA9IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShmaWxlSGFu
ZGxlLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKKyAgICBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4gYnVmZmVyKGJ5dGVzVG9SZWFkKTsKKyAgICBzaXplX3QgdG90YWxCeXRlc1JlYWQgPSBG
aWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZUhhbmRsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oYnVmZmVyLmRhdGEoKSksIGJ1ZmZlci5zaXplKCkpOwogICAgIGlmICh0b3RhbEJ5dGVzUmVh
ZCAhPSBieXRlc1RvUmVhZCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5kYXRhKCkpLnRvVUludDY0U3RyaWN0KCk7Cisg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyLmRhdGEoKSwgdG90YWxCeXRlc1JlYWQp
LnRvVUludDY0U3RyaWN0KCk7CiB9CiAKIGNsYXNzIFJlYWRPcmlnaW5zVGFza0NvdW50ZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxSZWFkT3JpZ2luc1Rhc2tDb3VudGVyPiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaApp
bmRleCBhM2FhYWYwOTAxYzk1ZTYxNTA1MjE5ZGQyYzFlYjdmNjU3MjBmMDU2Li4yMmVlNjZiY2E0
NzZiY2UyYmNhNGIyZDUxZGFjZTk1NDdhZDcxN2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmgKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEYXRhLmgiCiAjaW5jbHVkZSAiV2Vic2l0
ZURhdGEuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NsaWVudE9yaWdpbi5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBA
IC03OSwxMiArODAsMTUgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVF1
b3RhVXNlcihOZXR3b3JrUHJvY2VzcyYsIFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpD
bGllbnRPcmlnaW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgc3RhdGlj
IHVpbnQ2NF90IGRpc2tVc2FnZShjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mKTsKKyAgICB2b2lkIHJlcXVlc3RTcGFjZShjb25zdCBXZWJDb3JlOjpD
bGllbnRPcmlnaW4mLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYpOworCiAgICAg
Ym9vbCBzaG91bGRQZXJzaXN0KCkgY29uc3QgeyByZXR1cm4gISFtX2lvUXVldWU7fQogCiAgICAg
dm9pZCB3cml0ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgTmV0d29ya0NhY2hlOjpEYXRh
JiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAgICAg
dm9pZCByZWFkRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IE5ldHdvcmtDYWNoZTo6RGF0YSYsIGludCBlcnJvcik+JiYpOwogICAgIHZvaWQg
cmVtb3ZlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKTsKLSAgICB2b2lkIHdyaXRlU2l6ZUZp
bGUoY29uc3QgU3RyaW5nJiwgdWludDY0X3Qgc2l6ZSk7CisgICAgdm9pZCB3cml0ZVNpemVGaWxl
KGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90IHNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CiAgICAgc3RhdGljIE9wdGlvbmFsPHVpbnQ2NF90PiByZWFkU2l6ZUZpbGUoY29uc3QgU3Ry
aW5nJik7CiAKICAgICBjb25zdCBTdHJpbmcmIHJvb3RQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9y
b290UGF0aDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAppbmRleCA2ZmM1M2UwM2M0ZDY3
YTAwZmE5MWYyYjNmY2ZiZGQ3ZTExOTY4Y2UzLi5iYTEzNGNmNGNhYjAwNWYzNDIxMzg5ZDU1OTAx
NjllYzQ3YWQ0ZTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcApAQCAtNDE0LDggKzQx
NCwxMSBAQCB2b2lkIENhY2hlOjpwdXQoVmVjdG9yPFJlY29yZD4mJiByZWNvcmRzLCBSZWNvcmRJ
ZGVudGlmaWVyc0NhbGxiYWNrJiYgY2FsbGJhY2spCiAgICAgICAgIGF1dG8gcG9zaXRpb24gPSAo
c2FtZVVSTFJlY29yZHMgJiYgIW1hdGNoaW5nUmVjb3Jkcy5pc0VtcHR5KCkpID8gc2FtZVVSTFJl
Y29yZHMtPmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5p
ZGVudGlmaWVyID09IG1hdGNoaW5nUmVjb3Jkc1swXTsgfSkgOiBub3RGb3VuZDsKIAogICAgICAg
ICBzcGFjZVJlcXVpcmVkICs9IHJlY29yZC5yZXNwb25zZUJvZHlTaXplOwotICAgICAgICBpZiAo
cG9zaXRpb24gIT0gbm90Rm91bmQpCi0gICAgICAgICAgICBzcGFjZVJlcXVpcmVkIC09IHNhbWVV
UkxSZWNvcmRzLT5hdChwb3NpdGlvbikuc2l6ZTsKKyAgICAgICAgaWYgKHBvc2l0aW9uICE9IG5v
dEZvdW5kKSB7CisgICAgICAgICAgICB1aW50NjRfdCBzcGFjZURlY3JlYXNlZCA9IHNhbWVVUkxS
ZWNvcmRzLT5hdChwb3NpdGlvbikuc2l6ZTsKKyAgICAgICAgICAgIGlmIChzcGFjZVJlcXVpcmVk
ID49IHNwYWNlRGVjcmVhc2VkKQorICAgICAgICAgICAgICAgIHNwYWNlUmVxdWlyZWQgLT0gc3Bh
Y2VEZWNyZWFzZWQ7CisgICAgICAgIH0KICAgICB9CiAKICAgICBtX2NhY2hlcy5yZXF1ZXN0U3Bh
Y2Uoc3BhY2VSZXF1aXJlZCwgW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVy
ID0gbV9pZGVudGlmaWVyLCByZWNvcmRzID0gV1RGTW92ZShyZWNvcmRzKSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0oT3B0aW9uYWw8RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmIGVycm9y
KSBtdXRhYmxlIHsKQEAgLTQ1MCw3ICs0NTMsMTAgQEAgdm9pZCBDYWNoZTo6cmVtb3ZlKFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb24K
ICAgICAgICAgcmV0dXJuIHNob3VsZFJlbW92ZTsKICAgICB9KTsKIAotICAgIGNhbGxiYWNrKFdU
Rk1vdmUocmVjb3JkSWRlbnRpZmllcnMpKTsKKyAgICAvLyBUaGlzIG9wZXJhdGlvbiB3b3VsZCBj
aGFuZ2UgY2FjaGVzIHNpemUsIHNvIG1ha2Ugc3VyZSBjYWxsYmFjayBmaW5pc2hlcyBhZnRlciBz
aXplIGZpbGUgaXMgdXBkYXRlZC4KKyAgICBtX2NhY2hlcy51cGRhdGVTaXplRmlsZShbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVjb3JkSWRlbnRpZmllcnMgPSBXVEZNb3ZlKHJlY29y
ZElkZW50aWZpZXJzKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgY2FsbGJhY2soV1RGTW92ZShyZWNv
cmRJZGVudGlmaWVycykpOworICAgIH0pOwogfQogCiB2b2lkIENhY2hlOjpyZW1vdmVGcm9tUmVj
b3JkTGlzdChjb25zdCBWZWN0b3I8dWludDY0X3Q+JiByZWNvcmRJZGVudGlmaWVycykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGVzLmNwcAppbmRleCAwM2EwNjBjZWYyYmM2NzIwMTRiNzU5NmJjNWRh
NGVlOTQzODYxYTdjLi5mMjM3NDUxODNmZjcxNzU5MjdhNTAwYTVkMDZmN2M3YjIzYzFjZDIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCkBAIC01NiwzNiArNTYsMjEgQEAgU3RyaW5n
IENhY2hlczo6Y2FjaGVzU2l6ZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgY2FjaGVzUm9vdHNQYXRo
KQogICAgIHJldHVybiBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY2FjaGVz
Um9vdHNQYXRoLCAiZXN0aW1hdGVkc2l6ZSJfcyk7CiB9CiAKLVJlZjxDYWNoZXM+IENhY2hlczo6
Y3JlYXRlKEVuZ2luZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0
cmluZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJiBxdW90YU1hbmFn
ZXIpCitSZWY8Q2FjaGVzPiBDYWNoZXM6OmNyZWF0ZShFbmdpbmUmIGVuZ2luZSwgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCkKIHsKLSAgICBhdXRvIGNh
Y2hlcyA9IGFkb3B0UmVmKCpuZXcgQ2FjaGVzIHsgZW5naW5lLCBXVEZNb3ZlKG9yaWdpbiksIFdU
Rk1vdmUocm9vdFBhdGgpLCBxdW90YU1hbmFnZXIgfSk7Ci0gICAgcXVvdGFNYW5hZ2VyLmFkZFVz
ZXIoY2FjaGVzLmdldCgpKTsKLSAgICByZXR1cm4gY2FjaGVzOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENhY2hlcyB7IGVuZ2luZSwgV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKHJvb3RQYXRo
KSB9KTsKIH0KIAotQ2FjaGVzOjpDYWNoZXMoRW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVu
dE9yaWdpbiYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXImIHF1b3RhTWFuYWdlcikKK0NhY2hlczo6Q2FjaGVzKEVuZ2luZSYgZW5naW5lLCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQYXRoKQogICAgIDog
bV9lbmdpbmUoJmVuZ2luZSkKICAgICAsIG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKICAgICAs
IG1fcm9vdFBhdGgoV1RGTW92ZShyb290UGF0aCkpCi0gICAgLCBtX3F1b3RhTWFuYWdlcihtYWtl
V2Vha1B0cihxdW90YU1hbmFnZXIpKQogewogfQogCiBDYWNoZXM6On5DYWNoZXMoKQogewogICAg
IEFTU0VSVChtX3BlbmRpbmdXcml0aW5nQ2FjaGVzVG9EaXNrQ2FsbGJhY2tzLmlzRW1wdHkoKSk7
Ci0KLSAgICBpZiAobV9xdW90YU1hbmFnZXIpCi0gICAgICAgIG1fcXVvdGFNYW5hZ2VyLT5yZW1v
dmVVc2VyKCp0aGlzKTsKLX0KLQotdm9pZCBDYWNoZXM6OndoZW5Jbml0aWFsaXplZChDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCi17Ci0gICAgaW5pdGlhbGl6ZShbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAg
aWYgKGVycm9yKQotICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoQ2FjaGVTdG9yYWdlLCAi
Q2FjaGVzOjppbml0aWFsaXplIGZhaWxlZCwgcmVwb3J0ZWQgc3BhY2UgdXNlZCB3aWxsIGJlIHpl
cm8iKTsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICB9KTsKIH0KIAogdm9pZCBDYWNoZXM6OnJl
dHJpZXZlT3JpZ2luRnJvbURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGZvbGRlclBhdGgsIFdvcmtR
dWV1ZSYgcXVldWUsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxXZWJDb3Jl
OjpDbGllbnRPcmlnaW4+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMjA4LDEwICsxOTMs
MTQgQEAgdm9pZCBDYWNoZXM6OmluaXRpYWxpemUoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNv
bXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogICAgIH0pOwogfQogCi12b2lkIENhY2hlczo6
dXBkYXRlU2l6ZUZpbGUoKQordm9pZCBDYWNoZXM6OnVwZGF0ZVNpemVGaWxlKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAobV9lbmdpbmUp
Ci0gICAgICAgIG1fZW5naW5lLT53cml0ZVNpemVGaWxlKGNhY2hlc1NpemVGaWxlbmFtZShtX3Jv
b3RQYXRoKSwgbV9zaXplKTsKKyAgICBpZiAoIW1fZW5naW5lKSB7CisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2VuZ2luZS0+d3Jp
dGVTaXplRmlsZShjYWNoZXNTaXplRmlsZW5hbWUobV9yb290UGF0aCksIG1fc2l6ZSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIENhY2hlczo6aW5pdGlhbGl6ZVNpemUo
KQpAQCAtMjMyLDEzICsyMjEsMTIgQEAgdm9pZCBDYWNoZXM6OmluaXRpYWxpemVTaXplKCkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX3NpemUg
PSBzaXplOwotICAgICAgICAgICAgdXBkYXRlU2l6ZUZpbGUoKTsKLQotICAgICAgICAgICAgbV9p
c0luaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8gcGVuZGluZ0NhbGxiYWNrcyA9
IFdURk1vdmUobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25DYWxsYmFja3MpOwotICAgICAgICAgICAg
Zm9yIChhdXRvJiBjYWxsYmFjayA6IHBlbmRpbmdDYWxsYmFja3MpCi0gICAgICAgICAgICAgICAg
Y2FsbGJhY2soV1RGOjpudWxsb3B0KTsKLQorICAgICAgICAgICAgdXBkYXRlU2l6ZUZpbGUoW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpXSgpIG11dGFibGUgewor
ICAgICAgICAgICAgICAgIG1faXNJbml0aWFsaXplZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
YXV0byBwZW5kaW5nQ2FsbGJhY2tzID0gV1RGTW92ZShtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNh
bGxiYWNrcyk7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IHBlbmRpbmdD
YWxsYmFja3MpCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9wdCk7Cisg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBh
dXRvIGRlY29kZWQgPSBDYWNoZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKCpzdG9yYWdlKTsKQEAgLTI3
MywxMyArMjYxLDExIEBAIHZvaWQgQ2FjaGVzOjpjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIG1fc3RvcmFnZS0+Y2xlYXIoU3RyaW5n
IHsgfSwgLVdhbGxUaW1lOjppbmZpbml0eSgpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewogICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAgICAg
ICAgIHByb3RlY3RlZFRoaXMtPmNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKLSAgICAgICAg
ICAgIHByb3RlY3RlZFRoaXMtPnJlc2V0U3BhY2VVc2VkKCk7CiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBj
bGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgcmVzZXRTcGFjZVVzZWQoKTsKICAgICBj
bGVhclBlbmRpbmdXcml0aW5nQ2FjaGVzVG9EaXNrQ2FsbGJhY2tzKCk7CiAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKIH0KQEAgLTUyNSwxMiArNTExLDEyIEBAIHZvaWQgQ2FjaGVzOjpyZWFkUmVj
b3Jkc0xpc3QoQ2FjaGUmIGNhY2hlLCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlRyYXZlcnNlSGFu
ZGxlCiAKIHZvaWQgQ2FjaGVzOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VSZXF1aXJlZCwg
V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQog
ewotICAgIGlmICghbV9xdW90YU1hbmFnZXIpIHsKKyAgICBpZiAoIW1fZW5naW5lKSB7CiAgICAg
ICAgIGNhbGxiYWNrKEVycm9yOjpRdW90YUV4Y2VlZGVkKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIG1fcXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2Uoc3BhY2VSZXF1aXJlZCwgW2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgeworICAg
IG1fZW5naW5lLT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4sIHNwYWNlUmVxdWlyZWQsIFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKICAgICAgICAg
c3dpdGNoIChkZWNpc2lvbikgewogICAgICAgICBjYXNlIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OkRlY2lzaW9uOjpEZW55OgogICAgICAgICAgICAgY2FsbGJhY2soRXJyb3I6OlF1b3Rh
RXhjZWVkZWQpOwpAQCAtNTQ4LDcgKzUzNCw2IEBAIHZvaWQgQ2FjaGVzOjp3cml0ZVJlY29yZChj
b25zdCBDYWNoZSYgY2FjaGUsIGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmRJbmZvCiAg
ICAgQVNTRVJUKG1fc2l6ZSA+PSBwcmV2aW91c1JlY29yZFNpemUpOwogICAgIG1fc2l6ZSArPSBy
ZWNvcmRJbmZvcm1hdGlvbi5zaXplOwogICAgIG1fc2l6ZSAtPSBwcmV2aW91c1JlY29yZFNpemU7
Ci0gICAgdXBkYXRlU2l6ZUZpbGUoKTsKIAogICAgIGlmICghc2hvdWxkUGVyc2lzdCgpKSB7CiAg
ICAgICAgIG1fdm9sYXRpbGVTdG9yYWdlLnNldChyZWNvcmRJbmZvcm1hdGlvbi5rZXksIFdURk1v
dmUocmVjb3JkKSk7CkBAIC01NTYsMTMgKzU0MSwxNSBAQCB2b2lkIENhY2hlczo6d3JpdGVSZWNv
cmQoY29uc3QgQ2FjaGUmIGNhY2hlLCBjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5m
bwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zdG9yYWdlLT5zdG9yZShDYWNoZTo6
ZW5jb2RlKHJlY29yZEluZm9ybWF0aW9uLCByZWNvcmQpLCB7IH0sIFtwcm90ZWN0ZWRTdG9yYWdl
ID0gbWFrZVJlZigqbV9zdG9yYWdlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oaW50
IGVycm9yKSBtdXRhYmxlIHsKKyAgICBtX3N0b3JhZ2UtPnN0b3JlKENhY2hlOjplbmNvZGUocmVj
b3JkSW5mb3JtYXRpb24sIHJlY29yZCksIHsgfSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1fc3RvcmFnZSksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKGludCBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGlm
IChlcnJvcikgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoQ2FjaGVTdG9yYWdlLCAi
Q2FjaGVzOjp3cml0ZVJlY29yZCBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIGVycm9yKTsKICAgICAg
ICAgICAgIGNhbGxiYWNrKEVycm9yOjpXcml0ZURpc2spOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrKFdURjo6bnVsbG9wdCk7CisgICAgICAgIHVwZGF0
ZVNpemVGaWxlKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgeworICAg
ICAgICAgICAgY2FsbGJhY2soV1RGOjpudWxsb3B0KTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9
CiAKQEAgLTYwNSw3ICs1OTIsNyBAQCB2b2lkIENhY2hlczo6cmVtb3ZlUmVjb3JkKGNvbnN0IFJl
Y29yZEluZm9ybWF0aW9uJiByZWNvcmQpCiAKICAgICBBU1NFUlQobV9zaXplID49IHJlY29yZC5z
aXplKTsKICAgICBtX3NpemUgLT0gcmVjb3JkLnNpemU7Ci0gICAgdXBkYXRlU2l6ZUZpbGUoKTsK
KyAgICB1cGRhdGVTaXplRmlsZShbXSB7IH0pOwogCiAgICAgcmVtb3ZlQ2FjaGVFbnRyeShyZWNv
cmQua2V5KTsKIH0KQEAgLTYyMSwxNyArNjA4LDYgQEAgdm9pZCBDYWNoZXM6OnJlbW92ZUNhY2hl
RW50cnkoY29uc3QgTmV0d29ya0NhY2hlOjpLZXkmIGtleSkKICAgICBtX3N0b3JhZ2UtPnJlbW92
ZShrZXkpOwogfQogCi12b2lkIENhY2hlczo6cmVzZXRTcGFjZVVzZWQoKQotewotICAgIG1fc2l6
ZSA9IDA7Ci0gICAgdXBkYXRlU2l6ZUZpbGUoKTsKLQotICAgIGlmIChtX3F1b3RhTWFuYWdlcikg
ewotICAgICAgICBtX3F1b3RhTWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci0gICAgICAgIG1f
cXVvdGFNYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKLSAgICB9Ci19Ci0KIHZvaWQgQ2FjaGVzOjpj
bGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCkKIHsKICAgICBtYWtlRGlydHkoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlcy5oCmluZGV4IDAzMjMxZjNhOWIwNTc2NzJkNjMxYmI5NmU2N2E2ZWI5OWUx
ZDdjYmIuLjVkMzk0YTBlNDg4NTdiMDI1Y2FhNDgzNGFkMjZiZTg0N2RkOWY1NTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZXMuaApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkNhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ2xpZW50T3JpZ2luLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdl
UXVvdGFVc2VyLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL0RlcXVlLmg+CiAKQEAgLTQyLDEwICs0MSwxMCBAQCBuYW1lc3BhY2UgQ2FjaGVTdG9y
YWdlIHsKIAogY2xhc3MgRW5naW5lOwogCi1jbGFzcyBDYWNoZXMgZmluYWwgOiBwdWJsaWMgUmVm
Q291bnRlZDxDYWNoZXM+LCBwcml2YXRlIFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVzZXIgeworY2xh
c3MgQ2FjaGVzIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FjaGVzPiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFN0cmluZyBjYWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7Ci0gICAg
c3RhdGljIFJlZjxDYWNoZXM+IGNyZWF0ZShFbmdpbmUmLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4m
JiwgU3RyaW5nJiYgcm9vdFBhdGgsIFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXImKTsKKyAg
ICBzdGF0aWMgU3RyaW5nIGNhY2hlc1NpemVGaWxlbmFtZShjb25zdCBTdHJpbmcmIGNhY2hlc1Jv
b3RzUGF0aCk7CisgICAgc3RhdGljIFJlZjxDYWNoZXM+IGNyZWF0ZShFbmdpbmUmLCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mJiwgU3RyaW5nJiYgcm9vdFBhdGgpOwogICAgIH5DYWNoZXMoKTsKIAog
ICAgIHN0YXRpYyB2b2lkIHJldHJpZXZlT3JpZ2luRnJvbURpcmVjdG9yeShjb25zdCBTdHJpbmcm
IGZvbGRlclBhdGgsIFdvcmtRdWV1ZSYsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRp
b25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+JiYpPiYmKTsKQEAgLTc5LDIyICs3OCwxNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKICAgICB2b2lkIGNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKLSAgICB2b2lkIHJlc2V0
U3BhY2VVc2VkKCk7CiAKICAgICB1aW50NjRfdCBzdG9yYWdlU2l6ZSgpIGNvbnN0OworICAgIHZv
aWQgdXBkYXRlU2l6ZUZpbGUoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogcHJpdmF0
ZToKLSAgICBDYWNoZXMoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYsIFN0cmluZyYm
IHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJik7Ci0KLSAgICAvLyBTdG9y
YWdlUXVvdGFVc2VyIEFQSS4KLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX3NpemU7IH0KKyAgICBDYWNoZXMoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luJiYsIFN0cmluZyYmIHJvb3RQYXRoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVNpemUoKTsK
ICAgICB2b2lkIHJlYWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8
VmVjdG9yPENhY2hlPiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7CiAg
ICAgdm9pZCB3cml0ZUNhY2hlc1RvRGlzayhXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxl
dGlvbkNhbGxiYWNrJiYpOwogCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKLQogICAgIHZvaWQgc3RvcmVPcmlnaW4oV2ViQ29yZTo6
RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKICAgICBzdGF0aWMgT3B0aW9u
YWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2luPiByZWFkT3JpZ2luKGNvbnN0IE5ldHdvcmtDYWNoZTo6
RGF0YSYpOwogCkBAIC0xMDYsOCArMTAwLDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaGFzQWN0
aXZlQ2FjaGUoKSBjb25zdDsKIAotICAgIHZvaWQgdXBkYXRlU2l6ZUZpbGUoKTsKLQogICAgIGJv
b2wgbV9pc0luaXRpYWxpemVkIHsgZmFsc2UgfTsKICAgICBFbmdpbmUqIG1fZW5naW5lIHsgbnVs
bHB0ciB9OwogICAgIHVpbnQ2NF90IG1fdXBkYXRlQ291bnRlciB7IDAgfTsKQEAgLTEyMiw3ICsx
MTQsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29t
cGxldGlvbkNhbGxiYWNrPiBtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNrczsKICAgICBi
b29sIG1faXNXcml0aW5nQ2FjaGVzVG9EaXNrIHsgZmFsc2UgfTsKICAgICBEZXF1ZTxDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpFcnJvcj4p
Pj4gbV9wZW5kaW5nV3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrczsKLSAgICBXZWFrUHRyPFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+IG1fcXVvdGFNYW5hZ2VyOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgQ2FjaGVTdG9yYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJz
aXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAKaW5kZXggYzBmY2Y5YzVmNjAwYWE1YWMxMTYzZTQ3
YTRiMjZkYWM0MjA2NWFhOS4uNmQwYzEyOWE3NDA1MTBkMzg2OTczNzA1YWQwOTJlZjEzMmNjMDc1
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFt
ZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJh
bWV0ZXJzLmNwcApAQCAtNTUsNiArNTUsOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogCiAgICAgZW5jb2RlciA8
PCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPDwgbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9u
SGFuZGxlOwogCisgICAgZW5jb2RlciA8PCBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPDwgY2FjaGVT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworCiAgICAgZW5jb2RlciA8PCBwZXJPcmln
aW5TdG9yYWdlUXVvdGE7CiAgICAgZW5jb2RlciA8PCBwZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFn
ZVF1b3RhOwogfQpAQCAtMTQxLDYgKzE0MywxOCBAQCBPcHRpb25hbDxXZWJzaXRlRGF0YVN0b3Jl
UGFyYW1ldGVycz4gV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlYwog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdl
RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqbG9jYWxTdG9yYWdlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKIAorICAgIE9wdGlvbmFsPFN0cmluZz4gY2FjaGVTdG9yYWdlRGly
ZWN0b3J5OworICAgIGRlY29kZXIgPj4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5OworICAgIGlmICgh
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZSgqY2FjaGVTdG9yYWdl
RGlyZWN0b3J5KTsKKworICAgIE9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGRlY29kZXIgPj4gY2FjaGVT
dG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworICAgIGlmICghY2FjaGVTdG9yYWdlRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92
ZSgqY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKwogICAgIE9wdGlvbmFs
PHVpbnQ2NF90PiBwZXJPcmlnaW5TdG9yYWdlUXVvdGE7CiAgICAgZGVjb2RlciA+PiBwZXJPcmln
aW5TdG9yYWdlUXVvdGE7CiAgICAgaWYgKCFwZXJPcmlnaW5TdG9yYWdlUXVvdGEpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaAppbmRleCAw
OTVmMDlkNmFmOTNmOTEzZWJiMjlmNzAyNjdhZTljMWI3NGJlODhlLi5mMjdkZjQ4OTgwOWYzMTk2
MDhiNjgwY2IyYThhMWMxNGI3MDE4NDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKQEAgLTcxLDYgKzcxLDkgQEAgc3RydWN0IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHsKICAgICBTdHJpbmcgbG9jYWxTdG9yYWdlRGlyZWN0
b3J5OwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBsb2NhbFN0b3JhZ2VEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGU7CiAKKyAgICBTdHJpbmcgY2FjaGVTdG9yYWdlRGlyZWN0b3J5OworICAg
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBjYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25I
YW5kbGU7CisKICAgICB1aW50NjRfdCBwZXJPcmlnaW5TdG9yYWdlUXVvdGEgeyBXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSB9OwogICAgIHVpbnQ2NF90IHBlclRo
aXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgeyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAppbmRleCAyNGNj
MWFmYzdlYjc3MmQwNjA0ODI2MWVkZmNmMmY1N2FkYTFhNmZkLi42ZjVhOTA3ZGRkYzI4N2EzOGY0
ZmEwYjg4MzAzODg3ZDk4MzNkNjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAKQEAgLTY4NiwzICs2ODYsMTEg
QEAgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRl
c3RpbmcoV0tXZWJzaXRlRGF0YVN0b3JlUmUKIHsKICAgICBXZWJLaXQ6OnRvSW1wbChkYXRhU3Rv
cmVSZWYpLT5zZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3RpbmcoV2ViS2l0Ojp0b0Nh
Y2hlTW9kZWwoY2FjaGVNb2RlbCkpOwogfQorCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVJlc2V0
UXVvdGEoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgdm9pZCogY29udGV4dCwg
V0tXZWJzaXRlRGF0YVN0b3JlUmVzZXRRdW90YUNhbGxiYWNrIGNhbGxiYWNrKQoreworICAgIFdl
YktpdDo6dG9JbXBsKGRhdGFTdG9yZVJlZiktPnJlc2V0UXVvdGEoW2NvbnRleHQsIGNhbGxiYWNr
XSB7CisgICAgICAgIGlmIChjYWxsYmFjaykKKyAgICAgICAgICAgIGNhbGxiYWNrKGNvbnRleHQp
OworICAgIH0pOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tXZWJzaXRlRGF0YVN0b3JlUmVmLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaAppbmRleCAxMGJhZjdlZTMzNmQ0NGZkZGUyNDExOTg0ZTE4
ZDYxMjY5M2ZjNjFhLi4xMjExOWE1NDI4OWRmMWVlMWU3ZDNhZTZjY2NjNWE3ZWVjNjc4N2QxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3Rv
cmVSZWYuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRh
U3RvcmVSZWYuaApAQCAtMTU1LDYgKzE1NSw5IEBAIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURh
dGFTdG9yZUNsZWFyQWRDbGlja0F0dHJpYnV0aW9uc1Rocm91Z2hXZWJzaXRlRGF0YVJlbW92CiAK
IFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVNldENhY2hlTW9kZWxTeW5jaHJvbm91
c2x5Rm9yVGVzdGluZyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGF0YVN0b3JlUmVmLCBXS0NhY2hl
TW9kZWwgY2FjaGVNb2RlbCk7CiAKK3R5cGVkZWYgdm9pZCAoKldLV2Vic2l0ZURhdGFTdG9yZVJl
c2V0UXVvdGFDYWxsYmFjaykodm9pZCogZnVuY3Rpb25Db250ZXh0KTsKK1dLX0VYUE9SVCB2b2lk
IFdLV2Vic2l0ZURhdGFTdG9yZVJlc2V0UXVvdGEoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFT
dG9yZVJlZiwgdm9pZCogY29udGV4dCwgV0tXZWJzaXRlRGF0YVN0b3JlUmVzZXRRdW90YUNhbGxi
YWNrIGNhbGxiYWNrKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
Y3BwCmluZGV4IDE3MmJiMzMwNTBiYzM1ZjExYjUxZTkzZTk3MTU1NTY5Y2Y5ZDEwMmQuLjQ1YWVi
YTQwMjMyNTEyYTM5YTlhNzY0Y2QyYWYzNDM1NWYwNmE4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAt
MTM2Nyw2ICsxMzY3LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vz
c0Fzc2VydGlvbigpCiAgICAgbV9hY3Rpdml0eUZyb21XZWJQcm9jZXNzZXMgPSBudWxscHRyOwog
fQogCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVz
ZXRRdW90YShzZXNzaW9uSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAogCiAjdW5kZWYgTUVTU0FHRV9DSEVDSwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAppbmRl
eCBiMTMyMmJiYzY2YTU4OGFiYmFhYjUwMGJkNTNhMmJlOWU3YmQyOWZmLi4wYzY5YTc2Yjc2NTg3
ZTk1YTZjZTdmNGE4ODIzYjVjYmM5ODNmOTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaApAQCAtNTYsNiArNTYsNyBA
QCBlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biA6IGJvb2w7CiBlbnVtIGNs
YXNzIFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkIDogYm9vbDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2lu
Owogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKK3N0cnVjdCBDbGllbnRPcmlnaW47CiB9CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTk2LDYgKzE5Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJik7CiAg
ICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yTGVnYWN5Q3VzdG9tUHJvdG9jb2woY29uc3QgU3Ry
aW5nJik7CiAKKyAgICB2b2lkIHJlc2V0UXVvdGEoUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CisKIHByaXZhdGU6CiAgICAgLy8gQXV4aWxpYXJ5UHJvY2Vzc1By
b3h5CiAgICAgdm9pZCBnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0
aW9ucyYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
Y3BwCmluZGV4IDQwMjU1NTZiYzljZjBhN2JhNDM3MGMzMjFiYzZjMTFhZjJkNjJhY2QuLmE2ODg3
YjlhOTU4ZjVlM2JkZmQxNTg0YWM5MzI1OTA5MTlmY2M2ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTU1MSw2ICs1NTEsMTIgQEAgTmV0d29ya1By
b2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmVuc3VyZU5ldHdvcmtQcm9jZXNzKFdlYnNpdGVE
YXRhU3RvcmUqIHdpdGgKICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
LmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKICAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9y
YWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2Fs
U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKKyAgICBhdXRvIGNhY2hlU3RvcmFn
ZURpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZSA/IG1fd2Vic2l0ZURhdGFTdG9yZS0+Y2Fj
aGVTdG9yYWdlRGlyZWN0b3J5KCkgOiBudWxsU3RyaW5nKCk7CisgICAgaWYgKCFjYWNoZVN0b3Jh
Z2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7CisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNoZVN0b3JhZ2VEaXJlY3RvcnksIHBhcmFt
ZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKKyAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBXVEZNb3ZlKGNhY2hlU3RvcmFnZURpcmVjdG9y
eSk7CisgICAgfQorCiAgICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKICAgICAgICAgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMu
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVz
b2x2ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KCk7CiAgICAgaWYgKHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNv
Y29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0
ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IGIxZjU0MDFiN2JhMzc5MmI1OGFlODExYzRlNDkxNTY0
NDc3MWQzOWEuLjI5MDRiMDdlMjFkYjVkMzdlNGNiY2M5MDRlYTI5Y2QyYTgyNWFmODggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVE
YXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KQEAgLTE5NSw2ICsxOTUsMTAgQEAgV2Vi
c2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMgV2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycygpCiAg
ICAgaWYgKCFwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCiAgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShw
YXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCisgICAgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VE
aXJlY3RvcnkgPSBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMu
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuY2FjaGVTdG9y
YWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CisKICAgICBwYXJhbWV0ZXJzLnBlck9yaWdpblN0b3JhZ2VRdW90YSA9IHBlck9yaWdp
blN0b3JhZ2VRdW90YSgpOwogICAgIHBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3Jh
Z2VRdW90YSA9IHBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcAppbmRleCA2YjRiMDJjNzRjYzllMDE2MDc1MzAwODFiZGIxZWNkZGI1M2VjYTZjLi5lNjU0
ZTc0MzE4MTdiZGUyOTkzNDEwMTVjYThiMzdhNzEwYzJjOTNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApA
QCAtMjA4Nyw2ICsyMDg3LDEyIEBAIFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIFdlYnNpdGVE
YXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkobG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAgICAgfQogCisgICAg
YXV0byBjYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSB0aGlzLT5jYWNoZVN0b3JhZ2VEaXJlY3Rvcnko
KTsKKyAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNhY2hl
U3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOworICAgICAgICBwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IGNh
Y2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICB9CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKICAgICBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSA9IHJlc29sdmVkSW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5KCk7CiAgICAgaWYgKCFwYXJhbWV0ZXJzLmluZGV4ZWREYXRh
YmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpCkBAIC0yMTczLDYgKzIxNzksMTUgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpnZXRMb2NhbFN0b3JhZ2VEZXRhaWxzKEZ1bmN0aW9uPHZvaWQoVmVjdG9y
PExvY2FsU3RvcmFnZUQKICAgICBBU1NFUlQoIWNvbXBsZXRpb25IYW5kbGVyKTsKIH0KIAordm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZXNldFF1b3RhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpIHsKKyAgICAgICAgaWYg
KGF1dG8qIHByb2Nlc3MgPSBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKSkKKyAgICAgICAg
ICAgIHByb2Nlc3MtPnJlc2V0UXVvdGEobV9zZXNzaW9uSUQsIFtjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOworICAgIH0KK30KKwogI2lmICFQ
TEFURk9STShDT0NPQSkKIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRNZWRp
YUNhY2hlRGlyZWN0b3J5KCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCBlYjk2MDRlM2FmMzJjNTQ1YjVi
Y2RmMDgyMjZkYmZjZDI2MmU5ZWVkLi40NGY0ZmRkNzBkMmQ3N2UzZmViYmE4YTlhYjQ1ZGFlOGM5
NzI3NDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC0yOTEsNyArMjkxLDkgQEAgcHVibGljOgogICAgIHN0
YXRpYyBXVEY6OlN0cmluZyBkZWZhdWx0TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpOwogICAg
IHN0YXRpYyBXVEY6OlN0cmluZyBkZWZhdWx0RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0
b3J5KCk7CiAgICAgc3RhdGljIFdURjo6U3RyaW5nIGRlZmF1bHRKYXZhU2NyaXB0Q29uZmlndXJh
dGlvbkRpcmVjdG9yeSgpOwotICAgIAorCisgICAgdm9pZCByZXNldFF1b3RhKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CisKIHByaXZhdGU6CiAgICAgdm9pZCBmZXRjaERhdGFBbmRBcHBs
eShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hP
cHRpb24+LCBSZWZQdHI8V29ya1F1ZXVlPiYmLCBGdW5jdGlvbjx2b2lkKFZlY3RvcjxXZWJzaXRl
RGF0YVJlY29yZD4pPiYmIGFwcGx5KTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDc0OGEyMWY1Y2E3NmZjMmQzN2E3N2U2NDVjZGNkZGQ5NzUy
M2ZmMzIuLmY2ZWE2N2U5ZDA0NjE5OGU0YTc1N2RkYzY4NDYzZTI4NGNkOGRlNGMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBA
QAorMjAxOS0xMi0wMiAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAg
ICBDcm9zcy10aHJlYWQgdmVyc2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzU3MjkwMzQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6Lgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1N0b3JhZ2VR
dW90YU1hbmFnZXIuY3BwOiBSZW1vdmVkIGFzIHdlIGhhdmUgYSBkaWZmZXJlbnQgU3RvcmFnZVF1
b3RhTWFuYWdlciAKKyAgICAgICAgaW1wbGVtZW50YXRpb24gbm93LgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOiByZXNldCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
J3MgcXVvdGEgYmV0d2VlbiB0ZXN0cy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJl
c2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxl
cjo6cmVzZXRRdW90YSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oOgorCiAyMDE5LTEyLTAyICBMb3VpZSBMaXZvbi1CZW1lbCAgPGxsaXZvbmJlbWVsQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgaGVscGVyIG1ldGhvZHMgZm9yIGRlc2NyaXB0aW9uIGFuZCBl
cXVhbGl0eSB0byB0ZXh0IG1hbmlwdWxhdGlvbiBTUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZDU3NjhlZDM4YjRiYjAxZDBiOGVkY2I0YmI5ZTYwYmMzMTIyOTViOC4uODI1MmY5OGRlMmY1
NzllNDA2NTc0NDM4YzY3ODhjMWUzNWZlZDFkYSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTczOCw3ICs3MzgsNiBAQAogCQk5Mzk5QkEwNjIzNzExMTRGMDA4MzkyQkYgLyogSW5kZXhlZERC
Tm90SW5QYWdlQ2FjaGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5Mzk5QkEwMzIzNzExMEJGMDA4MzkyQkYgLyogSW5kZXhlZERCTm90
SW5QYWdlQ2FjaGUuaHRtbCAqLzsgfTsKIAkJOTNBRjRFQ0UxNTA2RjA2NDAwN0ZENTdFIC8qIE5l
d0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBRjRFQ0QxNTA2RjA2NDAw
N0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUu
Y3BwICovOyB9OwogCQk5M0FGNEVEMTE1MDZGMTMwMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0FGNEVDRjE1MDZGMTIzMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCAqLzsgfTsK
LQkJOTNCNjIwNTQyMzRFQTYyQzAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNjIwNTMyMzRF
QTMyQjAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwICovOyB9OwogCQk5M0NGQTg2
NzFDRUI5RTM4MDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sIGluIENvcHkg
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQ0ZBODY2MUNF
QjlERTEwMDA1NjVBOCAvKiBhdXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwgKi87IH07CiAJCTkz
RDExOUZDMjJDNjgwRjcwMDlCRTNDNyAvKiBsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0
ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzRDExOUZCMjJDNTcxMTIwMDlCRTNDNyAvKiBsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ct
cHJpdmF0ZS5odG1sICovOyB9OwogCQk5M0UyQzU1NTFGRDMyMDQxMDBFMURGNkEgLyogTGluZUVu
ZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0UyQzU1NDFGRDMyMDQxMDBFMURGNkEgLyogTGluZUVuZGluZy5jcHAgKi87IH07CkBAIC0xMTQz
LDcgKzExNDIsNiBAQAogCQkJZHN0UGF0aCA9IFRlc3RXZWJLaXRBUEkucmVzb3VyY2VzOwogCQkJ
ZHN0U3ViZm9sZGVyU3BlYyA9IDc7CiAJCQlmaWxlcyA9ICgKLQkJCQlDRDgzOTRERjIzMkFGN0Mw
MDAxNDk0OTUgLyogbWVkaWEtbG9hZGluZy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJ
CTU1QTgxN0ZGMjE4MTAyMUEwMDA0QTM5QSAvKiAxMDB4MTAwLXJlZC50Z2EgaW4gQ29weSBSZXNv
dXJjZXMgKi8sCiAJCQkJMUE5RTUyQzkxM0U2NUVGNDAwNjkxN0Y1IC8qIDE4LWNoYXJhY3RlcnMu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NUE4MTgwMDIxODEwMjIxMDAwNEEzOUEg
LyogNDAweDQwMC1ncmVlbi5wbmcgaW4gQ29weSBSZXNvdXJjZXMgKi8sCkBAIC0xMzc2LDYgKzEz
NzQsNyBAQAogCQkJCTkzMEFENDAyMTUwNjk4RDAwMDY3OTcwRiAvKiBsb3RzLW9mLXRleHQuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlBRDU3QUMyMjFEQTc0NjZFMDBGRjFCREUgLyog
bWFueS1pZnJhbWVzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNzc3MkVDRTEyMkZF
MDZDNjAwMDlBNzk5IC8qIG1hbnktc2FtZS1vcmlnaW4taWZyYW1lcy5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovLAorCQkJCUNEODM5NERGMjMyQUY3QzAwMDE0OTQ5NSAvKiBtZWRpYS1sb2FkaW5n
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJQ0RBMzE1OUExRUQ1NDhGMTAwOUY2MEQz
IC8qIE1lZGlhUGxheWJhY2tTbGVlcEFzc2VydGlvbi5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
LAogCQkJCUNEQzk0NDJGMUVGMjA1RDYwMDU5QzNDNCAvKiBtZWRpYXN0cmVhbXRyYWNrLWRldGFj
aGVkLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJRTEyMjBEQ0ExNTVCMjhBQTAwMTNF
MkZDIC8qIE1lbW9yeUNhY2hlRGlzYWJsZVdpdGhpblJlc291cmNlTG9hZERlbGVnYXRlLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8sCkBAIC0yMTQ5LDcgKzIxNDgsNiBAQAogCQk5M0FGNEVDQTE1
MDZGMDM1MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2Vz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ld0ZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dEZvckltYWdlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzQUY0RUNEMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FGNEVDRjE1MDZGMTIzMDA3RkQ1N0Ug
LyogbG90cy1vZi1pbWFnZXMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb3Rz
LW9mLWltYWdlcy5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTNCNjIwNTMy
MzRFQTMyQjAwRDQ5Qjk3IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVF1b3RhTWFuYWdlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0ZBODY2MUNFQjlERTEwMDA1NjVBOCAvKiBhdXRvZm9j
dXNlZC10ZXh0LWlucHV0Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiYXV0b2Zv
Y3VzZWQtdGV4dC1pbnB1dC5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTND
RkE4NjgxQ0VCQ0ZFRDAwMDU2NUE4IC8qIENhbmRpZGF0ZVRlc3RzLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2FuZGlkYXRlVGVzdHMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzRDExOUZCMjJDNTcxMTIwMDlCRTNDNyAvKiBsb2NhbHN0b3Jh
Z2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0g
ImxvY2Fsc3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzEyNyw3ICszMTI1LDYgQEAKIAkJCQk0MTk3M0I1QzFBRjIyODc1MDA2
QzdCMzYgLyogU2hhcmVkQnVmZmVyLmNwcCAqLywKIAkJCQlBMTc5OTE4OTFFMUNBMjQxMDBBNTA1
RUQgLyogU2hhcmVkQnVmZmVyVGVzdC5jcHAgKi8sCiAJCQkJQTE3OTkxOEExRTFDQTI0MTAwQTUw
NUVEIC8qIFNoYXJlZEJ1ZmZlclRlc3QuaCAqLywKLQkJCQk5M0I2MjA1MzIzNEVBMzJCMDBENDlC
OTcgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8sCiAJCQkJRUNBNjgwQ0QxRTY4Q0MwOTAw
NzMxRDIwIC8qIFN0cmluZ1V0aWxpdGllcy5tbSAqLywKIAkJCQlDRTRENURFNTFGNjc0M0JBMDA3
MkNGQzYgLyogU3RyaW5nV2l0aERpcmVjdGlvbi5jcHAgKi8sCiAJCQkJOTNBMjU4OTgxRjkyRkYx
NTAwM0U1MTBDIC8qIFRleHRDb2RlYy5jcHAgKi8sCkBAIC0zODU1LDYgKzM4NTIsNyBAQAogCQkJ
CTkzMEFENDAxMTUwNjk4QjMwMDY3OTcwRiAvKiBsb3RzLW9mLXRleHQuaHRtbCAqLywKIAkJCQlB
RDU3QUMxRDFEQTc0NjM4MDBGRjFCREUgLyogbWFueS1pZnJhbWVzLmh0bWwgKi8sCiAJCQkJNzc3
MkVDRTAyMkZFMDVFMTAwMDlBNzk5IC8qIG1hbnktc2FtZS1vcmlnaW4taWZyYW1lcy5odG1sICov
LAorCQkJCUNEODM5NERFMjMyQUYxNUUwMDE0OTQ5NSAvKiBtZWRpYS1sb2FkaW5nLmh0bWwgKi8s
CiAJCQkJQ0RDOTQ0MkIxRUYxRkJEMjAwNTlDM0M0IC8qIG1lZGlhc3RyZWFtdHJhY2stZGV0YWNo
ZWQuaHRtbCAqLywKIAkJCQk1MUNEMUM3MTFCMzhENDg0MDAxNDJDQTUgLyogbW9kYWwtYWxlcnRz
LWluLW5ldy1hYm91dC1ibGFuay13aW5kb3cuaHRtbCAqLywKIAkJCQk3QTE0NThGQjFBRDVDMDM1
MDBFMDY3NzIgLyogbW91c2UtYnV0dG9uLWxpc3RlbmVyLmh0bWwgKi8sCkBAIC0zODg2LDcgKzM4
ODQsNiBAQAogCQkJCTA3Q0QzMkY3MjA2NUI3MkEwMDY0QTRCRSAvKiB2aWRlby5odG1sICovLAog
CQkJCTFDMkI4MTg0MUM4OTI0QTIwMEE1NTI5RiAvKiB3ZWJmb250Lmh0bWwgKi8sCiAJCQkJNDY4
RjJGOTMyMzY4REFBNzAwRjRCODY0IC8qIHdpbmRvdy1vcGVuLXRoZW4tZG9jdW1lbnQtb3Blbi5o
dG1sICovLAotCQkJCUNEODM5NERFMjMyQUYxNUUwMDE0OTQ5NSAvKiBtZWRpYS1sb2FkaW5nLmh0
bWwgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFJlc291cmNlczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CkBAIC00ODY4LDcgKzQ4NjUsNiBAQAogCQkJCTdDQ0U3RUNGMUE0MTFBN0UwMDQ0N0M0
QyAvKiBTdG9wTG9hZGluZ0Zyb21EaWRSZWNlaXZlUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLywK
IAkJCQlDREMwOTMyRTIxQzk5MzQ0MDAzMEM0QjAgLyogU3RvcFN1c3BlbmRSZXN1bWVBbGxNZWRp
YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQxNEFENjg2MjI4NUQxQzAwMDc3N0YyRCAvKiBTdG9y
YWdlUXVvdGEubW0gaW4gU291cmNlcyAqLywKLQkJCQk5M0I2MjA1NDIzNEVBNjJDMDBENDlCOTcg
LyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTVCRTE3MTFE
NDI4RTRCMDBERDdDNjggLyogU3RvcmVCbG9iVGhlbkRlbGV0ZS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTdDQ0U3RUQwMUE0MTFBN0UwMDQ0N0M0QyAvKiBTdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0RnJvbVN0cmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUQxMUE0MTFBN0UwMDQ0
N0M0QyAvKiBTdHJpbmdUcnVuY2F0b3IubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQxYzY3YmYwNTJmN2IwYTM0NTNkMDU0
ZjI1MjkxOTFlZWYzZjE3Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFu
YWdlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoKLSogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VR
dW90YU1hbmFnZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1N0b3JhZ2VRdW90YVVzZXIuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKLQot
c3RhdGljIGNvbnN0IGludCBkZWZhdWx0UXVvdGEgPSAxICogS0I7Ci0KLWNsYXNzIE1vY2tRdW90
YVVzZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlciB7Ci1wdWJsaWM6
Ci0gICAgZXhwbGljaXQgTW9ja1F1b3RhVXNlcihTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5hZ2Vy
KQotICAgICAgICA6IG1fbWFuYWdlcigmbWFuYWdlcikKLSAgICB7Ci0gICAgICAgIG1hbmFnZXIu
YWRkVXNlcigqdGhpcyk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTcGFjZVVzZWQodWludDY0X3Qg
c3BhY2VVc2VkKSB7IG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOyB9Ci0KLXByaXZhdGU6Ci0gICAg
dWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X3NwYWNlVXNlZDsKLSAgICB9Ci0KLSAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIGZpbmFsCi0gICAgewotICAgICAgICBpZiAoIW1f
c3BhY2VVc2VkKQotICAgICAgICAgICAgQVNTRVJUX0VRKG1fbWFuYWdlci0+c3RhdGUoKSwgU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6OlVuaW5pdGlhbGl6ZWQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBBU1NFUlRfRVEobV9tYW5hZ2VyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpTdGF0ZTo6Q29tcHV0aW5nU3BhY2VVc2VkKTsKLQotICAgICAgICAvLyBSZXNldCB1c2Fn
ZSB0byBtb2NrIGRlbGV0aW9uLgotICAgICAgICBtX3NwYWNlVXNlZCA9IDA7Ci0gICAgICAgIGNh
bGxiYWNrKCk7Ci0gICAgfQotCi0gICAgdWludDY0X3QgbV9zcGFjZVVzZWQgeyAwIH07Ci0gICAg
U3RvcmFnZVF1b3RhTWFuYWdlciogbV9tYW5hZ2VyOwotfTsKLSAgICAKLVRFU1QoU3RvcmFnZVF1
b3RhTWFuYWdlclRlc3QsIEJhc2ljKQotewotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIHN0b3Jh
Z2VRdW90YU1hbmFnZXJQdHIgPSBudWxscHRyOwotICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIgc3Rv
cmFnZVF1b3RhTWFuYWdlcihkZWZhdWx0UXVvdGEsIFsmc3RvcmFnZVF1b3RhTWFuYWdlclB0cl0o
dWludDY0X3QgcXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNy
ZWFzZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmIGNvbXBs
ZXRpb25IYW5sZGVyKSB7Ci0gICAgICAgIEFTU0VSVF9UUlVFKHN0b3JhZ2VRdW90YU1hbmFnZXJQ
dHIpOwotICAgICAgICBBU1NFUlRfRVEoc3RvcmFnZVF1b3RhTWFuYWdlclB0ci0+c3RhdGUoKSwg
U3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6OldhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9u
c2UpOwotCi0gICAgICAgIC8vIEFsbG93IGFsbCBzcGFjZSBpbmNyZWFzZSByZXF1ZXN0cy4KLSAg
ICAgICAgY29tcGxldGlvbkhhbmxkZXIoc3BhY2VJbmNyZWFzZSArIGN1cnJlbnRTcGFjZSk7Ci0g
ICAgfSk7Ci0gICAgc3RvcmFnZVF1b3RhTWFuYWdlclB0ciA9ICZzdG9yYWdlUXVvdGFNYW5hZ2Vy
OwotCi0KLSAgICBNb2NrUXVvdGFVc2VyIG1vY2tVc2VyKHN0b3JhZ2VRdW90YU1hbmFnZXIpOwot
Ci0gICAgLy8gR3JhbnQgZGlyZWN0bHkuCi0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0
U3BhY2UoMC4xICogS0IsIFsmXShXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lv
biBkZWNpc2lvbikgewotICAgICAgICBBU1NFUlRfRVEoZGVjaXNpb24sIFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudCk7Ci0gICAgICAgIG1vY2tVc2VyLnNldFNw
YWNlVXNlZCgwLjEgKiBLQik7Ci0gICAgfSk7Ci0KLSAgICAvLyBHcmFudCBhZnRlciBjb21wdXRp
bmcgYWNjdXJhdGUgdXNhZ2UuCi0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2Uo
MS4wICogS0IsIFsmXShXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbiBkZWNp
c2lvbikgewotICAgICAgICBBU1NFUlRfRVEoZGVjaXNpb24sIFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudCk7Ci0gICAgICAgIG1vY2tVc2VyLnNldFNwYWNlVXNl
ZCgxLjAgKiBLQik7Ci0gICAgfSk7Ci0KLSAgICAvLyBHcmFudCBhZnRlciBjb21wdXRpbmcgYWNj
dXJhdGUgdXNhZ2UgYW5kIHJlcXVlc3Rpbmcgc3BhY2UgaW5jcmVhc2UuCi0gICAgc3RvcmFnZVF1
b3RhTWFuYWdlci5yZXF1ZXN0U3BhY2UoMTAgKiBLQiwgWyZdKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OkRlY2lzaW9uIGRlY2lzaW9uKSB7Ci0gICAgICAgIEFTU0VSVF9FUShzdG9yYWdl
UXVvdGFNYW5hZ2VyUHRyLT5zdGF0ZSgpLCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdGF0ZTo6TWFr
aW5nRGVjaXNpb25Gb3JSZXF1ZXN0KTsKLSAgICAgICAgQVNTRVJUX0VRKGRlY2lzaW9uLCBXZWJD
b3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQpOwotICAgIH0pOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCmluZGV4IGYyMWU4OWJlNzdmNjAxODYzZTExYWVhNzY1ZDYxNDg2OTFk
Y2UwOGUuLjE0ZGIyZDJkMjYzYTkyMzVhNmEwMDM3YWYyYWRlOGNhNWIzMTA5NGMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC05ODMsNiArOTgzLDggQEAg
Ym9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBU
ZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKICAgICBjbGVhclNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25zKCk7CiAgICAgY2xlYXJET01DYWNoZXMoKTsKIAorICAgIHJlc2V0UXVvdGEoKTsKKwogICAg
IFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3Rp
bmcocGxhdGZvcm1Db250ZXh0KCksIHRydWUpOwogCiAgICAgV0tDb250ZXh0Q2xlYXJDdXJyZW50
TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRl
eHQoKSk7CkBAIC0zMTQ5LDYgKzMxNTEsMTMgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c3luY0xv
Y2FsU3RvcmFnZSgpCiAgICAgcnVuVW50aWwoY29udGV4dC5kb25lLCBub1RpbWVvdXQpOwogfQog
Cit2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFF1b3RhKCkKK3sKKyAgICBTdG9yYWdlVm9pZENh
bGxiYWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVSZXNl
dFF1b3RhKFRlc3RDb250cm9sbGVyOjp3ZWJzaXRlRGF0YVN0b3JlKCksICZjb250ZXh0LCBTdG9y
YWdlVm9pZENhbGxiYWNrKTsKKyAgICBydW5VbnRpbChjb250ZXh0LmRvbmUsIG5vVGltZW91dCk7
Cit9CisKIHN0cnVjdCBGZXRjaENhY2hlT3JpZ2luc0NhbGxiYWNrQ29udGV4dCB7CiAgICAgRmV0
Y2hDYWNoZU9yaWdpbnNDYWxsYmFja0NvbnRleHQoVGVzdENvbnRyb2xsZXImIGNvbnRyb2xsZXIs
IFdLU3RyaW5nUmVmIG9yaWdpbikKICAgICAgICAgOiB0ZXN0Q29udHJvbGxlcihjb250cm9sbGVy
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmluZGV4IGQ2Y2IwZTIwN2I5
ZmU4ZTJlMDYzODM3YzY3NmQ4ZTAxYjZmOWM2MDUuLjRlODc1MDg3YTU4NjM5YTJkNzlhNGNhMTFi
MTM5NDRlZDJjZDllMWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgK
QEAgLTI2OSw2ICsyNjksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXJtaW5hdGVOZXR3b3JrUHJv
Y2VzcygpOwogICAgIHZvaWQgdGVybWluYXRlU2VydmljZVdvcmtlclByb2Nlc3MoKTsKIAorICAg
IHZvaWQgcmVzZXRRdW90YSgpOworCiAgICAgdm9pZCByZW1vdmVBbGxTZXNzaW9uQ3JlZGVudGlh
bHMoKTsKIAogICAgIHZvaWQgY2xlYXJJbmRleGVkRGF0YWJhc2VzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384671</attachid>
            <date>2019-12-02 16:36:01 -0800</date>
            <delta_ts>2019-12-02 22:53:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203971-20191202163600.patch</filename>
            <type>text/plain</type>
            <size>171773</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGM0OTUzZTM0ZDI1MTg1
YzExMjc2YTQ1ZDA5M2NmN2ZjNjlmODFmYy4uYTYzMjFjZjZiN2IxYWI2YmNjOTMzOWU3NjUxMmQ5
ODBjOTlkODkzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MyBAQAorMjAxOS0xMi0wMiAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBDcm9zcy10aHJlYWQgdmVy
c2lvbiBTdG9yYWdlUXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDM5NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3MjkwMzQ5
PgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIEltcGxlbWVu
dCBhIGxvY2stYmFzZWQgU3RvcmFnZVF1b3RhTWFuYWdlciBzbyB0aGF0IHF1b3RhIGNoZWNrIGNh
biBiZSBkb25lIG9uIGRpZmZlcmVudCB0aHJlYWRzLgorICAgICAgICBJZiBzcGFjZSByZXF1ZXN0
IGlzIG1hZGUgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCwgaXQgbmVlZHMgdG8gaG9sZCBhIGxvY2sg
dW50aWwgaXQgaXMgZmluaXNoZWQsIHNvIG5vIHJlcXVlc3QKKyAgICAgICAgZnJvbSBkaWZmZXJl
bnQgdGhyZWFkcyBjYW4gYmUgcGVyZm9ybWVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgIElm
IHNwYWNlIHJlcXVlc3QgaXMgbWFkZSBvbiB0aGUgbWFpbiB0aHJlYWQsIHdlIHdpbGwgZGlzcGF0
Y2ggaXQgdG8gYSBiYWNrZ3JvdW5kIHRocmVhZCBhbmQgc2NoZWR1bGUgYSBjYWxsbGJhY2sKKyAg
ICAgICAgdG8gdGhlIG1haW4gdGhyZWFkIHdoZW4gcmVzdWx0IGlzIGF2YWlsYWJsZSwgc28gdGhl
IG1haW4gdGhyZWFkIHdpbGwgbm90IGJlIGJsb2NrZWQuCisKKyAgICAgICAgQ292ZXJlZCBieSBl
eGlzdGluZyBxdW90YSByZWxhdGVkIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpyZXF1ZXN0U3BhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRpc2tVc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90YVVz
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1
b3RhVXNlcjo6flF1b3RhVXNlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRlU3Bh
Y2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVy
OjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3BhY2VVc2VkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVz
ZXI6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjplbnN1cmVRdW90YVVzZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnN0YXJ0
Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5pc2hDb21wdXRp
bmdTcGFjZVVzZWRGb3JPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OnJlc2V0U3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGVjcmVhc2VTcGFjZVVzZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluY3Jl
YXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluaXRpYWxpemVRdW90YVVzZXIpOiBEZWxl
dGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
T3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNy
ZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OnJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1
dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmdldENv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRl
bGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZXF1ZXN0U3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpmaW5pc2hTcGFjZUluY3JlYXNlVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFD
aGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RT
dG9yZUFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6Z2V0UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHNBZnRlclF1b3RhQ2hl
Y2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0Q291bnRBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkQWZ0ZXJRdW90YUNo
ZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6Om9wZW5DdXJzb3JBZnRlclF1b3RhQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvckFmdGVyUXVv
dGFDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayk6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
Q29ubmVjdGlvbjo6YWJvcnRUcmFuc2FjdGlvbldpdGhvdXRDYWxsYmFjayk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jk
cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb246OmdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0
ZXJhdGVDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nl
c3NJREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpx
dW90YU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6c3RvcmFnZVF1b3RhTWFuYWdlclNwYWNl
UmVxdWVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6SW5Qcm9j
ZXNzSURCU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3JhZ2VRdW90YU1hbmFnZXJHZXR0
ZXIpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nl
c3NJREJTZXJ2ZXIuaDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbkJhY2tn
cm91bmRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dHJ5
R3JhbnRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVw
ZGF0ZVF1b3RhQmFzZWRPblVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OnJlc2V0UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXNldFF1b3RhRm9yVGVzdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp+U3RvcmFnZVF1b3RhTWFuYWdl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzcGFj
ZVVzYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRv
SW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjphZGRVc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vz
c1BlbmRpbmdSZXF1ZXN0cyk6IERlbGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVv
dGFNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZh
dWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3RhKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90YSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzdGF0ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmg6IFJlbW92ZWQuCisK
IDIwMTktMTItMDIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBEb2N1bWVudDo6c2V0V2luZG93QXR0cmlidXRlRXZlbnRMaXN0ZW5lciBzaG91bGQgY2hlY2sg
YG1fZG9tV2luZG93OjpmcmFtZSgpYApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkM2UwYzY4Y2M2MDI2YzJhMTFmMjhl
YTAwNjg5ODNkZTNlMjM3NTgyLi5mZTAwZTMyNGE1M2I1YTVmNzAxOTBkNjg2ZTMwMjBiMDI1NmFk
NzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDE5LTEyLTAyICBTaWh1aSBMaXUgIDxz
aWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENyb3NzLXRocmVhZCB2ZXJzaW9uIFN0b3Jh
Z2VRdW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMzk3MQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTcyOTAzNDk+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHA6IEludHJvZHVjZSBjbGFzcyBTZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlciB0byBtYW5hZ2UgYWxsIAorICAgICAgICBTdG9yYWdlUXVvdGFNYW5hZ2VycyBvZiB0aGUg
c2FtZSBzZXNzaW9uLiAKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRX
ZWJzaXRlRGF0YVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZFNl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OnJlbW92ZVNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpjcmVhdGVJREJTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6YWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNl
VXNhZ2VGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnJlc2V0
UXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVF1b3RhTWFu
YWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplU3RvcmFn
ZVF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNsZWFy
U3RvcmFnZVF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplUXVvdGFVc2Vycyk6IERlbGV0ZWQuCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjpTZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNz
aW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjplbnN1cmVP
cmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjpleGlzdGluZ1N0b3JhZ2VRdW90YU1hbmFn
ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVv
dGFNYW5hZ2VyOjpjYWNoZVJvb3RQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjpzZXRJREJSb290UGF0aCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cjo6aWRiUm9vdFBhdGggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
U3RvcmFnZVF1b3RhTWFuYWdlcnM6OmRlZmF1bHRRdW90YSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpTdG9yYWdlUXVvdGFNYW5hZ2Vyczo6c2V0RGVm
YXVsdFF1b3Rhcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpT
dG9yYWdlUXVvdGFNYW5hZ2Vyczo6bWFuYWdlcnNQZXJPcmlnaW4pOiBEZWxldGVkLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Z2V0RGlyZWN0b3J5U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpkaXNrVXNhZ2UpOiBzdGF0aWMgZnVuY3Rpb24gdG8gZ2V0
IHRoZSBkaXNrIHVzYWdlIG9mIENhY2hlU3RvcmFnZSBnaXZlbiAKKyAgICAgICAgQ2FjaGVTdG9y
YWdlIHJvb3QgZGlyZWN0b3J5LgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2lu
ZTo6cmVxdWVzdFNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6
OnJlYWRDYWNoZXNGcm9tRGlzayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5n
aW5lOjp3cml0ZVNpemVGaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdp
bmU6OnJlYWRTaXplRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5l
Ojppbml0aWFsaXplUXVvdGFVc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6Q2FjaGU6OnB1dCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2Fj
aGU6OnJlbW92ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpDYWNoZXMp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6fkNhY2hlcyk6CisgICAg
ICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjp1cGRhdGVTaXplRmlsZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjppbml0aWFsaXplU2l6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpjbGVhcik6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZXF1ZXN0U3BhY2UpOgorICAgICAgICAoV2ViS2l0
OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6d3JpdGVSZWNvcmQpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVtb3ZlUmVjb3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2Fj
aGVTdG9yYWdlOjpDYWNoZXM6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZXNldFNwYWNlVXNlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmg6
CisgICAgICAgICogU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oOiBBZGQgYSBjYWNoZVN0
b3JhZ2VEaXJlY3RvcnkgcGFyYW1ldGVyIHNvIHdlIGtub3cgdGhlIGRpcmVjb3RyeSBvZiAKKyAg
ICAgICAgQ2FjaGVTdG9yYWdlIHdoZW4gd2Ugc3RhcnQgdXNpbmcgV2Vic2l0ZURhdGFTdG9yZS4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAg
ICAgICAgKFdLV2Vic2l0ZURhdGFTdG9yZVJlc2V0UXVvdGEpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaDogQWRkIGEgQyBBUEkgZm9yIHJlc2V0aW5n
IHF1b3RhIGluIFRlc3RSdW5uZXIuCisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OnJlc2V0UXVvdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW06
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OnJlc2V0UXVvdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMTktMTItMDIgIExvdWllIExpdm9uLUJl
bWVsICA8bGxpdm9uYmVtZWxAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBoZWxwZXIgbWV0aG9k
cyBmb3IgZGVzY3JpcHRpb24gYW5kIGVxdWFsaXR5IHRvIHRleHQgbWFuaXB1bGF0aW9uIFNQSQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKaW5kZXggYTE1MGEzNzM4MjJjYzI2NjJlMDk3NjJlNWY2YzBhZjYyNTAx
MTYwOS4uY2I0ZmUxYWNlZGQ4Nzc3M2Q4YTVkMGZmMmNhZTU0MzY0MmU5ODcyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCkBAIC0xMzg0LDcgKzEzODQsNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmgKICAgICBzdG9yYWdl
L1N0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oCiAgICAgc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5h
Z2VyLmgKLSAgICBzdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaAogICAgIHN0b3JhZ2UvU3RvcmFn
ZVR5cGUuaAogCiAgICAgc3R5bGUvU3R5bGVDaGFuZ2UuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCA2MzFjNGNl
NDVkNzVmN2E3OTIzYTMxOWQ5ZjI3ZjM0ODEyNTU2ZThlLi5iYmE2NjIzNDZkZGEzYmUyMzVmZDU3
NTcwNjVkYjhjY2Y3ZTc1ZjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtNDYsMjggKzQ2LDI4IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIAotUmVmPElEQlNlcnZlcj4g
SURCU2VydmVyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBRdW90YU1hbmFnZXJH
ZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitSZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6OmNy
ZWF0ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJl
cXVlc3RlciYmIHF1b3RhTWFuYWdlckdldHRlcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBJREJTZXJ2ZXIoc2Vzc2lvbklELCBXVEZNb3ZlKHF1b3RhTWFuYWdlckdldHRlcikpKTsKIH0K
IAotUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgUXVvdGFNYW5hZ2VyR2V0
dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVh
dGUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0
b3J5UGF0aCwgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYgcXVvdGFNYW5hZ2Vy
R2V0dGVyKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlNlcnZlcihzZXNzaW9uSUQs
IGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgV1RGTW92ZShxdW90YU1hbmFnZXJHZXR0ZXIpKSk7CiB9
CiAKLUlEQlNlcnZlcjo6SURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgUXVvdGFN
YW5hZ2VyR2V0dGVyJiYgcXVvdGFNYW5hZ2VyR2V0dGVyKQorSURCU2VydmVyOjpJREJTZXJ2ZXIo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0
ZXImJiBzcGFjZVJlcXVlc3RlcikKICAgICA6IENyb3NzVGhyZWFkVGFza0hhbmRsZXIoIkluZGV4
ZWREYXRhYmFzZSBTZXJ2ZXIiLCBBdXRvZHJhaW5lZFBvb2xGb3JSdW5Mb29wOjpVc2UpCiAgICAg
LCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCi0gICAgLCBtX3F1b3RhTWFuYWdlckdldHRlcihXVEZN
b3ZlKHF1b3RhTWFuYWdlckdldHRlcikpCisgICAgLCBtX3NwYWNlUmVxdWVzdGVyKFdURk1vdmUo
c3BhY2VSZXF1ZXN0ZXIpKQogewogfQogCi1JREJTZXJ2ZXI6OklEQlNlcnZlcihQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBRdW90
YU1hbmFnZXJHZXR0ZXImJiBxdW90YU1hbmFnZXJHZXR0ZXIpCitJREJTZXJ2ZXI6OklEQlNlcnZl
cihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3Rv
cnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXImJiBzcGFjZVJlcXVlc3Rl
cikKICAgICA6IENyb3NzVGhyZWFkVGFza0hhbmRsZXIoIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIi
LCBBdXRvZHJhaW5lZFBvb2xGb3JSdW5Mb29wOjpVc2UpCiAgICAgLCBtX3Nlc3Npb25JRChzZXNz
aW9uSUQpCiAgICAgLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aChkYXRhYmFzZURpcmVjdG9yeVBh
dGgpCi0gICAgLCBtX3F1b3RhTWFuYWdlckdldHRlcihXVEZNb3ZlKHF1b3RhTWFuYWdlckdldHRl
cikpCisgICAgLCBtX3NwYWNlUmVxdWVzdGVyKFdURk1vdmUoc3BhY2VSZXF1ZXN0ZXIpKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJTZXJ2ZXIgY3JlYXRlZCBhdCBwYXRoICVzIiwgZGF0YWJh
c2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjp1cGdyYWRlRmlsZXNJZk5lY2Vz
c2FyeSkpOwpAQCAtNjgzLDE1NyArNjgzLDI0IEBAIHZvaWQgSURCU2VydmVyOjpwZXJmb3JtQ2xv
c2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yCiAK
IHZvaWQgSURCU2VydmVyOjpkaWRQZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRhYmFzZXModWludDY0
X3QgY2FsbGJhY2tJRCkKIHsKLSAgICBmb3IgKGF1dG8mIHVzZXIgOiBtX3F1b3RhVXNlcnMudmFs
dWVzKCkpCi0gICAgICAgIHVzZXItPnJlc2V0U3BhY2VVc2VkKCk7Ci0KICAgICBhdXRvIGNhbGxi
YWNrID0gbV9kZWxldGVEYXRhYmFzZUNvbXBsZXRpb25IYW5kbGVycy50YWtlKGNhbGxiYWNrSUQp
OwogICAgIEFTU0VSVChjYWxsYmFjayk7CiAgICAgY2FsbGJhY2soKTsKIH0KIAotSURCU2VydmVy
OjpRdW90YVVzZXI6OlF1b3RhVXNlcihJREJTZXJ2ZXImIHNlcnZlciwgU3RvcmFnZVF1b3RhTWFu
YWdlciogbWFuYWdlciwgQ2xpZW50T3JpZ2luJiYgb3JpZ2luKQotICAgIDogbV9zZXJ2ZXIoc2Vy
dmVyKQotICAgICwgbV9tYW5hZ2VyKG1ha2VXZWFrUHRyKG1hbmFnZXIpKQotICAgICwgbV9vcmln
aW4oV1RGTW92ZShvcmlnaW4pKQotICAgICwgbV9pc0luaXRpYWxpemVkKG1fc2VydmVyLm1fc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCkpCi17Ci0gICAgaWYgKG1hbmFnZXIpCi0gICAgICAgIG1hbmFn
ZXItPmFkZFVzZXIoKnRoaXMpOwotfQotCi1JREJTZXJ2ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNl
cigpCi17Ci0gICAgaWYgKG1fbWFuYWdlcikKLSAgICAgICAgbV9tYW5hZ2VyLT5yZW1vdmVVc2Vy
KCp0aGlzKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6cmVzZXRTcGFjZVVzZWQo
KQotewotICAgIG1fc3BhY2VVc2VkID0gMDsKLQotICAgIGlmICghbV9tYW5hZ2VyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9zZXJ2ZXIubV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVCghbV9pbml0aWFsaXphdGlvbkNhbGxiYWNrKTsKLQotICAgIG1f
aXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgLy8gRG8gYWRkL3JlbW92ZSB0byB0cmlnZ2Vy
IGNhbGwgdG8gd2hlbkluaXRpYWxpemVkLgotICAgIG1fbWFuYWdlci0+cmVtb3ZlVXNlcigqdGhp
cyk7Ci0gICAgbV9tYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6
OlF1b3RhVXNlcjo6Y29tcHV0ZVNwYWNlVXNlZCgpCi17Ci0gICAgcmVzZXRTcGFjZVVzZWQoKTsK
LX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5jcmVhc2VTcGFjZVVzZWQodWludDY0
X3Qgc2l6ZSkKLXsKLSAgICBpZiAoIW1faXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVChtX3NwYWNlVXNlZCArIHNpemUgPiBtX3NwYWNlVXNlZCk7Ci0gICAgbV9zcGFj
ZVVzZWQgKz0gc2l6ZTsKLX0KLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3Bh
Y2VVc2VkKHVpbnQ2NF90IHNpemUpCi17Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0gICAg
ICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9zcGFjZVVzZWQgPj0gc2l6ZSk7Ci0gICAgbV9zcGFj
ZVVzZWQgLT0gc2l6ZTsKLX0KLQotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6d2hlbkluaXRp
YWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKLXsKLSAgICBpZiAo
bV9pc0luaXRpYWxpemVkKSB7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgbV9pbml0aWFsaXphdGlvbkNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7
Ci0gICAgbV9zZXJ2ZXIuc3RhcnRDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4obV9vcmlnaW4p
OwotfQotCi12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKHVp
bnQ2NF90IHNwYWNlVXNlZCkKLXsKLSAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkIHx8ICFtX2Vz
dGltYXRlZFNwYWNlSW5jcmVhc2UpOwotICAgIG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOwotICAg
IG1faXNJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBpZiAoYXV0byBjYWxsYmFjayA9IFdURk1v
dmUobV9pbml0aWFsaXphdGlvbkNhbGxiYWNrKSkKLSAgICAgICAgY2FsbGJhY2soKTsKLX0KLQot
SURCU2VydmVyOjpRdW90YVVzZXImIElEQlNlcnZlcjo6ZW5zdXJlUXVvdGFVc2VyKGNvbnN0IENs
aWVudE9yaWdpbiYgb3JpZ2luKQotewotICAgIHJldHVybiAqbV9xdW90YVVzZXJzLmVuc3VyZShv
cmlnaW4sIFt0aGlzLCAmb3JpZ2luXSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFF1b3Rh
VXNlcj4oKnRoaXMsIG1fcXVvdGFNYW5hZ2VyR2V0dGVyKG1fc2Vzc2lvbklELCBvcmlnaW4pLCBD
bGllbnRPcmlnaW4geyBvcmlnaW4gfSk7Ci0gICAgfSkuaXRlcmF0b3ItPnZhbHVlOwotfQotCi12
b2lkIElEQlNlcnZlcjo6c3RhcnRDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xp
ZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAgQVNTRVJUKCFtX3Nlc3Npb25JRC5pc0VwaGVtZXJh
bCgpKTsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JklEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbiwgb3JpZ2luKSk7Ci19Ci0KLXZv
aWQgSURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdp
biYgb3JpZ2luKQorU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gSURCU2VydmVyOjpyZXF1
ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplKQog
ewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgYXV0byBkYXRhYmFzZURpcmVj
dG9yeVBhdGggPSB0aGlzLT5kYXRhYmFzZURpcmVjdG9yeVBhdGhJc29sYXRlZENvcHkoKTsKLSAg
ICBhdXRvIG9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZpZXI6
OmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3JpZ2lu
LmNsaWVudE9yaWdpbiwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCAidjAiKTsKLSAgICBhdXRvIG5l
d1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZpZXI6OmRhdGFiYXNl
RGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3JpZ2luLmNsaWVudE9y
aWdpbiwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCAidjEiKTsKLSAgICBhdXRvIHNpemUgPSBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JEaXJlY3Rvcnkob2xkVmVyc2lvbk9y
aWdpbkRpcmVjdG9yeSkgKyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JE
aXJlY3RvcnkobmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSk7Ci0KLSAgICBwb3N0RGF0YWJhc2VU
YXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpmaW5pc2hD
b21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4sIG9yaWdpbiwgc2l6ZSkpOwotfQotCi12b2lkIElE
QlNlcnZlcjo6ZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9y
aWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2Vy
KG9yaWdpbikuaW5pdGlhbGl6ZVNwYWNlVXNlZChzcGFjZVVzZWQpOwotfQotCi12b2lkIElEQlNl
cnZlcjo6cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0
YXNrU2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNp
c2lvbik+JiYgY2FsbGJhY2spCi17Ci0gICAgYXV0byogcXVvdGFNYW5hZ2VyID0gZW5zdXJlUXVv
dGFVc2VyKG9yaWdpbikubWFuYWdlcigpOwotICAgIGlmICghcXVvdGFNYW5hZ2VyKSB7Ci0gICAg
ICAgIGNhbGxiYWNrKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHRhc2tT
aXplLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgcmV0dXJuIG1fc3BhY2VSZXF1ZXN0ZXIob3Jp
Z2luLCB0YXNrU2l6ZSk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpyZXNldFNwYWNlVXNlZChjb25z
dCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK3VpbnQ2NF90IElEQlNlcnZlcjo6ZGlza1VzYWdlKGNv
bnN0IFN0cmluZyYgcm9vdERpcmVjdG9yeSwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7
Ci0gICAgaWYgKGF1dG8qIHVzZXIgPSBtX3F1b3RhVXNlcnMuZ2V0KG9yaWdpbikpCi0gICAgICAg
IHVzZXItPnJlc2V0U3BhY2VVc2VkKCk7Ci19Ci0KLXZvaWQgSURCU2VydmVyOjppbmNyZWFzZVNw
YWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc2l6ZSkKLXsKLSAg
ICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbmNyZWFzZVNwYWNlVXNlZChzaXplKTsKLX0KLQot
dm9pZCBJREJTZXJ2ZXI6OmRlY3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3Jp
Z2luLCB1aW50NjRfdCBzaXplKQotewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmRlY3Jl
YXNlU3BhY2VVc2VkKHNpemUpOwotfQotCi12b2lkIElEQlNlcnZlcjo6aW5jcmVhc2VQb3RlbnRp
YWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXpl
KQotewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmluY3JlYXNlUG90ZW50aWFsU3BhY2VV
c2VkKHRhc2tTaXplKTsKLX0KKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotdm9pZCBJ
REJTZXJ2ZXI6OmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYg
b3JpZ2luLCB1aW50NjRfdCBzcGFjZVVzZWQpCi17Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdp
bikuZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoc3BhY2VVc2VkKTsKKyAgICBhdXRvIG9sZFZl
cnNpb25PcmlnaW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZpZXI6OmRhdGFiYXNlRGly
ZWN0b3J5UmVsYXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3JpZ2luLmNsaWVudE9yaWdp
biwgcm9vdERpcmVjdG9yeSwgInYwIl9zdHIpOworICAgIGF1dG8gbmV3VmVyc2lvbk9yaWdpbkRp
cmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2
ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xpZW50T3JpZ2luLCByb290RGlyZWN0
b3J5LCAidjEiX3N0cik7CisgICAgcmV0dXJuIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJh
c2VzU2l6ZUZvckRpcmVjdG9yeShvbGRWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KSArIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9uT3JpZ2lu
RGlyZWN0b3J5KTsKIH0KIAogdm9pZCBJREJTZXJ2ZXI6OnVwZ3JhZGVGaWxlc0lmTmVjZXNzYXJ5
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJ2ZXIuaAppbmRleCAzODc3YTA1MzJhNGRkYmZlODgwMTU3MmE2Y2JkMWQ0NDY0ZGZlZGFlLi5m
YzE2MDRmNzY1YWUyNWM2M2EwOWE0YTkzMWQ1MDA0Y2VjMDUwYWMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0zMCw3
ICszMCw2IEBACiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvQ2xpZW50LmgiCiAjaW5jbHVkZSAi
SURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU3RvcmFnZVF1b3RhTWFuYWdlci5o
IgotI2luY2x1ZGUgIlN0b3JhZ2VRdW90YVVzZXIuaCIKICNpbmNsdWRlICJVbmlxdWVJREJEYXRh
YmFzZS5oIgogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oIgogI2luY2x1
ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0aXZpdHkuaD4KQEAgLTU4LDkgKzU3LDkgQEAgZW51bSBjbGFz
cyBTaG91bGRGb3JjZVN0b3AgOiBib29sIHsgTm8sIFllcyB9OwogCiBjbGFzcyBJREJTZXJ2ZXIg
OiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2ZXI+LCBwdWJsaWMgQ3Jvc3NUaHJlYWRUYXNrSGFu
ZGxlciwgcHVibGljIENhbk1ha2VXZWFrUHRyPElEQlNlcnZlcj4gewogcHVibGljOgotICAgIHVz
aW5nIFF1b3RhTWFuYWdlckdldHRlciA9IFdURjo6RnVuY3Rpb248U3RvcmFnZVF1b3RhTWFuYWdl
ciooUEFMOjpTZXNzaW9uSUQsIGNvbnN0IENsaWVudE9yaWdpbiYpPjsKLSAgICBzdGF0aWMgUmVm
PElEQlNlcnZlcj4gY3JlYXRlKFBBTDo6U2Vzc2lvbklELCBRdW90YU1hbmFnZXJHZXR0ZXImJik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShQQUw6OlNl
c3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdl
ckdldHRlciYmKTsKKyAgICB1c2luZyBTdG9yYWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXIg
PSBGdW5jdGlvbjxTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbihjb25zdCBDbGllbnRPcmln
aW4mLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCk+OworICAgIHN0YXRpYyBSZWY8SURCU2VydmVy
PiBjcmVhdGUoUEFMOjpTZXNzaW9uSUQsIFN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3Rl
ciYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKFBB
TDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgU3RvcmFn
ZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyJiYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZWdpc3RlckNvbm5lY3Rpb24oSURCQ29ubmVjdGlvblRvQ2xpZW50Jik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCB1bnJlZ2lzdGVyQ29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQm
KTsKQEAgLTExMSwxNCArMTEwLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2xvc2VBbmREZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2
b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNs
b3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmln
aW5EYXRhPiYsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAg
dm9pZCByZXF1ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYm
KTsKLSAgICB2b2lkIGluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdp
biYsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VV
c2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGlu
Y3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNpemUpOwotICAg
IHZvaWQgZGVjcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6
ZSk7Ci0gICAgdm9pZCByZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mKTsKLQotICAg
IHZvaWQgaW5pdGlhbGl6ZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikgeyBl
bnN1cmVRdW90YVVzZXIob3JpZ2luKTsgfQorICAgIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lz
aW9uIHJlcXVlc3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHVpbnQ2NF90IGRpc2tVc2FnZShjb25zdCBTdHJp
bmcmIHJvb3REaXJlY3RvcnksIGNvbnN0IENsaWVudE9yaWdpbiYpOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB0cnlTdG9wKFNob3VsZEZvcmNlU3RvcCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZXN1bWUoKTsKQEAgLTEyNyw4ICsxMjAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmVEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZSYgZGF0YWJhc2UpIHsgbV9hbGxVbmlxdWVJREJE
YXRhYmFzZXMucmVtb3ZlKGRhdGFiYXNlKTsgfQogCiBwcml2YXRlOgotICAgIElEQlNlcnZlcihQ
QUw6OlNlc3Npb25JRCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOwotICAgIElEQlNlcnZlcihQQUw6
OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFu
YWdlckdldHRlciYmKTsKKyAgICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQsIFN0b3JhZ2VRdW90
YU1hbmFnZXJTcGFjZVJlcXVlc3RlciYmKTsKKyAgICBJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQs
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
U3BhY2VSZXF1ZXN0ZXImJik7CiAKICAgICBVbmlxdWVJREJEYXRhYmFzZSYgZ2V0T3JDcmVhdGVV
bmlxdWVJREJEYXRhYmFzZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKICAgICAKQEAg
LTE0NSw1MSArMTM4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZURhdGFiYXNlc01vZGlm
aWVkU2luY2VGb3JWZXJzaW9uKFdhbGxUaW1lLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHJl
bW92ZURhdGFiYXNlc1dpdGhPcmlnaW5zRm9yVmVyc2lvbihjb25zdCBWZWN0b3I8U2VjdXJpdHlP
cmlnaW5EYXRhPiYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgY2xhc3MgUXVvdGFVc2VyIGZpbmFs
IDogcHVibGljIFN0b3JhZ2VRdW90YVVzZXIgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFF1b3RhVXNlcihJREJTZXJ2ZXImLCBTdG9yYWdl
UXVvdGFNYW5hZ2VyKiwgQ2xpZW50T3JpZ2luJiYpOwotICAgICAgICB+UXVvdGFVc2VyKCk7Ci0K
LSAgICAgICAgU3RvcmFnZVF1b3RhTWFuYWdlciogbWFuYWdlcigpIHsgcmV0dXJuIG1fbWFuYWdl
ci5nZXQoKTsgfQotCi0gICAgICAgIHZvaWQgc2V0U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNl
ZCkgeyBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsgfQotICAgICAgICB2b2lkIHJlc2V0U3BhY2VV
c2VkKCk7Ci0KLSAgICAgICAgdm9pZCBpbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRf
dCBpbmNyZWFzZSkgeyBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgKz0gaW5jcmVhc2U7IH0KLSAg
ICAgICAgdm9pZCBkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRfdCBkZWNyZWFzZSkK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSA+
PSBkZWNyZWFzZSk7Ci0gICAgICAgICAgICBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgLT0gZGVj
cmVhc2U7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBpbmNyZWFzZVNwYWNlVXNlZCh1aW50NjRf
dCBzaXplKTsKLSAgICAgICAgdm9pZCBkZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKTsK
LQotICAgICAgICB2b2lkIGluaXRpYWxpemVTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKTsK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFs
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOwotICAgICAg
ICAgICAgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlOwotICAg
ICAgICB9Ci0gICAgICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgpIGZpbmFsOwotICAgICAgICB2
b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwot
Ci0gICAgICAgIElEQlNlcnZlciYgbV9zZXJ2ZXI7Ci0gICAgICAgIFdlYWtQdHI8U3RvcmFnZVF1
b3RhTWFuYWdlcj4gbV9tYW5hZ2VyOwotICAgICAgICBDbGllbnRPcmlnaW4gbV9vcmlnaW47Ci0g
ICAgICAgIGJvb2wgbV9pc0luaXRpYWxpemVkIHsgZmFsc2UgfTsKLSAgICAgICAgdWludDY0X3Qg
bV9zcGFjZVVzZWQgeyAwIH07Ci0gICAgICAgIHVpbnQ2NF90IG1fZXN0aW1hdGVkU3BhY2VJbmNy
ZWFzZSB7IDAgfTsKLSAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2luaXRpYWxp
emF0aW9uQ2FsbGJhY2s7Ci0gICAgfTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIFF1b3RhVXNlciYg
ZW5zdXJlUXVvdGFVc2VyKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZvaWQgc3RhcnRDb21w
dXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJik7Ci0gICAgdm9pZCBj
b21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYpOwotICAgIHZvaWQg
ZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYsIHVp
bnQ2NF90IHNwYWNlVXNlZCk7Ci0KICAgICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKICAg
ICBIYXNoTWFwPElEQkNvbm5lY3Rpb25JZGVudGlmaWVyLCBSZWZQdHI8SURCQ29ubmVjdGlvblRv
Q2xpZW50Pj4gbV9jb25uZWN0aW9uTWFwOwogICAgIEhhc2hNYXA8SURCRGF0YWJhc2VJZGVudGlm
aWVyLCBzdGQ6OnVuaXF1ZV9wdHI8VW5pcXVlSURCRGF0YWJhc2U+PiBtX3VuaXF1ZUlEQkRhdGFi
YXNlTWFwOwpAQCAtMjAyLDggKzE1MCw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgbV9kYXRh
YmFzZURpcmVjdG9yeVBhdGg7CiAKLSAgICBIYXNoTWFwPENsaWVudE9yaWdpbiwgc3RkOjp1bmlx
dWVfcHRyPFF1b3RhVXNlcj4+IG1fcXVvdGFVc2VyczsKLSAgICBRdW90YU1hbmFnZXJHZXR0ZXIg
bV9xdW90YU1hbmFnZXJHZXR0ZXI7CisgICAgU3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVz
dGVyIG1fc3BhY2VSZXF1ZXN0ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IDgyNDM0MjI5MGVhZDhjM2UzYzU3MWY2OTVjMjgz
NTc3ZDM3YzJlNmMuLmZmOGFkOGE4MDYwMzYxMDkwM2NiODFmNDdlMjdkZjA1Njc5NTFlYjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMTg5LDU2ICsxODksNiBAQCBzdGF0aWMgaW5s
aW5lIFN0cmluZyBxdW90YUVycm9yTWVzc2FnZU5hbWUoY29uc3QgY2hhciogdGFza05hbWUpCiAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoIkZhaWxlZCB0byAiLCB0YXNrTmFtZSwgIiBpbiBkYXRhYmFz
ZSBiZWNhdXNlIG5vdCBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiIpOwogfQogCi12b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpyZXF1ZXN0U3BhY2UoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24sIHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBjaGFyKiB0YXNrTmFtZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJiBjYWxsYmFjaykKLXsKLSAgICBtX3Nl
cnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUsIFt3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCB0aGlzLCB3ZWFrVHJhbnNhY3Rpb24gPSBtYWtlV2Vh
a1B0cih0cmFuc2FjdGlvbiksIHRhc2tOYW1lLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykgewotICAg
ICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3duRXJyb3IgfSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXdlYWtUcmFuc2FjdGlvbikgewot
ICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3duRXJyb3IgfSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fb3duaW5nUG9pbnRlckZvckNs
b3NlKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgY2xvc2luZyB0aGUgZGF0YWJhc2UsIHRoZXJl
IGlzIG5vIHBvaW50IGluIHRyeWluZyB0byBtb2RpZnkgdGhlIGRhdGFiYXNlIGF0IHRoYXQgcG9p
bnQuCi0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJvciB9KTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZGVjaXNpb24p
IHsKLSAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueToKLSAg
ICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVy
cm9yTWVzc2FnZU5hbWUodGFza05hbWUpIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudDoKLSAgICAgICAgICAg
IGNhbGxiYWNrKElEQkVycm9yIHsgfSk7Ci0gICAgICAgIH07Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OndhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KElEQkVycm9yJiYpPiYmIGNhbGxiYWNrKQotewotICAgIHJlcXVlc3RTcGFjZSh0cmFuc2FjdGlv
biwgMCwgIiIsIFdURk1vdmUoY2FsbGJhY2spKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCB0
YXNrU2l6ZSkKLXsKLSAgICBtX3NlcnZlci0+aW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9p
ZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6ZSk7Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdTcGFj
ZUluY3JlYXNlVGFza3MuY29udGFpbnMoaWRlbnRpZmllcikpOwotICAgIG1fcGVuZGluZ1NwYWNl
SW5jcmVhc2VUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOwotfQotCi12b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlmaWVy
LCBib29sIGlzVGFza1N1Y2Nlc3NmdWwpCi17Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGlu
Z1NwYWNlSW5jcmVhc2VUYXNrcy5maW5kKGlkZW50aWZpZXIpOwotICAgIEFTU0VSVChpdGVyYXRv
ciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZW5kKCkpOwotICAgIG1fc2VydmVyLT5k
ZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGl0ZXJhdG9y
LT52YWx1ZSk7Ci0gICAgaWYgKGlzVGFza1N1Y2Nlc3NmdWwpCi0gICAgICAgIG1fc2VydmVyLT5p
bmNyZWFzZVNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGl0ZXJhdG9yLT52YWx1ZSk7
Ci0gICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLnJlbW92ZShpdGVyYXRvcik7Ci19Ci0K
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiB7
CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1
cnJlbnRPcGVuT3BlcmF0aW9uICglcCkiLCB0aGlzKTsKQEAgLTI0OSwyOSArMTk5LDcgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkKICAgICBp
ZiAoIW1fZGF0YWJhc2VJbmZvKSB7CiAgICAgICAgIGlmICghbV9pc09wZW5pbmdCYWNraW5nU3Rv
cmUpIHsKICAgICAgICAgICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIC8vIFdlIGRvIG5vdCBrbm93IHdoZXRoZXIgdGhpcyBpcyBhbiBleGlzdGluZyBvciBh
IG5ldyBkYXRhYmFzZS4KLSAgICAgICAgICAgIC8vIFdlIHNldCBhIHNtYWxsIGNvc3Qgc28gdGhh
dCBpdCBpcyBub3QgcG9zc2libGUgdG8gb3BlbiBhbiBpbmZpbml0ZSBudW1iZXIgb2YgZGF0YWJh
c2UuCi0gICAgICAgICAgICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmln
aW4oKSwgZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIodGhpcyldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgewotICAgICAgICAgICAgICAgIGlm
ICghd2Vha1RoaXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAg
ICAgIGlmIChtX293bmluZ1BvaW50ZXJGb3JDbG9zZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgICAgICAgICAgc3dpdGNoIChkZWNpc2lvbikgewotICAgICAgICAgICAg
ICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnk6IHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBJREJSZXN1bHREYXRhOjplcnJvcihtX2N1cnJlbnRP
cGVuREJSZXF1ZXN0LT5yZXF1ZXN0RGF0YSgpLnJlcXVlc3RJZGVudGlmaWVyKCksIElEQkVycm9y
IHsgUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIm9wZW5EYXRhYmFz
ZSIpIH0pOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0LT5jb25u
ZWN0aW9uKCkuZGlkT3BlbkRhdGFiYXNlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudE9wZW5EQlJlcXVlc3QgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBtX2lz
T3BlbmluZ0JhY2tpbmdTdG9yZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpEZWNpc2lvbjo6R3JhbnQ6Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY2FsbGJhY2tJ
RCA9IHRoaXMtPmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgZGVmYXVsdFdyaXRl
T3BlcmF0aW9uQ29zdCk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMtPnBvc3REYXRhYmFzZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5C
YWNraW5nU3RvcmUsIG1faWRlbnRpZmllciwgY2FsbGJhY2tJRCkpOwotICAgICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3Rv
cmUsIG1faWRlbnRpZmllcikpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC04MzUsMTQgKzc2MywyMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphZGRPcGVuRGF0YWJh
c2VDb25uZWN0aW9uKFJlZjxVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3RpbwogICAgIG1fb3BlbkRh
dGFiYXNlQ29ubmVjdGlvbnMuYWRkKGFkb3B0UmVmKGNvbm5lY3Rpb24ubGVha1JlZigpKSk7CiB9
CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKK3Zv
aWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0
b3JlICglcCkiLCB0aGlzKTsKIAotICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmUpOwotCiAgICAg
SURCRGF0YWJhc2VJbmZvIGRhdGFiYXNlSW5mbzsKKyAgICBtX29yaWdpbiA9IGlkZW50aWZpZXIu
b3JpZ2luKCk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAgYXV0byBkZWNpc2lvbiA9IG1fc2Vy
dmVyLT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4sIGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QpOwor
ICAgIGlmIChkZWNpc2lvbiA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkg
eworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5m
bywgSURCRXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIk9w
ZW5CYWNraW5nU3RvcmUiKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VCghbV9iYWNraW5nU3RvcmUpOwogICAgIElEQkVycm9yIGVycm9yOwogICAgIHsKICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKQEAgLTg1MiwxMCArNzg3LDEw
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyCiAgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3Rv
cmUtPmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbywgbG9ja2VyKTsKICAg
ICB9CiAKLSAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5m
bywgZXJyb3IsICB0YXNrSWRlbnRpZmllcikpOworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJh
Y2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywg
Y29uc3QgSURCRXJyb3ImIGVycm9yLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKK3ZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZv
JiBpbmZvLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQmFja2luZ1N0b3JlIik7CkBAIC04NjYsOCArODAxLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNv
bnN0IEkKICAgICBBU1NFUlQobV9pc09wZW5pbmdCYWNraW5nU3RvcmUpOwogICAgIG1faXNPcGVu
aW5nQmFja2luZ1N0b3JlID0gZmFsc2U7CiAKLSAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh0
YXNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwotCiAgICAgaWYgKG1faGFyZENsb3NlZEZv
clVzZXJEZWxldGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtODc5LDMzICs4MTIsMjIgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3Jl
Iik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVz
dGltYXRlU2l6ZShpbmZvKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXpl
LCAiY3JlYXRlT2JqZWN0U3RvcmUiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwgaW5m
bywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7Ci0g
ICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgKmVycm9yLmNvZGUoKSAhPSBRdW90YUV4Y2Vl
ZGVkRXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5jcmVhdGVPYmplY3RTdG9y
ZUFmdGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIGluZm8sIFdURk1vdmUoY2Fs
bGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNy
ZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVJ
bmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFF
cnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVy
cm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUp
OwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJh
bnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbywgIHF1b3RhRXJyb3IpKTsKKyAgICBw
b3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9u
LmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0
IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCit2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKQogewogICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUiKTsKIAotICAgIGlmICghcXVvdGFF
cnJvci5pc051bGwoKSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVP
YmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBxdW90YUVycm9yLCBpbmZvKSk7CisgICAg
Ly8gUXVvdGEgY2hlY2suCisgICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlv
bkNvc3QgKyBlc3RpbWF0ZVNpemUoaW5mbyk7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3Bh
Y2UobV9vcmlnaW4sIHRhc2tTaXplKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6
RGVueSkgeworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9y
ZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3Rh
RXJyb3JNZXNzYWdlTmFtZSgiQ3JlYXRlT2JqZWN0U3RvcmUiKSksIGluZm8pKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtOTI0LDcgKzg0Niw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1h
aW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUiKTsKIAot
ICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IuaXNO
dWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkKICAgICAgICAgbV9kYXRhYmFzZUluZm8t
PmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAKQEAgLTkzNiwxNyArODU3LDYgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3Jl
Iik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3Ro
aXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVOYW1lLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+ZGVsZXRlT2JqZWN0U3RvcmVBZnRl
clF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTmFtZSwgV1RGTW92ZShjYWxsYmFj
aykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RT
dG9yZUFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJh
Y2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1
cm47CkBAIC05OTEsMjggKzkwMSwxNSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVP
YmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmUiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBk
ZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgbmV3TmFtZS5zaXplSW5CeXRlcygpOwotICAgIHJl
cXVlc3RTcGFjZSh0cmFuc2FjdGlvbiwgdGFza1NpemUsICJyZW5hbWVPYmplY3RTdG9yZSIsIFt0
aGlzLCB0YXNrU2l6ZSwgJnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05h
bWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewot
ICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNl
ZWRlZEVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+cmVuYW1lT2JqZWN0U3Rv
cmVBZnRlclF1b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIG5ld05hbWUsIFdURk1vdmUoY2FsbGJhY2spLCBlcnJvcik7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNr
KHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05h
bWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQot
ewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RG
TW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSURCRXJyb3IgZXJyb3IgPSBxdW90YUVycm9yOworICAgIElEQkVycm9yIGVycm9yOwog
ICAgIGF1dG8qIGluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3Rv
cmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICBpZiAoIWluZm8pCiAgICAgICAgIGVycm9y
ID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJBdHRlbXB0IHRvIHJlbmFtZSBub24tZXhpc3Rh
bnQgb2JqZWN0IHN0b3JlIl9zIH07CiAKLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxi
YWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUs
IGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKIH0KIApAQCAtMTAyMSw4ICs5MTgsMTAgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY28KICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9i
amVjdFN0b3JlIik7CiAKLSAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3RE
YXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIs
IGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKKyAgICAvLyBRdW90YSBj
aGVjay4KKyAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIG5l
d05hbWUuc2l6ZUluQnl0ZXMoKTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX29y
aWdpbiwgdGFza1NpemUpID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55KSB7
CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxs
YmFja0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1l
c3NhZ2VOYW1lKCJSZW5hbWVPYmplY3RTdG9yZSIpKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBu
ZXdOYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwNDAsNyArOTM5LDYgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5h
bWVPYmplY3RTdG9yZSIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJ
ZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAg
ICAgICBtX2RhdGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBuZXdOYW1lKTsKIApAQCAtMTA1MiwxNyArOTUwLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6Y2xlYXJPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIo
bWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUiKTsKIAotICAgIHdhaXRG
b3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9u
LCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1
dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoZXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICB0aGlzLT5jbGVhck9iamVjdFN0b3JlQWZldFF1b3RhQ2hlY2so
dHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgV1RGTW92ZShjYWxsYmFjaykpOwot
ICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlQWZl
dFF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKLXsK
ICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1v
dmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAg
LTEwOTcsMzMgKzk4NCwyMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleChV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgYwogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRh
YmFzZTo6Y3JlYXRlSW5kZXgiKTsKIAotICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVP
cGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGluZm8pOwotICAgIHJlcXVlc3RTcGFjZSh0cmFu
c2FjdGlvbiwgdGFza1NpemUsICJjcmVhdGVJbmRleCIsIFt0aGlzLCB0YXNrU2l6ZSwgJnRyYW5z
YWN0aW9uLCBpbmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiAqZXJyb3IuY29kZSgpICE9
IFF1b3RhRXhjZWVkZWRFcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJv
cikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNyZWF0
ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCB0cmFuc2FjdGlvbiwgaW5mbywgV1RGTW92
ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJJbmRleEluZm8mIGlu
Zm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQot
ewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RG
TW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7Ci0gICAg
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZv
KCkuaWRlbnRpZmllcigpLCBpbmZvLCBxdW90YUVycm9yKSk7CisgICAgcG9zdERhdGFiYXNlVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUNyZWF0ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigp
LCBpbmZvKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRl
eCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8sIGNvbnN0
IElEQkVycm9yJiBxdW90YUVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNy
ZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5m
bykKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAi
KGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4Iik7CiAKLSAgICBpZiAo
IXF1b3RhRXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
Q3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgcXVvdGFFcnJvciwgaW5mbykpOworICAg
IGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXpl
KGluZm8pOworICAgIGlmIChtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCB0YXNrU2l6
ZSkgPT0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpIHsKKyAgICAgICAgcG9z
dERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgSURC
RXJyb3IoUXVvdGFFeGNlZWRlZEVycm9yLCBxdW90YUVycm9yTWVzc2FnZU5hbWUoIkNyZWF0ZUlu
ZGV4IikpLCBpbmZvKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTExNDgsOCArMTAy
Myw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtQ3JlYXRlSW5kZXgiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNr
SWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwotCiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7
CiAgICAgICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7CiAgICAgICAgIGF1dG8qIG9iamVjdFN0
b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShpbmZv
Lm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKQEAgLTExNjUsMTcgKzEwMzgsNiBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgdQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXgiKTsKIAotICAg
IHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJv
ci5pc051bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZUluZGV4QWZ0
ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFt
ZSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpkZWxldGVJbmRleEFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIGluZGV4TmFtZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKLXsKICAgICB1aW50NjRf
dCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2sp
KTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTEyMjksMjMgKzEw
OTEsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFt
ZUluZGV4Iik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29z
dCArIG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKLSAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24s
IHRhc2tTaXplLCAicmVuYW1lSW5kZXgiLCBbdGhpcywgdGFza1NpemUsICZ0cmFuc2FjdGlvbiwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAo
IWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9yKSB7
Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2so
dGFza1NpemUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRp
ZmllciwgbmV3TmFtZSwgV1RGTW92ZShjYWxsYmFjayksIGVycm9yKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0
X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJF
cnJvciYgcXVvdGFFcnJvcikKLXsKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIElEQkVycm9yIGVycm9yID0gcXVvdGFFcnJvcjsKKyAg
ICBJREJFcnJvciBlcnJvcjsKICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNl
SW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsK
ICAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykKICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVu
a25vd25FcnJvciwgIkF0dGVtcHQgdG8gcmVuYW1lIGluZGV4IGluIG5vbi1leGlzdGFudCBvYmpl
Y3Qgc3RvcmUiX3MgfTsKQEAgLTEyNTQsNyArMTEwNCw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnJlbmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJ
REJECiAgICAgaWYgKCFpbmRleEluZm8pCiAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IsICJBdHRlbXB0IHRvIHJlbmFtZSBub24tZXhpc3RhbnQgaW5kZXgiX3MgfTsKIAot
ICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBv
c3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygp
LmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5l
d05hbWUsIGVycm9yKSk7CiB9CiAKQEAgLTEyNjMsOCArMTExMiwxMCBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJRAogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAotICAg
IGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
UmVuYW1lSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisg
ICAgYXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBuZXdOYW1lLnNp
emVJbkJ5dGVzKCk7CisgICAgaWYgKG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9vcmlnaW4sIHRh
c2tTaXplKSA9PSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSkgeworICAgICAg
ICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVy
LCBJREJFcnJvcihRdW90YUV4Y2VlZGVkRXJyb3IsIHF1b3RhRXJyb3JNZXNzYWdlTmFtZSgiUmVu
YW1lSW5kZXgiKSksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdO
YW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyODIsNyArMTEzMyw2IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1l
SW5kZXgiKTsKIAotICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmll
ciwgZXJyb3IuaXNOdWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAgICAgICBh
dXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2Jq
ZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICAgICAgQVNTRVJUKG9iamVjdFN0
b3JlSW5mbyk7CkBAIC0xMjk2LDUyICsxMTQ2LDM5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
CiAgICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CiB9
CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEs
IGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhl
ZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxi
YWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoY29uc3QgSURC
UmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25z
dCBJREJWYWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92
ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJh
c2U6OnB1dE9yQWRkIik7CiAKLSAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVsdFdyaXRlT3BlcmF0
aW9uQ29zdCArIGVzdGltYXRlU2l6ZShrZXlEYXRhKSArIGVzdGltYXRlU2l6ZSh2YWx1ZSk7Ci0g
ICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKLSAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0
YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShyZXF1ZXN0RGF0YS5vYmplY3RT
dG9yZUlkZW50aWZpZXIoKSk7Ci0gICAgaWYgKG9iamVjdFN0b3JlKQotICAgICAgICB0YXNrU2l6
ZSArPSBvYmplY3RTdG9yZS0+aW5kZXhOYW1lcygpLnNpemUoKSAqIHRhc2tTaXplOwotCi0gICAg
cmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNrU2l6ZSwgInB1dE9yQWRkIiwgW3RoaXMsIHRh
c2tTaXplLCByZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayksIG92ZXJ3cml0ZU1vZGVdKGF1dG8gZXJyb3IpIG11dGFibGUgewotICAgICAgICBp
ZiAoIWVycm9yLmlzTnVsbCgpICYmICplcnJvci5jb2RlKCkgIT0gUXVvdGFFeGNlZWRlZEVycm9y
KSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSwgeyB9KTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5wdXRPckFkZEFmdGVyUXVvdGFD
aGVjayh0YXNrU2l6ZSwgcmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2Rl
LCBXVEZNb3ZlKGNhbGxiYWNrKSwgZXJyb3IpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwdXRPckFkZEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgY29u
c3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRh
LCBjb25zdCBJREJWYWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVN
b2RlIG92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJy
b3ImIHF1b3RhRXJyb3IpCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJh
Y2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQs
IHRhc2tTaXplKTsKLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJl
cXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9y
ZUlkZW50aWZpZXIoKSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIHF1b3RhRXJyb3Ip
KTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRh
LnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZp
ZXIoKSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUpKTsKIH0KIAotdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29u
c3QgSURCVmFsdWUmIG9yaWdpbmFsUmVjb3JkVmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVP
dmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQor
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYg
a2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIG9yaWdpbmFsUmVjb3JkVmFsdWUsIEluZGV4ZWREQjo6
T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1QdXRPckFkZCIpOwogCi0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAg
ICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKLQogICAgIElEQktleURhdGEgdXNlZEtl
eTsKICAgICBJREJFcnJvciBlcnJvcjsKIAotICAgIGlmICghcXVvdGFFcnJvci5pc051bGwoKSkg
ewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVu
dGlmaWVyLCBxdW90YUVycm9yLCB1c2VkS2V5KSk7CisgICAgLy8gUXVvdGEgY2hlY2suCisgICAg
YXV0byB0YXNrU2l6ZSA9IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgKyBlc3RpbWF0ZVNpemUo
a2V5RGF0YSkgKyBlc3RpbWF0ZVNpemUob3JpZ2luYWxSZWNvcmRWYWx1ZSk7CisgICAgQVNTRVJU
KG1fZGF0YWJhc2VJbmZvKTsKKyAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZv
LT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAg
IGlmIChvYmplY3RTdG9yZSkKKyAgICAgICAgdGFza1NpemUgKz0gb2JqZWN0U3RvcmUtPmluZGV4
TmFtZXMoKS5zaXplKCkgKiB0YXNrU2l6ZTsKKyAgICBpZiAobV9zZXJ2ZXItPnJlcXVlc3RTcGFj
ZShtX29yaWdpbiwgdGFza1NpemUpID09IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpE
ZW55KSB7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFj
a0lkZW50aWZpZXIsIElEQkVycm9yKFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3Nh
Z2VOYW1lKCJQdXRPckFkZCIpKSwgdXNlZEtleSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVu
dGlmaWVyKTsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3Jl
TG9jayk7CiAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKQEAgLTE0MTgsMjYgKzEyNTUs
MTQgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSUQKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1QdXRPckFkZCIpOwogCi0gICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVu
dGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgcGVyZm9ybUtleURhdGFDYWxsYmFjayhjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHRLZXkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpnZXRSZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0UmVjb3Jk
RGF0YSYgZ2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3RE
YXRhLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiBnZXRSZWNvcmREYXRhLCBHZXRSZXN1bHRDYWxs
YmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJ
bmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZCIpOwogCi0gICAg
d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0
RGF0YSwgZ2V0UmVjb3JkRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYm
IGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAg
ICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Z2V0UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKHJlcXVl
c3REYXRhLCBnZXRSZWNvcmREYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldFJlY29yZERhdGEmIGdldFJl
Y29yZERhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNh
bGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwog
ICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ0OCwyMiArMTI3Mywx
MSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmRBZnRlclF1b3RhQ2hlY2soY29u
c3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYQogICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0
UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwg
cmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGdldFJlY29yZERhdGEua2V5UmFu
Z2VEYXRhLCBnZXRSZWNvcmREYXRhLnR5cGUpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6Z2V0QWxsUmVjb3JkcyhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRBbGxSZWNv
cmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIEdldEFsbFJlc3VsdHNDYWxsYmFjayBjYWxsYmFj
aykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHMoY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVj
b3Jkc0RhdGEsIEdldEFsbFJlc3VsdHNDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0
YWJhc2U6OmdldEFsbFJlY29yZHMiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0
aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAg
ICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3Zl
KGVycm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0
aGlzLT5nZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3REYXRhLCBnZXRBbGxSZWNv
cmRzRGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29y
ZHNEYXRhLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3Qg
Y2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7
CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xNDc3LDcgKzEyOTEs
NiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUgogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkIik7CiAKICAgICBBU1NFUlQobV9iYWNr
aW5nU3RvcmUpOwotCiAgICAgSURCR2V0UmVzdWx0IHJlc3VsdDsKICAgICBJREJFcnJvciBlcnJv
cjsKICAgICB7CkBAIC0xNTE4LDcgKzEzMzEsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtR2V0QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxS
ZWNvcmRzIik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotCiAgICAgSURCR2V0QWxs
UmVzdWx0IHJlc3VsdDsKICAgICBJREJFcnJvciBlcnJvcjsKICAgICB7CkBAIC0xNTM3LDIyICsx
MzQ5LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRBbGxSZWNvcmRz
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uCiAgICAgcGVyZm9ybUdldEFsbFJlc3Vs
dHNDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpOwogfQogCi12b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJ
REJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Z2V0Q291bnQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxiYWNrIGNhbGxiYWNrKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWlu
KSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3Bh
Y2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIHJhbmdlLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAg
ICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVy
cm9yKSwgeyB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlz
LT5nZXRDb3VudEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgcmFuZ2UsIFdURk1vdmUoY2Fs
bGJhY2spKTsKLSAgICB9KTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnRB
ZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJ
REJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxs
YmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU4NSwy
MiArMTM4NiwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0Q291bnQo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIHBlcmZvcm1Db3VudENh
bGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGNvdW50KTsKIH0KIAotdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQordm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEsIEVycm9yQ2Fs
bGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0co
SW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQiKTsKIAot
ICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVx
dWVzdERhdGEsIGtleVJhbmdlRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0
byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAg
ICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhyZXF1
ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25z
dCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5
UmFuZ2VEYXRhLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAg
IGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTYyOSwyMiArMTQxOSwxMSBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29ucwogICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxi
YWNrSWRlbnRpZmllciwgZXJyb3IpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVu
Q3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8sIEdl
dFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1
cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkN1cnNvcklu
Zm8mIGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6b3BlbkN1cnNvciIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJh
bnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051
bGwoKSkgewotICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+b3BlbkN1cnNvckFmdGVy
UXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgaW5mbywgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0p
OwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yQWZ0ZXJRdW90YUNoZWNr
KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCQ3Vyc29ySW5mbyYg
aW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJh
Y2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAg
aWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CkBAIC0xNjc0LDIyICsxNDUzLDExIEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1PcGVuQ3Vyc29yKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBwZXJmb3JtR2V0UmVzdWx0Q2FsbGJhY2soY2Fs
bGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6aXRlcmF0ZUN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJJdGVyYXRl
Q3Vyc29yRGF0YSYgZGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0
RGF0YSwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEsIEdldFJlc3VsdENhbGxiYWNr
IGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvciIpOwogCi0gICAg
d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0
RGF0YSwgZGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICAgICAgY2Fs
bGJhY2soV1RGTW92ZShlcnJvciksIHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy0+aXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0
YSwgZGF0YSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIH0pOwotfQotCi12b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEsIEdldFJl
c3VsdENhbGxiYWNrIGNhbGxiYWNrKQotewogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9y
ZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJh
Y2tJRCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc2NywxNyArMTUzNSw2IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0CiAKICAgICBBU1NFUlQodHJhbnNhY3Rpb24uZGF0YWJhc2VDb25uZWN0aW9u
KCkuZGF0YWJhc2UoKSA9PSB0aGlzKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0
aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAoIWVycm9yLmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGVycm9yKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+Y29tbWl0VHJhbnNhY3Rpb25B
ZnRlclF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3Rh
Q2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIEVycm9yQ2Fs
bGJhY2sgY2FsbGJhY2spCi17CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJh
Y2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQog
ICAgICAgICByZXR1cm47CkBAIC0xODM1LDI0ICsxNTkyLDEzIEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsCiAgICAgdHJhbnNhY3Rpb25Db21wbGV0ZWQobV9maW5pc2hpbmdUcmFuc2FjdGlvbnMu
dGFrZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6YWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgV2FpdEZvclBlbmRpbmdUYXNrcyB3YWl0Rm9yUGVuZGluZ1Rhc2tzLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbihV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgRXJyb3JDYWxsYmFjayBj
YWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24gLSAlcyIsIHRy
YW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwogCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigpLmRhdGFi
YXNlKCkgPT0gdGhpcyk7CiAKLSAgICBpZiAod2FpdEZvclBlbmRpbmdUYXNrcyA9PSBXYWl0Rm9y
UGVuZGluZ1Rhc2tzOjpZZXMpIHsKLSAgICAgICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRp
b24odHJhbnNhY3Rpb24sIFt0aGlzLCAmdHJhbnNhY3Rpb24sIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBpZiAoIWVycm9y
LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShlcnJvcikpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMt
PmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIFdhaXRGb3JQZW5kaW5nVGFza3M6Ok5vLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZN
b3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IGMzNThkZTQ5MzQ3NmI0NDEzZGU0MmNhNjQxMTYyMzQ1
NzZlZTZhNTUuLmViZmMxYzUwZjdhODgwODllZTZiZjI0Y2I2OTU3NDQ5OTg4MDkzODAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oCkBAIC00NCw2ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorc3RydWN0IENsaWVudE9yaWdpbjsKIGNsYXNzIElEQkVycm9yOwogY2xhc3MgSURCR2V0
QWxsUmVzdWx0Owogc3RydWN0IElEQkdldFJlY29yZERhdGE7CkBAIC04OSwxNyArOTAsMTUgQEAg
cHVibGljOgogICAgIHZvaWQgY3JlYXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYsIGNvbnN0IElEQkluZGV4SW5mbyYsIEVycm9yQ2FsbGJhY2spOwogICAgIHZvaWQgZGVsZXRl
SW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIEVycm9yQ2FsbGJhY2spOwogICAg
IHZvaWQgcmVuYW1lSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2spOwotICAgIHZvaWQgcHV0T3JBZGQoVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURC
S2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0
ZU1vZGUsIEtleURhdGFDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRSZWNvcmQoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVj
b3JkRGF0YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGdldEFsbFJlY29yZHMoVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3Qg
SURCR2V0QWxsUmVjb3Jkc0RhdGEmLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOwotICAgIHZvaWQg
Z2V0Q291bnQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3RE
YXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgQ291bnRDYWxsYmFjayk7Ci0gICAgdm9pZCBk
ZWxldGVSZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVl
c3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9p
ZCBvcGVuQ3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1
ZXN0RGF0YSYsIGNvbnN0IElEQkN1cnNvckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAg
dm9pZCBpdGVyYXRlQ3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJ
REJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwgR2V0UmVzdWx0Q2Fs
bGJhY2spOworICAgIHZvaWQgcHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJ
REJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zlcndy
aXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrKTsKKyAgICB2b2lkIGdldFJlY29yZChjb25zdCBJREJS
ZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdldFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7
CisgICAgdm9pZCBnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURC
R2V0QWxsUmVjb3Jkc0RhdGEmLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOworICAgIHZvaWQgZ2V0
Q291bnQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBDb3Vu
dENhbGxiYWNrKTsKKyAgICB2b2lkIGRlbGV0ZVJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEVycm9yQ2FsbGJhY2spOworICAgIHZvaWQgb3BlbkN1
cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkN1cnNvckluZm8mLCBHZXRSZXN1
bHRDYWxsYmFjayk7CisgICAgdm9pZCBpdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRh
JiwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CiAgICAg
dm9pZCBjb21taXRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgRXJy
b3JDYWxsYmFjayk7Ci0KLSAgICBlbnVtIGNsYXNzIFdhaXRGb3JQZW5kaW5nVGFza3MgeyBObywg
WWVzIH07Ci0gICAgdm9pZCBhYm9ydFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24mLCBXYWl0Rm9yUGVuZGluZ1Rhc2tzLCBFcnJvckNhbGxiYWNrKTsKKyAgICB2b2lkIGFi
b3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJh
Y2spOwogCiAgICAgdm9pZCBkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoVW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uJiwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIpOwogICAgIHZvaWQgdHJhbnNhY3Rpb25EZXN0cm95ZWQoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYpOwpAQCAtMTQwLDM3ICsxMzksMjAgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgc2NoZWR1bGVTaHV0ZG93bkZvckNsb3NlKCk7CiAKLSAgICB2b2lkIGNyZWF0ZU9i
amVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgRXJyb3JDYWxsYmFj
aywgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIHJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90
YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVy
cm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBjcmVhdGVJbmRleEFmdGVy
UXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYsIGNvbnN0IElEQkluZGV4SW5mbyYsIEVycm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJik7
Ci0gICAgdm9pZCByZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwg
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVy
cm9yQ2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBwdXRPckFkZEFmdGVyUXVv
dGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJ
REJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zlcndy
aXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgZGVs
ZXRlUmVjb3JkQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiwgRXJyb3JDYWxsYmFjayk7Ci0KLSAgICB2b2lkIGRlbGV0ZU9iamVjdFN0
b3JlQWZ0ZXJRdW90YUNoZWNrKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBT
dHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBjbGVhck9i
amVjdFN0b3JlQWZldFF1b3RhQ2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBk
ZWxldGVJbmRleEFmdGVyUXVvdGFDaGVjayhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmLCBFcnJvckNhbGxi
YWNrKTsKLSAgICB2b2lkIGdldFJlY29yZEFmdGVyUXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0
RGF0YSYsIGNvbnN0IElEQkdldFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAg
dm9pZCBnZXRBbGxSZWNvcmRzQWZ0ZXJRdW90YUNoZWNrKGNvbnN0IElEQlJlcXVlc3REYXRhJiwg
Y29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmLCBHZXRBbGxSZXN1bHRzQ2FsbGJhY2spOwotICAg
IHZvaWQgZ2V0Q291bnRBZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25z
dCBJREJLZXlSYW5nZURhdGEmLCBDb3VudENhbGxiYWNrKTsKLSAgICB2b2lkIG9wZW5DdXJzb3JB
ZnRlclF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJDdXJzb3JJbmZv
JiwgR2V0UmVzdWx0Q2FsbGJhY2spOwotICAgIHZvaWQgaXRlcmF0ZUN1cnNvckFmdGVyUXVvdGFD
aGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwg
R2V0UmVzdWx0Q2FsbGJhY2spOwotICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb25BZnRlclF1b3Rh
Q2hlY2soVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwotCiAg
ICAgLy8gRGF0YWJhc2UgdGhyZWFkIG9wZXJhdGlvbnMKICAgICB2b2lkIGRlbGV0ZUJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKLSAgICB2b2lkIG9wZW5CYWNraW5n
U3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgdWludDY0X3QgdGFza0lkZW50aWZp
ZXIpOworICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZp
ZXImKTsKICAgICB2b2lkIHBlcmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyKTsKICAgICB2b2lkIHBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIpOwogICAgIHZvaWQgYmVnaW5UcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKGNvbnN0
IElEQlRyYW5zYWN0aW9uSW5mbyYpOwotICAgIHZvaWQgcGVyZm9ybUNyZWF0ZU9iamVjdFN0b3Jl
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIGNvbnN0
IElEQkVycm9yJik7CisgICAgdm9pZCBwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBwZXJm
b3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICB2b2lkIHBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIHBlcmZvcm1D
bGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllcik7Ci0gICAgdm9pZCBwZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKKyAgICB2
b2lkIHBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJ
bmRleEluZm8mKTsKICAgICB2b2lkIHBlcmZvcm1EZWxldGVJbmRleCh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRl
bnRpZmllcik7CiAgICAgdm9pZCBwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lk
IHBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIEluZGV4
ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBjb25zdCBJREJFcnJvciYpOworICAgIHZv
aWQgcGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgSW5k
ZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOwogICAgIHZvaWQgcGVyZm9ybUdldFJl
Y29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElEQkdldFJlY29yZERhdGFUeXBlKTsKICAgICB2
b2lkIHBlcmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElE
QkdldEFsbFJlY29yZHNEYXRhJik7CiAgICAgdm9pZCBwZXJmb3JtR2V0SW5kZXhSZWNvcmQodWlu
dDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50
NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBjb25zdCBJ
REJLZXlSYW5nZURhdGEmKTsKQEAgLTE4Nyw3ICsxNjksNyBAQCBwcml2YXRlOgogCiAgICAgLy8g
TWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAgICAgdm9pZCBkaWREZWxldGVCYWNraW5nU3RvcmUodWlu
dDY0X3QgZGVsZXRlZFZlcnNpb24pOwotICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25z
dCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IHRhc2tJZGVudGlm
aWVyKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZv
JiwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIGRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9y
ZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURC
T2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3Rv
cmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKTsKQEAgLTI0Niwx
MSArMjI4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1heWJlRmluaXNoSGFyZENsb3NlKCk7CiAg
ICAgYm9vbCBpc0RvbmVXaXRoSGFyZENsb3NlKCk7CiAKLSAgICB2b2lkIHJlcXVlc3RTcGFjZShV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0IGNo
YXIqIGVycm9yTWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJik7
Ci0gICAgdm9pZCB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJREJFcnJvciYmKT4mJik7Ci0g
ICAgdm9pZCBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2
NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90
IGlkZW50aWZpZXIsIGJvb2wgaXNUYXNrU3VjY2Vzc2Z1bCk7Ci0KICAgICB2b2lkIGNsZWFyVHJh
bnNhY3Rpb25zT25Db25uZWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYpOwogCiAg
ICAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7CkBA
IC0zMTEsOSArMjg4LDkgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8SURCUmVzb3VyY2VJZGVu
dGlmaWVyPiBtX2N1cnNvclByZWZldGNoZXM7CiAKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCB1aW50
NjRfdD4gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzOwotCiAgICAgYm9vbCBtX2lzU3VzcGVu
ZGVkIHsgZmFsc2UgfTsKKworICAgIENsaWVudE9yaWdpbiBtX29yaWdpbjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0
aW9uLmNwcAppbmRleCBmZTkxMGZhZjk4NDlkYzJiMDQ3ZWJhOTdhZTU2NjU3OWZkMTNkMjEwLi44
MDA2MDY5ODgzNDRmMWIzOWI4YjlmYmMxOTk5ODIxZDgyNjIxYjg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6YWJvcnRUcmFuc2FjdGlvbldpdGhvdXRDYWxsYmFj
ayhVbmlxdWVJREJEYXRhYgogICAgIGlmICghbV9kYXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIG1fZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIFVuaXF1
ZUlEQkRhdGFiYXNlOjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpObywgW3RoaXMsIHByb3RlY3RlZFRo
aXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7CisgICAgbV9kYXRh
YmFzZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHByb3RlY3RlZFRoaXMs
IHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7CiAgICAgICAgIEFTU0VS
VChtX3RyYW5zYWN0aW9uTWFwLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwogICAg
ICAgICBtX3RyYW5zYWN0aW9uTWFwLnJlbW92ZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAg
IH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCmluZGV4
IGE4ZDJiZGM3NDBjODk3MWE1YTdjMDRlNzZjMDMyOWI0NzZhZGM0MjYuLjc2ZWRkYzQ1YjA3NmJl
M2U2OTcyODQ1ZDExZTIxNTBiNmYwN2Q4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbi5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uOjphYm9ydCgpCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VD
b25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAKLSAgICBkYXRh
YmFzZS0+YWJvcnRUcmFuc2FjdGlvbigqdGhpcywgVW5pcXVlSURCRGF0YWJhc2U6OldhaXRGb3JQ
ZW5kaW5nVGFza3M6OlllcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShh
dXRvJiBlcnJvcikgeworICAgIGRhdGFiYXNlLT5hYm9ydFRyYW5zYWN0aW9uKCp0aGlzLCBbdGhp
cywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKGF1dG8mIGVycm9yKSB7CiAgICAgICAg
IExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCAoY2Fs
bGJhY2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0yODYsNyArMjg2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRP
ckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGMKICAgICBhdXRvIGRhdGFi
YXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFi
YXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+cHV0T3JBZGQoKnRoaXMsIHJlcXVlc3REYXRhLCBr
ZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIGtl
eSkgeworICAgIGRhdGFiYXNlLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUs
IG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVx
dWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsKICAgICAgICAg
TE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkIChj
YWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTMwNyw3ICszMDcsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Omdl
dFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAgYXV0byBkYXRh
YmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRh
YmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmdldFJlY29yZCgqdGhpcywgcmVxdWVzdERhdGEs
IGdldFJlY29yZERhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVx
dWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgeworICAg
IGRhdGFiYXNlLT5nZXRSZWNvcmQocmVxdWVzdERhdGEsIGdldFJlY29yZERhdGEsIFt0aGlzLCB3
ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBj
b25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkIChjYWxsYmFjaykiKTsKICAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMyOCw3ICszMjgsNyBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMoY29uc3Qg
SURCUmVxdWVzdERhdGEmIHJlcXVlc3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNl
Q29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAg
IGRhdGFiYXNlLT5nZXRBbGxSZWNvcmRzKCp0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jk
c0RhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFd
KGF1dG8mIGVycm9yLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgeworICAgIGRhdGFi
YXNlLT5nZXRBbGxSZWNvcmRzKHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3Is
IGNvbnN0IElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIs
ICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNvcmRzIChjYWxsYmFjayki
KTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM0OSw3
ICszNDksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50KGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgYwogICAgIGF1dG8gZGF0YWJhc2UgPSBt
X2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwog
ICAgIAotICAgIGRhdGFiYXNlLT5nZXRDb3VudCgqdGhpcywgcmVxdWVzdERhdGEsIGtleVJhbmdl
RGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0o
YXV0byYgZXJyb3IsIHVpbnQ2NF90IGNvdW50KSB7CisgICAgZGF0YWJhc2UtPmdldENvdW50KHJl
cXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCB1aW50NjRfdCBjb3VudCkgewogICAgICAg
ICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQg
KGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMzcwLDcgKzM3MCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
ZGVsZXRlUmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0CiAgICAgYXV0byBk
YXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChk
YXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmRlbGV0ZVJlY29yZCgqdGhpcywgcmVxdWVz
dERhdGEsIGtleVJhbmdlRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMp
LCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+ZGVsZXRlUmVjb3Jk
KHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRleGVk
REIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmQgKGNhbGxiYWNr
KSIpOwogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzkx
LDcgKzM5MSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNv
cihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsCiAgICAgYXV0byBkYXRhYmFzZSA9
IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7
CiAgICAgCi0gICAgZGF0YWJhc2UtPm9wZW5DdXJzb3IoKnRoaXMsIHJlcXVlc3REYXRhLCBpbmZv
LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRv
JiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRhYmFzZS0+b3Bl
bkN1cnNvcihyZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVz
dWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpvcGVuQ3Vyc29yIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTQxMiw3ICs0MTIsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVl
c3REYQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2Uo
KTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5pdGVyYXRlQ3Vy
c29yKCp0aGlzLCByZXF1ZXN0RGF0YSwgZGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYg
cmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPml0ZXJhdGVDdXJzb3IocmVxdWVzdERhdGEsIGRhdGEs
IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8m
IGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvciAoY2FsbGJh
Y2spIik7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNz
SURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
blByb2Nlc3NJREJTZXJ2ZXIuY3BwCmluZGV4IDkxMTFmNTk3OGUzYjgwNjE4NTVjMjBmNWFmYWE1
YjY1NWRjY2VhMjEuLmQ2NWJkNWE3NjcyYTM4MDU2NzE2ZDM2YTVjY2IxMzhmOTFiMzFhOTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nl
c3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC02NCwzMCArNjQsMzUgQEAgSW5Qcm9jZXNz
SURCU2VydmVyOjp+SW5Qcm9jZXNzSURCU2VydmVyKCkgPSBkZWZhdWx0OwogU3RvcmFnZVF1b3Rh
TWFuYWdlciogSW5Qcm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIoY29uc3QgQ2xpZW50T3Jp
Z2luJiBvcmlnaW4pCiB7CiAgICAgcmV0dXJuIG1fcXVvdGFNYW5hZ2Vycy5lbnN1cmUob3JpZ2lu
LCBbXSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFN0b3JhZ2VRdW90YU1hbmFnZXI+KFN0
b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpLCBbXSh1aW50NjRfdCBxdW90YSwgdWlu
dDY0X3QgY3VycmVudFNwYWNlLCB1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBhdXRvIGNhbGxiYWNr
KSB7CisgICAgICAgIHJldHVybiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUoU3RvcmFnZVF1
b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCksIFtdIHsKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9LCBbXSh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3VycmVudFNwYWNlLCB1aW50
NjRfdCBzcGFjZUluY3JlYXNlLCBhdXRvIGNhbGxiYWNrKSB7CiAgICAgICAgICAgICBjYWxsYmFj
ayhxdW90YSArIGN1cnJlbnRTcGFjZSArIHNwYWNlSW5jcmVhc2UpOwogICAgICAgICB9KTsKICAg
ICB9KS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSURCU2VydmVy
OjpJREJTZXJ2ZXI6OlF1b3RhTWFuYWdlckdldHRlciBzdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVy
KEluUHJvY2Vzc0lEQlNlcnZlciYgc2VydmVyKQorc3RhdGljIGlubGluZSBJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6U3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyIHN0b3JhZ2VRdW90YU1h
bmFnZXJTcGFjZVJlcXVlc3RlcihJblByb2Nlc3NJREJTZXJ2ZXImIHNlcnZlcikKIHsKLSAgICBy
ZXR1cm4gW3dlYWtTZXJ2ZXIgPSBtYWtlV2Vha1B0cihzZXJ2ZXIpXShQQUw6OlNlc3Npb25JRCwg
Y29uc3QgYXV0byYgb3JpZ2luKSB7Ci0gICAgICAgIHJldHVybiB3ZWFrU2VydmVyID8gd2Vha1Nl
cnZlci0+cXVvdGFNYW5hZ2VyKG9yaWdpbikgOiBudWxscHRyOworICAgIHJldHVybiBbc2VydmVy
ID0gJnNlcnZlciwgd2Vha1NlcnZlciA9IG1ha2VXZWFrUHRyKHNlcnZlcildKGNvbnN0IENsaWVu
dE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCkgbXV0YWJsZSB7CisgICAg
ICAgIGF1dG8qIHN0b3JhZ2VRdW90YU1hbmFnZXIgPSB3ZWFrU2VydmVyID8gc2VydmVyLT5xdW90
YU1hbmFnZXIob3JpZ2luKSA6IG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdG9yYWdlUXVvdGFN
YW5hZ2VyID8gc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhy
ZWFkKHNwYWNlUmVxdWVzdGVkKSA6IFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55
OwogICAgIH07CiB9CiAKIEluUHJvY2Vzc0lEQlNlcnZlcjo6SW5Qcm9jZXNzSURCU2VydmVyKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKLSAgICA6IG1fc2VydmVyKElEQlNlcnZlcjo6SURCU2Vy
dmVyOjpjcmVhdGUoc2Vzc2lvbklELCBzdG9yYWdlUXVvdGFNYW5hZ2VyR2V0dGVyKCp0aGlzKSkp
CisgICAgOiBtX3NlcnZlcihJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwg
c3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVxdWVzdGVyKCp0aGlzKSkpCiB7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKICAgICBt
X2Nvbm5lY3Rpb25Ub1NlcnZlciA9IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpj
cmVhdGUoKnRoaXMpOwogICAgIG1fY29ubmVjdGlvblRvQ2xpZW50ID0gSURCU2VydmVyOjpJREJD
b25uZWN0aW9uVG9DbGllbnQ6OmNyZWF0ZSgqdGhpcyk7CiB9CiAKIEluUHJvY2Vzc0lEQlNlcnZl
cjo6SW5Qcm9jZXNzSURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpCi0gICAgOiBtX3NlcnZlcihJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBzdG9yYWdl
UXVvdGFNYW5hZ2VyR2V0dGVyKCp0aGlzKSkpCisgICAgOiBtX3NlcnZlcihJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBzdG9yYWdl
UXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXIoKnRoaXMpKSkKIHsKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwogICAgIG1fY29ubmVj
dGlvblRvU2VydmVyID0gSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmNyZWF0ZSgq
dGhpcyk7CiAgICAgbV9jb25uZWN0aW9uVG9DbGllbnQgPSBJREJTZXJ2ZXI6OklEQkNvbm5lY3Rp
b25Ub0NsaWVudDo6Y3JlYXRlKCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAppbmRleCBj
N2I1MzIxY2EzNjFjNzQxZTUyZDQ1ZWMxOGE4MzE4ZmFkMDgyOWMwLi44ZTczNmE3ODA5MTkxZTQz
N2I4NjNjM2RiZGRhMmFiNDhlZTA2NWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCkBAIC02
NCw3ICs2NCw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBJREJDbGllbnQ6OklEQkNv
bm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvblRvU2VydmVyKCkgY29uc3Q7CiAgICAgSURCU2Vy
dmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQmIGNvbm5lY3Rpb25Ub0NsaWVudCgpIGNvbnN0Owog
ICAgIElEQlNlcnZlcjo6SURCU2VydmVyJiBzZXJ2ZXIoKSB7IHJldHVybiBtX3NlcnZlci5nZXQo
KTsgfQotCiAgICAgSURCU2VydmVyOjpJREJTZXJ2ZXImIGlkYlNlcnZlcigpIHsgcmV0dXJuIG1f
c2VydmVyLmdldCgpOyB9CiAKICAgICAvLyBJREJDb25uZWN0aW9uVG9TZXJ2ZXIKQEAgLTEzNSw3
ICsxMzQsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25U
b1NlcnZlcj4gbV9jb25uZWN0aW9uVG9TZXJ2ZXI7CiAgICAgUmVmUHRyPElEQlNlcnZlcjo6SURC
Q29ubmVjdGlvblRvQ2xpZW50PiBtX2Nvbm5lY3Rpb25Ub0NsaWVudDsKIAotICAgIEhhc2hNYXA8
Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fcXVv
dGFNYW5hZ2VyczsKKyAgICBIYXNoTWFwPENsaWVudE9yaWdpbiwgUmVmUHRyPFN0b3JhZ2VRdW90
YU1hbmFnZXI+PiBtX3F1b3RhTWFuYWdlcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggNmE0Nzg1YmZjZmYwN2ZhN2RkZGZkMzY3YzNlMGU3MGRiZDVlOGYwNy4uOTQ3NWQwNjE5
MzI5NWM1N2UzNzE2YmM0YWI2ZDE2YzU3MzFhOTJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEyOSw3ICsxMTI5LDYgQEAK
IAkJNDFEMjhEMEQyMTM5RTA1ODAwRjQyMDZGIC8qIExpYldlYlJUQ1N0YXRzQ29sbGVjdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRDI4RDBC
MjEzOUUwMUQwMEY0MjA2RiAvKiBMaWJXZWJSVENTdGF0c0NvbGxlY3Rvci5jcHAgKi87IH07CiAJ
CTQxRDQxQzY3MjI1Njg3NEYwMDY5Nzk0MiAvKiBTZXJ2aWNlV29ya2VySW50ZXJuYWxzLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFENDFDNjUyMjU2
ODU5MjAwNjk3OTQyIC8qIFNlcnZpY2VXb3JrZXJJbnRlcm5hbHMubW0gKi87IH07CiAJCTQxREU3
QzdDMjIyREExNDMwMDUzMkI2NSAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MURFN0M3QjIyMkRBMTNFMDA1MzJC
NjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTQxREU3QzdEMjIyREExNDgwMDUzMkI2NSAvKiBTdG9yYWdl
UXVvdGFVc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MURFN0M3ODIyMkRBMTNDMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhVXNlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxREVGQ0I2MUU1NkMx
QkQwMDBEOUU1RiAvKiBKU0RPTU1hcExpa2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxREVGQ0I0MUU1NkMxQjkwMDBEOUU1RiAvKiBKU0RPTU1hcExp
a2UuaCAqLzsgfTsKIAkJNDFFMUIxRDEwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUUxQjFD
QjBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCAqLzsgfTsKIAkJNDFFOURDRTcy
MzE5NzRCRjAwRjM1OTQ5IC8qIEJsb2JMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRTlEQ0U0MjMxOTczRkUwMEYzNTk0OSAvKiBCbG9iTG9h
ZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTc0NzIsNyArNzQ3MSw2IEBACiAJCTQxRDI4RDBDMjEzOUUwMUUwMEY0MjA2RiAvKiBMaWJXZWJS
VENTdGF0c0NvbGxlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMaWJX
ZWJSVENTdGF0c0NvbGxlY3Rvci5oOyBwYXRoID0gbGlid2VicnRjL0xpYldlYlJUQ1N0YXRzQ29s
bGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRDQxQzY1MjI1Njg1OTIw
MDY5Nzk0MiAvKiBTZXJ2aWNlV29ya2VySW50ZXJuYWxzLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gU2VydmljZVdvcmtlckludGVybmFscy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFENTFCQjIxRTRFMkU4MTAwMTMxQTVCIC8qIExpYldlYlJU
Q0F1ZGlvRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpYldlYlJU
Q0F1ZGlvRm9ybWF0Lmg7IHBhdGggPSBsaWJ3ZWJydGMvTGliV2ViUlRDQXVkaW9Gb3JtYXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDFERTdDNzgyMjJEQTEzQzAwNTMyQjY1IC8q
IFN0b3JhZ2VRdW90YVVzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rv
cmFnZVF1b3RhVXNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURFN0M3QTIy
MkRBMTNEMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFERTdDN0IyMjJEQTEzRTAwNTMyQjY1IC8qIFN0b3JhZ2VR
dW90YU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZVF1
b3RhTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MURFRkNCMjFFNTZD
MUI5MDAwRDlFNUYgLyogSlNET01CaW5kaW5nSW50ZXJuYWxzLmpzICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5qYXZhc2NyaXB0OyBwYXRoID0gSlNET01CaW5kaW5nSW50ZXJuYWxzLmpzOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcxMTgsNyArMTcxMTYsNiBAQAogCQkJCTFBMzc2MzZB
MUEyRTY4QkIwMDlBN0VFMiAvKiBTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCAqLywKIAkJCQk0
MURFN0M3QTIyMkRBMTNEMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgKi8sCiAJ
CQkJNDFERTdDN0IyMjJEQTEzRTAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIuaCAqLywK
LQkJCQk0MURFN0M3ODIyMkRBMTNDMDA1MzJCNjUgLyogU3RvcmFnZVF1b3RhVXNlci5oICovLAog
CQkJCTUxNjZEM0NDMUU4RUQ0MTEwMEFENjJFMyAvKiBTdG9yYWdlVHlwZS5oICovLAogCQkJKTsK
IAkJCWluZGVudFdpZHRoID0gNDsKQEAgLTI5NTM1LDYgKzI5NTMyLDcgQEAKIAkJCQlGNDdBMDlE
MTIwQTkzQTk3MDAyNDBGQUUgLyogRGlzYWJsZWRBZGFwdGF0aW9ucy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0VEQUFGQzkxOUEyQ0NEQzAwMzRERkQxIC8qIERpc2tDYWNoZU1vbml0b3JDb2NvYS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTE5OUZBNUIyMDhFM0M3RjAwMjM1OENDIC8qIERpc3BsYXlC
b3guaCBpbiBIZWFkZXJzICovLAorCQkJCUU0NTFDNjM0MjM5NDA1OEYwMDk5MzE5MCAvKiBEaXNw
bGF5SW5saW5lQ29udGVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDMxQzNERDUxRTAw
MDdBMkNBIC8qIERpc3BsYXlMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENTFDM0RE
NTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
NUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzAwNDgsNyArMzAwNDYsNiBAQAogCQkJCUE4NzFEQjJCMEExNTBCRDYwMEIxMkE2
OCAvKiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MURC
MkEwQTE1MEJENjAwQjEyQTY4IC8qIEhUTUxUYWJsZUNlbGxFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBODcxREIyRjBBMTUwQkQ2MDBCMTJBNjggLyogSFRNTFRhYmxlQ29sRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ1MUM2MjgyMzkyOTNFQzAwOTkzMTkwIC8qIExpbmVMYXlv
dXRUcmF2ZXJzYWxEaXNwbGF5UnVuUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MURCMjcw
QTE1MEJENjAwQjEyQTY4IC8qIEhUTUxUYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4NzFEQjJDMEExNTBCRDYwMEIxMkE2OCAvKiBIVE1MVGFibGVQYXJ0RWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTg3MURCMzEwQTE1MEJENjAwQjEyQTY4IC8qIEhUTUxUYWJsZVJvd0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzAxNjAsNyArMzAxNTcsNiBAQAogCQkJCUJDN0Y0
NEE4MEI5RTMyNEUwMEE5RDA4MSAvKiBJbWFnZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyRDVBNTkzMTE1MjUyNUQwMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzIyODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIEltYWdlUGFpbnRpbmdPcHRp
b25zLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDUxQzYzMjIzOTQwMzFBMDA5OTMxOTAgLyogTWFy
Z2luVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1MUEyRjNGMTdEN0QzQUUwMDcyNTE3QSAv
KiBJbWFnZVF1YWxpdHlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTI5MUU0QjEz
NDE3MkM4MDBFNzUzREUgLyogSW1hZ2VSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDRDI3QUU1MDIyQTk4Njg3MDA5NDdGRjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDU1Myw3ICszMDU0OSw2IEBACiAJCQkJODM3MDU2OTAxRjUwOTE1
QzAwRDkzNDI1IC8qIEpTRmlsZVN5c3RlbUVudHJ5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAog
CQkJCTgzM0I5RTM2MUY1MDhEODUwMEUwRTQyOCAvKiBKU0ZpbGVTeXN0ZW1GaWxlRW50cnkuaCBp
biBIZWFkZXJzICovLAogCQkJCTcxMkJFNDg4MUZFODY4NkEwMDIwMzFDQyAvKiBKU0ZpbGxNb2Rl
LmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDM0M0QyNTIzOTI3NzkwMDBFQkJCNjYgLyogTGluZUxh
eW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNkQ5RDI3QjE0
RUFDMDg2MDA5MEQ3NUUgLyogSlNGb2N1c0V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjgw
ODMzRjFDNkRDMjZGMDAxNDUxQjYgLyogSlNGb250RmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUMyNEVFQTkxQzcyQTdCNDAwODBGOEZDIC8qIEpTRm9udEZhY2VTZXQuaCBpbiBIZWFkZXJzICov
LApAQCAtMzExNzcsNiArMzExNzIsNyBAQAogCQkJCTZGN0NBM0M2MjA4QzI5NTcwMDJGMjlBQiAv
KiBMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTEzMTBDRjIyMEJBNEEzMjAwNjVB
OEQwIC8qIExheW91dFRyZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDFEQzA0ODE2
NDgzNDhGMDAzNzFFNUEgLyogTGF5b3V0VW5pdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ1MUM2
MzEyMzk0MDI3OTAwOTkzMTkwIC8qIExheW91dFVuaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
REU4QjVFRDFBNjk3NzczMDBCNEI2NkEgLyogTGVnYWN5Q0RNUHJpdmF0ZUNsZWFyS2V5LmggaW4g
SGVhZGVycyAqLywKIAkJCQlDREY0QjcxMjFFMDA4N0FFMDBFMjM1QTIgLyogTGVnYWN5Q0RNU2Vz
c2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RFOEI1RjExQTY5Nzc4QjAwQjRCNjZBIC8qIExl
Z2FjeUNETVNlc3Npb25DbGVhcktleS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTIwOCw2ICszMTIw
NCw5IEBACiAJCQkJNkYyNkVCNDgyMzQwMDRBNTAwNjkwNkUyIC8qIExpbmVMYXlvdXRDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRkVGQUIyQTE4MzgwREEwMDA1MTQ1MzQgLyogTGluZUxh
eW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDg0QTMzRTIzMDU1MzI1MDA5QURFNkEg
LyogTGluZUxheW91dFRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQzNDNEMjUyMzky
Nzc5MDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRTQ1MUM2MjgyMzkyOTNFQzAwOTkzMTkwIC8qIExpbmVMYXlvdXRUcmF2ZXJz
YWxEaXNwbGF5UnVuUGF0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQzNDNEMjMyMzkyNzc4NDAw
RUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRkRCQzA0NzE4M0QyN0I3MDA0MDcxMDkgLyogTGluZVdpZHRoLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDQkE5REMwQjFERjQ0REY0MDAwNTY3NUMgLyogTGlua0hlYWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE0M0IyNjMxREREMTUyMDAwMTRGQUM2IC8qIExpbmtJY29uLmggaW4gSGVh
ZGVycyAqLywKQEAgLTMxMjQxLDYgKzMxMjQwLDcgQEAKIAkJCQk0NkVGQUYxMjFFNUZCOUYxMDBF
N0YzNEIgLyogTG93UG93ZXJNb2RlTm90aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBRTZD
OTNDMUJFMEM2MDEwMEUxOUUwMyAvKiBNYWluVGhyZWFkU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBOEY2QkM2MERCNTVDREMwMDFEQjc5NCAvKiBNYW5pZmVzdFBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTQ1MUM2MzIyMzk0MDMxQTAwOTkzMTkwIC8qIE1hcmdpblR5cGVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTE4NjY0NTFGNzJFNUI0MDBBMENBQjYgLyogTWFya2Vk
VGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERjgwOTlFNjQ5MjAwNTZFNTgxIC8qIG1h
cmt1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcyOEMzMTQxMjY4RTQzOTAwNDFFODlCIC8qIE1h
cmt1cEFjY3VtdWxhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzAxLDcgKzMxNzAxLDYgQEAK
IAkJCQk1N0RDRUQ3NDIxNDMwNUYwMDAxNkI4NDcgLyogUHVibGljS2V5Q3JlZGVudGlhbERhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTU3MzAzQkVGMjAwOTgwQzYwMDM1NTk2NSAvKiBQdWJsaWNL
ZXlDcmVkZW50aWFsRGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTczMDNDMEEyMDA5
OUJBRDAwMzU1OTY1IC8qIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJRTQzNDNEMjMyMzkyNzc4NDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2
ZXJzYWxTaW1wbGVQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzMwM0JFQjIwMDk3RjQwMDAz
NTU5NjUgLyogUHVibGljS2V5Q3JlZGVudGlhbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTAw
ODFGRjAwMTZCMEEyRDMwMDhBQUE3QSAvKiBQdWJsaWNTdWZmaXguaCBpbiBIZWFkZXJzICovLAog
CQkJCTEwRkIwODRCMTRFMTVDN0UwMEEzREI5OCAvKiBQdWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLywKQEAgLTMyMjQ1LDcgKzMyMjQ0LDYgQEAKIAkJCQlDNTBEMEU4MzBGRjQyNzI5MDBB
QzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzNzYzNkMx
QTJFNjhCQjAwOUE3RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDFERTdDN0MyMjJEQTE0MzAwNTMyQjY1IC8qIFN0b3JhZ2VRdW90YU1hbmFnZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTQxREU3QzdEMjIyREExNDgwMDUzMkI2NSAvKiBTdG9yYWdl
UXVvdGFVc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzlFRjJGMzIxRjA2MTkwMDAzQkRDNTYg
LyogU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2NkQzQ0Qx
RThFRDQ4RjAwQUQ2MkUzIC8qIFN0b3JhZ2VUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0Njgy
RDIwMDFGNzk3ODMwMDBDODYzREIgLyogU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzI0OTYsNyArMzI0OTQsNiBAQAogCQkJCUIyMjI3QURBMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdUcmFuc2Zvcm1hYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FERDBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyMjI3QURGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUcmFuc2Zvcm1MaXN0LmggaW4gSGVh
ZGVycyAqLywKLQkJCQlFNDUxQzYzMTIzOTQwMjc5MDA5OTMxOTAgLyogTGF5b3V0VW5pdHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTdDRTU4RDU4MUREN0Q5NkQwMDEyODU1MiAvKiBTVkdUcmFuc2Zv
cm1WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBRTIwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1RSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FFNTBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHVFNwYW5FbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMyODI2LDcgKzMy
ODIzLDYgQEAKIAkJCQk0OUM3QjlFMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlEM0YzRDM2QTFBNjlCN0I5MDA1OUZDMkIgLyog
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkY5OTVBMjIx
QTcwNzhCMTAwQTczNUY0IC8qIFdlYkdMU2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ1
MUM2MzQyMzk0MDU4RjAwOTkzMTkwIC8qIERpc3BsYXlJbmxpbmVDb250ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0OUM3QjlFMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUEwN0QzMzU4MTUyQjYzMkQwMDFCNjM5MyAvKiBXZWJHTFNoYWRlclBy
ZWNpc2lvbkZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDFEM0NGODcxNEJEMEEzMDAwRkU5
OTcwIC8qIFdlYkdMU2hhcmVkT2JqZWN0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCmluZGV4IDg1MjU3NTJlNjMzNDc5
NTMwZWYxNGVjYjc0Zjg1YmFmNjhkOWM1NWIuLjBjNjEzZDFhNzJkZmVhNjU5Y2IyZTcxYTgyMGFh
YWI2MDlhYTk2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1
b3RhTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmNwcApAQCAtMjcsMjEzICsyNywxMjAgQEAKICNpbmNsdWRlICJTdG9yYWdlUXVvdGFN
YW5hZ2VyLmgiCiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU3RvcmFnZVF1b3Rh
VXNlci5oIgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVN0b3JhZ2VRdW90YU1hbmFnZXI6On5TdG9yYWdlUXVvdGFNYW5hZ2VyKCkK
K1JlZjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUodWlu
dDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYgdXNhZ2VHZXR0ZXIsIFF1b3RhSW5jcmVhc2VSZXF1
ZXN0ZXImJiBxdW90YUluY3JlYXNlUmVxdWVzdGVyKQogewotICAgIHdoaWxlICghbV9wZW5kaW5n
UmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy50YWtlRmlyc3Qo
KS5jYWxsYmFjayhEZWNpc2lvbjo6RGVueSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Rv
cmFnZVF1b3RhTWFuYWdlcihxdW90YSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdURk1vdmUocXVv
dGFJbmNyZWFzZVJlcXVlc3RlcikpKTsKIH0KIAotdWludDY0X3QgU3RvcmFnZVF1b3RhTWFuYWdl
cjo6c3BhY2VVc2FnZSgpIGNvbnN0CitTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmIHVzYWdlR2V0dGVyLCBRdW90YUlu
Y3JlYXNlUmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3RlcikKKyAgICA6IG1fcXVvdGEo
cXVvdGEpCisgICAgLCBtX3VzYWdlR2V0dGVyKFdURk1vdmUodXNhZ2VHZXR0ZXIpKQorICAgICwg
bV9xdW90YUluY3JlYXNlUmVxdWVzdGVyKFdURk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3Rlcikp
CisgICAgLCBtX3dvcmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiU3RvcmFnZVF1b3RhTWFuYWdl
ciBCYWNrZ3JvdW5kIFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJpYWwpKQorICAgICwgbV9p
bml0aWFsUXVvdGEocXVvdGEpCiB7Ci0gICAgdWludDY0X3QgdXNhZ2UgPSAwOwotICAgIGZvciAo
YXV0byYgdXNlciA6IG1fdXNlcnMpCi0gICAgICAgIHVzYWdlICs9IHVzZXItPnNwYWNlVXNlZCgp
OwotICAgIHJldHVybiB1c2FnZTsKIH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRh
dGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVx
dWVzdFNwYWNlT25NYWluVGhyZWFkKHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkLCBSZXF1ZXN0Q2Fs
bGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBpZiAoIW1fcXVvdGEpCi0gICAgICAgIHJldHVybjsK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgYXV0byBkZWZhdWx0UXVvdGFTdGVw
ID0gbV9xdW90YSAvIDEwOwotICAgIG1fcXVvdGEgPSBzdGQ6Om1heChtX3F1b3RhLCBkZWZhdWx0
UXVvdGFTdGVwICogKChzcGFjZVVzYWdlKCkgLyBkZWZhdWx0UXVvdGFTdGVwKSArIDEpKTsKLX0K
LQotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjppbml0aWFsaXplVXNlcnNJZk5lZWRlZCgpCi17
Ci0gICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBWZWN0b3I8U3RvcmFnZVF1b3RhVXNlcio+IHVzZXJzVG9Jbml0aWFs
aXplOwotICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVz
ZXJzKSB7Ci0gICAgICAgIGlmIChrZXlWYWx1ZS52YWx1ZSA9PSBXaGVuSW5pdGlhbGl6ZWRDYWxs
ZWQ6Ok5vKSB7Ci0gICAgICAgICAgICBrZXlWYWx1ZS52YWx1ZSA9IFdoZW5Jbml0aWFsaXplZENh
bGxlZDo6WWVzOwotICAgICAgICAgICAgdXNlcnNUb0luaXRpYWxpemUuYXBwZW5kKGtleVZhbHVl
LmtleSk7CisgICAgLy8gRmFzdCBwYXRoLgorICAgIGlmIChtX3F1b3RhQ291bnREb3duTG9jay50
cnlMb2NrKCkpIHsKKyAgICAgICAgaWYgKHRyeUdyYW50UmVxdWVzdChzcGFjZVJlcXVlc3RlZCkp
IHsKKyAgICAgICAgICAgIG1fcXVvdGFDb3VudERvd25Mb2NrLnVubG9jaygpOworICAgICAgICAg
ICAgY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQorICAgICAgICBtX3F1b3RhQ291bnREb3duTG9jay51bmxvY2soKTsKICAgICB9Ci0gICAg
Zm9yIChhdXRvKiB1c2VyIDogdXNlcnNUb0luaXRpYWxpemUpIHsKLSAgICAgICAgaWYgKG1fcGVu
ZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnModXNlcikpCi0gICAgICAgICAgICBhc2tV
c2VyVG9Jbml0aWFsaXplKCp1c2VyKTsKLSAgICB9CisKKyAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0
Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc3BhY2VSZXF1ZXN0ZWQs
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8g
ZGVjaXNpb24gPSByZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQoc3BhY2VSZXF1ZXN0ZWQp
OworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
LCBkZWNpc2lvbl0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKGRlY2lzaW9uKTsK
KyAgICAgICAgfSk7CisgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNr
VXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQorU3RvcmFnZVF1b3RhTWFu
YWdlcjo6RGVjaXNpb24gU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25CYWNrZ3Jv
dW5kVGhyZWFkKHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkKQogewotICAgIHVzZXIud2hlbkluaXRp
YWxpemVkKFt0aGlzLCAmdXNlciwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oKSB7Ci0g
ICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAKLSAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNl
cnMucmVtb3ZlKCZ1c2VyKSkKLSAgICAgICAgICAgIG1fdXNlcnMuYWRkKCZ1c2VyKTsKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3F1b3RhQ291bnREb3duTG9jayk7CiAKLSAgICAgICAgaWYgKCFt
X3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICBpZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkKKyAgICAgICAgcmV0
dXJuIERlY2lzaW9uOjpHcmFudDsKIAotICAgICAgICAvLyBNYWtlIHN1cmUgcXVvdGEgaXMgc2V0
IGJlZm9yZSBoYW5kbGluZyBmaXJzdCByZXF1ZXN0LgotICAgICAgICBpZiAobV9zdGF0ZSA9PSBT
dGF0ZTo6VW5pbml0aWFsaXplZCkgewotICAgICAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9uU3Bh
Y2VVc2FnZSgpOwotICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZv
clJlcXVlc3Q7Ci0gICAgICAgIH0KKyAgICBtX3VzYWdlID0gbV91c2FnZUdldHRlcigpOworICAg
IHVwZGF0ZVF1b3RhQmFzZWRPblVzYWdlKCk7CisgICAgbV9xdW90YUNvdW50RG93biA9IG1fdXNh
Z2UgPCBtX3F1b3RhID8gbV9xdW90YSAtIG1fdXNhZ2UgOiAwOworICAgIGlmICh0cnlHcmFudFJl
cXVlc3Qoc3BhY2VSZXF1ZXN0ZWQpKQorICAgICAgICByZXR1cm4gRGVjaXNpb246OkdyYW50Owog
Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKLSAgICB9KTsKLX0KKyAgICAv
LyBCbG9jayB0aGlzIHRocmVhZCB1bnRpbCBnZXR0aW5nIGRlY3Npb24gZm9yIHF1b3RhIGluY3Jl
YXNlLgorICAgIEJpbmFyeVNlbWFwaG9yZSBzZW1hcGhvcmU7CisgICAgY2FsbE9uTWFpblRocmVh
ZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzcGFjZVJlcXVlc3RlZCwg
JnNlbWFwaG9yZV0oKSBtdXRhYmxlIHsKKyAgICAgICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVw
IC0gU3RvcmFnZVF1b3RhTWFuYWdlciBhc2tzIGZvciBxdW90YSBpbmNyZWFzZSAlIiBQUkl1NjQs
IHRoaXMsIHNwYWNlUmVxdWVzdGVkKTsKKyAgICAgICAgbV9xdW90YUluY3JlYXNlUmVxdWVzdGVy
KG1fcXVvdGEsIG1fdXNhZ2UsIHNwYWNlUmVxdWVzdGVkLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IFdURk1vdmUocHJvdGVjdGVkVGhpcyksICZzZW1hcGhvcmVdKE9wdGlvbmFsPHVpbnQ2NF90PiBu
ZXdRdW90YSkgbXV0YWJsZSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAg
LSBTdG9yYWdlUXVvdGFNYW5hZ2VyIHJlY2VpdmVzIHF1b3RhIGluY3JlYXNlIHJlc3BvbnNlICUi
IFBSSXU2NCwgdGhpcywgbmV3UXVvdGEgPyAqbmV3UXVvdGEgOiAwKTsKKyAgICAgICAgICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YWRkVXNl
cihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQotewotICAgIEFTU0VSVCghbV9wZW5kaW5nSW5pdGlh
bGl6YXRpb25Vc2Vycy5jb250YWlucygmdXNlcikpOwotICAgIEFTU0VSVCghbV91c2Vycy5jb250
YWlucygmdXNlcikpOwotICAgIG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuYWRkKCZ1c2Vy
LCBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ6Ok5vKTsKKyAgICAgICAgICAgIGlmIChuZXdRdW90YSkK
KyAgICAgICAgICAgICAgICBtX3F1b3RhID0gKm5ld1F1b3RhOwogCi0gICAgaWYgKCFtX3BlbmRp
bmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIGFza1VzZXJUb0luaXRpYWxpemUodXNlcik7
Ci19CisgICAgICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CisgICAgICAgIH0pOworICAgIH0p
OwogCi1ib29sIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSh1aW50
NjRfdCBzcGFjZUluY3JlYXNlKSBjb25zdAotewotICAgIGlmICghc3BhY2VJbmNyZWFzZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNlbWFwaG9yZS53YWl0KCk7CiAKLSAgICByZXR1cm4g
c3BhY2VVc2FnZSgpICsgc3BhY2VJbmNyZWFzZSA+IG1fcXVvdGE7CisgICAgbV91c2FnZSA9IG1f
dXNhZ2VHZXR0ZXIoKTsKKyAgICBtX3F1b3RhQ291bnREb3duID0gbV91c2FnZSA8IG1fcXVvdGEg
PyBtX3F1b3RhIC0gbV91c2FnZSA6IDA7CisgICAgcmV0dXJuIHRyeUdyYW50UmVxdWVzdChzcGFj
ZVJlcXVlc3RlZCkgPyBEZWNpc2lvbjo6R3JhbnQgOiBEZWNpc2lvbjo6RGVueTsKIH0KIAotdm9p
ZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKFN0b3JhZ2VRdW90YVVzZXImIHVzZXIp
Citib29sIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnRyeUdyYW50UmVxdWVzdCh1aW50NjRfdCBzcGFj
ZVJlcXVlc3RlZCkKIHsKLSAgICBBU1NFUlQobV91c2Vycy5jb250YWlucygmdXNlcikgfHwgbV9w
ZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5jb250YWlucygmdXNlcikpOwotICAgIG1fdXNlcnMu
cmVtb3ZlKCZ1c2VyKTsKLSAgICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5yZW1v
dmUoJnVzZXIpICYmIG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIC8vIFdoZW4gYmVpbmcgY2xlYXJlZCwgcXVvdGEgdXNlcnMgbWF5IHJlbW92ZSB0aGVt
c2VsdmVzIGFuZCBhZGQgdGhlbXNlbHZlcyB0byB0cmlnZ2VyIHJlaW5pdGlhbGl6YXRpb24uCi0g
ICAgICAgIC8vIExldCdzIHdhaXQgZm9yIGFkZFVzZXIgdG8gYmUgY2FsbGVkIGJlZm9yZSBwcm9j
ZXNzaW5nIHBlbmRpbmcgcmVxdWVzdHMuCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldIHsKLSAgICAgICAgICAgIGlmICghd2Vha1Ro
aXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAobV9wZW5kaW5n
SW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdGhpcy0+cHJv
Y2Vzc1BlbmRpbmdSZXF1ZXN0cyh7IH0pOwotICAgICAgICB9KTsKKyAgICBBU1NFUlQobV9xdW90
YUNvdW50RG93bkxvY2suaXNMb2NrZWQoKSk7CisgICAgaWYgKHNwYWNlUmVxdWVzdGVkIDw9IG1f
cXVvdGFDb3VudERvd24pIHsKKyAgICAgICAgbV9xdW90YUNvdW50RG93biAtPSBzcGFjZVJlcXVl
c3RlZDsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0K
LQotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSwgUmVxdWVzdENhbGxiYWNrJiYgY2FsbGJhY2spCisgICAgCit2b2lkIFN0b3JhZ2VR
dW90YU1hbmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblVzYWdlKCkKIHsKLSAgICBpZiAoIW1fcGVu
ZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBl
bmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghc3BhY2VJbmNyZWFzZSkgewotICAgICAgICBjYWxsYmFjayhE
ZWNpc2lvbjo6R3JhbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW5pdGlhbGl6
ZVVzZXJzSWZOZWVkZWQoKTsKLQotICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vy
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJ
bmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpKSB7Ci0gICAgICAg
IG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJh
Y2spIH0pOwotCi0gICAgICAgIC8vIFRyeSBwcm9jZXNzaW5nIHJlcXVlc3QgYWdhaW4gYWZ0ZXIg
bWFraW5nIHN1cmUgdXNhZ2UgaXMgYWNjdXJhdGUuCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6
Q29tcHV0aW5nU3BhY2VVc2VkOwotICAgICAgICBmb3IgKGF1dG8mIHVzZXIgOiBjb3B5VG9WZWN0
b3IobV91c2VycykpCi0gICAgICAgICAgICB1c2VyLT5jb21wdXRlU3BhY2VVc2VkKCk7Ci0KLSAg
ICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkFza2luZ0Zvck1vcmVT
cGFjZTsKLSAgICAgICAgYXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwotICAgICAgICBy
ZXR1cm47CisgICAgLy8gV2hlbiBTdG9yYWdlUXVvdGFNYW5hZ2VyIGlzIHVzZWQgZm9yIHRoZSBm
aXJzdCB0aW1lLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBpdHMgaW5pdGlhbCBxdW90YSBpcyBiaWdn
ZXIgdGhhbiBjdXJyZW50IGRpc2sgdXNhZ2UsCisgICAgLy8gYmFzZWQgb24gdGhlIGFzc3VtcHRp
b24gdGhhdCB0aGUgcXVvdGEgd2FzIGluY3JlYXNlZCB0byBhdCBsZWFzdCB0aGUgZGlzayB1c2Fn
ZSB1bmRlciB1c2VyJ3MgcGVybWlzc2lvbiBiZWZvcmUuCisgICAgQVNTRVJUKG1fcXVvdGFDb3Vu
dERvd25Mb2NrLmlzTG9ja2VkKCkpOworICAgIGlmICghbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNh
Z2UpIHsKKyAgICAgICAgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgPSB0cnVlOworICAgICAg
ICBhdXRvIGRlZmF1bHRRdW90YVN0ZXAgPSBtX3F1b3RhIC8gMTA7CisgICAgICAgIG1fcXVvdGEg
PSBzdGQ6Om1heChtX3F1b3RhLCBkZWZhdWx0UXVvdGFTdGVwICogKChtX3VzYWdlIC8gZGVmYXVs
dFF1b3RhU3RlcCkgKyAxKSk7CiAgICAgfQotCi0gICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdE
ZWNpc2lvbkZvclJlcXVlc3Q7Ci0gICAgY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKIH0KIAot
dm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90YVVwZGF0ZWRCYXNl
ZE9uVXNhZ2VGb3JUZXN0aW5nKCkKIHsKLSAgICBBU1NFUlQoc2hvdWxkQXNrRm9yTW9yZVNwYWNl
KHNwYWNlSW5jcmVhc2UpKTsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9y
TW9yZVNwYWNlKTsKLQotICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90
YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSAlIiBQUkl1NjQsIHRoaXMsIHNwYWNlSW5jcmVhc2Up
OwotICAgIG1fc3RhdGUgPSBTdGF0ZTo6V2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZTsK
LSAgICBtX3NwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIobV9xdW90YSwgc3BhY2VVc2FnZSgpLCBzcGFj
ZUluY3JlYXNlLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKE9wdGlvbmFs
PHVpbnQ2NF90PiBuZXdRdW90YSkgewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VR
dW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSByZWNlaXZlZCByZXNwb25zZSAlIiBQUkl1NjQs
IHRoaXMsIG5ld1F1b3RhID8gKm5ld1F1b3RhIDogMCk7Ci0KLSAgICAgICAgbV9zdGF0ZSA9IFN0
YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMo
bmV3UXVvdGEpOwotICAgIH0pOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcXVvdGFDb3VudERv
d25Mb2NrKTsKKyAgICBtX3F1b3RhID0gbV9pbml0aWFsUXVvdGE7CisgICAgbV9xdW90YUNvdW50
RG93biA9IDA7CisgICAgbV9xdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2UgPSBmYWxzZTsKIH0KIAot
dm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFs
PHVpbnQ2NF90PiBuZXdRdW90YSkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVzZXRRdW90
YUZvclRlc3RpbmcoKQogewotICAgIGlmIChtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChuZXdRdW90YSkKLSAgICAgICAgbV9xdW90YSA9ICpu
ZXdRdW90YTsKLQotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpXYWl0aW5nRm9yU3BhY2VJbmNy
ZWFzZVJlc3BvbnNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcGVuZGluZ0luaXRp
YWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9z
dGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlKSB7Ci0gICAgICAgIGF1dG8gcmVxdWVz
dCA9IG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpOwotICAgICAgICBib29sIHNob3VsZEFs
bG93UmVxdWVzdCA9ICFzaG91bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNl
KTsKLQotICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzIGZpcnN0IHJlcXVlc3QgZGVjaXNpb24gaXMgJWQi
LCB0aGlzLCBzaG91bGRBbGxvd1JlcXVlc3QpOwotCi0gICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6
TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwotICAgICAgICByZXF1ZXN0LmNhbGxiYWNrKHNob3Vs
ZEFsbG93UmVxdWVzdCA/IERlY2lzaW9uOjpHcmFudCA6IERlY2lzaW9uOjpEZW55KTsKLSAgICB9
Ci0KLSAgICB3aGlsZSAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkgewotICAgICAgICBh
dXRvJiByZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMuZmlyc3QoKTsKLQotICAgICAgICBpZiAo
c2hvdWxkQXNrRm9yTW9yZVNwYWNlKHJlcXVlc3Quc3BhY2VJbmNyZWFzZSkpIHsKLSAgICAgICAg
ICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3QpIHsKLSAg
ICAgICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKLSAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8mIHVzZXIgOiBjb3B5VG9WZWN0b3IobV91c2VycykpCi0gICAg
ICAgICAgICAgICAgICAgIHVzZXItPmNvbXB1dGVTcGFjZVVzZWQoKTsKLQotICAgICAgICAgICAg
ICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9zdGF0
ZSA9IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2U7Ci0gICAgICAgICAgICB1aW50NjRfdCBzcGFj
ZUluY3JlYXNlID0gMDsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcGVuZGluZ1JlcXVlc3QgOiBt
X3BlbmRpbmdSZXF1ZXN0cykKLSAgICAgICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9IHBlbmRp
bmdSZXF1ZXN0LnNwYWNlSW5jcmVhc2U7Ci0gICAgICAgICAgICBhc2tGb3JNb3JlU3BhY2Uoc3Bh
Y2VJbmNyZWFzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBt
X3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKLSAgICAgICAgbV9wZW5k
aW5nUmVxdWVzdHMudGFrZUZpcnN0KCkuY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKLSAgICB9
CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9xdW90YUNvdW50RG93bkxvY2spOworICAgIG1fcXVv
dGEgPSBtX2luaXRpYWxRdW90YTsKKyAgICBtX3F1b3RhQ291bnREb3duID0gMDsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlUXVvdGFNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90
YU1hbmFnZXIuaAppbmRleCAwOTU2NjMwNmY1NTkxYWJiNTlkMGFmZDhlZWE0ODY3OWE1ZjZjNjNj
Li45YmRmZGQ0N2ExOGExNzZjNWJjMzNmNGI4NjI4OTIyMzRhZDI5YWIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaApAQCAtMjUsNzcgKzI1LDU0IEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2xpZW50T3JpZ2luLmgiCiAjaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIFN0b3JhZ2VRdW90YVVzZXI7Ci0KLWNsYXNzIFN0b3JhZ2VRdW90YU1h
bmFnZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4geworY2xh
c3MgU3RvcmFnZVF1b3RhTWFuYWdlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTdG9y
YWdlUXVvdGFNYW5hZ2VyPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPFN0b3JhZ2VRdW90YU1hbmFn
ZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB1c2luZyBT
cGFjZUluY3JlYXNlUmVxdWVzdGVyID0gV1RGOjpGdW5jdGlvbjx2b2lkKHVpbnQ2NF90IHF1b3Rh
LCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8dWludDY0X3Q+KT4mJik+OwotICAgIFN0b3JhZ2VRdW90
YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXImJiBzcGFjZUlu
Y3JlYXNlUmVxdWVzdGVyKQotICAgICAgICA6IG1fcXVvdGEocXVvdGEpCi0gICAgICAgICwgbV9z
cGFjZUluY3JlYXNlUmVxdWVzdGVyKFdURk1vdmUoc3BhY2VJbmNyZWFzZVJlcXVlc3RlcikpCi0g
ICAgewotICAgIH0KLSAgICBXRUJDT1JFX0VYUE9SVCB+U3RvcmFnZVF1b3RhTWFuYWdlcigpOwor
ICAgIHVzaW5nIFVzYWdlR2V0dGVyID0gRnVuY3Rpb248dWludDY0X3QoKT47CisgICAgdXNpbmcg
UXVvdGFJbmNyZWFzZVJlcXVlc3RlciA9IEZ1bmN0aW9uPHZvaWQodWludDY0X3QgY3VycmVudFF1
b3RhLCB1aW50NjRfdCBjdXJyZW50VXNhZ2UsIHVpbnQ2NF90IHJlcXVlc3RlZEluY3JlYXNlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVpbnQ2NF90Pik+JiYpPjsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+IGNyZWF0ZSh1aW50NjRf
dCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmKTsKIAogICAg
IHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YUZyb21QZXJP
cmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkgeyByZXR1cm4gcXVvdGEgLyAxMDsgfQotCiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBkZWZhdWx0UXVvdGEoKSB7IHJldHVybiAxMDAwICog
TUI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVv
dGEoKSB7IHJldHVybiBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhRnJvbVBlck9yaWdpblF1b3RhKGRl
ZmF1bHRRdW90YSgpKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyKFN0b3Jh
Z2VRdW90YVVzZXImKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXIoU3RvcmFn
ZVF1b3RhVXNlciYpOwotCiAgICAgZW51bSBjbGFzcyBEZWNpc2lvbiB7IERlbnksIEdyYW50IH07
CiAgICAgdXNpbmcgUmVxdWVzdENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNp
c2lvbik+OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdFNwYWNlKHVpbnQ2NF90LCBS
ZXF1ZXN0Q2FsbGJhY2smJik7Ci0gICAgdm9pZCByZXNldFF1b3RhKHVpbnQ2NF90IG5ld1F1b3Rh
KSB7IG1fcXVvdGEgPSBuZXdRdW90YTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVz
dFNwYWNlT25NYWluVGhyZWFkKHVpbnQ2NF90LCBSZXF1ZXN0Q2FsbGJhY2smJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgRGVjaXNpb24gcmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHVpbnQ2
NF90KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VV
c2FnZSgpOwotCi0gICAgZW51bSBjbGFzcyBTdGF0ZSB7Ci0gICAgICAgIFVuaW5pdGlhbGl6ZWQs
Ci0gICAgICAgIENvbXB1dGluZ1NwYWNlVXNlZCwKLSAgICAgICAgV2FpdGluZ0ZvclNwYWNlSW5j
cmVhc2VSZXNwb25zZSwKLSAgICAgICAgQXNraW5nRm9yTW9yZVNwYWNlLAotICAgICAgICBNYWtp
bmdEZWNpc2lvbkZvclJlcXVlc3QsCi0gICAgfTsKLSAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGU7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0UXVvdGFVcGRh
dGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZygpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVz
ZXRRdW90YUZvclRlc3RpbmcoKTsKIAogcHJpdmF0ZToKLSAgICB1aW50NjRfdCBzcGFjZVVzYWdl
KCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSkgY29uc3Q7Ci0gICAgdm9pZCBhc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSk7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7Ci0gICAgdm9p
ZCBhc2tVc2VyVG9Jbml0aWFsaXplKFN0b3JhZ2VRdW90YVVzZXImKTsKKyAgICBTdG9yYWdlUXVv
dGFNYW5hZ2VyKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmLCBRdW90YUluY3JlYXNlUmVx
dWVzdGVyJiYpOworICAgIGJvb2wgdHJ5R3JhbnRSZXF1ZXN0KHVpbnQ2NF90KTsKIAotICAgIHZv
aWQgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4pOworICAgIHZvaWQg
dXBkYXRlUXVvdGFCYXNlZE9uVXNhZ2UoKTsKIAorICAgIExvY2sgbV9xdW90YUNvdW50RG93bkxv
Y2s7CisgICAgdWludDY0X3QgbV9xdW90YUNvdW50RG93biB7IDAgfTsKICAgICB1aW50NjRfdCBt
X3F1b3RhIHsgMCB9OworICAgIHVpbnQ2NF90IG1fdXNhZ2UgeyAwIH07CiAKLSAgICBTcGFjZUlu
Y3JlYXNlUmVxdWVzdGVyIG1fc3BhY2VJbmNyZWFzZVJlcXVlc3RlcjsKKyAgICBVc2FnZUdldHRl
ciBtX3VzYWdlR2V0dGVyOworICAgIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgbV9xdW90YUluY3Jl
YXNlUmVxdWVzdGVyOwogCi0gICAgZW51bSBjbGFzcyBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQgeyBO
bywgWWVzIH07Ci0gICAgSGFzaE1hcDxTdG9yYWdlUXVvdGFVc2VyKiwgV2hlbkluaXRpYWxpemVk
Q2FsbGVkPiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzOwotICAgIEhhc2hTZXQ8U3RvcmFn
ZVF1b3RhVXNlcio+IG1fdXNlcnM7CisgICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CiAK
LSAgICBzdHJ1Y3QgUGVuZGluZ1JlcXVlc3QgewotICAgICAgICB1aW50NjRfdCBzcGFjZUluY3Jl
YXNlOwotICAgICAgICBSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2s7Ci0gICAgfTsKLSAgICBEZXF1
ZTxQZW5kaW5nUmVxdWVzdD4gbV9wZW5kaW5nUmVxdWVzdHM7CisgICAgYm9vbCBtX3F1b3RhVXBk
YXRlZEJhc2VkT25Vc2FnZSB7IGZhbHNlIH07CiAKLSAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6
OlVuaW5pdGlhbGl6ZWQgfTsKKyAgICAvLyBUZXN0IG9ubHkuCisgICAgdWludDY0X3QgbV9pbml0
aWFsUXVvdGEgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiNzEwY2VlYzYwYzVkZTUwYzYwOWQyMzFiMGYwZGY5Njc0OTQ5NDIwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZVF1b3RhVXNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgU3RvcmFnZVF1b3RhVXNlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U3Rv
cmFnZVF1b3RhVXNlcigpID0gZGVmYXVsdDsKLQotICAgIHZpcnR1YWwgdWludDY0X3Qgc3BhY2VV
c2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlU3BhY2VVc2VkKCkgeyB9
OwotICAgIHZpcnR1YWwgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNhbGxiYWNrKSB7IGNhbGxiYWNrKCk7IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHAKaW5kZXggMTNmY2UyZTdjNTljNGE0NDIzZmFmNzJhNjM1YzljOWRlNDlhNGUxZS4uNGU1YjNi
MDdlOTBlMTFlODBmMDQ5ODIyOGU5NWRmYzE2OGQwNTVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTY1LDYgKzY1LDcgQEAKICNp
bmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVR5cGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0NsaWVudE9yaWdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9ETlMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RlcHJlY2F0ZWRHbG9iYWxT
ZXR0aW5ncy5oPgpAQCAtMzE2LDYgKzMxNyw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRp
YWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAg
ICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJz
Lm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CiAgICAgc2V0U2Vzc2lvbihzZXNz
aW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMpKSk7CiAK
KyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOworICAgIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgcGFyYW1l
dGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEsIHBh
cmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0
b3JhZ2VRdW90YSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5jYWNoZVN0
b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2Fj
aGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKwogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogICAgIGFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oc2Vzc2lvbklELCBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2VuZGlmCkBAIC0zMjYsNyArMzMwLDYgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzJiYKICAgICAgICAgYWRkU2VydmljZVdvcmtlclNlc3Npb24oUEFM
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgc2VydmljZVdvcmtlclByb2Nlc3NUZXJt
aW5hdGlvbkRlbGF5RW5hYmxlZCwgV1RGTW92ZShwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnkpLCBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIH0KICNlbmRpZgotICAgIGluaXRpYWxpemVT
dG9yYWdlUXVvdGEocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycyk7CiAKICAg
ICBtX3N0b3JhZ2VNYW5hZ2VyU2V0LT5hZGQoc2Vzc2lvbklELCBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5k
bGUpOwogCkBAIC00MzQsMjggKzQzNywzOSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNh
Y2hlZENyZWRlbnRpYWxzKCkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0ZURhdGFT
dG9yZShXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiB7CisgICAgYXV0
byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9u
SUQ7CisKKyAgICBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIHBhcmFt
ZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmln
aW5TdG9yYWdlUXVvdGEsIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLSAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHBhcmFtZXRl
cnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgcGFyYW1ldGVycy5pbmRleGVk
RGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKKyAgICBhZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKHNlc3Npb25JRCwg
cGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNF
UlZJQ0VfV09SS0VSKQogICAgIGlmIChwYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0
bGVtZW50KCkpCi0gICAgICAgIGFkZFNlcnZpY2VXb3JrZXJTZXNzaW9uKHBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisgICAgICAgIGFkZFNlcnZpY2VX
b3JrZXJTZXNzaW9uKHNlc3Npb25JRCwgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUHJvY2Vzc1Rl
cm1pbmF0aW9uRGVsYXlFbmFibGVkLCBXVEZNb3ZlKHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeSksIHBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKIAotICAgIG1fc3RvcmFnZU1hbmFn
ZXJTZXQtPmFkZChwYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQs
IHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFn
ZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBpbml0aWFsaXplU3RvcmFnZVF1b3Rh
KHBhcmFtZXRlcnMpOworICAgIG1fc3RvcmFnZU1hbmFnZXJTZXQtPmFkZChzZXNzaW9uSUQsIHBh
cmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6
ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUocGFyYW1ldGVycykp
OwogfQogCi12b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplU3RvcmFnZVF1b3RhKGNvbnN0
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQordm9pZCBOZXR3b3JrUHJv
Y2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVv
dGEsIGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JiBjYWNoZVJvb3RQYXRoSGFuZGxlKQogewotICAgIGF1dG8mIG1hbmFnZXJzID0gIG1fc3RvcmFn
ZVF1b3RhTWFuYWdlcnMuZW5zdXJlKHBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJz
LnNlc3Npb25JRCwgW10gewotICAgICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcnMgeyB9
OwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBtYW5hZ2Vycy5zZXREZWZhdWx0UXVvdGFz
KHBhcmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhLCBwYXJhbWV0ZXJzLnBlclRoaXJkUGFy
dHlPcmlnaW5TdG9yYWdlUXVvdGEpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lvblN0
b3JhZ2VRdW90YU1hbmFnZXJzTG9jayk7CisgICAgYXV0byBbaXRlciwgaXNOZXdFbnRyeV0gPSBt
X3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUoc2Vzc2lvbklELCBbZGVmYXVsdFF1
b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCAmY2FjaGVSb290UGF0aF0geworICAgICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcj4oY2FjaGVSb290UGF0
aCwgZGVmYXVsdFF1b3RhLCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKTsKKyAgICB9KTsKKyAgICBp
ZiAoaXNOZXdFbnRyeSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVu
dGx5KGNhY2hlUm9vdFBhdGhIYW5kbGUpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZW1v
dmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7
CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2Nr
KTsKKyAgICBBU1NFUlQobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuY29udGFpbnMoc2Vz
c2lvbklEKSk7CisgICAgbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMucmVtb3ZlKHNlc3Np
b25JRCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmZvckVhY2hOZXR3b3JrU2Vzc2lvbihj
b25zdCBGdW5jdGlvbjx2b2lkKE5ldHdvcmtTZXNzaW9uJik+JiBmdW5jdG9yKQpAQCAtNTc2LDgg
KzU5MCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lTZXNzaW9uKFBBTDo6U2Vzc2lv
bklEIHNlc3Npb25JRCkKICNlbmRpZgogCiAgICAgbV9zdG9yYWdlTWFuYWdlclNldC0+cmVtb3Zl
KHNlc3Npb25JRCk7Ci0KLSAgICBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLnJlbW92ZShzZXNzaW9u
SUQpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKQEAgLTE0Njgs
OSArMTQ4MCw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpCiAgICAgaWYgKHdlYnNpdGVEYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUpICYmICFzZXNzaW9uSUQu
aXNFcGhlbWVyYWwoKSkKICAgICAgICAgY2xlYXJEaXNrQ2FjaGUobW9kaWZpZWRTaW5jZSwgW2Ns
ZWFyVGFza3NIYW5kbGVyID0gV1RGTW92ZShjbGVhclRhc2tzSGFuZGxlcildIHsgfSk7CiAKLSAg
ICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWRE
QkRhdGFiYXNlcykgfHwgd2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
OkRPTUNhY2hlKSkKLSAgICAgICAgY2xlYXJTdG9yYWdlUXVvdGEoc2Vzc2lvbklEKTsKLQogICAg
IGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6QWRDbGlja0F0
dHJpYnV0aW9ucykpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gdGhpcy0+
bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKICAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5j
bGVhckFkQ2xpY2tBdHRyaWJ1dGlvbigpOwpAQCAtMTU2MywxOSArMTU3Miw2IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIE9wdGlvCiAgICAgICAgIH0KICAgICAgICAgV2ViQ29yZTo6Q3JlZGVudGlhbFN0
b3JhZ2U6OnJlbW92ZVNlc3Npb25DcmVkZW50aWFsc1dpdGhPcmlnaW5zKG9yaWdpbkRhdGFzKTsK
ICAgICB9Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHN0b3JhZ2UgcXVvdGEgY2xlYXJpbmcg
Zm9yIHRoZXNlIG9yaWdpbnMuCi19Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyU3RvcmFn
ZVF1b3RhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKLXsKLSAgICBhdXRvIGl0ZXJhdG9yID0g
bV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5maW5kKHNlc3Npb25JRCk7Ci0gICAgaWYgKGl0ZXJhdG9y
ID09IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8mIG1hbmFnZXJzID0gaXRlcmF0b3ItPnZhbHVlOwotICAgIGZvciAoYXV0byYgbWFuYWdl
ciA6IG1hbmFnZXJzLm1hbmFnZXJzUGVyT3JpZ2luKCkpCi0gICAgICAgIG1hbmFnZXIudmFsdWUt
PnJlc2V0UXVvdGEobWFuYWdlcnMuZGVmYXVsdFF1b3RhKG1hbmFnZXIua2V5KSk7CiB9CiAKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpAQCAtMjIxNywxMCArMjIxMyw5IEBA
IFJlZjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gTmV0d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZl
cihQQUw6OlNlc3Npb25JRCBzZXNzaW9uCiAgICAgICAgIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0
aHMuZ2V0KHNlc3Npb25JRCk7CiAgICAgfQogCi0gICAgcmV0dXJuIElEQlNlcnZlcjo6SURCU2Vy
dmVyOjpjcmVhdGUoc2Vzc2lvbklELCBwYXRoLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cih0aGlzKV0oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBhdXRvJiBvcmlnaW4pIC0+
IFN0b3JhZ2VRdW90YU1hbmFnZXIqIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gJnRoaXMtPnN0b3JhZ2VRdW90YU1h
bmFnZXIoc2Vzc2lvbklELCBvcmlnaW4pOworICAgIHJldHVybiBJREJTZXJ2ZXI6OklEQlNlcnZl
cjo6Y3JlYXRlKHNlc3Npb25JRCwgcGF0aCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
dGhpcyksIHNlc3Npb25JRF0oY29uc3QgYXV0byYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcXVl
c3RlZCkgeworICAgICAgICBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3Rh
TWFuYWdlciA9IHdlYWtUaGlzID8gdGhpcy0+c3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQs
IG9yaWdpbikgOiBudWxscHRyOworICAgICAgICByZXR1cm4gc3RvcmFnZVF1b3RhTWFuYWdlciA/
IHN0b3JhZ2VRdW90YU1hbmFnZXItPnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZChzcGFj
ZVJlcXVlc3RlZCkgOiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueTsKICAgICB9
KTsKIH0KIApAQCAtMjMwNyw4ICsyMzAyLDE4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZElu
ZGV4ZWREYXRhYmFzZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmCiAg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShoYW5kbGUpOwogICAg
ICAgICBpZiAoIWluZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBwb3N0U3RvcmFnZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTmV0d29ya1By
b2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSkpOworICAg
ICAgICBzZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRoKHNlc3Npb25JRCwg
aW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KTsKICAgICB9CiB9CisKK3ZvaWQgTmV0d29ya1Byb2Nl
c3M6OnNldFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VySURCUm9vdFBhdGgoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKQoreworICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jayk7CisgICAgYXV0byog
c2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgPSBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vy
cy5nZXQoc2Vzc2lvbklEKTsKKyAgICBBU1NFUlQoc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIp
OworICAgIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5zZXRJREJSb290UGF0aChpZGJSb290
UGF0aCk7Cit9CisKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6c3luY0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0yMzI1LDkgKzIzMzAsMTggQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6Y2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2NhbFN0b3JhZ2UoKQogCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQogewot
ICAgIGF1dG8mIG1hbmFnZXIgPSBzdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2lu
KTsKLSAgICBtYW5hZ2VyLnJlc2V0UXVvdGEobV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5maW5kKHNl
c3Npb25JRCktPnZhbHVlLmRlZmF1bHRRdW90YShvcmlnaW4pKTsKLSAgICBtYW5hZ2VyLnVwZGF0
ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKKyAgICBhdXRvIHN0b3JhZ2VRdW90YU1hbmFnZXIg
PSB0aGlzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsKKyAgICBzdG9y
YWdlUXVvdGFNYW5hZ2VyLT5yZXNldFF1b3RhVXBkYXRlZEJhc2VkT25Vc2FnZUZvclRlc3Rpbmco
KTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6cmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xv
Y2spOworICAgIGlmIChhdXRvKiBzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fc2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXJzLmdldChzZXNzaW9uSUQpKSB7CisgICAgICAgIGZvciAoYXV0
byBzdG9yYWdlUXVvdGFNYW5hZ2VyIDogc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXItPmV4aXN0
aW5nU3RvcmFnZVF1b3RhTWFuYWdlcnMoKSkKKyAgICAgICAgICAgIHN0b3JhZ2VRdW90YU1hbmFn
ZXItPnJlc2V0UXVvdGFGb3JUZXN0aW5nKCk7CisgICAgfQorICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CiB9CiAKICNpZiBFTkFCTEUoU0FOREJPWF9FWFRFTlNJT05TKQpAQCAtMjQwNCw2MiArMjQx
OCwzNSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXF1ZXN0U3RvcmFnZVNwYWNlKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50TwogICAgIHBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
UmVxdWVzdFN0b3JhZ2VTcGFjZSB7IHNlc3Npb25JRCwgb3JpZ2luLCBxdW90YSwgY3VycmVudFNp
emUsIHNwYWNlUmVxdWlyZWQgfSwgV1RGTW92ZShjYWxsYmFjayksIDApOwogfQogCi1jbGFzcyBR
dW90YVVzZXJJbml0aWFsaXplciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFV
c2VyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNp
dCBRdW90YVVzZXJJbml0aWFsaXplcihTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5hZ2VyKQotICAg
ICAgICA6IG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKLSAgICB7Ci0gICAgICAgIG1h
bmFnZXIuYWRkVXNlcigqdGhpcyk7Ci0gICAgfQotCi0gICAgflF1b3RhVXNlckluaXRpYWxpemVy
KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX21hbmFnZXIpCi0gICAgICAgICAgICBtX21hbmFnZXIt
PnJlbW92ZVVzZXIoKnRoaXMpOwotICAgICAgICBpZiAobV9jYWxsYmFjaykKLSAgICAgICAgICAg
IG1fY2FsbGJhY2soKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gU3RvcmFnZVF1b3RhVXNl
ciBBUEkuCi0gICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CitSZWZQ
dHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VRdW90YU1hbmFn
ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikK
K3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xv
Y2spOworICAgIGF1dG8qIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyID0gbV9zZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7CisgICAgaWYgKCFzZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICB2b2lkIHdoZW5J
bml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIGZpbmFsCi0g
ICAgewotICAgICAgICBtX2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7Ci0gICAgfQorICAg
IFN0cmluZyBpZGJSb290UGF0aDsKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICBp
ZGJSb290UGF0aCA9IHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5pZGJSb290UGF0aCgpOwor
I2VuZGlmCisgICAgU3RvcmFnZVF1b3RhTWFuYWdlcjo6VXNhZ2VHZXR0ZXIgdXNhZ2VHZXR0ZXIg
PSBbY2FjaGVSb290UGF0aCA9IHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyLT5jYWNoZVJvb3RQ
YXRoKCkuaXNvbGF0ZWRDb3B5KCksIGlkYlJvb3RQYXRoID0gaWRiUm9vdFBhdGguaXNvbGF0ZWRD
b3B5KCksIG9yaWdpbiA9IG9yaWdpbi5pc29sYXRlZENvcHkoKV0oKSB7CisgICAgICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOyAgICAKIAotICAgIFdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdl
cj4gbV9tYW5hZ2VyOwotICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gbV9jYWxsYmFjazsK
LX07CisgICAgICAgIHVpbnQ2NF90IHVzYWdlID0gQ2FjaGVTdG9yYWdlOjpFbmdpbmU6OmRpc2tV
c2FnZShjYWNoZVJvb3RQYXRoLCBvcmlnaW4pOworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQorICAgICAgICB1c2FnZSArPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGlza1VzYWdlKGlkYlJv
b3RQYXRoLCBvcmlnaW4pOworI2VuZGlmCiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxp
emVRdW90YVVzZXJzKFN0b3JhZ2VRdW90YU1hbmFnZXImIG1hbmFnZXIsIFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCi17Ci0gICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNz
aW9uSUQsIG9yaWdpbiwgdXNlciA9IG1ha2VVbmlxdWU8UXVvdGFVc2VySW5pdGlhbGl6ZXI+KG1h
bmFnZXIpXSgpIG11dGFibGUgeworICAgICAgICByZXR1cm4gdXNhZ2U7CisgICAgfTsKKyAgICBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpRdW90YUluY3JlYXNlUmVxdWVzdGVyIHF1b3RhSW5jcmVhc2VS
ZXF1ZXN0ZXIgPSBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHNlc3Npb25J
RCwgb3JpZ2luXSAodWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2Us
IHVpbnQ2NF90IHJlcXVlc3RlZEluY3JlYXNlLCBhdXRvJiYgY2FsbGJhY2spIHsKKyAgICAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgdGhpcy0+aWRiU2VydmVyKHNlc3Npb25JRCkuaW5pdGlhbGl6
ZVF1b3RhVXNlcihvcmlnaW4pOwotICAgICAgICBDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6aW5pdGlh
bGl6ZVF1b3RhVXNlcigqdGhpcywgc2Vzc2lvbklELCBvcmlnaW4sIFt1c2VyID0gV1RGTW92ZSh1
c2VyKV0geyB9KTsKLSAgICB9KTsKLX0KKyAgICAgICAgICAgIGNhbGxiYWNrKHsgfSk7CisgICAg
ICAgIHJlcXVlc3RTdG9yYWdlU3BhY2Uoc2Vzc2lvbklELCBvcmlnaW4sIGN1cnJlbnRRdW90YSwg
Y3VycmVudFNwYWNlLCByZXF1ZXN0ZWRJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykpOworICAg
IH07CiAKLVN0b3JhZ2VRdW90YU1hbmFnZXImIE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFN
YW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmln
aW4pCi17Ci0gICAgYXV0byYgc3RvcmFnZVF1b3RhTWFuYWdlcnMgPSBtX3N0b3JhZ2VRdW90YU1h
bmFnZXJzLmVuc3VyZShzZXNzaW9uSUQsIFtdIHsKLSAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90
YU1hbmFnZXJzIHsgfTsKLSAgICB9KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgcmV0dXJuICpzdG9y
YWdlUXVvdGFNYW5hZ2Vycy5tYW5hZ2Vyc1Blck9yaWdpbigpLmVuc3VyZShvcmlnaW4sIFt0aGlz
LCAmc3RvcmFnZVF1b3RhTWFuYWdlcnMsIHNlc3Npb25JRCwgJm9yaWdpbl0gewotICAgICAgICBh
dXRvIG1hbmFnZXIgPSBtYWtlVW5pcXVlPFN0b3JhZ2VRdW90YU1hbmFnZXI+KHN0b3JhZ2VRdW90
YU1hbmFnZXJzLmRlZmF1bHRRdW90YShvcmlnaW4pLCBbdGhpcywgc2Vzc2lvbklELCBvcmlnaW5d
KHVpbnQ2NF90IHF1b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5j
cmVhc2UsIGF1dG8gY2FsbGJhY2spIHsKLSAgICAgICAgICAgIHRoaXMtPnJlcXVlc3RTdG9yYWdl
U3BhY2Uoc2Vzc2lvbklELCBvcmlnaW4sIHF1b3RhLCBjdXJyZW50U3BhY2UsIHNwYWNlSW5jcmVh
c2UsIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGluaXRpYWxpemVR
dW90YVVzZXJzKCptYW5hZ2VyLCBzZXNzaW9uSUQsIG9yaWdpbik7Ci0gICAgICAgIHJldHVybiBt
YW5hZ2VyOwotICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICByZXR1cm4gc2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXItPmVuc3VyZU9yaWdpblN0b3JhZ2VRdW90YU1hbmFnZXIob3JpZ2luLCBz
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+ZGVmYXVsdFF1b3RhKG9yaWdpbiksIFdURk1vdmUo
dXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKS5wdHIoKTsKIH0K
IAogI2lmICFQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAppbmRleCBmMDgwNmIyNzk4ZWY4OTM5MTBjYTc5NTM2YzRhYmIwMTZi
NTUyNzNlLi5kN2U0YTk1MjdlNDcxNTg1ZDhiZTc5M2YyMDRmNzk1ZGExMGQ2ZDA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0yODQsNiAr
Mjg0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJMZWdhY3lQcml2YXRlQnJvd3NpbmdMb2Nh
bFN0b3JhZ2UoKTsKIAogICAgIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRl
c3RpbmcoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAg
IHZvaWQgcmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKIAogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCiAgICAgdm9pZCBnZXRTYW5k
Ym94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVz
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiYp
PiYmKTsKQEAgLTMyNyw3ICszMjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBZENsaWNrQXR0
cmlidXRpb25Db252ZXJzaW9uVVJMRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgVVJMJiYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBtYXJrQWRDbGlja0F0dHJpYnV0
aW9uc0FzRXhwaXJlZEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CiAKLSAgICBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJiBzdG9yYWdl
UXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4m
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3Rh
TWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CiAK
ICAgICB2b2lkIGFkZEtlcHRBbGl2ZUxvYWQoUmVmPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4mJik7
CiAgICAgdm9pZCByZW1vdmVLZXB0QWxpdmVMb2FkKE5ldHdvcmtSZXNvdXJjZUxvYWRlciYpOwpA
QCAtNDQyLDYgKzQ0Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb2xsZWN0SW5kZXhlZERhdGFi
YXNlT3JpZ2luc0ZvclZlcnNpb24oY29uc3QgU3RyaW5nJiwgSGFzaFNldDxXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGE+Jik7CiAgICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+IGluZGV4ZWREYXRhYmFzZU9yaWdpbnMoY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICBSZWY8
V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI+IGNyZWF0ZUlEQlNlcnZlcihQQUw6OlNlc3Np
b25JRCk7CisgICAgdm9pZCBzZXRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcklEQlJvb3RQYXRo
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGlkYlJvb3RQYXRoKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpAQCAtNDYxLDggKzQ2Myw0NCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcGVyZm9ybU5leHRTdG9yYWdlVGFzaygpOwogICAgIHZvaWQgZW5zdXJlUGF0aEV4
aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpOwogCi0gICAgdm9pZCBjbGVhclN0b3JhZ2VRdW90YShQ
QUw6OlNlc3Npb25JRCk7Ci0gICAgdm9pZCBpbml0aWFsaXplU3RvcmFnZVF1b3RhKGNvbnN0IFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJik7CisgICAgY2xhc3MgU2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXIgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6
CisgICAgICAgIFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKGNvbnN0IFN0cmluZyYgY2FjaGVS
b290UGF0aCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0
eVF1b3RhKQorICAgICAgICAgICAgOiBtX2NhY2hlUm9vdFBhdGgoY2FjaGVSb290UGF0aCkKKyAg
ICAgICAgICAgICwgbV9kZWZhdWx0UXVvdGEoZGVmYXVsdFF1b3RhKQorICAgICAgICAgICAgLCBt
X2RlZmF1bHRUaGlyZFBhcnR5UXVvdGEoZGVmYXVsdFRoaXJkUGFydHlRdW90YSkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgICAgIHVpbnQ2NF90IGRlZmF1bHRRdW90YShjb25zdCBXZWJDb3Jl
OjpDbGllbnRPcmlnaW4mIG9yaWdpbikgY29uc3QgeyByZXR1cm4gb3JpZ2luLnRvcE9yaWdpbiA9
PSBvcmlnaW4uY2xpZW50T3JpZ2luID8gbV9kZWZhdWx0UXVvdGEgOiBtX2RlZmF1bHRUaGlyZFBh
cnR5UXVvdGE7IH0KKworICAgICAgICBSZWY8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4g
ZW5zdXJlT3JpZ2luU3RvcmFnZVF1b3RhTWFuYWdlcihXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3Jp
Z2luLCB1aW50NjRfdCBxdW90YSwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6VXNhZ2VH
ZXR0ZXImJiB1c2FnZUdldHRlciwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6UXVvdGFJ
bmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8gW2l0ZXIsIGlzTmV3RW50cnldID0gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vy
cy5lbnN1cmUob3JpZ2luLCBbcXVvdGEsIHVzYWdlR2V0dGVyID0gV1RGTW92ZSh1c2FnZUdldHRl
ciksIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0
ZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpjcmVhdGUocXVvdGEsIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3Zl
KHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
cmV0dXJuIG1ha2VSZWYoKml0ZXItPnZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8g
ZXhpc3RpbmdTdG9yYWdlUXVvdGFNYW5hZ2VycygpIHsgcmV0dXJuIG1fc3RvcmFnZVF1b3RhTWFu
YWdlcnMudmFsdWVzKCk7IH0KKworICAgICAgICBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgo
KSBjb25zdCB7IHJldHVybiBtX2NhY2hlUm9vdFBhdGg7IH0KKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKyAgICAgICAgdm9pZCBzZXRJREJSb290UGF0aChjb25zdCBTdHJpbmcmIGlkYlJv
b3RQYXRoKSB7IG1faWRiUm9vdFBhdGggPSBpZGJSb290UGF0aDsgfQorICAgICAgICBjb25zdCBT
dHJpbmcmIGlkYlJvb3RQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9pZGJSb290UGF0aDsgfQorI2Vu
ZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICBTdHJpbmcgbV9jYWNoZVJvb3RQYXRoOworI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgICAgICBTdHJpbmcgbV9pZGJSb290UGF0aDsK
KyNlbmRpZgorICAgICAgICB1aW50NjRfdCBtX2RlZmF1bHRRdW90YSB7IFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpIH07CisgICAgICAgIHVpbnQ2NF90IG1fZGVm
YXVsdFRoaXJkUGFydHlRdW90YSB7IFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1
bHRUaGlyZFBhcnR5UXVvdGEoKSB9OworICAgICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9y
aWdpbiwgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3N0b3JhZ2VRdW90
YU1hbmFnZXJzOworICAgIH07CisgICAgdm9pZCBhZGRTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cihQQUw6OlNlc3Npb25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9vdFBhdGgsIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSYpOworICAgIHZvaWQgcmVtb3ZlU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXIoUEFMOjpTZXNzaW9uSUQpOwogCiAgICAgLy8gQ29ubmVjdGlvbnMgdG8gV2ViUHJvY2Vzc2Vz
LgogICAgIEhhc2hNYXA8V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIFJlZjxOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcz4+IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zOwpAQCAtNTMzLDIz
ICs1NzEsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCB7IGZh
bHNlIH07CiAjZW5kaWYKICAgICAKLSAgICBjbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VycyB7Ci0g
ICAgcHVibGljOgotICAgICAgICB1aW50NjRfdCBkZWZhdWx0UXVvdGEoY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJiBvcmlnaW4pIGNvbnN0IHsgcmV0dXJuIG9yaWdpbi50b3BPcmlnaW4gPT0g
b3JpZ2luLmNsaWVudE9yaWdpbiA/IG1fZGVmYXVsdFF1b3RhIDogbV9kZWZhdWx0VGhpcmRQYXJ0
eVF1b3RhOyB9Ci0gICAgICAgIHZvaWQgc2V0RGVmYXVsdFF1b3Rhcyh1aW50NjRfdCBkZWZhdWx0
UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1fZGVmYXVsdFF1b3RhID0gZGVmYXVsdFF1b3RhOwotICAgICAgICAgICAgbV9kZWZh
dWx0VGhpcmRQYXJ0eVF1b3RhID0gZGVmYXVsdFRoaXJkUGFydHlRdW90YTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+JiBtYW5hZ2Vyc1Blck9yaWdpbigpIHsgcmV0
dXJuIG1fbWFuYWdlcnNQZXJPcmlnaW47IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2
NF90IG1fZGVmYXVsdFF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVs
dFF1b3RhKCkgfTsKLSAgICAgICAgdWludDY0X3QgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhIHsg
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgpIH07
Ci0gICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fbWFuYWdlcnNQZXJPcmlnaW47Ci0gICAg
fTsKLSAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBTdG9yYWdlUXVvdGFNYW5hZ2Vycz4gbV9z
dG9yYWdlUXVvdGFNYW5hZ2VyczsKKyAgICBMb2NrIG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXJzTG9jazsKKyAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyczsK
IAogICAgIE9wdGlvblNldDxOZXR3b3JrQ2FjaGU6OkNhY2hlT3B0aW9uPiBtX2NhY2hlT3B0aW9u
czsKICAgICBXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeSBtX21lc3NhZ2VQb3J0
Q2hhbm5lbFJlZ2lzdHJ5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggZTFlZTE3NDBmZDljZGY1OTEwZjhl
M2NmM2JhMDk3ZDI2ODE5ZDJhNS4uOWRiYWM2OGEzYmMyODMzNDNjMzVjMjhkNWNkNjJjZjllNzg0
ZGEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0xNjQsNCArMTY0LDYgQEAgbWVzc2FnZXMgLT4gTmV0
d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogCiAgICAgU2V0U2VydmljZVdvcmtlckZldGNo
VGltZW91dEZvclRlc3RpbmcoU2Vjb25kcyBzZWNvbmRzKSAtPiAoKSBTeW5jaHJvbm91cwogICAg
IFJlc2V0U2VydmljZVdvcmtlckZldGNoVGltZW91dEZvclRlc3RpbmcoKSAtPiAoKSBTeW5jaHJv
bm91cworCisgICAgUmVzZXRRdW90YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIC0+ICgpIEFz
eW5jCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKaW5kZXggZWZlN2UxNWIwNWY3ZDI1NjEwOWU4NjMyZTJm
MzA1ZTIxYzM2ODRiNi4uMDc3NzJhNjk1MDk2OGQ0MDYyMzkyYmIyMWRmYjliZDA5MzkzZDQzMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lLmNwcApAQCAtMTk2LDEzICsxOTYsNjggQEAgdm9pZCBFbmdpbmU6OmNs
ZWFyQ2FjaGVzRm9yT3JpZ2luKE5ldHdvcmtQcm9jZXNzJiBuZXR3b3JrUHJvY2VzcywgUEFMOjpT
ZXNzaW9uSUQKICAgICB9KTsKIH0KIAotdm9pZCBFbmdpbmU6OmluaXRpYWxpemVRdW90YVVzZXIo
TmV0d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgY2xpZW50T3JpZ2luLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCitzdGF0aWMgdWludDY0X3QgZ2V0RGly
ZWN0b3J5U2l6ZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpCit7CisgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CisKKyAgICB1aW50NjRfdCBkaXJlY3RvcnlTaXplID0gMDsKKyAgICBE
ZXF1ZTxTdHJpbmc+IHBhdGhzOworICAgIHBhdGhzLmFwcGVuZChkaXJlY3RvcnlQYXRoKTsKKyAg
ICB3aGlsZSAoIXBhdGhzLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIHBhdGggPSBwYXRocy50
YWtlRmlyc3QoKTsKKyAgICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVjdG9yeShwYXRo
LCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpObykpIHsKKyAgICAgICAg
ICAgIGF1dG8gbmV3UGF0aHMgPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHBhdGgsICIqIl9z
KTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbmV3UGF0aCA6IG5ld1BhdGhzKSB7CisgICAgICAg
ICAgICAgICAgLy8gRmlsZXMgaW4gL0Jsb2JzIGRpcmVjdG9yeSBhcmUgaGFyZCBsaW5rLgorICAg
ICAgICAgICAgICAgIGF1dG8gZmlsZU5hbWUgPSBGaWxlU3lzdGVtOjpsYXN0Q29tcG9uZW50T2ZQ
YXRoSWdub3JpbmdUcmFpbGluZ1NsYXNoKG5ld1BhdGgpOworICAgICAgICAgICAgICAgIGlmIChm
aWxlTmFtZSA9PSAiQmxvYnMiKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBwYXRocy5hcHBlbmQobmV3UGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9
IDA7CisgICAgICAgIEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHBhdGgsIGZpbGVTaXplKTsKKyAg
ICAgICAgZGlyZWN0b3J5U2l6ZSArPSBmaWxlU2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIGRpcmVj
dG9yeVNpemU7Cit9CisKK3VpbnQ2NF90IEVuZ2luZTo6ZGlza1VzYWdlKGNvbnN0IFN0cmluZyYg
cm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2luKQogewotICAgIGZy
b20obmV0d29ya1Byb2Nlc3MsIHNlc3Npb25JRCwgW2NsaWVudE9yaWdpbiwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYgZW5naW5lKSBtdXRhYmxl
IHsKLSAgICAgICAgZW5naW5lLnJlYWRDYWNoZXNGcm9tRGlzayhjbGllbnRPcmlnaW4sIFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgY2FjaGVz
T3JFcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
ICAgICB9KTsKLSAgICB9KTsKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIGlm
IChyb290UGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgU3RyaW5nIHNh
bHRQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJvb3RQYXRoLCAi
c2FsdCJfcyk7CisgICAgYXV0byBzYWx0ID0gcmVhZE9yTWFrZVNhbHQoc2FsdFBhdGgpOworICAg
IGlmICghc2FsdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBLZXkga2V5KG9yaWdpbi50b3BP
cmlnaW4udG9TdHJpbmcoKSwgb3JpZ2luLmNsaWVudE9yaWdpbi50b1N0cmluZygpLCB7IH0sIHsg
fSwgKnNhbHQpOworICAgIFN0cmluZyBkaXJlY3RvcnlQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KHJvb3RQYXRoLCBrZXkuaGFzaEFzU3RyaW5nKCkpOworCisgICAg
U3RyaW5nIHNpemVGaWxlUGF0aCA9IENhY2hlczo6Y2FjaGVzU2l6ZUZpbGVuYW1lKGRpcmVjdG9y
eVBhdGgpOworICAgIGlmIChhdXRvIHJlY29yZGVkU2l6ZSA9IHJlYWRTaXplRmlsZShzaXplRmls
ZVBhdGgpKQorICAgICAgICByZXR1cm4gKnJlY29yZGVkU2l6ZTsKKworICAgIHJldHVybiBnZXRE
aXJlY3RvcnlTaXplKGRpcmVjdG9yeVBhdGgpOworfQorCit2b2lkIEVuZ2luZTo6cmVxdWVzdFNw
YWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNp
c2lvbik+JiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IGlmICghbV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpOworCisgICAgUmVmUHRyPFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIgPSBtX25ldHdvcmtQcm9jZXNz
LT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmlnaW4pOworICAgIGlmICghc3Rv
cmFnZVF1b3RhTWFuYWdlcikKKyAgICAgICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6RGVjaXNpb246OkRlbnkpOworCisgICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVx
dWVzdFNwYWNlT25NYWluVGhyZWFkKHNwYWNlUmVxdWVzdGVkLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
CiB9CiAKIEVuZ2luZTo6RW5naW5lKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgTmV0d29ya1By
b2Nlc3MmIHByb2Nlc3MsIFN0cmluZyYmIHJvb3RQYXRoKQpAQCAtMzQxLDcgKzM5Niw3IEBAIHZv
aWQgRW5naW5lOjpyZWFkQ2FjaGVzRnJvbURpc2soY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiBvcmlnaW4sIENhY2hlc0NhbGxiCiAKICAgICAgICAgYXV0byYgY2FjaGVzID0gbV9jYWNoZXMu
ZW5zdXJlKG9yaWdpbiwgWyZvcmlnaW4sIHRoaXNdIHsKICAgICAgICAgICAgIGF1dG8gcGF0aCA9
IGNhY2hlc1Jvb3RQYXRoKG9yaWdpbik7Ci0gICAgICAgICAgICByZXR1cm4gQ2FjaGVzOjpjcmVh
dGUoKnRoaXMsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiB7IG9yaWdpbiB9LCBXVEZNb3ZlKHBhdGgp
LCBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmln
aW4pKTsKKyAgICAgICAgICAgIHJldHVybiBDYWNoZXM6OmNyZWF0ZSgqdGhpcywgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luIHsgb3JpZ2luIH0sIFdURk1vdmUocGF0aCkpOwogICAgICAgICB9KS5pdGVy
YXRvci0+dmFsdWU7CiAKICAgICAgICAgaWYgKGNhY2hlcy0+aXNJbml0aWFsaXplZCgpKSB7CkBA
IC00NzMsMTIgKzUyOCwxMyBAQCB2b2lkIEVuZ2luZTo6cmVtb3ZlRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lKQogICAgIH0pOwogfQogCi12b2lkIEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90IHNpemUpCit2b2lkIEVuZ2luZTo6d3JpdGVTaXplRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90IHNpemUsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBDb21wbGV0aW9uSGFuZGxlckNhbGxp
bmdTY29wZSBjb21wbGV0aW9uSGFuZGxlckNhbGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
aW9RdWV1ZS0+ZGlzcGF0Y2goW3BhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpLCBzaXplXSgpIHsK
KyAgICBtX2lvUXVldWUtPmRpc3BhdGNoKFtwYXRoID0gcGF0aC5pc29sYXRlZENvcHkoKSwgc2l6
ZSwgY29tcGxldGlvbkhhbmRsZXJDYWxsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyQ2Fs
bGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoZ2xvYmFsU2l6ZUZp
bGVMb2NrKTsKICAgICAgICAgYXV0byBmaWxlSGFuZGxlID0gRmlsZVN5c3RlbTo6b3BlbkZpbGUo
cGF0aCwgRmlsZVN5c3RlbTo6RmlsZU9wZW5Nb2RlOjpXcml0ZSk7CiAgICAgICAgIGF1dG8gY2xv
c2VGaWxlSGFuZGxlciA9IG1ha2VTY29wZUV4aXQoWyZdIHsKQEAgLTQ4OSw2ICs1NDUsOCBAQCB2
b2lkIEVuZ2luZTo6d3JpdGVTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIHVpbnQ2NF90IHNp
emUpCiAKICAgICAgICAgRmlsZVN5c3RlbTo6dHJ1bmNhdGVGaWxlKGZpbGVIYW5kbGUsIDApOwog
ICAgICAgICBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShmaWxlSGFuZGxlLCBTdHJpbmc6Om51bWJl
cihzaXplKS51dGY4KCkuZGF0YSgpLCBTdHJpbmc6Om51bWJlcihzaXplKS51dGY4KCkubGVuZ3Ro
KCkpOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRs
ZXJDYWxsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyKV0oKSBtdXRhYmxlIHsg
fSk7CiAgICAgfSk7CiB9CiAKQEAgLTUxMywxMiArNTcxLDEyIEBAIE9wdGlvbmFsPHVpbnQ2NF90
PiBFbmdpbmU6OnJlYWRTaXplRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgaWYgKCFXVEY6
OmNvbnZlcnRTYWZlbHkoZmlsZVNpemUsIGJ5dGVzVG9SZWFkKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIFZlY3RvcjxjaGFyPiBidWZmZXIoYnl0ZXNUb1JlYWQpOwotICAg
IHNpemVfdCB0b3RhbEJ5dGVzUmVhZCA9IEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZShmaWxlSGFu
ZGxlLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsKKyAgICBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4gYnVmZmVyKGJ5dGVzVG9SZWFkKTsKKyAgICBzaXplX3QgdG90YWxCeXRlc1JlYWQgPSBG
aWxlU3lzdGVtOjpyZWFkRnJvbUZpbGUoZmlsZUhhbmRsZSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oYnVmZmVyLmRhdGEoKSksIGJ1ZmZlci5zaXplKCkpOwogICAgIGlmICh0b3RhbEJ5dGVzUmVh
ZCAhPSBieXRlc1RvUmVhZCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5kYXRhKCkpLnRvVUludDY0U3RyaWN0KCk7Cisg
ICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QoYnVmZmVyLmRhdGEoKSwgdG90YWxCeXRl
c1JlYWQpOwogfQogCiBjbGFzcyBSZWFkT3JpZ2luc1Rhc2tDb3VudGVyIDogcHVibGljIFJlZkNv
dW50ZWQ8UmVhZE9yaWdpbnNUYXNrQ291bnRlcj4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmgKaW5kZXggYTNhYWFm
MDkwMWM5NWU2MTUwNTIxOWRkMmMxZWI3ZjY1NzIwZjA1Ni4uMjJlZTY2YmNhNDc2YmNlMmJjYTRi
MmQ1MWRhY2U5NTQ3YWQ3MTdjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW5jbHVkZSAiTmV0d29ya0NhY2hlRGF0YS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9DbGllbnRPcmlnaW4uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N0b3Jh
Z2VRdW90YU1hbmFnZXIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNzksMTIgKzgw
LDE1IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVRdW90YVVzZXIoTmV0
d29ya1Byb2Nlc3MmLCBQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIHN0YXRpYyB1aW50NjRfdCBk
aXNrVXNhZ2UoY29uc3QgU3RyaW5nJiByb290UGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luJik7CisgICAgdm9pZCByZXF1ZXN0U3BhY2UoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2lu
JiwgdWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKKwogICAgIGJvb2wgc2hvdWxk
UGVyc2lzdCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pb1F1ZXVlO30KIAogICAgIHZvaWQgd3JpdGVG
aWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIE5ldHdvcmtDYWNoZTo6RGF0YSYmLCBXZWJDb3Jl
OjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwogICAgIHZvaWQgcmVhZEZp
bGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBO
ZXR3b3JrQ2FjaGU6OkRhdGEmLCBpbnQgZXJyb3IpPiYmKTsKICAgICB2b2lkIHJlbW92ZUZpbGUo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7Ci0gICAgdm9pZCB3cml0ZVNpemVGaWxlKGNvbnN0IFN0
cmluZyYsIHVpbnQ2NF90IHNpemUpOworICAgIHZvaWQgd3JpdGVTaXplRmlsZShjb25zdCBTdHJp
bmcmLCB1aW50NjRfdCBzaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHN0
YXRpYyBPcHRpb25hbDx1aW50NjRfdD4gcmVhZFNpemVGaWxlKGNvbnN0IFN0cmluZyYpOwogCiAg
ICAgY29uc3QgU3RyaW5nJiByb290UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdFBhdGg7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9D
YWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKaW5kZXggNmZjNTNlMDNjNGQ2N2EwMGZhOTFmMmIz
ZmNmYmRkN2UxMTk2OGNlMy4uYmExMzRjZjRjYWIwMDVmMzQyMTM4OWQ1NTkwMTY5ZWM0N2FkNGU5
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKQEAgLTQxNCw4ICs0MTQsMTEgQEAgdm9p
ZCBDYWNoZTo6cHV0KFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnND
YWxsYmFjayYmIGNhbGxiYWNrKQogICAgICAgICBhdXRvIHBvc2l0aW9uID0gKHNhbWVVUkxSZWNv
cmRzICYmICFtYXRjaGluZ1JlY29yZHMuaXNFbXB0eSgpKSA/IHNhbWVVUkxSZWNvcmRzLT5maW5k
TWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllciA9
PSBtYXRjaGluZ1JlY29yZHNbMF07IH0pIDogbm90Rm91bmQ7CiAKICAgICAgICAgc3BhY2VSZXF1
aXJlZCArPSByZWNvcmQucmVzcG9uc2VCb2R5U2l6ZTsKLSAgICAgICAgaWYgKHBvc2l0aW9uICE9
IG5vdEZvdW5kKQotICAgICAgICAgICAgc3BhY2VSZXF1aXJlZCAtPSBzYW1lVVJMUmVjb3Jkcy0+
YXQocG9zaXRpb24pLnNpemU7CisgICAgICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkgewor
ICAgICAgICAgICAgdWludDY0X3Qgc3BhY2VEZWNyZWFzZWQgPSBzYW1lVVJMUmVjb3Jkcy0+YXQo
cG9zaXRpb24pLnNpemU7CisgICAgICAgICAgICBpZiAoc3BhY2VSZXF1aXJlZCA+PSBzcGFjZURl
Y3JlYXNlZCkKKyAgICAgICAgICAgICAgICBzcGFjZVJlcXVpcmVkIC09IHNwYWNlRGVjcmVhc2Vk
OworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9jYWNoZXMucmVxdWVzdFNwYWNlKHNwYWNlUmVx
dWlyZWQsIFtjYWNoZXMgPSBtYWtlUmVmKG1fY2FjaGVzKSwgaWRlbnRpZmllciA9IG1faWRlbnRp
ZmllciwgcmVjb3JkcyA9IFdURk1vdmUocmVjb3JkcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldKE9wdGlvbmFsPERPTUNhY2hlRW5naW5lOjpFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7
CkBAIC00NTAsNyArNDUzLDEwIEBAIHZvaWQgQ2FjaGU6OnJlbW92ZShXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmJiByZXF1ZXN0LCBXZWJDb3JlOjpDYWNoZVF1ZXJ5T3B0aW9uCiAgICAgICAgIHJl
dHVybiBzaG91bGRSZW1vdmU7CiAgICAgfSk7CiAKLSAgICBjYWxsYmFjayhXVEZNb3ZlKHJlY29y
ZElkZW50aWZpZXJzKSk7CisgICAgLy8gVGhpcyBvcGVyYXRpb24gd291bGQgY2hhbmdlIGNhY2hl
cyBzaXplLCBzbyBtYWtlIHN1cmUgY2FsbGJhY2sgZmluaXNoZXMgYWZ0ZXIgc2l6ZSBmaWxlIGlz
IHVwZGF0ZWQuCisgICAgbV9jYWNoZXMudXBkYXRlU2l6ZUZpbGUoW2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayksIHJlY29yZElkZW50aWZpZXJzID0gV1RGTW92ZShyZWNvcmRJZGVudGlmaWVy
cyldKCkgbXV0YWJsZSB7CisgICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmll
cnMpKTsKKyAgICB9KTsKIH0KIAogdm9pZCBDYWNoZTo6cmVtb3ZlRnJvbVJlY29yZExpc3QoY29u
c3QgVmVjdG9yPHVpbnQ2NF90PiYgcmVjb3JkSWRlbnRpZmllcnMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5jcHAKaW5kZXggMDNhMDYwY2VmMmJjNjcyMDE0Yjc1OTZiYzVkYTRlZTk0Mzg2MWE3
Yy4uZjIzNzQ1MTgzZmY3MTc1OTI3YTUwMGE1ZDA2ZjdjN2IyM2MxY2QyMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNo
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGVzLmNwcApAQCAtNTYsMzYgKzU2LDIxIEBAIFN0cmluZyBDYWNoZXM6OmNh
Y2hlc1NpemVGaWxlbmFtZShjb25zdCBTdHJpbmcmIGNhY2hlc1Jvb3RzUGF0aCkKICAgICByZXR1
cm4gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlc1Jvb3RzUGF0aCwg
ImVzdGltYXRlZHNpemUiX3MpOwogfQogCi1SZWY8Q2FjaGVzPiBDYWNoZXM6OmNyZWF0ZShFbmdp
bmUmIGVuZ2luZSwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiByb290
UGF0aCwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYgcXVvdGFNYW5hZ2VyKQorUmVmPENh
Y2hlcz4gQ2FjaGVzOjpjcmVhdGUoRW5naW5lJiBlbmdpbmUsIFdlYkNvcmU6OkNsaWVudE9yaWdp
biYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgpCiB7Ci0gICAgYXV0byBjYWNoZXMgPSBhZG9w
dFJlZigqbmV3IENhY2hlcyB7IGVuZ2luZSwgV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKHJvb3RQ
YXRoKSwgcXVvdGFNYW5hZ2VyIH0pOwotICAgIHF1b3RhTWFuYWdlci5hZGRVc2VyKGNhY2hlcy5n
ZXQoKSk7Ci0gICAgcmV0dXJuIGNhY2hlczsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYWNo
ZXMgeyBlbmdpbmUsIFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShyb290UGF0aCkgfSk7CiB9CiAK
LUNhY2hlczo6Q2FjaGVzKEVuZ2luZSYgZW5naW5lLCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mJiBv
cmlnaW4sIFN0cmluZyYmIHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJiBx
dW90YU1hbmFnZXIpCitDYWNoZXM6OkNhY2hlcyhFbmdpbmUmIGVuZ2luZSwgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCkKICAgICA6IG1fZW5naW5lKCZl
bmdpbmUpCiAgICAgLCBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCiAgICAgLCBtX3Jvb3RQYXRo
KFdURk1vdmUocm9vdFBhdGgpKQotICAgICwgbV9xdW90YU1hbmFnZXIobWFrZVdlYWtQdHIocXVv
dGFNYW5hZ2VyKSkKIHsKIH0KIAogQ2FjaGVzOjp+Q2FjaGVzKCkKIHsKICAgICBBU1NFUlQobV9w
ZW5kaW5nV3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrcy5pc0VtcHR5KCkpOwotCi0gICAgaWYg
KG1fcXVvdGFNYW5hZ2VyKQotICAgICAgICBtX3F1b3RhTWFuYWdlci0+cmVtb3ZlVXNlcigqdGhp
cyk7Ci19Ci0KLXZvaWQgQ2FjaGVzOjp3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAgIGluaXRpYWxpemUoW2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChlcnJvcikK
LSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKENhY2hlU3RvcmFnZSwgIkNhY2hlczo6aW5p
dGlhbGl6ZSBmYWlsZWQsIHJlcG9ydGVkIHNwYWNlIHVzZWQgd2lsbCBiZSB6ZXJvIik7Ci0gICAg
ICAgIGNhbGxiYWNrKCk7Ci0gICAgfSk7CiB9CiAKIHZvaWQgQ2FjaGVzOjpyZXRyaWV2ZU9yaWdp
bkZyb21EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBmb2xkZXJQYXRoLCBXb3JrUXVldWUmIHF1ZXVl
LCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3Jp
Z2luPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTIwOCwxMCArMTkzLDE0IEBAIHZvaWQg
Q2FjaGVzOjppbml0aWFsaXplKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2Fs
bGJhY2smJiBjYWxsYmFjaykKICAgICB9KTsKIH0KIAotdm9pZCBDYWNoZXM6OnVwZGF0ZVNpemVG
aWxlKCkKK3ZvaWQgQ2FjaGVzOjp1cGRhdGVTaXplRmlsZShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKG1fZW5naW5lKQotICAgICAgICBt
X2VuZ2luZS0+d3JpdGVTaXplRmlsZShjYWNoZXNTaXplRmlsZW5hbWUobV9yb290UGF0aCksIG1f
c2l6ZSk7CisgICAgaWYgKCFtX2VuZ2luZSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9lbmdpbmUtPndyaXRlU2l6ZUZpbGUo
Y2FjaGVzU2l6ZUZpbGVuYW1lKG1fcm9vdFBhdGgpLCBtX3NpemUsIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogdm9pZCBDYWNoZXM6OmluaXRpYWxpemVTaXplKCkKQEAgLTIzMiwx
MyArMjIxLDEyIEBAIHZvaWQgQ2FjaGVzOjppbml0aWFsaXplU2l6ZSgpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9zaXplID0gc2l6ZTsKLSAg
ICAgICAgICAgIHVwZGF0ZVNpemVGaWxlKCk7Ci0KLSAgICAgICAgICAgIG1faXNJbml0aWFsaXpl
ZCA9IHRydWU7Ci0gICAgICAgICAgICBhdXRvIHBlbmRpbmdDYWxsYmFja3MgPSBXVEZNb3ZlKG1f
cGVuZGluZ0luaXRpYWxpemF0aW9uQ2FsbGJhY2tzKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYg
Y2FsbGJhY2sgOiBwZW5kaW5nQ2FsbGJhY2tzKQotICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdU
Rjo6bnVsbG9wdCk7Ci0KKyAgICAgICAgICAgIHVwZGF0ZVNpemVGaWxlKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
ICAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGF1dG8gcGVuZGlu
Z0NhbGxiYWNrcyA9IFdURk1vdmUobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25DYWxsYmFja3MpOwor
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBwZW5kaW5nQ2FsbGJhY2tzKQor
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQpOworICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYXV0byBkZWNvZGVk
ID0gQ2FjaGU6OmRlY29kZVJlY29yZEhlYWRlcigqc3RvcmFnZSk7CkBAIC0yNzMsMTMgKzI2MSwx
MSBAQCB2b2lkIENhY2hlczo6Y2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogICAgICAgICBtX3N0b3JhZ2UtPmNsZWFyKFN0cmluZyB7IH0sIC1XYWxs
VGltZTo6aW5maW5pdHkoKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAg
ICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5jbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5yZXNldFNwYWNlVXNlZCgpOwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2xlYXJNZW1vcnlS
ZXByZXNlbnRhdGlvbigpOwotICAgIHJlc2V0U3BhY2VVc2VkKCk7CiAgICAgY2xlYXJQZW5kaW5n
V3JpdGluZ0NhY2hlc1RvRGlza0NhbGxiYWNrcygpOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CiB9CkBAIC01MjUsMTIgKzUxMSwxMiBAQCB2b2lkIENhY2hlczo6cmVhZFJlY29yZHNMaXN0KENh
Y2hlJiBjYWNoZSwgTmV0d29ya0NhY2hlOjpTdG9yYWdlOjpUcmF2ZXJzZUhhbmRsZQogCiB2b2lk
IENhY2hlczo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlUmVxdWlyZWQsIFdlYkNvcmU6OkRP
TUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBpZiAo
IW1fcXVvdGFNYW5hZ2VyKSB7CisgICAgaWYgKCFtX2VuZ2luZSkgewogICAgICAgICBjYWxsYmFj
ayhFcnJvcjo6UXVvdGFFeGNlZWRlZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBt
X3F1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHNwYWNlUmVxdWlyZWQsIFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKKyAgICBtX2VuZ2luZS0+
cmVxdWVzdFNwYWNlKG1fb3JpZ2luLCBzcGFjZVJlcXVpcmVkLCBbY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CiAgICAgICAgIHN3aXRjaCAoZGVj
aXNpb24pIHsKICAgICAgICAgY2FzZSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNp
c2lvbjo6RGVueToKICAgICAgICAgICAgIGNhbGxiYWNrKEVycm9yOjpRdW90YUV4Y2VlZGVkKTsK
QEAgLTU0OCw3ICs1MzQsNiBAQCB2b2lkIENhY2hlczo6d3JpdGVSZWNvcmQoY29uc3QgQ2FjaGUm
IGNhY2hlLCBjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mbwogICAgIEFTU0VSVCht
X3NpemUgPj0gcHJldmlvdXNSZWNvcmRTaXplKTsKICAgICBtX3NpemUgKz0gcmVjb3JkSW5mb3Jt
YXRpb24uc2l6ZTsKICAgICBtX3NpemUgLT0gcHJldmlvdXNSZWNvcmRTaXplOwotICAgIHVwZGF0
ZVNpemVGaWxlKCk7CiAKICAgICBpZiAoIXNob3VsZFBlcnNpc3QoKSkgewogICAgICAgICBtX3Zv
bGF0aWxlU3RvcmFnZS5zZXQocmVjb3JkSW5mb3JtYXRpb24ua2V5LCBXVEZNb3ZlKHJlY29yZCkp
OwpAQCAtNTU2LDEzICs1NDEsMTUgQEAgdm9pZCBDYWNoZXM6OndyaXRlUmVjb3JkKGNvbnN0IENh
Y2hlJiBjYWNoZSwgY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZEluZm8KICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIG1fc3RvcmFnZS0+c3RvcmUoQ2FjaGU6OmVuY29kZShyZWNv
cmRJbmZvcm1hdGlvbiwgcmVjb3JkKSwgeyB9LCBbcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYo
Km1fc3RvcmFnZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGludCBlcnJvcikgbXV0
YWJsZSB7CisgICAgbV9zdG9yYWdlLT5zdG9yZShDYWNoZTo6ZW5jb2RlKHJlY29yZEluZm9ybWF0
aW9uLCByZWNvcmQpLCB7IH0sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IHByb3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spXShpbnQgZXJyb3IpIG11dGFibGUgewogICAgICAgICBpZiAoZXJyb3IpIHsK
ICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKENhY2hlU3RvcmFnZSwgIkNhY2hlczo6d3Jp
dGVSZWNvcmQgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBlcnJvcik7CiAgICAgICAgICAgICBjYWxs
YmFjayhFcnJvcjo6V3JpdGVEaXNrKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBjYWxsYmFjayhXVEY6Om51bGxvcHQpOworICAgICAgICB1cGRhdGVTaXplRmlsZShb
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNh
bGxiYWNrKFdURjo6bnVsbG9wdCk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCkBAIC02MDUs
NyArNTkyLDcgQEAgdm9pZCBDYWNoZXM6OnJlbW92ZVJlY29yZChjb25zdCBSZWNvcmRJbmZvcm1h
dGlvbiYgcmVjb3JkKQogCiAgICAgQVNTRVJUKG1fc2l6ZSA+PSByZWNvcmQuc2l6ZSk7CiAgICAg
bV9zaXplIC09IHJlY29yZC5zaXplOwotICAgIHVwZGF0ZVNpemVGaWxlKCk7CisgICAgdXBkYXRl
U2l6ZUZpbGUoW10geyB9KTsKIAogICAgIHJlbW92ZUNhY2hlRW50cnkocmVjb3JkLmtleSk7CiB9
CkBAIC02MjEsMTcgKzYwOCw2IEBAIHZvaWQgQ2FjaGVzOjpyZW1vdmVDYWNoZUVudHJ5KGNvbnN0
IE5ldHdvcmtDYWNoZTo6S2V5JiBrZXkpCiAgICAgbV9zdG9yYWdlLT5yZW1vdmUoa2V5KTsKIH0K
IAotdm9pZCBDYWNoZXM6OnJlc2V0U3BhY2VVc2VkKCkKLXsKLSAgICBtX3NpemUgPSAwOwotICAg
IHVwZGF0ZVNpemVGaWxlKCk7Ci0KLSAgICBpZiAobV9xdW90YU1hbmFnZXIpIHsKLSAgICAgICAg
bV9xdW90YU1hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgICAgICBtX3F1b3RhTWFuYWdl
ci0+YWRkVXNlcigqdGhpcyk7Ci0gICAgfQotfQotCiB2b2lkIENhY2hlczo6Y2xlYXJNZW1vcnlS
ZXByZXNlbnRhdGlvbigpCiB7CiAgICAgbWFrZURpcnR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNo
ZXMuaAppbmRleCAwMzIzMWYzYTliMDU3NjcyZDYzMWJiOTZlNjdhNmViOTllMWQ3Y2JiLi41ZDM5
NGEwZTQ4ODU3YjAyNWNhYTQ4MzRhZDI2YmU4NDdkZDlmNTU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJDYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0NsaWVudE9yaWdpbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZVF1b3RhVXNlci5o
PgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgogCkBAIC00MiwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIENhY2hlU3RvcmFnZSB7CiAKIGNs
YXNzIEVuZ2luZTsKIAotY2xhc3MgQ2FjaGVzIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Q2Fj
aGVzPiwgcHJpdmF0ZSBXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyIHsKK2NsYXNzIENhY2hlcyBm
aW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPENhY2hlcz4gewogcHVibGljOgotICAgIHN0YXRpYyBT
dHJpbmcgY2FjaGVzU2l6ZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBSZWY8
Q2FjaGVzPiBjcmVhdGUoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiYsIFN0cmluZyYm
IHJvb3RQYXRoLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyJik7CisgICAgc3RhdGljIFN0
cmluZyBjYWNoZXNTaXplRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBjYWNoZXNSb290c1BhdGgpOwor
ICAgIHN0YXRpYyBSZWY8Q2FjaGVzPiBjcmVhdGUoRW5naW5lJiwgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luJiYsIFN0cmluZyYmIHJvb3RQYXRoKTsKICAgICB+Q2FjaGVzKCk7CiAKICAgICBzdGF0aWMg
dm9pZCByZXRyaWV2ZU9yaWdpbkZyb21EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBmb2xkZXJQYXRo
LCBXb3JrUXVldWUmLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8V2ViQ29y
ZTo6Q2xpZW50T3JpZ2luPiYmKT4mJik7CkBAIC03OSwyMiArNzgsMTcgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBjbGVhcihXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9p
ZCBjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgdm9pZCByZXNldFNwYWNlVXNlZCgp
OwogCiAgICAgdWludDY0X3Qgc3RvcmFnZVNpemUoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVNp
emVGaWxlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKIHByaXZhdGU6Ci0gICAgQ2Fj
aGVzKEVuZ2luZSYsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmLCBTdHJpbmcmJiByb290UGF0aCwg
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlciYpOwotCi0gICAgLy8gU3RvcmFnZVF1b3RhVXNl
ciBBUEkuCi0gICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9z
aXplOyB9CisgICAgQ2FjaGVzKEVuZ2luZSYsIFdlYkNvcmU6OkNsaWVudE9yaWdpbiYmLCBTdHJp
bmcmJiByb290UGF0aCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVTaXplKCk7CiAgICAgdm9pZCBy
ZWFkQ2FjaGVzRnJvbURpc2soV1RGOjpGdW5jdGlvbjx2b2lkKEV4cGVjdGVkPFZlY3RvcjxDYWNo
ZT4sIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpFcnJvcj4mJik+JiYpOwogICAgIHZvaWQgd3Jp
dGVDYWNoZXNUb0Rpc2soV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFj
ayYmKTsKIAotICAgIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJikgZmluYWw7Ci0KICAgICB2b2lkIHN0b3JlT3JpZ2luKFdlYkNvcmU6OkRPTUNhY2hlRW5n
aW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAgICAgc3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6
OkNsaWVudE9yaWdpbj4gcmVhZE9yaWdpbihjb25zdCBOZXR3b3JrQ2FjaGU6OkRhdGEmKTsKIApA
QCAtMTA2LDggKzEwMCw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc0FjdGl2ZUNhY2hlKCkg
Y29uc3Q7CiAKLSAgICB2b2lkIHVwZGF0ZVNpemVGaWxlKCk7Ci0KICAgICBib29sIG1faXNJbml0
aWFsaXplZCB7IGZhbHNlIH07CiAgICAgRW5naW5lKiBtX2VuZ2luZSB7IG51bGxwdHIgfTsKICAg
ICB1aW50NjRfdCBtX3VwZGF0ZUNvdW50ZXIgeyAwIH07CkBAIC0xMjIsNyArMTE0LDYgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxs
YmFjaz4gbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25DYWxsYmFja3M7CiAgICAgYm9vbCBtX2lzV3Jp
dGluZ0NhY2hlc1RvRGlzayB7IGZhbHNlIH07CiAgICAgRGVxdWU8Q29tcGxldGlvbkhhbmRsZXI8
dm9pZChPcHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+KT4+IG1fcGVuZGlu
Z1dyaXRpbmdDYWNoZXNUb0Rpc2tDYWxsYmFja3M7Ci0gICAgV2Vha1B0cjxXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyPiBtX3F1b3RhTWFuYWdlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIENh
Y2hlU3RvcmFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9y
ZVBhcmFtZXRlcnMuY3BwCmluZGV4IGMwZmNmOWM1ZjYwMGFhNWFjMTE2M2U0N2E0YjI2ZGFjNDIw
NjVhYTkuLjZkMGMxMjlhNzQwNTEwZDM4Njk3MzcwNWFkMDkyZWYxMzJjYzA3NWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5jcHAK
QEAgLTU1LDYgKzU1LDggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVyczo6ZW5jb2Rl
KElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIAogICAgIGVuY29kZXIgPDwgbG9jYWxTdG9y
YWdlRGlyZWN0b3J5IDw8IGxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKIAor
ICAgIGVuY29kZXIgPDwgY2FjaGVTdG9yYWdlRGlyZWN0b3J5IDw8IGNhY2hlU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZTsKKwogICAgIGVuY29kZXIgPDwgcGVyT3JpZ2luU3RvcmFnZVF1
b3RhOwogICAgIGVuY29kZXIgPDwgcGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YTsKIH0K
QEAgLTE0MSw2ICsxNDMsMTggQEAgT3B0aW9uYWw8V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM+
IFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWMKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICBwYXJhbWV0ZXJzLmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmxvY2FsU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CiAKKyAgICBPcHRpb25hbDxTdHJpbmc+IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAg
ICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICBpZiAoIWNhY2hlU3RvcmFn
ZURpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBwYXJhbWV0ZXJz
LmNhY2hlU3RvcmFnZURpcmVjdG9yeSA9IFdURk1vdmUoKmNhY2hlU3RvcmFnZURpcmVjdG9yeSk7
CisKKyAgICBPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IGNhY2hlU3RvcmFnZURp
cmVjdG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBkZWNvZGVyID4+IGNhY2hlU3RvcmFnZURpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZTsKKyAgICBpZiAoIWNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBwYXJhbWV0ZXJz
LmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmNhY2hlU3Rv
cmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKICAgICBPcHRpb25hbDx1aW50NjRfdD4g
cGVyT3JpZ2luU3RvcmFnZVF1b3RhOwogICAgIGRlY29kZXIgPj4gcGVyT3JpZ2luU3RvcmFnZVF1
b3RhOwogICAgIGlmICghcGVyT3JpZ2luU3RvcmFnZVF1b3RhKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLmgKaW5kZXggMDk1ZjA5ZDZhZjkz
ZjkxM2ViYjI5ZjcwMjY3YWU5YzFiNzRiZTg4ZS4uZjI3ZGY0ODk4MDlmMzE5NjA4YjY4MGNiMmE4
YTFjMTRiNzAxODQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURh
dGFTdG9yZVBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycy5oCkBAIC03MSw2ICs3MSw5IEBAIHN0cnVjdCBXZWJzaXRlRGF0YVN0
b3JlUGFyYW1ldGVycyB7CiAgICAgU3RyaW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgbG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlOwogCisgICAgU3RyaW5nIGNhY2hlU3RvcmFnZURpcmVjdG9yeTsKKyAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlOworCiAg
ICAgdWludDY0X3QgcGVyT3JpZ2luU3RvcmFnZVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCkgfTsKICAgICB1aW50NjRfdCBwZXJUaGlyZFBhcnR5T3Jp
Z2luU3RvcmFnZVF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRo
aXJkUGFydHlRdW90YSgpIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5jcHAKaW5kZXggMjRjYzFhZmM3ZWI3NzJk
MDYwNDgyNjFlZGZjZjJmNTdhZGExYTZmZC4uNmY1YTkwN2RkZGMyODdhMzhmNGZhMGI4ODMwMzg4
N2Q5ODMzZDY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCkBAIC02ODYsMyArNjg2LDExIEBAIHZvaWQgV0tX
ZWJzaXRlRGF0YVN0b3JlU2V0Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlUmVmKS0+c2V0
Q2FjaGVNb2RlbFN5bmNocm9ub3VzbHlGb3JUZXN0aW5nKFdlYktpdDo6dG9DYWNoZU1vZGVsKGNh
Y2hlTW9kZWwpKTsKIH0KKwordm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVSZXNldFF1b3RhKFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURh
dGFTdG9yZVJlc2V0UXVvdGFDYWxsYmFjayBjYWxsYmFjaykKK3sKKyAgICBXZWJLaXQ6OnRvSW1w
bChkYXRhU3RvcmVSZWYpLT5yZXNldFF1b3RhKFtjb250ZXh0LCBjYWxsYmFja10geworICAgICAg
ICBpZiAoY2FsbGJhY2spCisgICAgICAgICAgICBjYWxsYmFjayhjb250ZXh0KTsKKyAgICB9KTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURh
dGFTdG9yZVJlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0
YVN0b3JlUmVmLmgKaW5kZXggMTBiYWY3ZWUzMzZkNDRmZGRlMjQxMTk4NGUxOGQ2MTI2OTNmYzYx
YS4uMTIxMTlhNTQyODlkZjFlZTFlN2QzYWU2Y2NjYzVhN2VlYzY3ODdkMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgK
QEAgLTE1NSw2ICsxNTUsOSBAQCBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVDbGVh
ckFkQ2xpY2tBdHRyaWJ1dGlvbnNUaHJvdWdoV2Vic2l0ZURhdGFSZW1vdgogCiBXS19FWFBPUlQg
dm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVTZXRDYWNoZU1vZGVsU3luY2hyb25vdXNseUZvclRlc3Rp
bmcoV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZiwgV0tDYWNoZU1vZGVsIGNhY2hl
TW9kZWwpOwogCit0eXBlZGVmIHZvaWQgKCpXS1dlYnNpdGVEYXRhU3RvcmVSZXNldFF1b3RhQ2Fs
bGJhY2spKHZvaWQqIGZ1bmN0aW9uQ29udGV4dCk7CitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVE
YXRhU3RvcmVSZXNldFF1b3RhKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIHZv
aWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZVJlc2V0UXVvdGFDYWxsYmFjayBjYWxsYmFj
ayk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCAx
NzJiYjMzMDUwYmMzNWYxMWI1MWU5M2U5NzE1NTU2OWNmOWQxMDJkLi40NWFlYmE0MDIzMjUxMmEz
OWE5YTc2NGNkMmFmMzQzNTVmMDZhODI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTEzNjcsNiArMTM2
NywxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb24o
KQogICAgIG1fYWN0aXZpdHlGcm9tV2ViUHJvY2Vzc2VzID0gbnVsbHB0cjsKIH0KIAordm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpyZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIHNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlc2V0UXVvdGEoc2Vz
c2lvbklEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAogI3VuZGVmIE1FU1NBR0VfQ0hFQ0sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5kZXggYjEzMjJiYmM2
NmE1ODhhYmJhYWI1MDBiZDUzYTJiZTllN2JkMjlmZi4uMGM2OWE3NmI3NjU4N2U5NWE2Y2U3ZjRh
ODgyM2I1Y2JjOTgzZjkxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTU2LDYgKzU2LDcgQEAgZW51bSBjbGFz
cyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gOiBib29sOwogZW51bSBjbGFzcyBTdG9yYWdl
QWNjZXNzV2FzR3JhbnRlZCA6IGJvb2w7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIHN0cnVjdCBT
ZWN1cml0eU9yaWdpbkRhdGE7CitzdHJ1Y3QgQ2xpZW50T3JpZ2luOwogfQogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKQEAgLTE5Niw2ICsxOTcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlclNj
aGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgdW5y
ZWdpc3RlclNjaGVtZUZvckxlZ2FjeUN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwogCisg
ICAgdm9pZCByZXNldFF1b3RhKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOworCiBwcml2YXRlOgogICAgIC8vIEF1eGlsaWFyeVByb2Nlc3NQcm94eQogICAgIHZv
aWQgZ2V0TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmKSBvdmVy
cmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCA0
MDI1NTU2YmM5Y2YwYTdiYTQzNzBjMzIxYmM2YzExYWYyZDYyYWNkLi5hNjg4N2I5YTk1OGY1ZTNi
ZGZkMTU4NGFjOTMyNTkwOTE5ZmNjNmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwCkBAIC01NTEsNiArNTUxLDEyIEBAIE5ldHdvcmtQcm9jZXNzUHJveHkm
IFdlYlByb2Nlc3NQb29sOjplbnN1cmVOZXR3b3JrUHJvY2VzcyhXZWJzaXRlRGF0YVN0b3JlKiB3
aXRoCiAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9y
eSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOwogCisgICAgYXV0byBjYWNoZVN0b3JhZ2VEaXJlY3Rvcnkg
PSBtX3dlYnNpdGVEYXRhU3RvcmUgPyBtX3dlYnNpdGVEYXRhU3RvcmUtPmNhY2hlU3RvcmFnZURp
cmVjdG9yeSgpIDogbnVsbFN0cmluZygpOworICAgIGlmICghY2FjaGVTdG9yYWdlRGlyZWN0b3J5
LmlzRW1wdHkoKSkgeworICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JS
ZWFkV3JpdGVEaXJlY3RvcnkoY2FjaGVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRs
ZSk7CisgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuY2FjaGVT
dG9yYWdlRGlyZWN0b3J5ID0gV1RGTW92ZShjYWNoZVN0b3JhZ2VEaXJlY3RvcnkpOworICAgIH0K
KwogICAgIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpCiAgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnJlc29sdmVkUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwogICAgIGlmIChwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVD
b2NvYS5tbQppbmRleCBiMWY1NDAxYjdiYTM3OTJiNThhZTgxMWM0ZTQ5MTU2NDQ3NzFkMzlhLi4y
OTA0YjA3ZTIxZGI1ZDM3ZTRjYmNjOTA0ZWEyOWNkMmE4MjVhZjg4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vi
c2l0ZURhdGFTdG9yZUNvY29hLm1tCkBAIC0xOTUsNiArMTk1LDEwIEBAIFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzIFdlYnNpdGVEYXRhU3RvcmU6OnBhcmFtZXRlcnMoKQogICAgIGlmICghcGFy
YW1ldGVycy5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQogICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5s
b2NhbFN0b3JhZ2VEaXJlY3RvcnksIHBhcmFtZXRlcnMubG9jYWxTdG9yYWdlRGlyZWN0b3J5RXh0
ZW5zaW9uSGFuZGxlKTsKIAorICAgIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0g
Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgaWYgKCFwYXJhbWV0ZXJzLmNhY2hlU3RvcmFn
ZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmNhY2hlU3RvcmFnZURpcmVjdG9y
eSwgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworCiAg
ICAgcGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSBwZXJPcmlnaW5TdG9yYWdlUXVv
dGEoKTsKICAgICBwYXJhbWV0ZXJzLnBlclRoaXJkUGFydHlPcmlnaW5TdG9yYWdlUXVvdGEgPSBw
ZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXgg
NmI0YjAyYzc0Y2M5ZTAxNjA3NTMwMDgxYmRiMWVjZGRiNTNlY2E2Yy4uZTY1NGU3NDMxODE3YmRl
Mjk5MzQxMDE1Y2E4YjM3YTcxMGMyYzkzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTIwODcsNiAr
MjA4NywxMiBAQCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyBXZWJzaXRlRGF0YVN0b3JlOjpw
YXJhbWV0ZXJzKCkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVh
ZFdyaXRlRGlyZWN0b3J5KGxvY2FsU3RvcmFnZURpcmVjdG9yeSwgcGFyYW1ldGVycy5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogICAgIH0KIAorICAgIGF1dG8gY2FjaGVT
dG9yYWdlRGlyZWN0b3J5ID0gdGhpcy0+Y2FjaGVTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgaWYg
KCFjYWNoZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7CisgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjYWNoZVN0b3JhZ2VEaXJl
Y3RvcnksIHBhcmFtZXRlcnMuY2FjaGVTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsK
KyAgICAgICAgcGFyYW1ldGVycy5jYWNoZVN0b3JhZ2VEaXJlY3RvcnkgPSBjYWNoZVN0b3JhZ2VE
aXJlY3Rvcnk7CisgICAgfQorCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgcGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSByZXNvbHZlZEluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSgpOwogICAgIGlmICghcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnkuaXNFbXB0eSgpKQpAQCAtMjE3Myw2ICsyMTc5LDE1IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6Z2V0TG9jYWxTdG9yYWdlRGV0YWlscyhGdW5jdGlvbjx2b2lkKFZlY3RvcjxMb2NhbFN0b3Jh
Z2VECiAgICAgQVNTRVJUKCFjb21wbGV0aW9uSGFuZGxlcik7CiB9CiAKK3ZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit7CisgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3Jl
Z2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgZm9yIChhdXRv
JiBwcm9jZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKSB7CisgICAgICAgIGlmIChhdXRvKiBwcm9j
ZXNzID0gcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCisgICAgICAgICAgICBwcm9jZXNz
LT5yZXNldFF1b3RhKG1fc2Vzc2lvbklELCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tB
Z2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKKyAgICB9Cit9CisKICNpZiAhUExBVEZPUk0oQ09D
T0EpCiBXVEY6OlN0cmluZyBXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TWVkaWFDYWNoZURpcmVj
dG9yeSgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggZWI5NjA0ZTNhZjMyYzU0NWI1YmNkZjA4MjI2ZGJm
Y2QyNjJlOWVlZC4uNDRmNGZkZDcwZDJkNzdlM2ZlYmJhOGE5YWI0NWRhZThjOTcyNzQwMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFT
dG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuaApAQCAtMjkxLDcgKzI5MSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgV1RGOjpT
dHJpbmcgZGVmYXVsdE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKTsKICAgICBzdGF0aWMgV1RG
OjpTdHJpbmcgZGVmYXVsdERldmljZUlkSGFzaFNhbHRzU3RvcmFnZURpcmVjdG9yeSgpOwogICAg
IHN0YXRpYyBXVEY6OlN0cmluZyBkZWZhdWx0SmF2YVNjcmlwdENvbmZpZ3VyYXRpb25EaXJlY3Rv
cnkoKTsKLSAgICAKKworICAgIHZvaWQgcmVzZXRRdW90YShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOworCiBwcml2YXRlOgogICAgIHZvaWQgZmV0Y2hEYXRhQW5kQXBwbHkoT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgUmVm
UHRyPFdvcmtRdWV1ZT4mJiwgRnVuY3Rpb248dm9pZChWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+
KT4mJiBhcHBseSk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA3NDhhMjFmNWNhNzZmYzJkMzdhNzdlNjQ1Y2RjZGRkOTc1MjNmZjMyLi5mNmVh
NjdlOWQwNDYxOThlNGE3NTdkZGM2ODQ2M2UyODRjZDhkZTRjIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTktMTIt
MDIgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jvc3MtdGhy
ZWFkIHZlcnNpb24gU3RvcmFnZVF1b3RhTWFuYWdlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTcxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81
NzI5MDM0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2Vy
LmNwcDogUmVtb3ZlZCBhcyB3ZSBoYXZlIGEgZGlmZmVyZW50IFN0b3JhZ2VRdW90YU1hbmFnZXIg
CisgICAgICAgIGltcGxlbWVudGF0aW9uIG5vdy4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcDogcmVzZXQgU3RvcmFnZVF1b3RhTWFuYWdlcidzIHF1b3RhIGJl
dHdlZW4gdGVzdHMuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9D
b25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0UXVv
dGEpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoKKwogMjAx
OS0xMi0wMiAgTG91aWUgTGl2b24tQmVtZWwgIDxsbGl2b25iZW1lbEBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIGhlbHBlciBtZXRob2RzIGZvciBkZXNjcmlwdGlvbiBhbmQgZXF1YWxpdHkgdG8g
dGV4dCBtYW5pcHVsYXRpb24gU1BJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQ1NzY4ZWQz
OGI0YmIwMWQwYjhlZGNiNGJiOWU2MGJjMzEyMjk1YjguLjgyNTJmOThkZTJmNTc5ZTQwNjU3NDQz
OGM2Nzg4YzFlMzVmZWQxZGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MzgsNyArNzM4
LDYgQEAKIAkJOTM5OUJBMDYyMzcxMTE0RjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdEluUGFnZUNh
Y2hlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTM5OUJBMDMyMzcxMTBCRjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdEluUGFnZUNhY2hl
Lmh0bWwgKi87IH07CiAJCTkzQUY0RUNFMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNEMTUwNkYwNjQwMDdGRDU3RSAvKiBO
ZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCAqLzsgfTsK
IAkJOTNBRjRFRDExNTA2RjEzMDAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBRjRFQ0Yx
NTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi87IH07Ci0JCTkzQjYyMDU0
MjM0RUE2MkMwMEQ0OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjYyMDUzMjM0RUEzMkIwMEQ0OUI5
NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJOTNDRkE4NjcxQ0VCOUUzODAw
MDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0NGQTg2NjFDRUI5REUxMDAwNTY1
QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sICovOyB9OwogCQk5M0QxMTlGQzIyQzY4
MEY3MDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0QxMTlG
QjIyQzU3MTEyMDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUuaHRt
bCAqLzsgfTsKIAkJOTNFMkM1NTUxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMkM1NTQxRkQz
MjA0MTAwRTFERjZBIC8qIExpbmVFbmRpbmcuY3BwICovOyB9OwpAQCAtMTE0Myw3ICsxMTQyLDYg
QEAKIAkJCWRzdFBhdGggPSBUZXN0V2ViS2l0QVBJLnJlc291cmNlczsKIAkJCWRzdFN1YmZvbGRl
clNwZWMgPSA3OwogCQkJZmlsZXMgPSAoCi0JCQkJQ0Q4Mzk0REYyMzJBRjdDMDAwMTQ5NDk1IC8q
IG1lZGlhLWxvYWRpbmcuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NUE4MTdGRjIx
ODEwMjFBMDAwNEEzOUEgLyogMTAweDEwMC1yZWQudGdhIGluIENvcHkgUmVzb3VyY2VzICovLAog
CQkJCTFBOUU1MkM5MTNFNjVFRjQwMDY5MTdGNSAvKiAxOC1jaGFyYWN0ZXJzLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8sCiAJCQkJNTVBODE4MDAyMTgxMDIyMTAwMDRBMzlBIC8qIDQwMHg0MDAt
Z3JlZW4ucG5nIGluIENvcHkgUmVzb3VyY2VzICovLApAQCAtMTM3Niw2ICsxMzc0LDcgQEAKIAkJ
CQk5MzBBRDQwMjE1MDY5OEQwMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8sCiAJCQkJQUQ1N0FDMjIxREE3NDY2RTAwRkYxQkRFIC8qIG1hbnktaWZyYW1l
cy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTc3NzJFQ0UxMjJGRTA2QzYwMDA5QTc5
OSAvKiBtYW55LXNhbWUtb3JpZ2luLWlmcmFtZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywK
KwkJCQlDRDgzOTRERjIzMkFGN0MwMDAxNDk0OTUgLyogbWVkaWEtbG9hZGluZy5odG1sIGluIENv
cHkgUmVzb3VyY2VzICovLAogCQkJCUNEQTMxNTlBMUVENTQ4RjEwMDlGNjBEMyAvKiBNZWRpYVBs
YXliYWNrU2xlZXBBc3NlcnRpb24uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlDREM5
NDQyRjFFRjIwNUQ2MDA1OUMzQzQgLyogbWVkaWFzdHJlYW10cmFjay1kZXRhY2hlZC5odG1sIGlu
IENvcHkgUmVzb3VyY2VzICovLAogCQkJCUUxMjIwRENBMTU1QjI4QUEwMDEzRTJGQyAvKiBNZW1v
cnlDYWNoZURpc2FibGVXaXRoaW5SZXNvdXJjZUxvYWREZWxlZ2F0ZS5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovLApAQCAtMjE0OSw3ICsyMTQ4LDYgQEAKIAkJOTNBRjRFQ0ExNTA2RjAzNTAwN0ZE
NTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXRGb3JJbWFnZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FGNEVD
RDE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1h
Z2VzX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXdG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBRjRFQ0YxNTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2Yt
aW1hZ2VzLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibG90cy1vZi1pbWFnZXMu
aHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzQjYyMDUzMjM0RUEzMkIwMEQ0
OUI5NyAvKiBTdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5M0NGQTg2NjFDRUI5REUxMDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1p
bnB1dC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImF1dG9mb2N1c2VkLXRleHQt
aW5wdXQuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0ZBODY4MUNFQkNG
RUQwMDA1NjVBOCAvKiBDYW5kaWRhdGVUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IENhbmRpZGF0ZVRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0QxMTlGQjIyQzU3MTEyMDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2lu
ZG93LXByaXZhdGUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb2NhbHN0b3Jh
Z2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTMxMjcsNyArMzEyNSw2IEBACiAJCQkJNDE5NzNCNUMxQUYyMjg3NTAwNkM3QjM2IC8qIFNo
YXJlZEJ1ZmZlci5jcHAgKi8sCiAJCQkJQTE3OTkxODkxRTFDQTI0MTAwQTUwNUVEIC8qIFNoYXJl
ZEJ1ZmZlclRlc3QuY3BwICovLAogCQkJCUExNzk5MThBMUUxQ0EyNDEwMEE1MDVFRCAvKiBTaGFy
ZWRCdWZmZXJUZXN0LmggKi8sCi0JCQkJOTNCNjIwNTMyMzRFQTMyQjAwRDQ5Qjk3IC8qIFN0b3Jh
Z2VRdW90YU1hbmFnZXIuY3BwICovLAogCQkJCUVDQTY4MENEMUU2OENDMDkwMDczMUQyMCAvKiBT
dHJpbmdVdGlsaXRpZXMubW0gKi8sCiAJCQkJQ0U0RDVERTUxRjY3NDNCQTAwNzJDRkM2IC8qIFN0
cmluZ1dpdGhEaXJlY3Rpb24uY3BwICovLAogCQkJCTkzQTI1ODk4MUY5MkZGMTUwMDNFNTEwQyAv
KiBUZXh0Q29kZWMuY3BwICovLApAQCAtMzg1NSw2ICszODUyLDcgQEAKIAkJCQk5MzBBRDQwMTE1
MDY5OEIzMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgKi8sCiAJCQkJQUQ1N0FDMUQxREE3
NDYzODAwRkYxQkRFIC8qIG1hbnktaWZyYW1lcy5odG1sICovLAogCQkJCTc3NzJFQ0UwMjJGRTA1
RTEwMDA5QTc5OSAvKiBtYW55LXNhbWUtb3JpZ2luLWlmcmFtZXMuaHRtbCAqLywKKwkJCQlDRDgz
OTRERTIzMkFGMTVFMDAxNDk0OTUgLyogbWVkaWEtbG9hZGluZy5odG1sICovLAogCQkJCUNEQzk0
NDJCMUVGMUZCRDIwMDU5QzNDNCAvKiBtZWRpYXN0cmVhbXRyYWNrLWRldGFjaGVkLmh0bWwgKi8s
CiAJCQkJNTFDRDFDNzExQjM4RDQ4NDAwMTQyQ0E1IC8qIG1vZGFsLWFsZXJ0cy1pbi1uZXctYWJv
dXQtYmxhbmstd2luZG93Lmh0bWwgKi8sCiAJCQkJN0ExNDU4RkIxQUQ1QzAzNTAwRTA2NzcyIC8q
IG1vdXNlLWJ1dHRvbi1saXN0ZW5lci5odG1sICovLApAQCAtMzg4Niw3ICszODg0LDYgQEAKIAkJ
CQkwN0NEMzJGNzIwNjVCNzJBMDA2NEE0QkUgLyogdmlkZW8uaHRtbCAqLywKIAkJCQkxQzJCODE4
NDFDODkyNEEyMDBBNTUyOUYgLyogd2ViZm9udC5odG1sICovLAogCQkJCTQ2OEYyRjkzMjM2OERB
QTcwMEY0Qjg2NCAvKiB3aW5kb3ctb3Blbi10aGVuLWRvY3VtZW50LW9wZW4uaHRtbCAqLywKLQkJ
CQlDRDgzOTRERTIzMkFGMTVFMDAxNDk0OTUgLyogbWVkaWEtbG9hZGluZy5odG1sICovLAogCQkJ
KTsKIAkJCW5hbWUgPSBSZXNvdXJjZXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
NDg2OCw3ICs0ODY1LDYgQEAKIAkJCQk3Q0NFN0VDRjFBNDExQTdFMDA0NDdDNEMgLyogU3RvcExv
YWRpbmdGcm9tRGlkUmVjZWl2ZVJlc3BvbnNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDMDkz
MkUyMUM5OTM0NDAwMzBDNEIwIC8qIFN0b3BTdXNwZW5kUmVzdW1lQWxsTWVkaWEubW0gaW4gU291
cmNlcyAqLywKIAkJCQk0MTRBRDY4NjIyODVEMUMwMDA3NzdGMkQgLyogU3RvcmFnZVF1b3RhLm1t
IGluIFNvdXJjZXMgKi8sCi0JCQkJOTNCNjIwNTQyMzRFQTYyQzAwRDQ5Qjk3IC8qIFN0b3JhZ2VR
dW90YU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1QkUxNzExRDQyOEU0QjAwREQ3
QzY4IC8qIFN0b3JlQmxvYlRoZW5EZWxldGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VE
MDFBNDExQTdFMDA0NDdDNEMgLyogU3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJp
bmcubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VEMTFBNDExQTdFMDA0NDdDNEMgLyogU3Ry
aW5nVHJ1bmNhdG9yLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMWM2N2JmMDUyZjdiMGEzNDUzZDA1NGYyNTI5MTkxZWVm
M2YxNzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qCi0qIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFNYW5hZ2Vy
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlUXVvdGFVc2VyLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KLXN0YXRpYyBjb25z
dCBpbnQgZGVmYXVsdFF1b3RhID0gMSAqIEtCOwotCi1jbGFzcyBNb2NrUXVvdGFVc2VyIGZpbmFs
IDogcHVibGljIFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVzZXIgewotcHVibGljOgotICAgIGV4cGxp
Y2l0IE1vY2tRdW90YVVzZXIoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlcikKLSAgICAgICAg
OiBtX21hbmFnZXIoJm1hbmFnZXIpCi0gICAgewotICAgICAgICBtYW5hZ2VyLmFkZFVzZXIoKnRo
aXMpOwotICAgIH0KLQotICAgIHZvaWQgc2V0U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCkg
eyBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsgfQotCi1wcml2YXRlOgotICAgIHVpbnQ2NF90IHNw
YWNlVXNlZCgpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICByZXR1cm4gbV9zcGFjZVVzZWQ7
Ci0gICAgfQotCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNhbGxiYWNrKSBmaW5hbAotICAgIHsKLSAgICAgICAgaWYgKCFtX3NwYWNlVXNlZCkK
LSAgICAgICAgICAgIEFTU0VSVF9FUShtX21hbmFnZXItPnN0YXRlKCksIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OlN0YXRlOjpVbmluaXRpYWxpemVkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
QVNTRVJUX0VRKG1fbWFuYWdlci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6
OkNvbXB1dGluZ1NwYWNlVXNlZCk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdXNhZ2UgdG8gbW9jayBk
ZWxldGlvbi4KLSAgICAgICAgbV9zcGFjZVVzZWQgPSAwOwotICAgICAgICBjYWxsYmFjaygpOwot
ICAgIH0KLQotICAgIHVpbnQ2NF90IG1fc3BhY2VVc2VkIHsgMCB9OwotICAgIFN0b3JhZ2VRdW90
YU1hbmFnZXIqIG1fbWFuYWdlcjsKLX07Ci0gICAgCi1URVNUKFN0b3JhZ2VRdW90YU1hbmFnZXJU
ZXN0LCBCYXNpYykKLXsKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBzdG9yYWdlUXVvdGFNYW5h
Z2VyUHRyID0gbnVsbHB0cjsKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyIHN0b3JhZ2VRdW90YU1h
bmFnZXIoZGVmYXVsdFF1b3RhLCBbJnN0b3JhZ2VRdW90YU1hbmFnZXJQdHJdKHVpbnQ2NF90IHF1
b3RhLCB1aW50NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8dWludDY0X3Q+KT4mJiBjb21wbGV0aW9uSGFubGRl
cikgewotICAgICAgICBBU1NFUlRfVFJVRShzdG9yYWdlUXVvdGFNYW5hZ2VyUHRyKTsKLSAgICAg
ICAgQVNTRVJUX0VRKHN0b3JhZ2VRdW90YU1hbmFnZXJQdHItPnN0YXRlKCksIFN0b3JhZ2VRdW90
YU1hbmFnZXI6OlN0YXRlOjpXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlKTsKLQotICAg
ICAgICAvLyBBbGxvdyBhbGwgc3BhY2UgaW5jcmVhc2UgcmVxdWVzdHMuCi0gICAgICAgIGNvbXBs
ZXRpb25IYW5sZGVyKHNwYWNlSW5jcmVhc2UgKyBjdXJyZW50U3BhY2UpOwotICAgIH0pOwotICAg
IHN0b3JhZ2VRdW90YU1hbmFnZXJQdHIgPSAmc3RvcmFnZVF1b3RhTWFuYWdlcjsKLQotCi0gICAg
TW9ja1F1b3RhVXNlciBtb2NrVXNlcihzdG9yYWdlUXVvdGFNYW5hZ2VyKTsKLQotICAgIC8vIEdy
YW50IGRpcmVjdGx5LgotICAgIHN0b3JhZ2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDAuMSAq
IEtCLCBbJl0oV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNpb24p
IHsKLSAgICAgICAgQVNTRVJUX0VRKGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpEZWNpc2lvbjo6R3JhbnQpOwotICAgICAgICBtb2NrVXNlci5zZXRTcGFjZVVzZWQoMC4x
ICogS0IpOwotICAgIH0pOwotCi0gICAgLy8gR3JhbnQgYWZ0ZXIgY29tcHV0aW5nIGFjY3VyYXRl
IHVzYWdlLgotICAgIHN0b3JhZ2VRdW90YU1hbmFnZXIucmVxdWVzdFNwYWNlKDEuMCAqIEtCLCBb
Jl0oV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gZGVjaXNpb24pIHsKLSAg
ICAgICAgQVNTRVJUX0VRKGRlY2lzaW9uLCBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbjo6R3JhbnQpOwotICAgICAgICBtb2NrVXNlci5zZXRTcGFjZVVzZWQoMS4wICogS0Ip
OwotICAgIH0pOwotCi0gICAgLy8gR3JhbnQgYWZ0ZXIgY29tcHV0aW5nIGFjY3VyYXRlIHVzYWdl
IGFuZCByZXF1ZXN0aW5nIHNwYWNlIGluY3JlYXNlLgotICAgIHN0b3JhZ2VRdW90YU1hbmFnZXIu
cmVxdWVzdFNwYWNlKDEwICogS0IsIFsmXShXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpE
ZWNpc2lvbiBkZWNpc2lvbikgewotICAgICAgICBBU1NFUlRfRVEoc3RvcmFnZVF1b3RhTWFuYWdl
clB0ci0+c3RhdGUoKSwgU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RhdGU6Ok1ha2luZ0RlY2lzaW9u
Rm9yUmVxdWVzdCk7Ci0gICAgICAgIEFTU0VSVF9FUShkZWNpc2lvbiwgV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50KTsKLSAgICB9KTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcAppbmRleCBmMjFlODliZTc3ZjYwMTg2M2UxMWFlYTc2NWQ2MTQ4NjkxZGNlMDhlLi4xNGRi
MmQyZDI2M2E5MjM1YTZhMDAzN2FmMmFkZThjYTViMzEwOTRjIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtOTgzLDYgKzk4Myw4IEBAIGJvb2wgVGVzdENv
bnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMm
IG9wdGlvbnMsIFJlCiAgICAgY2xlYXJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucygpOwogICAg
IGNsZWFyRE9NQ2FjaGVzKCk7CiAKKyAgICByZXNldFF1b3RhKCk7CisKICAgICBXS0NvbnRleHRT
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXJUZXN0aW5nKHBsYXRmb3Jt
Q29udGV4dCgpLCB0cnVlKTsKIAogICAgIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3Rh
dGVGb3JUZXN0aW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwpAQCAt
MzE0OSw2ICszMTUxLDEzIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2Uo
KQogICAgIHJ1blVudGlsKGNvbnRleHQuZG9uZSwgbm9UaW1lb3V0KTsKIH0KIAordm9pZCBUZXN0
Q29udHJvbGxlcjo6cmVzZXRRdW90YSgpCit7CisgICAgU3RvcmFnZVZvaWRDYWxsYmFja0NvbnRl
eHQgY29udGV4dCgqdGhpcyk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlUmVzZXRRdW90YShUZXN0
Q29udHJvbGxlcjo6d2Vic2l0ZURhdGFTdG9yZSgpLCAmY29udGV4dCwgU3RvcmFnZVZvaWRDYWxs
YmFjayk7CisgICAgcnVuVW50aWwoY29udGV4dC5kb25lLCBub1RpbWVvdXQpOworfQorCiBzdHJ1
Y3QgRmV0Y2hDYWNoZU9yaWdpbnNDYWxsYmFja0NvbnRleHQgewogICAgIEZldGNoQ2FjaGVPcmln
aW5zQ2FsbGJhY2tDb250ZXh0KFRlc3RDb250cm9sbGVyJiBjb250cm9sbGVyLCBXS1N0cmluZ1Jl
ZiBvcmlnaW4pCiAgICAgICAgIDogdGVzdENvbnRyb2xsZXIoY29udHJvbGxlcikKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRleCBkNmNiMGUyMDdiOWZlOGUyZTA2Mzgz
N2M2NzZkOGUwMWI2ZjljNjA1Li40ZTg3NTA4N2E1ODYzOWEyZDc5YTRjYTExYjEzOTQ0ZWQyY2Q5
ZTFhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCkBAIC0yNjksNiAr
MjY5LDggQEAgcHVibGljOgogICAgIHZvaWQgdGVybWluYXRlTmV0d29ya1Byb2Nlc3MoKTsKICAg
ICB2b2lkIHRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzKCk7CiAKKyAgICB2b2lkIHJlc2V0
UXVvdGEoKTsKKwogICAgIHZvaWQgcmVtb3ZlQWxsU2Vzc2lvbkNyZWRlbnRpYWxzKCk7CiAKICAg
ICB2b2lkIGNsZWFySW5kZXhlZERhdGFiYXNlcygpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>